series_decompose_anomalies()

Wykrywanie anomalii opiera się na dekompozycji serii. Aby uzyskać więcej informacji, zobacz series_decompose().

Funkcja przyjmuje wyrażenie zawierające serię (dynamiczną tablicę liczbową) jako dane wejściowe i wyodrębnia nietypowe punkty z wynikami.

Składnia

series_decompose_anomalies (Serii, [ Próg,Sezonowości,Trend,, Test_points, AD_methodSeasonality_threshold ])

Dowiedz się więcej o konwencjach składniowych.

Parametry

Nazwa Typ Wymagane Opis
Seria dynamic ✔️ Tablica wartości liczbowych, zazwyczaj wynikowych danych wyjściowych operatorów make-series lub make_list .
Próg real Próg anomalii. Wartość domyślna to 1,5, k, do wykrywania łagodnych lub silniejszych anomalii.
Sezonowości int Kontroluje analizę sezonową. Możliwe wartości są następujące:

- -1: Automatyczna sezonowość przy użyciu series_periods_detect. Jest to wartość domyślna.
- Okres czasu liczby całkowitej: dodatnia liczba całkowita określająca oczekiwany okres w liczbie pojemników. Jeśli na przykład seria znajduje się w 1h pojemnikach, cotygodniowy okres wynosi 168 pojemników.
- 0: brak sezonowości, więc pomiń wyodrębnianie tego składnika.
Trend string Steruje analizą trendów. Możliwe wartości są następujące:

- avg: Zdefiniuj składnik trendu jako average(x). Jest to opcja domyślna.
- linefit: wyodrębnianie składnika trendu przy użyciu regresji liniowej.
- none: Brak trendu, więc pomiń wyodrębnianie tego składnika.
Test_points int Dodatnia liczba całkowita określająca liczbę punktów na końcu serii do wykluczenia z procesu uczenia się lub regresji. Ten parametr powinien być ustawiony na potrzeby prognozowania. Wartość domyślna to 0.
AD_method string Steruje metodą wykrywania anomalii w serii czasowej reszty zawierającej jedną z następujących wartości:

- ctukey: Test ogrodzenia Tukeya z niestandardowym zakresem 10-90 percentylowym. Jest to opcja domyślna.
- tukey: Test ogrodzenia Tukeya ze standardowym zakresem 25-75. percentylowym.

Aby uzyskać więcej informacji na temat serii czasowych reszt, zobacz series_outliers.
Seasonality_threshold real Próg oceny sezonowości, gdy sezonowość jest ustawiona na autowykrywanie. Domyślny próg oceny to 0,6.

Aby uzyskać więcej informacji, zobacz series_periods_detect.

Zwraca

Funkcja zwraca następującą serię:

  • ad_flag: seriaternary zawierająca odpowiednio znakowanie (+1, -1, 0) w górę/w dół/brak anomalii
  • ad_score: Wynik anomalii
  • baseline: Przewidywana wartość serii zgodnie z dekompozycją

Algorytm

Ta funkcja wykonuje następujące kroki:

  1. Wywołuje series_decompose() z odpowiednimi parametrami, aby utworzyć serię punktów odniesienia i reszt.
  2. Oblicza ad_score serii, stosując series_outliers() z wybraną metodą wykrywania anomalii w serii reszt.
  3. Oblicza serię ad_flag, stosując próg na ad_score, aby oznaczyć odpowiednio anomalię w górę/w dół/bez.

Przykłady

Wykrywanie anomalii w cotygodniowej sezonowości

W poniższym przykładzie wygeneruj serię z cotygodniową sezonowością, a następnie dodaj do niej pewne wartości odstające. series_decompose_anomalies automatycznie wykrywa sezonowość i generuje punkt odniesienia, który przechwytuje powtarzalny wzorzec. Dodane wartości odstające można wyraźnie zauważyć w składniku 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  

Tygodniowa sezonowość przedstawiająca punkt odniesienia i wartości odstające.

Wykrywanie anomalii w cotygodniowej sezonowości z trendem

W tym przykładzie dodaj trend do serii z poprzedniego przykładu. Najpierw uruchom polecenie series_decompose_anomalies z parametrami domyślnymi, w których wartość domyślna trendu avg przyjmuje tylko średnią i nie oblicza trendu. Wygenerowany punkt odniesienia nie zawiera trendu i jest mniej dokładny w porównaniu z poprzednim przykładem. W związku z tym niektóre wartości odstające wstawione w danych nie są wykrywane z powodu wyższej wariancji.

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

Cotygodniowe wartości odstających sezonowość z trendem.

Następnie uruchom ten sam przykład, ale ponieważ spodziewasz się trendu w serii, określ linefit parametr trendu. Widać, że punkt odniesienia jest znacznie bliżej serii danych wejściowych. Wykryto wszystkie wstawione wartości odstające, a także niektóre wyniki fałszywie dodatnie. Zapoznaj się z następnym przykładem dostosowywania progu.

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  

Cotygodniowe anomalie sezonowości z trendem linefit.

Dostosowywanie progu wykrywania anomalii

Kilka hałaśliwych punktów zostało wykrytych jako anomalie w poprzednim przykładzie. Teraz zwiększ próg wykrywania anomalii z wartości domyślnej od 1,5 do 2,5. Użyj tego zakresu interpercentylowego, aby wykryć tylko silniejsze anomalie. Teraz zostaną wykryte tylko wartości odstające wstawione w danych.

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  

Anomalie serii tygodniowych z wyższym progiem anomalii.