series_decompose_anomalies()
Gilt für: ✅Microsoft Fabric✅Azure Data Explorer✅Azure Monitor✅Microsoft Sentinel
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
: Anomaliebewertungbaseline
: Der vorhergesagte Wert der Datenreihe gemäß der Analyse
Der Algorithmus
Diese Funktion führt die folgenden Schritte aus:
- Ruft series_decompose() mit den entsprechenden Parametern auf, um die Basisplan- und Restreihen zu erstellen.
- Berechnet ad_score Datenreihen, indem series_outliers() mit der ausgewählten Anomalieerkennungsmethode auf die Restreihen angewendet wird.
- 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
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
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
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