Freigeben über


series_decompose_anomalies()

Anomalieerkennung basiert auf der Analysereihen. Weitere Informationen finden Sie unter series_decompose().

Die Funktion verwendet einen Ausdruck, der eine Datenreihe (dynamische numerische Matrix) als Eingabe enthält, und extrahiert anomale Punkte mit Punkten.

Syntax

series_decompose_anomalies (Serie, [ , Trend zur Saisonalität, ,Test_points AD_method, Seasonality_threshold ], )

Erfahren Sie mehr über Syntaxkonventionen.

Parameter

Name Type Erforderlich Beschreibung
Reihen dynamic ✔️ Ein Array numerischer Werte, in der Regel die resultierende Ausgabe von Make-Series - oder make_list Operatoren.
Schwellenwert real Der Anomalieschwellenwert. Der Standardwert ist 1,5, k,, um milde oder stärkere Anomalien zu erkennen.
Saisonalität int Steuert die saisonale Analyse. Mögliche Werte sind:

- -1: Autodet die Saisonalität mithilfe von series_periods_detect. Dies ist der Standardwert.
- Ganzzahliger Zeitraum: Eine positive ganze Zahl, die den erwarteten Zeitraum in der Anzahl der Bins angibt. Wenn sich die Datenreihe beispielsweise in 1h Fächern befindet, beträgt eine wöchentliche Periode 168 Bins.
- 0: Keine Saisonalität, also überspringen Sie das Extrahieren dieser Komponente.
Trend string Steuert die Trendanalyse. Mögliche Werte sind:

- avg: Definieren der Trendkomponente als average(x). Dies ist die Standardeinstellung.
- linefit: Extrahieren Der Trendkomponente mithilfe der linearen Regression.
- none: Kein Trend, also überspringen Sie das Extrahieren dieser Komponente.
Test_points int Eine positive ganze Zahl, die die Anzahl der Punkte am Ende der Datenreihe angibt, die vom Lern- oder Regressionsprozess ausgeschlossen werden sollen. Dieser Parameter sollte für Prognosezwecke festgelegt werden. Der Standardwert ist 0.
AD_method string Steuert die Anomalieerkennungsmethode für die Restzeitreihe, die einen der folgenden Werte enthält:

- ctukey: Tukeys Zauntest mit benutzerdefiniertem 10.-90. Quantilbereich. Dies ist die Standardeinstellung.
- tukey: Tukeys Zauntest mit standard 25.-75. Quantilbereich.

Weitere Informationen zu Restzeitreihen finden Sie unter series_outliers.
Seasonality_threshold real Der Schwellenwert für die Saisonalitätsbewertung, wenn "Saisonalität " auf "autodetect" festgelegt ist. Der Schwellenwert für die Standardbewertung beträgt 0,6.

Weitere Informationen finden Sie unter series_periods_detect.

Gibt zurück

Die Funktion gibt die folgende Datenreihe zurück:

  • ad_flag: Eine ternäre Serie, die (+1, -1, 0) die Markierung nach oben/unten/keine Anomalie enthält.
  • ad_score: Anomaliebewertung
  • baseline: Der vorhergesagte Wert der Datenreihe gemäß der Analyse

Der Algorithmus

Diese Funktion führt die folgenden Schritte aus:

  1. Ruft series_decompose() mit den entsprechenden Parametern auf, um die Basisplan- und Restreihen zu erstellen.
  2. Berechnet ad_score Datenreihen, indem series_outliers() mit der ausgewählten Anomalieerkennungsmethode auf die Restreihen angewendet wird.
  3. Berechnet die ad_flag Datenreihe durch Anwenden des Schwellenwerts auf der ad_score, um eine Anomalie nach oben/unten bzw. ohne Anomalie zu markieren.

Beispiele

Erkennen von Anomalien in wöchentlicher Saisonalität

Generieren Sie im folgenden Beispiel eine Serie mit wöchentlicher Saisonalität, und fügen Sie dann einige Ausreißer hinzu. series_decompose_anomalies bestimmt die Saisonalität automatisch und generiert einen Basisplan, der das sich wiederholende Muster erfasst. Die hinzugefügten Ausreißer können in der ad_score Komponente deutlich erkannt werden.

let ts=range t from 1 to 24*7*5 step 1 
| extend Timestamp = datetime(2018-03-01 05:00) + 1h * t 
| extend y = 2*rand() + iff((t/24)%7>=5, 10.0, 15.0) - (((t%24)/10)*((t%24)/10)) // generate a series with weekly seasonality
| extend y=iff(t==150 or t==200 or t==780, y-8.0, y) // add some dip outliers
| extend y=iff(t==300 or t==400 or t==600, y+8.0, y) // add some spike outliers
| summarize Timestamp=make_list(Timestamp, 10000),y=make_list(y, 10000);
ts 
| extend series_decompose_anomalies(y)
| render timechart  

