Sdílet prostřednictvím


series_decompose()

Platí pro: ✅Microsoft FabricAzure Data Explorer✅Azure MonitorMicrosoft Sentinel

Použije na řadu transformaci rozkladu.

Vezme výraz obsahující řadu (dynamickou číselnou matici) jako vstup a rozloží ho na sezónní, trendové a zbytkové komponenty.

Syntaxe

series_decompose(Řada , [ Sezónnost, Trend, Test_points, 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 .
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í.
- Období: Kladné celé číslo určující očekávané období v počtu intervalů. Pokud je například řada v 1 - h 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.
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:

  • baseline: predikovaná hodnota řady (součet sezónních a trendových součástí, viz níže).
  • seasonal: řada sezónní součásti:
    • pokud se období nezjistí nebo je explicitně nastaveno na 0: konstanta 0.
    • pokud bylo zjištěno nebo nastaveno na kladné celé číslo: medián bodů řady ve stejné fázi
  • trend: řada komponenty trendu.
  • residual: řada zbytkové složky (to znamená x - směrný plán).

Poznámka:

  • Pořadí provádění komponent:
  1. Extrahování sezónní řady
  2. Odečtěte ji od x a vygenerujte deseasonální řadu.
  3. Extrahování komponenty trendu z deseasonální řady
  4. Vytvoření směrného plánu = sezónní + trend
  5. Vytvoření reziduí = x – směrný plán
  • Měla by být povolena sezónnost nebo trend. V opačném případě je funkce redundantní a pouze vrátí směrný plán = 0 a rezidua = x.

Další informace o rozkladu řad

Tato metoda se obvykle používá u časových řad metrik očekávaných k manifestu pravidelného chování nebo chování trendu. Metodu můžete použít k prognózování budoucích hodnot metrik a/nebo k detekci neobvyklých hodnot. Implicitní předpoklad tohoto regresního procesu je, že kromě sezónního a trendového chování je časová řada stochastická a náhodně rozdělená. Prognózovat budoucí hodnoty metrik ze sezónních a trendových komponent a současně ignorovat zbytkovou část. Detekce neobvyklých hodnot na základě detekce odlehlých hodnot pouze na zbytkové části. Další podrobnosti najdete v kapitole o rozkladu časové řady.

Příklady

Týdenní sezónnost

V následujícím příkladu vygenerujeme řadu s týdenní sezónností a bez trendu a pak do ní přidáme některé odlehlé hodnoty. series_decompose vyhledá a automaticky zjistí sezónnost a vygeneruje směrný plán, který je téměř stejný jako sezónní komponenta. Odlehlé hodnoty, které jsme přidali, lze jasně vidět v komponentě reziduí.

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(y)
| render timechart  

Řada se rozloží 1.

Týdenní sezónnost s trendem

V tomto příkladu přidáme trend do řady z předchozího příkladu. Nejprve spustíme series_decompose s výchozími parametry. Výchozí hodnota trendu avg přebírá pouze průměr a nevypočítá trend. Vygenerovaný směrný plán neobsahuje trend. Při sledování trendu v reziduích se zjeví, že tento příklad je méně přesný než předchozí příklad.

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(y)
| render timechart  

Řada se rozloží 2.

V dalším kroku znovu spustíme stejný příklad. Vzhledem k tomu, že očekáváme trend v řadě, určíme linefit v parametru trendu. Vidíme, že je zjištěn pozitivní trend a směrný plán je mnohem blíž ke vstupní řadě. Rezidua jsou blízko nule a vyniknou pouze odlehlé hodnoty. Vidíme všechny komponenty v řadě v grafu.

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(y, -1, 'linefit')
| render timechart  

Řada se rozloží 3.