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 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() z wybraną metodą 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.
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 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
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
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
Opinia
https://aka.ms/ContentUserFeedback.
Dostępne już wkrótce: W 2024 r. będziemy stopniowo wycofywać zgłoszenia z serwisu GitHub jako mechanizm przesyłania opinii na temat zawartości i zastępować go nowym systemem opinii. Aby uzyskać więcej informacji, sprawdź:Prześlij i wyświetl opinię dla