Udostępnij za pośrednictwem


series_decompose()

Stosuje przekształcenie dekompozycji w serii.

Przyjmuje wyrażenie zawierające serię (dynamiczną tablicę liczbową) jako dane wejściowe i rozkłada je do składników sezonowych, trendów i reszt.

Składnia

series_decompose(Seria , [ Trend, sezonowości , Test_points 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 .
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: dodatnia liczba całkowita określająca oczekiwany okres w liczbie pojemników. Jeśli na przykład seria znajduje się w 1 - h 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.
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ę:

  • baseline: przewidywana wartość serii (suma składników sezonowych i trendów, patrz poniżej).
  • seasonal: seria składników sezonowych:
    • jeśli okres nie został wykryty lub jest jawnie ustawiony na 0: stała 0.
    • jeśli wykryto lub ustawiono dodatnią liczbę całkowitą: mediana punktów serii w tej samej fazie
  • trend: seria składnika trendu.
  • residual: seria składnika reszt (czyli x - punkt odniesienia).

Uwaga

  • Kolejność wykonywania składnika:
  1. Wyodrębnianie serii sezonowej
  2. Odejmij ją od x, generując serię deseasonalną
  3. Wyodrębnianie składnika trendu z serii deseasonowej
  4. Tworzenie planu bazowego = sezon + trend
  5. Tworzenie reszty = x — punkt odniesienia
  • Należy włączyć sezonowość lub trend. W przeciwnym razie funkcja jest nadmiarowa i po prostu zwraca punkt odniesienia = 0 i reszty = x.

Więcej informacji o dekompozycji serii

Ta metoda jest zwykle stosowana do szeregów czasowych metryk, które mają manifestować okresowe i/lub trendowe zachowanie. Za pomocą metody można prognozować przyszłe wartości metryk i/lub wykrywać nietypowe wartości. Niejawne założenie tego procesu regresji polega na tym, że oprócz zachowania sezonowego i trendu szereg czasowy jest stochastyczny i losowo rozłożony. Prognozowanie przyszłych wartości metryk ze składników sezonowych i trendów przy jednoczesnym ignorowaniu części reszt. Wykrywaj nietypowe wartości na podstawie wykrywania odstającego tylko na części reszt. Więcej szczegółów można znaleźć w rozdziale Dekompozycja szeregów czasowych.

Przykłady

Cotygodniowa sezonowość

W poniższym przykładzie wygenerujemy serię z cotygodniową sezonowością i bez trendu, a następnie dodamy do niej pewne wartości odstające. series_decompose odnajduje i automatycznie wykrywa sezonowość i generuje punkt odniesienia, który jest niemal identyczny ze składnikiem sezonowym. Dodane wartości odstające można wyraźnie zobaczyć w składniku reszt.

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  

Rozkład serii 1.

Cotygodniowa sezonowość z trendem

W tym przykładzie dodamy trend do serii z poprzedniego przykładu. Najpierw uruchamiamy series_decompose polecenie z parametrami domyślnymi. Wartość domyślna trendu avg przyjmuje tylko średnią i nie oblicza trendu. Wygenerowany punkt odniesienia nie zawiera trendu. Obserwowanie trendu w resztach staje się oczywiste, że ten przykład jest mniej dokładny niż w poprzednim przykładzie.

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  

Rozkład serii 2.

Następnie uruchomimy ponownie ten sam przykład. Ponieważ spodziewamy się trendu w serii, określamy linefit w parametrze trendu. Widzimy, że wykryto pozytywny trend, a punkt odniesienia jest znacznie bliżej serii danych wejściowych. Reszty są zbliżone do zera i wyróżnia się tylko wartości odstające. Na wykresie widać wszystkie składniki serii.

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  

Rozkład serii 3.