series_decompose_anomalies()

Az anomáliadetektálás az adatsorok felbontásán alapul. További információ: series_decompose().

A függvény bemenetként egy adatsort (dinamikus numerikus tömböt) tartalmazó kifejezést használ, és a rendellenes pontokat pontszámokkal nyeri ki.

Syntax

series_decompose_anomalies (Sorozat, [ Küszöbérték,Szezonalitás,Trend,, Test_points, AD_methodSeasonality_threshold ])

További információ a szintaxis konvenciókról.

Paraméterek

Név Típus Kötelező Leírás
Adatsorozat dynamic ✔️ Numerikus értékek tömbje, általában a make-series vagy make_list operátorok eredményül kapott kimenete.
Küszöbérték real Az anomáliák küszöbértéke. Az alapértelmezett érték 1,5 k, enyhe vagy erősebb anomáliák észleléséhez.
Szezonalitás int Szabályozza a szezonális elemzést. Lehetséges értékek:

- -1: A szezonalitás automatikus észlelése series_periods_detect használatával. Ez az alapértelmezett érték.
- Egész szám időszaka: Pozitív egész szám, amely a intervallumok számában adja meg a várt időszakot. Ha például a sorozat intervallumokban 1h van, a heti időszak 168 doboz.
- 0: Nincs szezonalitás, ezért hagyja ki ezt az összetevőt.
Trend string Szabályozza a trendelemzést. Lehetséges értékek:

- avg: Trendösszetevő meghatározása a következőként average(x): . Ez az alapértelmezett beállítás.
- linefit: Trendösszetevő kinyerése lineáris regresszióval.
- none: Nincs trend, ezért hagyja ki ezt az összetevőt.
Test_points int Pozitív egész szám, amely a sorozat végén a tanulási vagy regressziós folyamatból kizárandó pontok számát adja meg. Ezt a paramétert előrejelzési célokra kell beállítani. Az alapértelmezett érték a 0.
AD_method string Az anomáliadetektálási módszert szabályozza a reziduális idősoron, amely az alábbi értékek egyikét tartalmazza:

- ctukey: Tukey kerítéstesztje egyéni 10-90. percentilistartománysal. Ez az alapértelmezett beállítás.
- tukey: Tukey kerítéstesztje standard 25-75. percentilis tartománnyal.

További információ a reziduális idősorokról: series_outliers.
Seasonality_threshold real A szezonalitási pontszám küszöbértéke, ha a szezonalitás automatikus észlelésre van beállítva. Az alapértelmezett pontszám küszöbértéke 0,6.

További információ: series_periods_detect.

Válaszok

A függvény a következő sorozatot adja vissza:

  • ad_flag: Egy ternáris sorozat, amely (+1, -1, 0) jelölést tartalmaz fel/le/nem anomáliát
  • ad_score: Anomáliák pontszáma
  • baseline: Az adatsor előrejelzett értéke a felbontásnak megfelelően

Az algoritmus

Ez a függvény az alábbi lépéseket követi:

  1. Meghívja series_decompose() a megfelelő paramétereket az alapkonfiguráció és a reziduálisok sorozatának létrehozásához.
  2. Kiszámítja ad_score adatsort úgy, hogy a reziduális-sorozaton series_outliers () a kiválasztott anomáliadetektálási módszerrel alkalmazza.
  3. Kiszámítja a ad_flag adatsort úgy, hogy a küszöbértéket a ad_score alkalmazza fel/le/nem anomália jelölésére.

Példák

Anomáliák észlelése a heti szezonalitásban

Az alábbi példában hozzon létre egy heti szezonalitású sorozatot, majd adjon hozzá néhány kiugró értékeket. series_decompose_anomalies automatikusan észleli a szezonalitást, és létrehoz egy alapkonfigurációt, amely rögzíti az ismétlődő mintát. A hozzáadott kiugró értékek egyértelműen kivehetők a ad_score összetevőben.

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  

Heti szezonalitás alapkonfigurációval és kiugró értékgel.

Anomáliák észlelése a heti szezonalitásban trenddel

Ebben a példában adjon hozzá egy trendet az előző példából származó sorozathoz. Először futtassa a parancsot series_decompose_anomalies az alapértelmezett paraméterekkel, amelyekben a trend avg alapértelmezett értéke csak az átlagot veszi figyelembe, és nem számítja ki a trendet. A létrehozott alapterv nem tartalmazza a trendet, és az előző példához képest kevésbé pontos. Következésképpen az adatokba beszúrt kiugró értékek némelyikét a rendszer nem észleli a nagyobb eltérés miatt.

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

A heti szezonalitás kiugró tendencia.

Ezután futtassa ugyanezt a példát, de mivel trendet vár a sorozatban, adja meg linefit a trendparamétert. Láthatja, hogy az alapkonfiguráció sokkal közelebb van a bemeneti adatsorhoz. A rendszer az összes beszúrt kiugró értéket észleli, valamint néhány téves pozitív eredményt is. Tekintse meg a következő példát a küszöbérték finomhangolására.

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  

Heti szezonalitási anomáliák linefit trenddel.

Az anomáliadetektálási küszöbérték finomhangolása

Az előző példában néhány zajos pontot észleltek anomáliákként. Most növelje az anomáliadetektálási küszöbértéket az alapértelmezett 1,5-ről 2,5-re. Használja ezt az interpercentilis tartományt, hogy csak erősebb anomáliákat észlelje a rendszer. Most csak az adatokba beszúrt kiugró értékek lesznek észlelve.

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  

Heti sorozatanomáliák magasabb anomáliadektorral.