Frage:
Korrektur von Ausreißern im laufenden Durchschnitt
Edward Z. Yang
2009-04-12 12:24:17 UTC
view on stackexchange narkive permalink

Wir haben einen Daemon, der Daten von einigen Sensoren einliest, und unter anderem berechnet er (abgesehen davon, dass nur der Status gemeldet wird) die durchschnittliche Zeit, die die Sensoren benötigen, um von einem Wert zum anderen zu wechseln. Es wird ein laufender Durchschnitt von 64 Datenpunkten beibehalten und davon ausgegangen, dass die Laufzeit ziemlich konstant ist.

Wie das folgende Diagramm zeigt, sind die Eingabedaten leider nicht die makellosesten:

(Jede Zeile repräsentiert einen anderen Datensatz; die x-Achse bedeutet eigentlich nichts anderes als eine vage historische Zeitachse.)

Meine offensichtliche Lösung für den Umgang Dies würde bedeuten, ein Histogramm der Daten zu erstellen und dann den Modus auszuwählen. Ich habe mich jedoch gefragt, ob es andere Methoden gibt, die eine bessere Leistung erzielen oder für den Betrieb mit einem laufenden Durchschnitt besser geeignet sind. Einige schnelle Wikipedia-Suchen legen nahe, dass auch Algorithmen zum Erkennen von Ausreißern geeignet sind. Einfachheit ist ein Plus, da der Dämon in C geschrieben ist.

Bearbeiten : Ich habe Wikipedia ausfindig gemacht und mir diese verschiedenen Techniken ausgedacht:

  • Chauvenets Kriterium: Berechnen Sie anhand des Mittelwerts und der Standardabweichung die Wahrscheinlichkeit, dass ein bestimmter Datenpunkt auftreten würde, und schließen Sie ihn dann aus, wenn die Wahrscheinlichkeit tatsächlich so schlecht ist, dass er weniger als 50% beträgt. Dies scheint zwar gut geeignet zu sein, um einen laufenden Durchschnitt im laufenden Betrieb zu korrigieren, aber ich bin nicht ganz von seiner Wirksamkeit überzeugt: Bei großen Datenmengen möchte es Datenpunkte nicht verwerfen.

  • Grubbs-Test: Eine andere Methode, die die Differenz zwischen Mittelwert und Standardabweichung verwendet und einen Ausdruck dafür hat, wann die Hypothese "keine Ausreißer" abgelehnt wird

  • Cooks Abstand: Misst den Einfluss eines Datenpunkts auf die Regression der kleinsten Quadrate. Unsere Anwendung würde es wahrscheinlich ablehnen, wenn es 1

  • abgeschnittener Mittelwert überschreitet: Verwerfen Sie das untere und das obere Ende und nehmen Sie den Mittelwert als normal

Hat jemand spezielle Erfahrungen und kann diese statistischen Techniken kommentieren?

Auch einige Kommentare zur physischen Situation: Wir messen die durchschnittliche Zeit bis zur Fertigstellung einer mechanischen Waschmaschine, also deren Laufzeit sollte ziemlich konstant sein. Ich bin nicht sicher, ob es tatsächlich eine Normalverteilung gibt.

Bearbeiten 2 : Eine weitere interessante Frage: Wenn der Dämon wie in bootstrappt, hat er keine vorherigen Daten zu analysieren, wie soll es mit eingehenden Daten umgehen? Einfach kein Ausreißer-Bereinigen durchführen?

Bearbeiten 3 : Noch etwas ... Wenn sich die Hardware so ändert, dass die Laufzeiten anders werden, lohnt es sich, das zu machen Algorithmus ausreichend robust, so dass diese neuen Laufzeiten nicht verworfen werden. Sollte ich daran denken, den Cache zu leeren, wenn dies passiert?

During bootstrapping provide 64 data points to seed the running average.
Aber was wären diese 64 Datenpunkte? Es ist möglicherweise nicht gut, a priori davon auszugehen, dass die Maschine in X-Zeit ausgeführt wird.
Der Grubbs-Test ist den anderen Methoden überlegen, da es rechnerisch billiger ist, Regressionskoeffizienten zu bestimmen, als Daten zu sortieren und zu ordnen.
Das System muss wissen, dass es kalibriert wird und sich selbst bootet. Typische Techniken sind das Setzen der ersten Werte mit dem Anfangswert plus oder minus zehn Prozent. Wenn der zweite Wert eintrifft, sind die gesetzten Werte der erste und der zweite verschachtelte Wert.
Interessant! Ich bin damit einverstanden, dass ich wahrscheinlich das Sortieren von Daten vermeiden möchte, was die Implementierung eines abgeschnittenen Mittelwerts erschweren würde.
If a known event is going to change the distribution it is essential to recalibrate. In a mass spectrometer the device becomes more accurate as it adjusts itself to the compound being analyzed. This is a well known method to increase accuracy while supporting a large variety of inputs.
Sieben antworten:
SPWorley
2009-04-12 12:57:36 UTC
view on stackexchange narkive permalink

Wenn das Beispieldiagramm, das Sie haben, typisch ist, funktioniert eines der von Ihnen aufgelisteten Kriterien. Die meisten dieser statistischen Methoden dienen dazu, die Fehlergrenze direkt auf der Fuzzy-Ebene von "Ist das wirklich ein Fehler?" Aber Ihr Problem sieht sehr einfach aus. Ihre Fehler sind nicht nur ein paar Standardabweichungen von der Norm, sie sind 20+. Dies sind gute Nachrichten für Sie.

Verwenden Sie also die einfachste Heuristik. Akzeptieren Sie immer die ersten 5 Punkte oder so, um zu verhindern, dass eine Startspitze Ihre Berechnung ruiniert. Mittelwert und Standardabweichung beibehalten. Wenn Ihr Datenpunkt 5 Standardabweichungen außerhalb der Norm liegt, verwerfen Sie ihn und wiederholen Sie den vorherigen Datenpunkt als Füllstoff.

