Erkennung von univariaten Anomalien | Algorithmen zur Anomalieerkennung

Inhalt

Dieser Artikel wurde im Rahmen der Data Science Blogathon

Eine Anomalie ist eine Beobachtung, die deutlich von allen anderen Beobachtungen abweicht. Ein Anomalieerkennungssystem ist ein System, das Anomalien in Daten erkennt. Eine Anomalie wird auch als Ausreißer bezeichnet.

Beispiel: Nehmen wir an, eine Datenspalte besteht aus dem monatlichen Einkommen der Bürger und diese Spalte enthält auch das Gehalt von Bill Gates. Dann, Das Gehalt von Bill Gates ist ein Ausreißer in diesen Daten.

Algorithmen zur Anomalieerkennung

In diesem Blog, Schauen wir uns die folgenden Algorithmen zur Anomalieerkennung an.

Dies sind einige der vielen verfügbaren Algorithmen und unterlassen Sie es nie, weitere andere Algorithmen als diese zu erkunden.

Importieren Sie die erforderlichen Bibliotheken und schreiben Sie die Dienstprogrammfunktionen

# Python-Ausreißererkennung
!pip installieren pyod

Importwarnungen
numpy als np importieren
Pandas als pd importieren
von pyod.models.mad import MAD
von pyod.models.knn KNN importieren
von pyod.models.lof importieren LOF
import matplotlib.pyplot als plt
von sklearn.ensemble importieren IsolationForest

# Daten zur Anomalieerkennung
data_values ​​= [['2021-05-1', 45000.0],
       ['2021-05-2', 70000.0],
       ['2021-05-3', 250000.0],
       ['2021-05-4', 70000.0],
       ['2021-05-5', 45000.0],
       ['2021-05-6', 55000.0],
       ['2021-05-7', 35000.0],
       ['2021-05-8', 60000.0],
       ['2021-05-9', 45000.0],
       ['2021-05-10', 25000.0],
       ['2021-05-11', 142936.0],
       ['2021-05-12', 138026.0],
       ['2021-05-13', 28347.0],
       ['2021-05-14', 40962.66],
       ['2021-05-15', 34543.0],
       ['2021-05-16', 40962.66],
       ['2021-05-17', 25207.0],
       ['2021-05-18', 37502.0],
       ['2021-05-19', 29589.0],
       ['2021-05-20', 78404.0],
       ['2021-05-21', 26593.0],
       ['2021-05-22', 123267.0],
       ['2021-05-23', 46880.0],
       ['2021-05-24', 65361.0],
       ['2021-05-25', 46042.0],
       ['2021-05-26', 48209.0],
       ['2021-05-27', 44461.0],
       ['2021-05-28', 90866.0],
       ['2021-05-29', 46886.0],
       ['2021-05-30', 33456.0],
       [' 2021-05-31', 46251.0],
       ['2021-06-1', 29370.0],
       ['2021-06-2', 165620.0],
       ['2021-06-3', 20317.0]]
       
data = pd.DataFrame(Datenwerte , Spalten=['date', 'Amount'])

def fit_model(Modell, Daten, column='amount'):
    # Passen Sie das Modell an und sagen Sie es voraus
    df = data.copy()
    data_to_predict = Daten[Säule].to_numpy().umformen(-1, 1)
    Vorhersagen = model.fit_predict(data_to_predict)
    df['Predictions'] = Vorhersagen
    
    zurück df

def plot_anomalien(df, x='date', y='amount'):

    # Kategorien haben Werte von 0 zu n
    # für jeden Wert in 0 bis n wird es in Colormap abgebildet
    Kategorien = df['Predictions'].to_numpy()
    colormap = np.array(['g', 'r'])

    f = plt.figur(Feigengröße=(12, 4))
    f = Plt.Streuung(df[x], df[Ja], c=Farbkarte[Kategorien])
    f = plt.xlabel(x)
    f = plt.ylabel(Ja)
    f = plt.xticks(Drehung=90)
    plt.zeigen()

