Sdílet prostřednictvím


series_decompose_anomalies()

Platí pro: ✅Microsoft FabricAzure Data Explorer✅Azure MonitorMicrosoft Sentinel

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

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

Syntaxe

series_decompose_anomalies (Řada [ Prahová , sezónnost , Trend, Test_points, AD_method Seasonality_threshold ], ,)

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

Parametry

Název Type Požadováno Popis
Řada dynamic ✔️ Matice číselných hodnot, obvykle výsledný výstup operátorů make-series nebo make_list .
Prahová hodnota real Prahová hodnota anomálií. 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:

- -1: Automatické rozpoznávání sezónnosti pomocí series_periods_detect. Tato hodnota je výchozí.
- 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 intervalů.
- 0: Žádné sezónnosti, takže přeskočte extrahování této komponenty.
Trend string Řídí analýzu trendu. Možné hodnoty:

- 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 přeskočte extrahování této komponenty.
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 měl být nastavený pro účely prognózy. Výchozí hodnota je 0.
AD_method string Řídí metodu detekce anomálií na reziduální časové řadě obsahující jednu z následujících hodnot:

- ctukey: Test plotu tukeyho s vlastním rozsahem 10.-90. percentilu. Tato možnost je výchozí.
- tukey: Test plotu Tukey se standardním rozsahem 25th-75th percentil.

Další informace o časových řadách reziduí najdete v tématu series_outliers.
Seasonality_threshold real Prahová hodnota pro sezónní skóre, 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í odpovídající řadu:

  • ad_flag: Ternární řada obsahující (+1, -1, 0) označení nahoru/dolů/bez anomálií
  • ad_score: Skóre anomálií
  • baseline: Predikovaná hodnota řady podle rozkladu

Algoritmus

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

  1. Volání series_decompose() s příslušnými parametry pro vytvoření řady směrného plánu a reziduí.
  2. Vypočítá ad_score řady použitím series_outliers() s vybranou metodou detekce anomálií na řadu reziduí.
  3. Vypočítá ad_flag řadu použitím prahové hodnoty na ad_score pro označení anomálií nahoru/dolů nebo bez anomálií.

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 přidejte do ní některé odlehlé hodnoty. series_decompose_anomalies automaticky definuje sezónnost a vygeneruje směrný plán, který zachycuje opakující se vzor. Přidané odlehlé hodnoty lze jasně odhalit 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 trend do řady 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á 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. Některé odlehlé hodnoty, které jste vložili do dat, se proto nezjistí z důvodu vyšší odchylky.

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.

Potom spusťte stejný příklad, ale vzhledem k tomu, že očekáváte trend v řadě, zadejte linefit v parametru trendu. Vidíte, že směrný plán je mnohem blíž ke 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 linefitu.

Úprava prahové hodnoty detekce anomálií

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

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í řady anomálií s vyšší prahovou hodnotou anomálií