Erkennen von Anomalien mit dem neuronalen Netzwerk

12

Ich habe einen großen mehrdimensionalen Datensatz, der jeden Tag generiert wird.

Was wäre ein guter Ansatz, um im Vergleich zu früheren Tagen irgendeine Art von "Anomalie" zu entdecken? Ist dies ein geeignetes Problem, das mit neuronalen Netzen angegangen werden könnte?

Anregungen sind willkommen.

Zusätzliche Informationen: Es gibt keine Beispiele, daher sollte die Methode die Anomalien selbst erkennen

Nickpick
quelle

Antworten:

12

Bei der Formulierung der Frage gehe ich davon aus, dass es keinerlei "Beispiele" für Anomalien (dh Bezeichnungen) gibt. Mit dieser Annahme wäre ein praktikabler Ansatz die Verwendung von Autoencodern : Neuronale Netze, die als Eingabe Ihre Daten empfangen und darauf trainiert sind, dieselben Daten auszugeben. Die Idee ist, dass das Netz durch das Training Darstellungen der Eingangsdatenverteilungen in Form latenter Variablen lernen konnte.

Es gibt eine Art von Autoencoder namens Denoising Autoencoder , der mit beschädigten Versionen der Originaldaten als Eingabe und mit den unverfälschten Originaldaten als Ausgabe trainiert wird . Dies liefert ein Netzwerk, das Rauschen (dh Datenverfälschungen) von den Eingängen entfernen kann .

Sie können einen Entrauschungs-Autoencoder mit den täglichen Daten trainieren. Verwenden Sie es dann für neue Tagesdaten. Auf diese Weise haben Sie die ursprünglichen Tagesdaten und eine unbeschädigte Version derselben Daten. Sie können dann beide vergleichen, um signifikante Unterschiede zu erkennen .

Der Schlüssel hier ist, welche Definition des signifikanten Unterschieds Sie wählen. Sie können den euklidischen Abstand berechnen und davon ausgehen, dass Sie eine Anomalie haben, wenn er einen bestimmten willkürlichen Schwellenwert überschreitet. Ein weiterer wichtiger Faktor ist die Art der Korruption, die Sie einführen. Sie sollten so nahe wie möglich an vernünftigen Abnormalitäten liegen.

Eine weitere Option wäre die Verwendung generativer kontradiktorischer Netzwerke . Das Nebenprodukt des Trainings ist ein Diskriminator-Netzwerk, das normale tägliche Daten von abnormalen Daten unterscheidet.

ncasas
quelle
4

Ich denke, das hängt stark von der Art Ihrer Daten ab (kategorial / kontinuierlich). Ich würde zuerst mit einfachen Methoden beginnen. Die kommen mir in den Sinn:

  • Sie können die Verteilung jeder Variablen entweder mithilfe von Quantilen oder mithilfe eines statistischen Tests vergleichen, um festzustellen, ob sie sich erheblich unterscheiden
  • Sie können auch das Vorkommen jedes Etiketts / jeder Kategorie zählen und vergleichen
  • Ich würde auch versuchen, jede Art von Distanzmaß zu verwenden. Zum Beispiel könnten Sie die Mahalanobis-Distanz berechnen und nach großen Veränderungen suchen
  • Oder etwas wirklich Einfaches - nur ein absoluter Unterschied zwischen neuen und alten Daten, einen Schwellenwert festlegen und alles, was den Schwellenwert überschreitet, wird gemeldet
  • Sie können auch einige mehrdimensionale Techniken einsetzen - wie Korrelationsmatrix, Hauptkomponenten, Clustering usw. - und nach Änderungen suchen

Wenn keines davon geeignet ist, gibt es eine ganze Reihe von Statistiken / ML-Modellen, die auf die Erkennung von Anomalien spezialisiert sind. SVM, t-SNE, Isolationswälder, Peer Group-Analyse , Break Point-Analyse , Zeitreihen (wo Sie nach Ausreißern außerhalb von Trends suchen würden).

Diese Methoden haben den Vorteil, dass sie eine Art White-Box sind, sodass Sie erkennen können, warum jemand ein Ausreißer ist. Sollte dies nicht das Richtige für Sie sein, haben andere ANN-Ansätze vorgeschlagen, die ebenfalls funktionieren.

HonzaB
quelle
0

Ich versuche ein ähnliches Problem zu lösen. Enthält Ihr Datensatz eine Mischung aus Text und numerischen Merkmalen? Wenn ja, steigt die Komplexität beim Erkennen von Anomalien (ich weiß nicht, um welchen Faktor es sich handelt). Wenn Ihr Datensatz einheitlich ist, z. B. nur numerische Werte enthält, können Sie möglicherweise eine RNN verwenden, für die noch ein beschrifteter Datensatz erforderlich ist, die jedoch Zeitreihen wie Muster erkennen kann (da Sie den Vergleich mit Werten früherer Tage für ex erwähnen).

Pradeep Banavara
quelle
0

Eine einfache Möglichkeit, dies mit Autoencodern zu tun (ohne "Autoencoder zu entstören", die mit "beschädigten Daten" trainiert werden müssen), besteht darin, einen Autoencoder zu trainieren und dann den RMSE der Zeilen von der Eingabe zu überprüfen, die nicht richtig decodiert wurden (diejenigen) dass der Autoencoder eine harte Zeit hatte zu rekonstruieren). Nach gewisser Definition würden Daten eine Anomalie darstellen (dies wäre sicherlich der Fall bei Dingen wie Verkehrsspitzen).

orcaman
quelle