series_decompose_anomalies()
Platí pro: ✅Microsoft Fabric✅Azure Data Explorer✅Azure Monitor✅Microsoft 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:
- Volání series_decompose() s příslušnými parametry pro vytvoření řady směrného plánu a reziduí.
- Vypočítá ad_score řady použitím series_outliers() s vybranou metodou detekce anomálií na řadu reziduí.
- 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
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
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
Ú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