Wöchentliche Saisonalität mit Basis- und Ausreißern.

Erkennen von Anomalien in wöchentlicher Saisonalität mit Trend

Fügen Sie in diesem Beispiel der Datenreihe aus dem vorherigen Beispiel einen Trend hinzu. Führen Sie series_decompose_anomalies zunächst die Standardparameter aus, in denen der Trendstandardwert avg nur den Mittelwert einnimmt und den Trend nicht berechnet. Der generierte Basisplan enthält nicht den Trend und ist im Vergleich zum vorherigen Beispiel weniger genau. Daher werden einige der in die Daten eingefügten Ausreißer aufgrund der höheren Varianz nicht erkannt.

let ts=range t from 1 to 24*7*5 step 1 
| extend Timestamp = datetime(2018-03-01 05:00) + 1h * t 
| extend y = 2*rand() + iff((t/24)%7>=5, 5.0, 15.0) - (((t%24)/10)*((t%24)/10)) + t/72.0 // generate a series with weekly seasonality and ongoing trend
| extend y=iff(t==150 or t==200 or t==780, y-8.0, y) // add some dip outliers
| extend y=iff(t==300 or t==400 or t==600, y+8.0, y) // add some spike outliers
| summarize Timestamp=make_list(Timestamp, 10000),y=make_list(y, 10000);
ts 
| extend series_decompose_anomalies(y)
| extend series_decompose_anomalies_y_ad_flag = 
series_multiply(10, series_decompose_anomalies_y_ad_flag) // multiply by 10 for visualization purposes
| render timechart

Wöchentliche Saisonalität entreißt sich mit Trend.

Führen Sie als Nächstes dasselbe Beispiel aus, aber da Sie einen Trend in der Datenreihe erwarten, geben Sie den Trendparameter an linefit . Sie können sehen, dass der Basisplan wesentlich näher an der Eingabereihe liegt. Alle eingefügten Ausreißer werden erkannt, und auch einige falsch positive Ergebnisse. Sehen Sie sich das nächste Beispiel zum Optimieren des Schwellenwerts an.

let ts=range t from 1 to 24*7*5 step 1 
| extend Timestamp = datetime(2018-03-01 05:00) + 1h * t 
| extend y = 2*rand() + iff((t/24)%7>=5, 5.0, 15.0) - (((t%24)/10)*((t%24)/10)) + t/72.0 // generate a series with weekly seasonality and ongoing trend
| extend y=iff(t==150 or t==200 or t==780, y-8.0, y) // add some dip outliers
| extend y=iff(t==300 or t==400 or t==600, y+8.0, y) // add some spike outliers
| summarize Timestamp=make_list(Timestamp, 10000),y=make_list(y, 10000);
ts 
| extend series_decompose_anomalies(y, 1.5, -1, 'linefit')
| extend series_decompose_anomalies_y_ad_flag = 
series_multiply(10, series_decompose_anomalies_y_ad_flag) // multiply by 10 for visualization purposes
| render timechart  

Wöchentliche Saisonalitätsanomalien mit Linientrend.

Optimieren des Anomalieerkennungsschwellenwerts

Im vorherigen Beispiel wurden einige laute Punkte als Anomalien erkannt. Erhöhen Sie nun den Anomalieerkennungsschwellenwert von 1,5 auf 2,5. Verwenden Sie diesen interperzentilen Bereich, sodass nur stärkere Anomalien erkannt werden. Jetzt werden nur die Ausreißer erkannt, die Sie in die Daten eingefügt haben.

let ts=range t from 1 to 24*7*5 step 1 
| extend Timestamp = datetime(2018-03-01 05:00) + 1h * t 
| extend y = 2*rand() + iff((t/24)%7>=5, 5.0, 15.0) - (((t%24)/10)*((t%24)/10)) + t/72.0 // generate a series with weekly seasonality and onlgoing trend
| extend y=iff(t==150 or t==200 or t==780, y-8.0, y) // add some dip outliers
| extend y=iff(t==300 or t==400 or t==600, y+8.0, y) // add some spike outliers
| summarize Timestamp=make_list(Timestamp, 10000),y=make_list(y, 10000);
ts 
| extend series_decompose_anomalies(y, 2.5, -1, 'linefit')
| extend series_decompose_anomalies_y_ad_flag = 
series_multiply(10, series_decompose_anomalies_y_ad_flag) // multiply by 10 for visualization purposes
| render timechart  

Wöchentliche Datenreihenanomalien mit höherer Anomalieschwelle.