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 markiertad_score
: Anomaliebewertungbaseline
: Der vorhergesagte Wert der Reihe gemäß der Zerlegung
Der Algorithmus
Diese Funktion führt die folgenden Schritte aus:
- Ruft series_decompose() mit den entsprechenden Parametern auf, um die Baseline- und Restreihen zu erstellen.
- Berechnet ad_score Reihen, indem series_outliers() mit der gewählten Anomalieerkennungsmethode auf die Restreihen angewendet wird.
- 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
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
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
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
Feedback
https://aka.ms/ContentUserFeedback.
Bald verfügbar: Im Laufe des Jahres 2024 werden wir GitHub-Issues stufenweise als Feedbackmechanismus für Inhalte abbauen und durch ein neues Feedbacksystem ersetzen. Weitere Informationen finden Sie unterFeedback senden und anzeigen für