Problem Hintergrund: Ich arbeite an einem Projekt, das Protokolldateien umfasst, die denen im IT-Überwachungsbereich ähneln (nach meinem besten Verständnis des IT-Bereichs). Diese Protokolldateien sind Zeitreihendaten, die in Hunderten / Tausenden von Zeilen mit verschiedenen Parametern organisiert sind. Jeder Parameter ist numerisch (float) und es gibt einen nicht trivialen / fehlerfreien Wert für jeden Zeitpunkt. Meine Aufgabe ist es, diese Protokolldateien auf Anomalien zu überwachen (Spitzen, Stürze, ungewöhnliche Muster, bei denen einige Parameter nicht synchron sind, seltsames Verhalten der ersten / zweiten / usw. Ableitung usw.).
Bei einem ähnlichen Auftrag habe ich Splunk mit Prelert ausprobiert, aber ich untersuche derzeit Open-Source-Optionen.
Einschränkungen: Ich beschränke mich auf Python, weil ich es gut kenne, und möchte die Umstellung auf R und die damit verbundene Lernkurve verzögern. Sofern es keine überwältigende Unterstützung für R (oder andere Sprachen / Software) zu geben scheint, möchte ich mich bei dieser Aufgabe an Python halten.
Außerdem arbeite ich momentan in einer Windows-Umgebung. Ich möchte in Windows weiterhin mit kleinen Protokolldateien arbeiten, kann aber bei Bedarf auf eine Linux-Umgebung umsteigen.
Ressourcen: Ich habe Folgendes mit Sackgassen als Ergebnis überprüft:
Python oder R zur Implementierung maschineller Lernalgorithmen zur Betrugserkennung . Einige Informationen hier sind hilfreich, aber leider habe ich Probleme, das richtige Paket zu finden, weil:
Twitters "AnomalyDetection" ist in R und ich möchte mich an Python halten. Darüber hinaus scheint die Python-Port- Besonderheit Probleme bei der Implementierung in der Windows-Umgebung für mich zu verursachen.
Skyline, mein nächster Versuch, scheint ziemlich eingestellt worden zu sein (aufgrund von Github-Problemen ). Ich habe mich nicht eingehend damit befasst, da es anscheinend nur wenig Online-Support gibt.
scikit-learn erforsche ich noch, aber dies scheint viel mehr manuell zu sein. Der Down-in-the-Weeds-Ansatz ist für mich in Ordnung, aber mein Hintergrund in Bezug auf Lernwerkzeuge ist schwach. Daher hätte ich gerne eine Blackbox für technische Aspekte wie Algorithmen, ähnlich wie bei Splunk + Prelert.
Problemdefinition und Fragen: Ich suche Open-Source-Software, die mir bei der Automatisierung des Prozesses der Erkennung von Anomalien aus Zeitreihenprotokolldateien in Python über Pakete oder Bibliotheken helfen kann.
- Gibt es solche Dinge, um meine unmittelbare Aufgabe zu unterstützen, oder sind sie in meinem Kopf imaginär?
- Kann mir jemand bei konkreten Schritten helfen, um mein Ziel zu erreichen, einschließlich Hintergrundinformationen oder Konzepten?
- Ist dies die beste StackExchange-Community, in der Sie nachfragen können, oder sind Statistik, Mathematik oder sogar Sicherheit oder Stapelüberlauf die besseren Optionen?
EDIT [2015.07.23] Beachten Sie, dass das neueste Update zu pyculiarity zu sein scheint festgelegt für die Windows - Umgebung! Ich muss noch bestätigen, sollte aber ein weiteres nützliches Werkzeug für die Community sein.
EDIT [2016-01-19] Ein kleines Update. Ich hatte keine Zeit, mich damit zu befassen und zu recherchieren, aber ich mache einen Schritt zurück, um die Grundlagen dieses Problems zu verstehen, bevor ich weiter in Einzelheiten recherchiere. Zum Beispiel sind zwei konkrete Schritte, die ich unternehme:
Beginnen Sie mit den Wikipedia-Artikeln zur Erkennung von Anomalien [ https://en.wikipedia.org/wiki/Anomaly_detection ], verstehen Sie alles und bewegen Sie sich dann in der Konzepthierarchie anderer verknüpfter Wikipedia-Artikel nach oben oder unten, z. B. [ https: // en.wikipedia.org/wiki/K-nearest_neighbors_algorithm ] und dann zu [ https://en.wikipedia.org/wiki/Machine_learning ].
Erkundungstechniken in den großartigen Umfragen von Chandola et al. 2009 "Anomaly Detection: A Survey" [ http://www-users.cs.umn.edu/~banerjee/papers/09/anomaly.pdf ] und Hodge et al. 2004 "Eine Übersicht über Methoden zur Erkennung von Ausreißern" [ http://eprints.whiterose.ac.uk/767/1/hodgevj4.pdf ].
Sobald die Konzepte besser verstanden sind (ich hoffe, bei der Entwicklung der praktischen Seite auch mit Spielzeugbeispielen herumzuspielen), hoffe ich zu verstehen, welche Open-Source-Python-Tools besser für meine Probleme geeignet sind.
Antworten:
Die Erkennung von Anomalien oder Ereignissen kann auf verschiedene Arten erfolgen:
Grundlegender Weg
Derivat! Wenn die Abweichung Ihres Signals von der Vergangenheit und Zukunft hoch ist, liegt höchstwahrscheinlich ein Ereignis vor. Dies kann extrahiert werden, indem große Nulldurchgänge in der Ableitung des Signals gefunden werden.
Statistischer Weg
Gemeint ist das übliche Grundverhalten. Wenn etwas von der Norm abweicht, bedeutet dies, dass es sich um ein Ereignis handelt. Bitte beachten Sie, dass der Mittelwert in Zeitreihen nicht so trivial ist und keine Konstante ist, sondern sich entsprechend den Änderungen in Zeitreihen ändert, sodass Sie den "gleitenden Durchschnitt" anstelle des Durchschnitts sehen müssen. Es sieht aus wie das:
Den Moving Average Code finden Sie hier . In der Signalverarbeitungsterminologie wenden Sie einen " Tiefpass " -Filter an, indem Sie den gleitenden Durchschnitt anwenden.
Sie können dem folgenden Code folgen:
Probabilistischer Weg
Sie sind speziell für Menschen, die noch nicht mit maschinellem Lernen vertraut sind, anspruchsvoller. Kalman Filter ist eine großartige Idee, um die Anomalien zu finden . Einfachere probabilistische Ansätze mit "Maximum-Likelihood Estimation" funktionieren ebenfalls gut, aber mein Vorschlag ist, bei der Idee des gleitenden Durchschnitts zu bleiben. Das funktioniert in der Praxis sehr gut.
Ich hoffe ich konnte helfen :) Viel Glück!
quelle
h2o hat ein Anomalieerkennungsmodul und traditionell ist der Code in R verfügbar. Ab Version 3 ist jedoch auch ein ähnliches Modul in Python verfügbar, und da h2o Open Source ist, passt es möglicherweise zu Ihrer Rechnung.
Ein funktionierendes Beispiel finden Sie hier
quelle
Ich entwickelte kürzlich eine Toolbox: Py thon O utlier D etection Toolbox ( PyOD ). Siehe GitHub .
Es dient zum Identifizieren von Objekten in Daten mit unbeaufsichtigten und überwachten Ansätzen. PyOD ist verfügbar für:
Hier sind einige wichtige Links:
Github : https://github.com/yzhao062/Pyod
PyPI : https://pypi.org/project/pyod/
Dokumentation : https://pyod.readthedocs.io
Interaktive Jupyter-Notizbücher : https://mybinder.org/v2/gh/yzhao062/Pyod/master
Wenn Sie PyOD in einer wissenschaftlichen Publikation verwenden, würden wir uns über Zitate zu dem folgenden Artikel freuen
Es wird derzeit bei JMLR (Machine Learning Open Source Software Track) geprüft . Siehe Vorabdruck .
Schnelle Einführung
Das PyOD-Toolkit besteht aus drei Hauptfunktionalitätsgruppen: (i) Algorithmen zur Erkennung von Ausreißern; (ii) Ausreißer-Ensemble-Frameworks und (iii) Dienstprogrammfunktionen zur Erkennung von Ausreißern.
Individuelle Erkennungsalgorithmen :
Ausreißerdetektor / Scores-Kombinations-Frameworks :
Hilfsprogrammfunktionen zur Erkennung von Ausreißern :
Ein Vergleich aller implementierten Modelle wird nachfolgend zur Verfügung gestellt: ( Abbildung , Code , Jupyter Notebooks ):
Wenn Sie interessiert sind, überprüfen Sie bitte Github ( https://github.com/yzhao062/Pyod ) für weitere Informationen.
quelle
Ich bin derzeit auf der gleichen Bühne wie Sie. Ich finde die beste Option für die Erkennung von Anomalien und mache Nachforschungen.
Was ich gefunden habe, ist, dass ich denke, dass es am besten zu Ihrem Bedarf passt und besser mit dem vergleichbar ist, was Sie gesehen haben. dh TwitterAnomalyDetection, SkyLine.
Ich habe festgestellt, dass Numentas NAB (Numenta Anomaly Benchmark) besser ist. Es hat auch eine sehr gute Community-Unterstützung und für Sie ist Pluspunkt seine Open Source & in Python entwickelt. Sie können Ihren Algorithmus hinzufügen.
Im Falle eines Algorithmus fand ich, dass LOF oder CBLOF eine gute Option sind.
Probieren Sie es einmal aus. Es kann Ihnen helfen. https://github.com/numenta/nab
Wenn Sie eine bessere Option finden. Erzähl es mir bitte. Ich bin auch auf dem gleichen Weg.
Bestes Glück!!
quelle
Vielleicht hilft das, weil Sie über den eingeschwungenen Zustand gesprochen haben: https://github.com/twitter/AnomalyDetection
https://blog.twitter.com/2015/introducing-practical-and-robust-anomaly-detection-in-a-time-series
quelle
Ich gehe davon aus, dass die Funktion, die Sie zum Erkennen von Abnormalitäten verwenden, eine Datenzeile in einer Protokolldatei ist. In diesem Fall ist Sklearn Ihr guter Freund und Sie können es als Blackbox verwenden. Lesen Sie das Tutorial zur SVM- und Neuheitserkennung für eine Klasse .
Wenn es sich bei Ihrer Funktion jedoch um eine vollständige Protokolldatei handelt, müssen Sie diese zunächst zu einer Funktion derselben Dimension zusammenfassen und dann die Novealty-Erkennung anwenden.
quelle
Es gibt immer noch eine aktive und entwickelte Version von Skyline, für den Fall, dass jemand hier landet und interessiert ist.
https://github.com/earthgecko/skyline
https://earthgecko-skyline.readthedocs.io/en/latest
Ich bin der derzeitige Projektbetreuer und es ist jetzt viel weiter fortgeschritten als die ursprüngliche Etsy-Version, was Leistung, Benutzeroberfläche, besseren Umgang mit der Saisonalität und die zusätzlichen Funktionen einer Anomaliedatenbank, die Berechnung von Korrelationen und die Möglichkeit des Fingerabdrucks anbelangt und lernen nicht anomale Muster.
quelle
Da Sie über multivariate Zeitreihen verfügen, würde ich eine LSTM-RNN-Implementierung wählen, die die Dynamik Ihres Systems anhand von Trainingsdaten modelliert, die in der Regel halbüberwacht sind (nur normale Klassen eingeschlossen). Dies bedeutet, dass Sie Ihr Modell trainieren, um zu lernen, was "normal" ist. Während des Tests testen Sie sowohl normale als auch anomale Bedingungen, um festzustellen, wie gut das Modell sie voneinander unterscheidet.
Ein Vorteil neuronaler Netze besteht darin, dass sie die Kreuzkorrelationen zwischen Eingangssignalen selbst "lernen". Sie müssen sie nicht manuell durchsuchen. Insbesondere LSTM-RNNs sind eine ideale Wahl, wenn es um die Modellierung von Zeitreihen geht, da sie ähnlich wie ein Zustandsraummodell in der Steuerungstheorie (wenn Sie die Analogie sehen) die Möglichkeit bieten, die Erinnerung an frühere Eingaben zu behalten.
In Python ist es fast trivial, ein LSTM-RNN mithilfe der Keras- API (zusätzlich zum Tensorflow-Backend) zu implementieren . Dieses Netzwerk lernt, das / die interessierende (n) Signal (e) bei einer beliebigen Anzahl von Eingängen zu schätzen, die Sie anschließend mit dem tatsächlichen Messwert vergleichen. Wenn es eine "große" Abweichung gibt, haben Sie eine Anomalie (vorausgesetzt, das Modell ist genau genug)!
quelle