Wenn Sie Ihr typisches Datenverhalten im Voraus kennen, müssen Sie möglicherweise nicht einmal Mittelwert und berechnen Standardabweichung können Sie absolute "Ablehnungs" -Limits fest verdrahten. Dies ist insofern besser, als ein anfänglicher Fehler Ihren Detektor nicht in die Luft jagt.

Excellent! One thing though; although we do know the typical behavior, it is possible that the hardware will get switched out, so I feel that an adaptable program would be preferred.
Auch wenn es anpassungsfähig sein muss, sollten Sie trotzdem einige EXTREME-Grenzwerte festlegen. Wenn Sie aufgrund eines Hardwarefehlers 1e280 als Wert oder NaN oder + Inf erhalten, möchten Sie diese möglicherweise trotzdem herausfiltern.
ojblass
2009-04-12 12:35:41 UTC
view on stackexchange narkive permalink

Die Definition eines abnormalen Werts muss auf die Daten selbst skaliert werden. Die klassische Methode hierfür besteht darin, den z-Wert jedes Datenpunkts zu berechnen und alle Werte, die größer als 3 z-Werte sind, aus dem Durchschnitt herauszuwerfen. Der z-Wert kann ermittelt werden, indem die Differenz zwischen dem Datenpunkt und dem Durchschnitt genommen und durch die Standardabweichung dividiert wird.

Wie gut würde diese Methode für den Fall der pathologischen blauen Linie funktionieren?
Der Fall der pathologischen blauen Linie weist eine hohe Standardabweichung auf. Es würde einen erheblichen äußeren Wert erfordern, um abgelehnt zu werden.
vak
2009-06-24 17:16:27 UTC
view on stackexchange narkive permalink

Ich würde einen laufenden Median (robuste Alternative zu Mittelwert) und einen laufenden Verrückten (robuste Alternative zu SD) berechnen und alles entfernen, was mehr als 5 Verrückte vom Median entfernt ist http://epp.eurostat.ec. europa.eu/portal/page/portal/research_methodology/documents/S4P1_MIRROROUTLIERDETECTION_LIAPIS.pdf

fredxi
2013-07-26 17:23:19 UTC
view on stackexchange narkive permalink

Eine andere Lösung besteht darin, das harmonische Mittel zu verwenden.

Ihr Fall ist dem in

http://economistatlarge.com/finance/applied beschriebenen Beispiel sehr ähnlich -Finanz / Differenzen-Arithmetik-Geometrie-Harmonische-Mittel

Alter, harmonisch gemein FTW!Die Leute sollten sich das wirklich ansehen!
ozan
2009-04-12 12:53:28 UTC
view on stackexchange narkive permalink

Sie müssen eine Vorstellung von der erwarteten Variation oder Verteilung haben, wenn Sie bestimmte (höhere) Variationen als fehlerhaft ausschließen möchten. Wenn Sie beispielsweise die Verteilung des Ergebnisses der "Durchschnittszeiten" einer normalen (Gaußschen) Verteilung annähern können, können Sie das tun, was ojblass vorgeschlagen hat, und diejenigen Ergebnisse ausschließen, die eine Abweichung aufweisen, die größer als ein Vielfaches der Standardabweichung ist ( die im laufenden Betrieb neben Ihrem laufenden Durchschnitt berechnet werden kann). Wenn Sie Ergebnisse ausschließen möchten, bei denen die Wahrscheinlichkeit eines Fehlers bei 99,75 (oder so) Prozent liegt, schließen Sie diejenigen aus, die mehr als 3 Standardabweichungen vom Mittelwert abweichen. Wenn Sie nur eine 95% ige Sicherheit wünschen, schließen Sie diejenigen aus, die mehr als 2 Standardabweichungen usw. variieren.

Ich bin sicher, ein bisschen googeln nach "Standardabweichung" oder "Gaußscher Verteilung" wird Ihnen helfen . Dies setzt natürlich voraus, dass Sie eine normale Verteilung der Ergebnisse erwarten. Sie könnten nicht. In diesem Fall besteht der erste Schritt darin, zu erraten, welche Verteilung Sie erwarten.

1800 INFORMATION
2009-04-12 12:26:45 UTC
view on stackexchange narkive permalink

Vielleicht wäre es eine gute Methode, Ergebnisse zu ignorieren, die über einem definierten Wert außerhalb des aktuellen laufenden Durchschnitts liegen?

Ja, aber wie sagen Sie, was dieser "definierte Wert" ist?
Ich gehe davon aus, dass dies aus einer Prüfung der Daten auf der Grundlage der tatsächlichen Ergebnisse resultieren würde
Ich möchte wirklich vermeiden, so etwas im Programm fest zu codieren
It could be a configuration parameter?
dmckee
2009-04-12 20:22:27 UTC
view on stackexchange narkive permalink

Die naive (und möglicherweise beste) Antwort auf die Bootstrapping-Frage lautet "Akzeptiere die ersten N Werte ohne Filterung." Wählen Sie N, um so groß wie möglich zu sein, und lassen Sie die Einrichtungszeit in Ihrer Anwendung dennoch "kurz". In diesem Fall könnten Sie die Fensterbreite (64 Beispiele) für N verwenden.

Dann würde ich eine Art Mittelwert- und Sigma-basierten Filter verwenden.



Diese Fragen und Antworten wurden automatisch aus der englischen Sprache übersetzt.Der ursprüngliche Inhalt ist auf stackexchange verfügbar. Wir danken ihm für die cc by-sa 2.0-Lizenz, unter der er vertrieben wird.
Loading...