series_decompose_anomalies()

Detekce anomálií je založená na rozkladu řady. Další informace najdete v tématu series_decompose().

Funkce přebírá jako vstup výraz obsahující řadu (dynamické číselné pole) a extrahuje neobvyklé body se skóre.

Syntax

series_decompose_anomalies (Série, [ Prahová hodnota,Sezónnost,, Trend Test_points,AD_method,Seasonality_threshold ])

Přečtěte si další informace o konvencích syntaxe.

Parametry

Název Typ Vyžadováno Popis
Řada dynamic ✔️ Matice číselných hodnot, obvykle výsledný výstup vytyčiných řad nebo make_list operátorů.
Prahová hodnota real Prahová hodnota anomálie. Výchozí hodnota je 1,5, k pro detekci mírných nebo silnějších anomálií.
Sezónnost int Řídí sezónní analýzu. Možné hodnoty jsou:

- -1: Automatické rozpoznávání sezónnosti pomocí series_periods_detect. Toto je výchozí hodnota.
- Celočíselné časové období: Kladné celé číslo určující očekávané období v počtu intervalů. Pokud je například řada v 1h intervalech, týdenní období je 168 přihrádek.
- 0: Bez sezónnosti, takže extrahování této komponenty přeskočte.
Trendovou string Řídí analýzu trendu. Možné hodnoty jsou:

- avg: Definujte komponentu trendu jako average(x). Tato možnost je výchozí.
- linefit: Extrahujte komponentu trendu pomocí lineární regrese.
- none: Žádný trend, takže extrahování této komponenty přeskočte.
Test_points int Kladné celé číslo určující počet bodů na konci řady, které se mají vyloučit z procesu učení nebo regrese. Tento parametr by se měl nastavit pro účely prognózování. Výchozí hodnota je 0.
AD_method string Řídí metodu detekce anomálií pro reziduální časovou řadu obsahující jednu z následujících hodnot:

- ctukey: Tukeyho plotový test s vlastním rozsahem 10.-90. percentilu. Tato možnost je výchozí.
- tukey: Tukeyův plotový test se standardním rozsahem 25.-75. percentilu.

Další informace o zbytkových časových řadách najdete v tématu series_outliers.
Seasonality_threshold real Prahová hodnota skóre sezónnosti, když je sezónnost nastavená na automatické rozpoznávání. Výchozí prahová hodnota skóre je 0,6.

Další informace najdete v tématu series_periods_detect.

Návraty

Funkce vrátí následující příslušnou řadu:

  • ad_flag: Ternární řada obsahující (+1, -1, 0) označující anomálii nahoru/dolů/žádná anomálie v uvedeném pořadí
  • ad_score: Skóre anomálií
  • baseline: Předpovězená hodnota řady podle rozkladu

Algoritmus

Tato funkce se řídí těmito kroky:

  1. Zavolá series_decompose() s příslušnými parametry a vytvoří řadu standardních hodnot a reziduí.
  2. Vypočítá ad_score řady použitím series_outliers() se zvolenou metodou detekce anomálií u řady reziduí.
  3. Vypočítá ad_flag řady použitím prahové hodnoty pro ad_score, která označí anomálii nahoru, dolů nebo žádnou.

Příklady

Detekce anomálií v týdenní sezónnosti

V následujícím příkladu vygenerujte řadu s týdenní sezónností a pak do ní přidejte odlehlé hodnoty. series_decompose_anomalies autodetects the seasonality and generates a baselines that capture the opakující se vzor. Odlehlé hodnoty, které jste přidali, jsou jasně vidět v ad_score komponentě.

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  

Týdenní sezónnost zobrazující směrný plán a odlehlé hodnoty

Detekce anomálií v týdenní sezónnosti s trendem

V tomto příkladu přidejte do řady trend z předchozího příkladu. Nejprve spusťte series_decompose_anomalies s výchozími parametry, ve kterých výchozí hodnota trendu avg přebírá pouze průměr a nevypočítá trend. Vygenerovaný směrný plán neobsahuje trend a je méně přesný v porovnání s předchozím příkladem. V důsledku toho se některé odlehlé hodnoty, které jste vložili do dat, nezjistí kvůli vyšší odchylkě.

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

Týdenní sezónní odlehlé hodnoty s trendem.

Dále spusťte stejný příklad, ale protože očekáváte trend v řadě, zadejte linefit v parametru trend. Vidíte, že směrný plán je mnohem blíže vstupní řadě. Zjistí se všechny vložené odlehlé hodnoty a také některé falešně pozitivní výsledky. Podívejte se na další příklad úprav prahové hodnoty.

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  

Týdenní sezónní anomálie s trendem linefit.

Úprava prahové hodnoty detekce anomálií

V předchozím příkladu bylo jako anomálie zjištěno několik hlučných bodů. Teď zvyšte prahovou hodnotu detekce anomálií z výchozí hodnoty 1,5 na 2,5. Tento rozsah mezicentilu použijte, aby se detekovaly pouze silnější anomálie. Nyní budou zjištěny pouze odlehlé hodnoty, které jste vložili do dat.

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  

Týdenní série anomálií s vyšší prahovou hodnotou anomálií.