ADTK προχωρημένα

2.9.2

ADTK προχωρημένα

Ενημέρωση 2020-02-12 Ανάγνωση 2 λεπτά
Σύνοψη
  • Το ADTK μέρος 2 επεκτείνει την ανίχνευση με ανιχνευτές βασισμένους σε παράθυρα και εποχικούς ανιχνευτές για ανωμαλίες με επίγνωση πλαισίου.
  • Ο συνδυασμός ανιχνευτών βελτιώνει την ανάκληση για πολύπλοκα μοτίβα που απλά κατώφλια αποτυγχάνουν να εντοπίσουν.
  • Η σύγκριση εξόδων ανιχνευτών σε χρονοδιαγράμματα βοηθά στην ευθυγράμμιση της συμπεριφοράς του μοντέλου με τις λειτουργικές απαιτήσεις.

Εισαγωγή #

Η βασική αναβάθμιση στο ADTK μέρος 2 είναι η ανίχνευση με βάση το πλαίσιο: η ίδια τιμή μπορεί να είναι κανονική ή ανώμαλη ανάλογα με τη συμπεριφορά του τοπικού παραθύρου και την εποχικότητα.

Αναλυτική Επεξήγηση #

Ας δοκιμάσουμε ανίχνευση ανωμαλιών χρησιμοποιώντας το Anomaly Detection Toolkit (ADTK). Θα εφαρμόσουμε ανίχνευση ανωμαλιών σε πολυδιάστατα συνθετικά δεδομένα. Αυτή τη φορά, θα εργαστούμε με δεδομένα πολλαπλών διαστάσεων.

import numpy as np
import pandas as pd
from adtk.data import validate_series

s_train = pd.read_csv("./training.csv", index_col="timestamp", parse_dates=True)
s_train = validate_series(s_train)
s_train["value2"] = s_train["value"].apply(lambda v: np.sin(v) + np.cos(v))
s_train

valuevalue2
timestamp
2014-04-01 00:00:0018.0904860.037230
2014-04-01 00:05:0020.3598431.058643
2014-04-01 00:10:0021.1054700.141581
2014-04-01 00:15:0021.1515850.076564
2014-04-01 00:20:0018.1371410.103122
.........
2014-04-14 23:35:0018.2692900.288071
2014-04-14 23:40:0019.0873511.207420
2014-04-14 23:45:0019.5946891.413067
2014-04-14 23:50:0019.7678171.401750
2014-04-14 23:55:0020.4791560.939501

4032 rows × 2 columns

from adtk.visualization import plot

plot(s_train)

Anomaly Detection Toolkit (ADTK) Μέρος 2 | Ανιχνευτές Παραθύρου και Εποχ… figure

Σύγκριση Μεθόδων Ανίχνευσης Ανωμαλιών #

Θα εκτελέσουμε ανίχνευση ανωμαλιών χρησιμοποιώντας SeasonalAD. Για άλλες μεθόδους, ανατρέξτε στο Detector.

import matplotlib.pyplot as plt
from adtk.detector import OutlierDetector, PcaAD, RegressionAD
from sklearn.linear_model import LinearRegression
from sklearn.neighbors import LocalOutlierFactor

model_dict = {
    "OutlierDetector": OutlierDetector(LocalOutlierFactor(contamination=0.05)),
    "RegressionAD": RegressionAD(regressor=LinearRegression(), target="value2", c=3.0),
    "PcaAD": PcaAD(k=2),
}

for model_name, model in model_dict.items():
    anomalies = model.fit_detect(s_train)

    plot(
        s_train,
        anomaly=anomalies,
        ts_linewidth=1,
        ts_markersize=3,
        anomaly_color="red",
        anomaly_alpha=0.3,
        curve_group="all",
    )
    plt.title(model_name)
    plt.show()

Για άλλες μεθόδους, ανατρέξτε στο Detector figure

Για άλλες μεθόδους, ανατρέξτε στο Detector figure

Για άλλες μεθόδους, ανατρέξτε στο Detector figure