Anomalieerkennung: Welcher Algorithmus soll verwendet werden?

10

Kontext: Ich entwickle ein System, das klinische Daten analysiert, um unplausible Daten herauszufiltern, bei denen es sich möglicherweise um Tippfehler handelt.

Was ich bisher gemacht habe:

Um die Plausibilität zu quantifizieren, habe ich bisher versucht, die Daten zu normalisieren und dann einen Plausibilitätswert für Punkt p basierend auf seiner Entfernung zu bekannten Datenpunkten in Satz D (= dem Trainingssatz) zu berechnen:

plausibility(p)=qDGauss(distance(p,q))

Mit dieser Quantifizierung kann ich dann einen Schwellenwert auswählen, der die plausiblen Daten von den unplausiblen Daten trennt. Ich benutze Python / Numpy.

Meine Probleme:

  1. Dieser Algorithmus kann keine unabhängigen Dimensionen erkennen. Im Idealfall könnte ich alles, was ich über den Datensatz weiß, in den Algorithmus einfügen und ihn selbst herausfinden lassen, dass die Dimension X die Plausibilität des Datensatzes nicht beeinflusst.
  2. Der Algorithmus funktioniert nicht wirklich für diskrete Werte wie Boolesche Werte oder ausgewählte Eingaben. Sie könnten auf kontinuierliche Werte abgebildet werden, aber es ist nicht intuitiv, dass Auswahl 1 näher an Auswahl 2 liegt als an Auswahl 3.

Frage:

Welche Art von Algorithmen sollte ich für diese Aufgabe untersuchen? Es scheint eine Menge Optionen zu geben, einschließlich auf dem nächsten Nachbarn basierender, auf Clustern basierender und statistischer Ansätze. Außerdem habe ich Probleme, Artikel zu finden, die sich mit der Erkennung von Anomalien dieser Komplexität befassen.

Jeder Rat wird sehr geschätzt.

[Bearbeiten] Beispiel:

Angenommen, die Daten bestehen aus der Größe einer Person, dem Gewicht einer Person und dem Zeitstempel - es handelt sich also um 3D-Daten. Gewicht und Größe sind korreliert, aber der Zeitstempel ist völlig unabhängig. Wenn ich nur die euklidischen Abstände betrachte, müsste ich einen kleinen Schwellenwert wählen, der zu den meisten meiner Kreuzvalidierungsdaten passt. Im Idealfall würde der Algorithmus die Zeitstempeldimension einfach ignorieren, da es irrelevant ist, zu bestimmen, ob ein Datensatz plausibel ist, da der Zeitstempel in keiner Weise mit den anderen Dimensionen korreliert. Jeder Zeitstempel ist plausibel.

Andererseits könnte man Beispiele finden, bei denen der Zeitstempel eine Rolle spielt. Zum Beispiel könnte es sein, dass der Wert Y für Merkmal X plausibel ist, wenn er vor einem bestimmten Datum gemessen wird, jedoch nicht nach einem bestimmten Datum.

Georg
quelle
Bitte lesen Sie meine Antwort auf stats.stackexchange.com/questions/97946/changepoints-in-r, da diese (für einige!) Ärgerliche Frage behandelt wird.
IrishStat
Wäre stats.stackexchange.com/questions/213 das, wonach Sie suchen?
whuber
Ich bezweifle, dass Sie diese Arbeit für Boolesche machen können.
Aksakal
@whuber Ich bin mir nicht sicher, es scheint nicht zu behandeln, wie irrelevante Dimensionen ignoriert werden können.
Georg
1
Übrigens habe ich auch Probleme, eine Formalisierung für den von mir beschriebenen Ansatz zu finden. Wenn ich den formalen Begriff kennen würde, würde er mir auch bei meiner Recherche helfen. Möglicherweise gibt es eine Variation dieses Algorithmus, die zumindest das Problem der unabhängigen / irrelevanten Dimension behebt.
Georg

Antworten:

7

Eine typische Formulierung der Anomalieerkennung besteht darin, den Mittelwert und die Varianz für jedes der Merkmale nicht anomaler Daten zu ermitteln. Wenn ein Vektor dieser Merkmale mit den Komponenten ist, definieren Sie die Wahrscheinlichkeit einer Kombination von Merkmalen alsmxxip(x)

p(x)=i=1mp(xi;μi,σi2)

wobei jedes gaußverteilt ist:xixiN(μi,σi2)

Eine Anomalie tritt immer dann auf, wennp(x)<ϵ

Die Verteilung jedes muss nicht normal sein, aber es ist besser, wenn es zumindest normal ist. Die von Ihnen verwendeten Funktionen sind jedoch beliebig. Sie können direkt aus den Rohdaten entnommen oder berechnet werden. Wenn Sie beispielsweise der Meinung sind, dass ein Feature besser mit modelliert wird, setzen Sie das Feature auf anstatt auf .xixiloglog(xi)xi

Dies scheint sehr ähnlich zu sein, was Sie bereits tun, wenn Sie .q=μ

Bestimmen vonϵ

Der Algorithmus ist an negative Beispiele (Nichtanomalien) angepasst. Aber aus der Kreuzvalidierung Satz bestimmt und wird typischerweise als Wert ausgewählt, der die beste liefert PunktzahlF 1ϵF1

F1=2PrecisionRecallPrecision+Recall

Aber um F1 zu berechnen, müssen Sie wissen, was anomal ist und was nicht; Das ist wahr, positiv ist, wenn das System eine Anomalie vorhersagt und es tatsächlich eine Anomalie ist. Falsch positive sind vorhergesagte Anomalien, die es tatsächlich nicht sind und so weiter. Wenn Sie das nicht haben, müssen Sie möglicherweise auf Vermutungen zurückgreifen.