Die obigen Daten bestehen aus zwei Spalten, nämlich, Datum und Betrag, wir können davon ausgehen, dass die Daten den Umsatz eines Bäckerei-Display-Unternehmens enthalten.

Was macht die Funktion fit_model??

  • Die Funktion fit_model verwendet das Modell und die Daten als Eingabe, hier finden wir Anomalien in der Mengenspalte.
  • Danach, ändert die Form der Daten in eindimensionale Daten und passt das bereitgestellte Modell an und sagt Anomalien in den Daten vorher und speichert sie in der Vorhersagespalte des bereitgestellten Datenrahmens, und gibt es zurück.

Interquartilsabstand

Perzentile:

Quartile:

  • 11. Quartil = Perzentil 25

  • 2c Quartil = Perzentil 50

  • 3.1. Quartil = Perzentil 75

Interquartilsabstand (IQR):

IQR = 3. Quartil – 1ähm cuartil

Anomalien = [1Quartil – (1.5 * IQR)] Ö [3rd Quartil + (1.5 * IQR)]

Die Anomalien sind unten [1Quartil – (1.5 * IQR)] und darüber [3rd Quartil + (1.5 * IQR)] diese Werte.

36166Interquartil-gerade-8995873

Bildquelle

def find_anomalien(Wert, Untere Schwelle, obere_schwelle):
    
    wenn Wert < Lower_threshold oder Wert > obere_schwelle:
        Rückkehr 1
    anders: Rückkehr 0

def iqr_anomaly_detector(Daten, column='amount', Schwelle=1,1):
    
    df = data.copy()
    Quartile = dict(Daten[Säule].Quantil([.25, .50, .75]))
    Quartil_3, Quartil_1 = Quartile[0.75], Quartile[0.25]
    iqr = Quartil_3 - Quartil_1

    Lower_threshold = Quartil_1 - (Schwelle * iqr)
    oberer_schwellenwert = quartil_3 + (Schwelle * iqr)

    drucken(F"Untere Schwelle: {Untere Schwelle}, nObere Schwelle: {obere_schwelle}n")
    
    df['Predictions'] = Daten[Säule].anwenden(find_anomalien, args=(Untere Schwelle, obere_schwelle))
    zurück df
  
iqr_df = iqr_anomaly_detector(Daten)
plot_anomalien(iqr_df)
# Ausgang
# Untere Schwelle: -2944.050000000003, 
# Obere Schwelle: 106441.55
45238screen20shot202021-06-1220at202-11-2320pm-9712781

Was ist im obigen Code passiert??

  • Zuerst, finde das Perzentil heraus 25 Ja 75, nämlich, das 1. und 3. Quartil wurden gefunden.
  • Und später, der Interquartilsabstand wird gefunden, das ist die Differenz zwischen dem dritten und dem ersten Quartil.
  • Danach, wir finden die obere und untere Schwelle, oberhalb und unterhalb derer die Anomalien liegen, beziehungsweise.
  • Die obige Funktion find_anomalies findet die Anomalien in den Daten gemäß den angegebenen Schwellenwerten.
  • Schließlich, wir verfolgen die gefundenen Anomalien.

Isolationswald

Isolation Forest ist ein Algorithmus, der Anomalien erkennt, indem er eine Teilmenge von Daten nimmt und daraus viele Isolationsbäume erstellt..

  • Die Kernidee ist, dass Anomalien viel einfacher zu isolieren sind als normale Beobachtungen und Anomalien in viel geringeren Tiefen eines Isolationsbaums existieren.. Ein Isolationsbaum wird erstellt, indem ein Merkmal zufällig ausgewählt und ein Wert dieses Merkmals zufällig ausgewählt wird. Ein Wald wird gebaut, indem alle Isolationsbäume hinzugefügt werden.

29124IsolationWald1-7984400

Bildquelle

