series_decompose_anomalies()
Avvikelseidentifiering baseras på seriedekomposition. Mer information finns i series_decompose().
Funktionen tar ett uttryck som innehåller en serie (dynamisk numerisk matris) som indata och extraherar avvikande punkter med poäng.
Syntax
series_decompose_anomalies (
Serien,
[ Tröskelvärde,
Säsongsvariationer,
Trend,
,
Test_points,
AD_methodSeasonality_threshold ])
Läs mer om syntaxkonventioner.
Parametrar
Namn | Typ | Obligatorisk | Beskrivning |
---|---|---|---|
Serie | dynamic |
✔️ | En matris med numeriska värden, vanligtvis resulterande utdata från operatorerna make-series eller make_list . |
Tröskelvärde | real |
Avvikelsetröskelvärdet. Standardvärdet är 1,5 k för att identifiera milda eller starkare avvikelser. | |
Säsongsberoende | int |
Styr säsongsanalysen. Möjliga värden är: - -1 : Identifiera säsongsvariationer automatiskt med series_periods_detect. Detta är standardvärdet.– Heltalstid: Ett positivt heltal som anger den förväntade perioden i antalet intervall. Om serien till exempel finns i 1h lagerplatser är en veckoperiod 168 intervall.- 0 : Ingen säsongsvariation, så hoppa över att extrahera den här komponenten. |
|
Trend | string |
Styr trendanalysen. Möjliga värden är: - avg : Definiera trendkomponenten som average(x) . Det här är standardinställningen.- linefit : Extrahera trendkomponenten med linjär regression.- none : Ingen trend, så hoppa över att extrahera den här komponenten. |
|
Test_points | int |
Ett positivt heltal som anger antalet punkter i slutet av serien som ska undantas från inlärnings- eller regressionsprocessen. Den här parametern ska anges för prognostisering. Standardvärdet är 0. | |
AD_method | string |
Styr avvikelseidentifieringsmetoden i residualtidsserien, som innehåller något av följande värden: - ctukey : Tukeys stängseltest med anpassat 10:e-90:e percentilintervall. Det här är standardinställningen.- tukey : Tukeys stakettest med standardvärdet 25:e-75:e percentilen.Mer information om residualtidsserier finns i series_outliers. |
|
Seasonality_threshold | real |
Tröskelvärdet för säsongspoäng när Säsongsvariation är inställt på identifiera automatiskt. Standardvärdet för poängtröskelvärdet är 0,6. Mer information finns i series_periods_detect. |
Returer
Funktionen returnerar följande respektive serie:
ad_flag
: En ternary-serie som innehåller (+1, -1, 0) som markerar upp/ned/ingen avvikelse respektivead_score
: Avvikelsepoängbaseline
: Det förutsagda värdet för serien enligt nedbrytningen
Algoritmen
Den här funktionen följer dessa steg:
- Anropar series_decompose() med respektive parametrar för att skapa baslinje- och residualserierna.
- Beräknar ad_score-serien genom att använda series_outliers() med den valda metoden för avvikelseidentifiering i residualserien.
- Beräknar ad_flag-serien genom att tillämpa tröskelvärdet på ad_score för att markera upp/ned/ingen avvikelse.
Exempel
Identifiera avvikelser i veckovisa säsongsvariationer
I följande exempel genererar du en serie med säsongsvariation varje vecka och lägger sedan till några extremvärden i den. series_decompose_anomalies
identifierar säsongsvariationen automatiskt och genererar en baslinje som fångar upp det repetitiva mönstret. Avvikande värden som du har lagt till kan tydligt identifieras i komponenten ad_score.
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
Identifiera avvikelser i veckovisa säsongsvariationer med trend
I det här exemplet lägger du till en trend i serien från föregående exempel. Börja med att köra series_decompose_anomalies
med standardparametrarna där trendstandardvärdet avg
bara tar medelvärdet och inte beräknar trenden. Den genererade baslinjen innehåller inte trenden och är mindre exakt, jämfört med föregående exempel. Därför identifieras inte vissa av de avvikande värden som du infogade i data på grund av den högre variansen.
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
Kör sedan samma exempel, men eftersom du förväntar dig en trend i serien anger du linefit
i trendparametern. Du kan se att baslinjen ligger mycket närmare indataserien. Alla infogade extremvärden identifieras och även vissa falska positiva identifieringar. Se nästa exempel på hur du justerar tröskelvärdet.
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
Justera tröskelvärdet för avvikelseidentifiering
Några bullriga punkter identifierades som avvikelser i föregående exempel. Öka nu tröskelvärdet för avvikelseidentifiering från standardvärdet 1,5 till 2,5. Använd det här interpercentilintervallet så att endast starkare avvikelser identifieras. Nu identifieras bara avvikande värden som du har infogat i data.
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.
Kommer snart: Under hela 2024 kommer vi att fasa ut GitHub-problem som feedbackmekanism för innehåll och ersätta det med ett nytt feedbacksystem. Mer information finns i:Skicka och visa feedback för