Das Problem der korrelierten Merkmale

Das Obige hat jedoch einen Nachteil, wenn die Merkmale korreliert sind. Wenn dies der Fall ist, kann die obige Berechnung möglicherweise nicht darauf hinweisen, dass etwas tatsächlich anomal ist. Eine Lösung hierfür ist die Verwendung des multivariaten Gaußschen für Merkmale, wobei die Kovarianzmatrix ist.ΣmΣ

p(x)=1(2π)m2(detΣ)1/2e12(xμ)TΣ1(xμ)

Das Gleiche gilt für das Finden von und dieser Ansatz hat auch den Nachteil, dass Sie die Umkehrung von berechnen müssen . Es müssen also mindestens so viele Stichproben wie Features vorhanden sein. Wenn die Anzahl der Features groß ist, ist der Prozess rechenintensiv, und Sie müssen sich vor linear abhängigen Features schützen. Beachten Sie diese Vorbehalte, aber es scheint für Sie kein Problem zu sein.ϵΣ

waTeim
quelle
Ich habe diesen Ansatz bereits ausprobiert, einschließlich der multivariaten Gaußschen Verteilung. In der Tat sind nicht verwandte Merkmale bei diesem Ansatz kein großes Problem. Was ich fand, war, dass dieser Ansatz nicht für komplexe Modelle geeignet ist. Wenn ich beispielsweise einen 2D-Datensatz mit den Merkmalen F1, F2 hatte, in dem ungefähr F2 = F1 ^ 3 ist, zeichnet die multivariate Gauß-Verteilung nur eine Ellipse um die Daten und modelliert die Daten sehr grob. Deshalb habe ich mich für den in der Frage beschriebenen Ansatz entschieden (wo es nicht ein q, sondern viele qs gibt).
Georg
Gibt es also eine Möglichkeit, den multivariaten Gaußschen Ansatz zu verwenden, um komplexere Datenmodelle zu erfassen? Könnten mir beispielsweise Mischungsmodelle in diesem Fall helfen? Ich habe ein wenig über diese in meiner Forschung gelesen, aber noch nicht ganz verstanden, wie man sie anwendet.
Georg
@Georg Hmm Ich frage mich, ob Ihr Problem nicht ein Problem komplexer Modelle ist, sondern komplexe Daten und zu vereinfachte Modelle. Oder mit anderen Worten unterpassend. Im obigen Fall, was passiert , wenn statt der Verwendung Sie verwenden ? Die Merkmale können entweder aus den Daten entnommen oder berechnet werden. (F1,F2)(F1,F21/3)
Warten Sie
Ja, Unteranpassung ist das, was ich meine. Und ja, das würde funktionieren, aber ich möchte, dass der Algorithmus das automatisch erkennt. Ich kann die Funktionen nicht manuell ändern, es sollte auf jeden Fall funktionieren.
Georg
Hier ein Beispiel: Die beiden Diagramme zeigen Daten für Höhe (x-Achse) und Gewicht (y-Achse) an (Entschuldigung für die deutschen Untertitel;)). Das erste Diagramm zeigt das Ergebnis des multivariaten Gaußschen Ansatzes, das zweite des in der Frage beschriebenen Ansatzes. In beiden Fällen wurde der Schwellenwert so gewählt, dass 97% der CV-Daten als plausibel angesehen werden. Der zweite Ansatz kann die Komplexität der Daten besser erfassen. 1: dl.dropboxusercontent.com/u/26034024/anomaly/gauss.png 2: dl.dropboxusercontent.com/u/26034024/anomaly/distance.png
Georg
3

Ich habe das Projekt fast abgeschlossen, in dem ich diese Probleme lösen musste, und ich möchte meine Lösung mitteilen, falls jemand die gleichen Probleme hat.

Erstens ist der von mir beschriebene Ansatz einer Kernel-Dichteschätzung sehr ähnlich . Das war also gut zu wissen für die Forschung ...

Unabhängige Funktionen

Unabhängige Merkmale können durch Messen des Korrelationskoeffizienten herausgefiltert werden . Ich habe alle Merkmale paarweise verglichen und die Korrelation gemessen. Dann nahm ich den maximalen absoluten Korrelationskoeffizienten jedes Merkmals als Skalierungsfaktor. Auf diese Weise werden Merkmale, die mit keinem anderen korrelieren, mit einem Wert nahe 0 multipliziert und damit ihre Auswirkung auf den euklidischen Abstand(auch bekannt als ) ist vernachlässigbar.||x1x2||distance(x1,x2)

Seien Sie gewarnt: Der Korrelationskoeffizient kann nur lineare Korrelationen messen. Weitere Informationen finden Sie auf der verlinkten Wiki-Seite. Wenn die Korrelation in den Daten linear angenähert werden kann, funktioniert dies einwandfrei. Wenn nicht, sollten Sie einen Blick auf die letzte Seite dieses Dokuments werfen und prüfen, ob Sie anhand der Korrelationsmessung einen Skalierungsfaktor ermitteln können.

Diskrete Werte

Ich habe den beschriebenen Algorithmus nur für Continuos-Werte verwendet. Diskrete Werte wurden verwendet, um den Trainingssatz zu filtern. Wenn ich also die Größe und das Gewicht einer Person habe und weiß, dass sie weiblich ist, werde ich nur Proben von anderen Frauen untersuchen, um nach einer Anomalie zu suchen.

Georg
quelle