iso_forest = IsolationWald(n_Schätzer = 125)
iso_df = fit_model(iso_forest, Daten)
iso_df['Predictions'] = iso_df['Predictions'].Karte(Lambda x: 1 wenn x==-1 sonst 0)
plot_anomalien(iso_df)
41667screen20shot202021-06-1220at202-10-3420pm-8278535

Was ist im obigen Code passiert??

  • Zuerst, wir definieren das Isolation Forest-Modell mit 125 Isolationsbäume, dann übergeben wir das modell, die Daten als Eingaben für die Funktion fit_model, wo es das Modell an die Daten anpasst und uns Vorhersagen liefert.
  • Der Isolationswald weist -1 auf anomale Daten und 1 zu normalen Daten, um es zu vereinfachen, wir konvertieren die Vorhersage von normalen Daten (1) ein 0 und die Vorhersage von anomalen Daten (-1) ein 1.
  • Schließlich, wir zeichnen die von Isolation Forest vorhergesagten Anomalien.

Mittlere absolute Abweichung

La desviación absoluta media es la diferencia entre cada observación y la Median de esas observaciones. Eine Beobachtung, die stärker vom Rest der Beobachtung abweicht, wird als Anomalie betrachtet..

Warum Median statt Mittelwert?

41740verrückt-6684108
"""Mittlere absolute Abweichung"""
mad_model = MAD()
mad_df = fit_model(mad_model, Daten)
plot_anomalien(mad_df)

15538screen20shot202021-06-1220at202-14-4420pm-4780180

Was ist im obigen Code passiert??

  • Zuerst, Wir definieren das Median Absolute Deviation-Modell, das in der pyod-Bibliothek verfügbar ist, dann übergeben wir das modell, die Daten als Eingaben für die Funktion fit_model, wo es das Modell an die Daten anpasst und uns Vorhersagen liefert.
  • Schließlich, wir zeichnen die vom MAD-Modell vorhergesagten Anomalien.

Algorithmus der nächsten Nachbarn K

Der K-Nearest Neighbor-Algorithmus erkennt Anomalien unter Verwendung der K-Nächstnachbar-Abstände als Anomalie-Scores. Die Idee ist, dass, wenn eine Beobachtung sehr weit von den anderen Beobachtungen entfernt ist, dann wird diese Beobachtung als Anomalie angesehen.

"""KNN-basierte Ausreißererkennung"""
knn_model = KNN()
knn_df = fit_model(knn_model, Daten)
plot_anomalien(knn_df)
96884screen20shot202021-06-1220at202-15-3720pm-7892411

Was ist im obigen Code passiert??

  • Zuerst, wir definieren das nächste Nachbarmodell K, das in der pyod-Bibliothek verfügbar ist, dann übergeben wir das modell, die Daten als Eingaben für die Funktion fit_model, wo es das Modell an die Daten anpasst und uns Vorhersagen liefert.
  • Schließlich, wir zeichnen die vom KNN-Modell vorhergesagten Anomalien.

In der PyOD-Bibliothek stehen viele Modelle zur Verfügung, wie zum Beispiel,

  • CBLOF (Clusterbasierter lokaler Ausreißerfaktor)
  • LOF (lokaler Ausreißerfaktor)
  • HBOS (histogrammbasierte Ausreißererkennung)
  • OCSVM (SVM einer Klasse)

Unterlassen Sie es nie, mit weiteren Algorithmen zu experimentieren, die in PyOD verfügbar sind.

Die praktischen Implementierungen der obigen Algorithmen sind im folgenden Notebook implementiert

Google-Kooperationslink

Verweise

[1] PyOD, Python-Bibliothek zur Erkennung atypischer Werte

Vielen Dank!

Die in diesem Artikel gezeigten Medien sind nicht Eigentum von DataPeaker und werden nach Ermessen des Autors verwendet.

Abonniere unseren Newsletter

Wir senden Ihnen keine SPAM-Mail. Wir hassen es genauso wie du.

Datenlautsprecher