Saturday 7 January 2017

Moving Average Outlier Erkennung

Ich benutze einen gleitenden Durchschnitt Filter, um Daten für Ausreißer entfernen. Durch die Änderung der Anzahl der durchschnittlichen Punkte, bekomme ich verschiedene Ergebnisse. Meine Daten sind multidimensionale Merkmalsvektoren. Ich wandte den gleitenden Durchschnitt auf die gesamte Matrix und dann auf einzelne Variablen. Sie geben unterschiedliche Ergebnisse. Also, wie zu erraten, die Anzahl der Punkte zu durchschnittlich über und sollte es auf die gesamte Matrix oder auf einer von eins angewendet werden? Glenb 9830 155k 9679 20 9679 257 9679 530 Ein Ansatz zur Auswahl Wäre ein Glättungsparameter, um Ein-Schritt-Voraus-Vorhersagefehler zu optimieren (wie etwa Summen von Quadraten von Ein-Schritt-Voraus-Vorhersagefehlern). Wenn Sie versuchen zu identifizieren Ausreißer, you39d wollen eine andere Messung der Vorhersage Fehler - ein vernünftigerweise robust, um Ausreißer (und dann gleitende Durchschnittswerte scheinen eine seltsame Wahl - warum nicht etwas robuster zu den Ausreißern) ndash Glenb 9830 Nov 2 13 um 1: 11 Weder. Beide. Alle. Es tut uns leid. Aber ich denke, dies ist ein weiterer Versuch (wenn auch ein kluger) zu automatisieren, was nicht wirklich automatisiert werden kann. Natürlich verschiedene Methoden geben unterschiedliche Ergebnisse das einzige Mal, sie wouldnt ist, wo die Ausreißer so offensichtlich ist, dass Sie nicht brauchen einen Test. Mein Vorschlag ist es, eine Vielzahl von Methoden verwenden, um mögliche Ausreißer zu identifizieren, dann untersuchen diese Ausreißer auf einer individuellen basis. I arbeiten mit einer großen Menge an Zeitreihen. Diese Zeitreihen sind grundsätzlich Netzwerkmessungen, die alle 10 Minuten kommen, und einige von ihnen sind periodisch (d. h. die Bandbreite), während ein anderer Arent (d. h. die Menge an Routing-Verkehr). Ich möchte eine einfache Algorithmus für eine Online-Outlier-Erkennung. Grundsätzlich möchte ich die gesamten historischen Daten für jede Zeitreihe im Speicher (oder auf der Festplatte) speichern und jeden Ausreißer in einem Live-Szenario (jedesmal, wenn ein neues Sample erfasst wird) erkennen. Was ist der beste Weg, um diese Ergebnisse zu erzielen Im derzeit mit einem gleitenden Durchschnitt, um etwas Rauschen zu entfernen, aber dann was nächsten Einfache Dinge wie Standardabweichung, verrückt. Gegen den ganzen Datensatz funktioniert nicht gut (ich kann nicht davon ausgehen, die Zeitreihen sind stationär), und ich möchte etwas genauer, idealerweise eine Black Box wie: double outlierdetection (double vector, double value), wo Vektor ist das Array von Doppel-enthalten Die historischen Daten, und der Rückgabewert ist die Anomalie für den neuen Samplewert. Ja, ich habe angenommen, dass die Frequenz bekannt und spezifiziert ist. Es gibt Methoden, um die Frequenz automatisch abzuschätzen, aber das würde die Funktion erheblich komplizieren. Wenn Sie die Frequenz abschätzen müssen, versuchen Sie, eine separate Frage darüber zu stellen - und ich werde wahrscheinlich eine Antwort geben. Aber es braucht mehr Platz, als ich in einem Kommentar zur Verfügung habe. Ndash Rob Hyndman Eine gute Lösung wird mehrere Zutaten, darunter: Verwenden Sie eine resistente, bewegende Fenster glatt, um Nichtstationarität zu entfernen. Re-Express die ursprünglichen Daten, so dass die Residuen in Bezug auf die glatte sind etwa symmetrisch verteilt. Angesichts der Natur Ihrer Daten, seine wahrscheinlich, dass ihre Quadratwurzeln oder Logarithmen würde symmetrische Residuen geben. Wenden Sie Steuerkartenmethoden oder zumindest Steuerelementdiagramm auf die Residuen an. Soweit das letzte geht, zeigt das Kontrolldiagramm-Denken, dass herkömmliche Schwellen wie 2 SD oder das 1,5-fache des IQR über die Quartile schlecht funktionieren, weil sie zu viele falsche Out-of-Control-Signale auslösen. Die Leute benutzen normalerweise 3 SD in der Kontrollkartenarbeit, woher 2.5 (oder sogar 3) mal die IQR jenseits der Quartile ein guter Ausgangspunkt wäre. Ich habe mehr oder weniger die Art der Rob Hyndmans-Lösung skizziert, während ich zwei wesentliche Punkte hinzufüge: die potenzielle Notwendigkeit, die Daten erneut auszudrücken und die Weisheit, konservativer bei der Signalisierung eines Ausreißers zu sein. Im nicht sicher, dass Loess ist gut für einen Online-Detektor, aber, weil es nicht gut funktioniert an den Endpunkten. Sie könnten stattdessen etwas so einfaches wie ein bewegter Medianfilter verwenden (wie bei Tukeys resistentes Glätten). Wenn Ausreißer nicht in Bursts kommen, können Sie ein schmales Fenster verwenden (5 Datenpunkte, die möglicherweise nur mit einem Burst von 3 oder mehr Ausreißern innerhalb einer Gruppe von 5 aufbrechen). Sobald Sie die Analyse durchgeführt haben, um eine gute Re-Expression der Daten zu bestimmen, ist es unwahrscheinlich, youll müssen die Re-Expression ändern. Daher muss Ihr Online-Detektor wirklich nur auf die jüngsten Werte (das neueste Fenster) verweisen, weil es nicht die früheren Daten verwenden. Wenn Sie wirklich lange Zeitreihen haben, könnten Sie weiter gehen, um Autokorrelation und Saisonalität (wie wiederkehrende tägliche oder wöchentliche Schwankungen) zu analysieren, um das Verfahren zu verbessern. Antwort # 1 am: August 25, 2010, 10:31:13 am »IQR ist Tukey39s ursprüngliche Empfehlung für die längsten Schnurrhaare auf einem Boxplot und 3 IQR ist seine Empfehlung für die Kennzeichnung von Punkten als quotfar outliersquot (ein Riff auf einer beliebten 6039s Phrase). Dies ist in viele Boxplot-Algorithmen eingebaut. Die Empfehlung wird theoretisch in Hoaglin, Mosteller, amp Tukey, Understanding Robust und Exploratory Data Analysis analysiert. Ndash whuber 9830 Oct 9 12 at 21:38 Das bestätigt Zeitreihen-Daten, die ich versucht habe zu analysieren. Fenster Durchschnitt und auch ein Fenster Standardabweichungen. ((X - avg) sd) gt 3 scheinen die Punkte zu sein, die ich als Ausreißer markieren möchte. Nun zumindest als Ausreißer zu warnen, kennzeichnen ich etwas höher als 10 sd als extreme Fehler Ausreißer. Das Problem, das ich eingehen ist, was ist eine ideale Fensterlänge I39m spielen mit etwas zwischen 4-8 Datenpunkte. Ndash NeoZenith Jun 29 at 8:00 Neo Ihre beste Wette kann sein, um mit einer Teilmenge Ihrer Daten experimentieren und bestätigen Sie Ihre Schlussfolgerungen mit Tests auf dem Rest. Sie könnten auch eine formale Kreuzvalidierung durchführen, aber aufgrund der Interdependenz aller Werte ist besondere Sorgfalt bei den Zeitreihendaten erforderlich. Ndash whuber 9830 Jun 29 at 12:10 (Diese Antwort antwortete auf eine doppelte (jetzt geschlossene) Frage beim Erkennen von herausragenden Ereignissen, die einige Daten in grafischer Form präsentierten.) Die Ausreißererkennung hängt von der Art der Daten und von dem ab, was du willst Übernehmen. Allgemeingültige Methoden beruhen auf robusten Statistiken. Der Geist dieser Vorgehensweise besteht darin, den Großteil der Daten in einer Weise zu charakterisieren, die nicht durch irgendwelche Ausreißer beeinflusst wird und dann auf individuelle Werte hinweist, die nicht in diese Charakterisierung passen. Da es sich um eine Zeitreihe handelt, fügt es die Komplikation hinzu, dass Ausreißer kontinuierlich (neu) erkannt werden müssen. Wenn dies geschieht, wenn die Serie entfaltet, dann dürfen wir nur ältere Daten für die Erkennung verwenden, nicht für zukünftige Daten. Darüber hinaus möchten wir als Schutz gegen die vielen wiederholten Tests eine Methode verwenden, die eine sehr niedrige falsch hat Positive Rate. Diese Überlegungen deuten darauf hin, dass ein einfacher, robuster beweglicher Fensterausreißertest über die Daten ausgeführt wird. Es gibt viele Möglichkeiten, aber eine einfache, leicht verständliche und leicht umsetzbare basiert auf einer laufenden MAD: medianen absoluten Abweichung vom Median. Dies ist ein stark robustes Maß für die Variation innerhalb der Daten, ähnlich einer Standardabweichung. Ein Outside Peak wäre mehrere MADs oder höher als der Median. Es gibt noch einige Tuning getan werden. Wie viel von einer Abweichung von der Masse der Daten betrachtet werden sollte outlying und wie weit zurück in der Zeit sollte man aussehen Lassen Sie diese als Parameter für das Experimentieren. Heres eine R-Implementierung angewendet auf Daten x (1,2, ldots, n) (mit n1150, um die Daten zu emulieren) mit entsprechenden Werten y: Angewendet auf einen Dataset wie die rote Kurve in der Frage dargestellt, erzeugt es dieses Ergebnis: Die Daten Werden in rot dargestellt, das 30-Tage-Fenster der median5MAD-Schwellen grau und die Ausreißer - die einfach jene Datenwerte über der grauen Kurve - schwarz sind. (Die Schwelle kann erst beginnend am Anfang des Anfangsfensters berechnet werden, für alle Daten innerhalb dieses Anfangsfensters wird der erste Schwellwert verwendet, weshalb die graue Kurve zwischen x0 und x30 flach ist.) Die Auswirkungen der Änderung der Parameter sind (A) die Erhöhung des Wertes des Fensters dazu neigt, die graue Kurve zu glätten, und (b) die ansteigende Schwelle die graue Kurve erhöht. Wissend, kann man ein anfängliches Segment der Daten nehmen und schnell die Werte der Parameter identifizieren, die am besten die äußeren Peaks vom Rest der Daten separieren. Übernehmen Sie diese Parameterwerte, um den Rest der Daten zu überprüfen. Wenn ein Diagramm zeigt, dass sich die Methode im Laufe der Zeit verschlechtert, bedeutet dies, dass sich die Daten ändern und die Parameter möglicherweise neu eingestellt werden müssen. Beachten Sie, wie wenig diese Methode über die Daten annimmt: Sie müssen nicht normal verteilt sein, sie brauchen keine Periodizität zu zeigen, die sie nicht sogar nicht negativ sein müssen. Sie geht davon aus, dass sich die Daten in vernünftiger Weise über die Zeit verhalten und dass die äußeren Peaks sichtbar höher sind als die übrigen Daten. Wenn jemand möchte experimentieren (oder vergleichen Sie eine andere Lösung, die hier angeboten wird), hier ist der Code, den ich verwendet, um Daten wie die in der Frage gezeigt. Ich vermute, anspruchsvolle Zeitreihen-Modell wird nicht für Sie arbeiten, weil die Zeit dauert es zu erkennen Ausreißer mit dieser Methode. Daher ist hier ein Workaround: Zuerst legen Sie eine Basislinie normalen Verkehrsmuster für ein Jahr auf der Grundlage der manuellen Analyse von historischen Daten, die für die Zeit des Tages, Wochentag vs Wochenende, Monat des Jahres etc. Verwenden Sie diese Grundlinie zusammen mit einigen einfachen Mechanismus (Z. B. gleitender Durchschnitt von Carlos vorgeschlagen), um Ausreisser zu erkennen. Sie können auch die statistische Prozesskontrolle Literatur für einige Ideen überprüfen. Ja, das ist genau das, was ich tue: Bis jetzt habe ich das Signal manuell in Perioden aufgeteilt, so dass ich für jeden von ihnen ein Konfidenzintervall definieren kann, innerhalb dessen das Signal stationär sein soll und deshalb kann ich Standardmethoden verwenden Als Standardabweichung. Das eigentliche Problem ist, dass ich das erwartete Muster für alle Signale, die ich analysieren muss, nicht entscheiden kann, und das ist der Grund, warum ich nach etwas Intelligenterem suche. Ndash gianluca Hier ist eine einzige Idee: Schritt 1: Implementieren und Schätzen eines generischen Zeitreihenmodells auf einer einmaligen Basis basierend auf historischen Daten. Dies kann offline geschehen. Schritt 2: Verwenden Sie das resultierende Modell, um Ausreißer zu erkennen. Schritt 3: Bei einer gewissen Häufigkeit (eventuell jeden Monat) das Zeitreihenmodell neu kalibrieren (dies kann offline geschehen), so dass die Erkennung von Ausreißern im Schritt 2 nicht zu viel mit den aktuellen Verkehrsmustern zu tun hat. Würde die Arbeit für Ihren Kontext ndash user28 Aug 2 10 am 22:24 Ja, könnte dies funktionieren. Ich dachte über einen ähnlichen Ansatz (Neuberechnung der Grundlinie jede Woche, die CPU-intensive sein kann, wenn Sie Hunderte von univariate Zeitreihen zu analysieren haben). BTW die echte schwierige Frage ist, was ist die beste Blackbox-Stil-Algorithmus für die Modellierung eines völlig generischen Signal, unter Berücksichtigung Rauschen, Trendschätzung und Saisonalität. AFAIK, jeder Ansatz in der Literatur erfordert eine wirklich harte Quarterparameter Tuningquot Phase, und die einzige automatische Methode fand ich ein ARIMA-Modell von Hyndman (robjhyndman Software-Prognose). Bin ich etwas fehlt ndash gianluca Auch dies funktioniert ziemlich gut, wenn das Signal soll eine Saisonalität wie die haben, aber wenn ich eine völlig andere Zeitreihe (dh die durchschnittliche TCP Rundreise Zeit im Laufe der Zeit ), Wird diese Methode nicht funktionieren (da es besser wäre, diese mit einer einfachen globalen Mittelwert und Standardabweichung unter Verwendung eines Schiebefensters zu behandeln, das historische Daten enthält). Ndash gianluca Es sei denn, Sie sind bereit, ein allgemeines Zeitreihenmodell (das in seiner Nachteile in Bezug auf Latenz usw. bringt) zu implementieren. Ich bin pessimistisch, dass Sie eine allgemeine Umsetzung finden, die zugleich einfach genug ist Um für alle möglichen Zeitreihen zu arbeiten. Ich weiß, eine gute Antwort könnte sein, so können Sie die Periodizität des Signals zu schätzen, und entscheiden Sie den Algorithmus nach itquot verwenden, aber ich didn39t finden eine wirklich gute Lösung für diese andere Problem (Ich spielte ein bisschen mit Spektralanalyse mit DFT und Zeitanalyse mit der Autokorrelation Funktion, aber meine Zeitreihe enthält eine Menge von Rauschen und solche Methoden geben einige verrückte Ergebnisse die meisten der Zeit) ndash gianluca Aug 2 10 am 22:06 A Kommentar zu Ihrem letzten Kommentar: that39s, warum I39m auf der Suche nach einem generischen Ansatz, aber ich brauche eine Art von quotblack boxquot, weil ich can39t keine Annahme über das analysierte Signal, und daher kann ich nicht die quotbest Parametersatz für die Lernalgorithmquot erstellen. Ndash gianluca Da es sich um eine Zeitreihe Daten, eine einfache exponentielle Filter de. wikipedia. org wiki Exponentialsmoothing glättet die Daten. Es ist ein sehr guter Filter, da Sie nicht brauchen, um alte Datenpunkte zu akkumulieren. Vergleichen Sie jeden neu geglätteten Datenwert mit seinem nicht geglätteten Wert. Sobald die Abweichung eine bestimmte vordefinierte Schwelle überschreitet (je nachdem, was Sie glauben, ein Ausreißer in Ihren Daten ist), dann kann Ihr Ausreißer leicht erkannt werden. Sie können die Standardabweichung der letzten N Messungen (Sie haben, um eine geeignete N wählen) verwenden. Ein guter Anomalie-Score wäre, wie viele Standardabweichungen eine Messung aus dem gleitenden Durchschnitt ist. Ich danke Ihnen für Ihre Antwort, aber was ist, wenn das Signal eine hohe Saisonalität zeigt (dh eine Menge von Netzwerk-Messungen sind durch eine tägliche und wöchentliche Muster zur gleichen Zeit, zum Beispiel Nacht vs Tag oder Wochenende gekennzeichnet Vs Arbeitstagen) Ein Ansatz, der auf Standardabweichung basiert, wird in diesem Fall nicht funktionieren. Ndash gianluca Zum Beispiel, wenn ich eine neue Probe erhalten alle 10 Minuten und I39m tun eine Outlier Erkennung der Netzwerk-Bandbreite Nutzung eines Unternehmens, im Grunde um 18.00 Uhr wird diese Maßnahme fallen (dies ist ein erwartet Ein normales Gesamtmuster), und eine Standardabweichung, die über einem Schiebefenster berechnet wird, schlägt fehl (weil es eine Warnung sicher auslöst). Zur gleichen Zeit, wenn die Maßnahme fällt um 16 Uhr (abweichend von der üblichen Grundlinie), ist dies ein echter Ausreißer. Ndash gianluca Aug 2 10 at 20:58 was ich tue ist Gruppe die Messungen von Stunde und Wochentag und vergleichen Standardabweichungen davon. Noch korrigiert nicht für Sachen wie Feiertage und Sommerwintersaisonalität aber sein korrektes die meisten der Zeit. Der Nachteil ist, dass Sie wirklich brauchen, um ein Jahr oder so von Daten zu sammeln, um genug, so dass stddev beginnt Sinn zu sammeln. Die Spektralanalyse erkennt die Periodizität in stationären Zeitreihen. Der Frequenzbereich Ansatz auf der Grundlage der spektralen Dichte Schätzung ist ein Ansatz, den ich als erster Schritt empfehlen würde. Wenn für bestimmte Perioden Unregelmäßigkeit bedeutet einen viel höheren Peak als typisch für diesen Zeitraum dann die Serie mit solchen Unregelmäßigkeiten wäre nicht stationär und Spektralanolyse wäre nicht angemessen. Aber vorausgesetzt, Sie haben die Periode, die die Unregelmäßigkeiten, die Sie in der Lage sein, um zu bestimmen, was die normale Höhe Höhe wäre, und dann können Sie einen Schwellenwert auf einem Niveau über diesem Durchschnitt, um die irregulären Fälle zu bestimmen. Ich schlage vor, das Schema unten, die implementiert werden sollte in einem Tag oder so: Sammeln Sie so viele Samples wie Sie im Speicher halten können Offensichtliche Ausreißer mit der Standardabweichung für jedes Attribut berechnen und speichern Sie die Korrelationsmatrix Und auch der Mittelwert jedes Attributes Berechnen und speichern Sie die Mahalanobis-Abstände aller Ihrer Proben Berechnen Ausreißer: Für die einzelne Probe, von denen Sie wissen wollen, ihre Ausreißer: Abrufen der Mittel, Kovarianzmatrix und Mahalanobis Entfernung s aus dem Training Berechnen Sie die Mahalanobis Abstand d Für Ihre Probe Geben Sie das Perzentil, in dem d fällt (mit dem Mahalanobis Distanzen aus dem Training) Das wird Ihre Outlier Punktzahl: 100 ist ein extremer Ausreißer. PS. Bei der Berechnung der Mahalanobis Distanz. Verwenden Sie die Korrelationsmatrix, nicht die Kovarianzmatrix. Dies ist robuster, wenn die Probenmessungen in Einheit und Anzahl variieren.


No comments:

Post a Comment