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?