series_decompose_anomalies()

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

Die Funktion nimmt einen Ausdruck mit einer Reihe (dynamisches numerisches Array) als Eingabe an und extrahiert anomale Punkte mit Bewertungen.

Syntax

series_decompose_anomalies (Serie, [ Schwellenwert,Saisonalität,Trend,, Test_points, AD_methodSeasonality_threshold ])

Erfahren Sie mehr über Syntaxkonventionen.

Parameter

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

- -1: Automatische Erkennung der 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 Reihe z. B. in 1h Bins befindet, beträgt ein wöchentlicher Zeitraum 168 Behälter.
- 0: Keine Saisonalität, daher überspringen Sie das Extrahieren dieser Komponente.
Trend string Steuert die Trendanalyse. Mögliche Werte:

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

- ctukey: Tukey-Zauntest mit benutzerdefiniertem 10.-90. Perzentilbereich. Dies ist die Standardoption.
- tukey: Tukeys Zauntest mit standard 25.-75. Perzentilbereich.

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 ist 0,6.

Weitere Informationen finden Sie unter series_periods_detect.

Gibt zurück

Die Funktion gibt die folgende entsprechende Reihe zurück:

  • ad_flag: Eine ternäre Reihe, die (+1, -1, 0) auf/ab/keine Anomalie markiert
  • ad_score: Anomaliebewertung
  • baseline: Der vorhergesagte Wert der Reihe gemäß der Zerlegung

Der Algorithmus

Diese Funktion führt die folgenden Schritte aus:

  1. Ruft series_decompose() mit den entsprechenden Parametern auf, um die Baseline- und Restreihen zu erstellen.
  2. Berechnet ad_score Reihen, indem series_outliers() mit der gewählten Anomalieerkennungsmethode auf die Restreihen angewendet wird.
  3. Berechnet die ad_flag-Reihe, indem der Schwellenwert auf die ad_score angewendet wird, um die Anomalie aufzu-/herunter-/keine Anomalie zu markieren.

Beispiele

Erkennen von Anomalien in der wöchentlichen Saisonalität

Generieren Sie im folgenden Beispiel eine Serie mit wöchentlicher Saisonalität, und fügen Sie ihr dann einige Ausreißer hinzu. series_decompose_anomalies Erkennt die Saisonalität automatisch und generiert eine Baseline, die das sich wiederholende Muster erfasst. Die von Ihnen 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 Baseline und Ausreißern.

Erkennen von Anomalien in der wöchentlichen Saisonalität mit Trend

Fügen Sie in diesem Beispiel der Reihe aus dem vorherigen Beispiel einen Trend hinzu. Führen Sie series_decompose_anomalies zunächst die Standardparameter aus, bei denen der Trendstandardwert avg nur den Durchschnitt übernimmt und nicht den Trend berechnet. Die generierte Baseline enthält den Trend nicht und ist im Vergleich zum vorherigen Beispiel weniger genau. Folglich werden einige der Ausreißer, die Sie in die Daten eingefügt haben, 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ätsausreißer mit Trend.

Führen Sie als Nächstes das gleiche Beispiel aus, aber da Sie einen Trend in der Reihe erwarten, geben Sie im Trendparameter an linefit . Sie können sehen, dass die Baseline viel 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 Linefit-Trend.

Optimieren des Schwellenwerts für die Anomalieerkennung

Im vorherigen Beispiel wurden einige verrauschte Punkte als Anomalien erkannt. Erhöhen Sie nun den Schwellenwert für die Anomalieerkennung von 1,5 auf 2,5. Verwenden Sie diesen interperzentilen Bereich, damit nur stärkere Anomalien erkannt werden. Nun 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 Serienanomalien mit höherem Anomalieschwellenwert.