Sdílet prostřednictvím


series_decompose()

Použije transformaci rozkladu na řadu.

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

Syntax

series_decompose(Série, [ Sezónnost,, Trend Test_points,Seasonality_threshold ])

Přečtěte si další informace o konvencích syntaxe.

Parametry

Název Typ Vyžadováno Popis
Řada dynamic ✔️ Pole číselných hodnot, obvykle výsledný výstup řady make-series nebo make_list operátorů.
Sezónnost int Řídí sezónní analýzu. Možné hodnoty jsou:

- -1: Automaticky rozdetekujte sezónnost pomocí series_periods_detect. Toto je výchozí hodnota.
- 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 přihrádek.
- 0: Žádná sezónnost, takže extrahování této komponenty přeskočte.
Trendovou string Řídí analýzu trendu. Možné hodnoty jsou:

- 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ózování. Výchozí hodnota je 0.
Seasonality_threshold real Prahová hodnota skóre sezónnosti, pokud je sezónnost nastavená na automatické určení. 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í příslušnou řadu:

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

Poznámka

  • Pořadí spuštění komponenty:
  1. Extrahování sezónních řad
  2. Odečtěte ho od x a vygenerujte řadu deseasonal
  3. Extrahujte komponentu trendu z řady deseasonal
  4. Vytvoření směrného plánu = sezónní + trend
  5. Vytvoření rezidua = 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 vrátí pouze směrný plán = 0 a rezidua = x.

Další informace o rozkladu řad

Tato metoda se obvykle používá u časových řad metrik, u které se očekává, že se projeví pravidelné nebo trendové chování. Tuto metodu můžete použít k předpovídání budoucích hodnot metrik nebo k detekci neobvyklých hodnot. Implicitním předpokladem tohoto regresního procesu je, že kromě sezónního a trendového chování je časová řada stochastická a náhodně rozdělená. Předpovídejte budoucí hodnoty metrik ze sezónních a trendových složek a ignorujte reziduální část. Detekce neobvyklých hodnot na základě detekce odlehlých hodnot pouze na reziduální části. Další podrobnosti najdete v kapitole Rozklad č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 k 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. Přidané odlehlé hodnoty jsou 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 do řady trend 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 pozorování trendu v reziduích je zřejmé, ž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.

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

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.