series_decompose_anomalies()
Dotyczy: ✅Microsoft Fabric✅Azure Data Explorer✅Azure Monitor✅Microsoft 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 anomaliiad_score
: Wynik anomaliibaseline
: Przewidywana wartość serii zgodnie z dekompozycją
Algorytm
Ta funkcja wykonuje następujące kroki:
- Wywołuje series_decompose() z odpowiednimi parametrami, aby utworzyć serię punktów odniesienia i reszt.
- Oblicza ad_score serii, stosując series_outliers() przy użyciu wybranej metody wykrywania anomalii w serii reszt.
- 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
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
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
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