Udostępnij za pośrednictwem


series_decompose_anomalies()

Dotyczy: ✅Microsoft Fabric✅Azure Data ExplorerAzure MonitorMicrosoft Sentinel

Wykrywanie anomalii jest oparte 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 (Seria, [ Próg, trendu, sezonowości, Test_points AD_method,, Seasonality_threshold ])

Dowiedz się więcej na temat konwencji składni.

Parametry

Nazwisko Type Wymagania opis
Seria dynamic ✔️ Tablica wartości liczbowych, zazwyczaj wynikowe dane wyjściowe operatorów make-series lub make_list .
Threshold real Próg anomalii. Wartość domyślna to 1,5, k, dla wykrywania łagodnych lub silniejszych anomalii.
Sezonowości int Steruje analizą sezonową. Możliwe wartości to:

- -1: Autowykrywanie sezonowości 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 to 168 pojemników.
- 0: brak sezonowości, więc pomiń wyodrębnianie tego składnika.
Tendencja string Steruje analizą trendu. Możliwe wartości to:

- 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 należy ustawić na potrzeby prognozowania. Wartość domyślna to 0.
AD_method string Steruje metodą wykrywania anomalii w szeregach czasowych reszt zawierających jedną z następujących wartości:

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

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

Aby uzyskać więcej informacji, zobacz series_periods_detect.

Zwraca

Funkcja zwraca następującą serię:

  • ad_flag: seriaternary zawierająca odpowiednio oznaczenie (+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() przy użyciu wybranej metody 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 anomalii.

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  

Cotygodniowa 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 większej 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ące sezonowości z trendem.

Następnie uruchom ten sam przykład, ale ponieważ oczekujesz trendu w serii, określ linefit parametr trendu w parametrze 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 fałszywie dodatnie. Zobacz następny przykład 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

Wykryto kilka hałaśliwych punktów jako anomalie w poprzednim przykładzie. Teraz zwiększ próg wykrywania anomalii z domyślnego zakresu 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.