Ich muss die Anomalieerkennung für mehrere Zeitreihendatensätze implementieren. Ich habe das noch nie gemacht und hoffte auf einen Rat. Ich bin mit Python sehr vertraut, daher würde ich es vorziehen, wenn die Lösung darin implementiert wird (der größte Teil meines Codes ist Python für andere Teile meiner Arbeit).
Beschreibung der Daten: Es handelt sich um monatliche Zeitreihendaten, deren Erfassung in den letzten 2 Jahren gerade erst begonnen hat (dh nur 24 bis 36 Zeiträume). Im Wesentlichen werden monatlich mehrere Metriken für mehrere Kunden überwacht.
time_period client metric score
01-2013 client1 metric1 100
02-2013 client1 metric1 119
01-2013 client2 metric1 50
02-2013 client2 metric2 500
...
Ich denke Folgendes: Ziehen Sie Daten in einen Datenrahmen (Pandas) und berechnen Sie dann einen rollierenden 6-Monats-Durchschnitt für jedes Client / Metrik-Paar. Wenn der Wert des aktuellen Zeitraums einen Schwellenwert überschreitet, der auf dem 6-Monats-Durchschnitt basiert, heben Sie das Flag an. Das Problem scheint ziemlich einfach zu sein. Ich möchte nur sicherstellen, dass ich einen soliden Ansatz verfolge.
Jeder Rat, um diese Idee ein wenig zu konkretisieren, wäre sehr dankbar. Ich weiß, dass die Frage etwas abstrakt ist, und ich entschuldige mich dafür.
Antworten:
Ich denke, ein Ansatz ähnlich der statistischen Prozesskontrolle mit Kontrolldiagrammen usw. könnte hier nützlich sein.
quelle
Es gibt viele Optionen für die Erkennung von Anomalien, von einer Standardabweichung mit der Pandas-Standardabweichungsfunktion bis zu einer Bayes'schen Methode und vielen dazwischen liegenden Methoden des maschinellen Lernens wie Clustering, SVM, Gaußscher Prozess, Neuronale Netze.
Schauen Sie sich dieses Tutorial an: https://www.datascience.com/blog/python-anomaly-detection
Aus Bayes'scher Sicht empfehle ich den Facebook-Propheten. Es liefert sehr fortschrittliche Ergebnisse, ohne dass Sie ein Zeitreihenexperte sein müssen. Es bietet die Möglichkeit, an Monaten, Tagen usw. zu arbeiten, und "Unsicherheitsintervalle" helfen bei Anomalien.
Schließlich empfehle ich diesen Uber-Blog über die Verwendung von neuronalen Netzen (LSTM) zur Erkennung von Anomalien. Er enthält sehr gute Erkenntnisse: https://eng.uber.com/neural-networks/
quelle
Wenn Sie davon ausgehen möchten, dass Ihr Datensatz normal verteilt ist, können Sie Quantile dieser Verteilung schätzen und feststellen, ob sie außerhalb des Quantils 95%, 80% usw. liegen. Ich bin mit Python-Bibliotheken nicht allzu vertraut, aber ich bin sicher, dass es bereits Funktionen dafür gibt.
quelle