Rozkład sygnału na trzy historie
Seria czasowa zazwyczaj nie jest jednym czystym procesem — to zwykle wolno ruchąca się tendencja, powtarzający się model sezonowy skorelowany z kalendarzem lub zegarem, oraz reszta, co zostaje po usunięciu obu pierwszych elementów, czyli rezidualny składnik (lub nieprawidłowy składnik). Klasyczne rozkładanie założone jest na tym, że widoczna seria Y składa się z tych trzech elementów jednym z dwóch prostych sposobów:
additive: Y(t) = Trend(t) + Seasonal(t) + Residual(t)
use when the seasonal swing stays roughly constant in absolute size
multiplicative: Y(t) = Trend(t) × Seasonal(t) × Residual(t)
use when the seasonal swing grows/shrinks proportionally to
the trend level (common in sales, traffic, anything that
compounds) — equivalent to an additive model on log(Y)
Wyciąganie trendu: średnia ruchoma
Najbardziej solidny sposób na wyciągnięcie trendu bez założenia jego postaci funkcjonalnej to centrum moving average, którego okno dokładnie pasuje do okresu sezonowego — średnienie po pełnym cyklu anuluje składnik sezonowy (suma jest przybliżonie równa zero w ciągu jednego okresu, zgodnie z konstrukcją) i usuwa szum, pozostawiając za sobą wolno się poruszający trend:
dla okresu p (np. p = 12 dla danych miesięcznych z sezonowością roczną): Trend(t) = (1/p) · Σ_{i=−p/2}^{p/2} Y(t+i) (centrum; mała modyfikacja obsługuje parzyste p średzeniem dwóch nadmiarowych okien, tak że każda punkt otrzymuje niezbiętą wagę) To dokładnie dlaczego długość okna ma tak duży znaczenie: zbyt krótkie i sezonowe druciki przepływnie do tego, co nazywasz „trendem”; zbyt długie i rozmyjesz rzeczywiste punkty obrótne w podstawowym trendzie. Nieunikniona cena centrum okna polega na tym, że nie można obliczyć go dla pierwszych i ostatnich p/2 punktów serii — średnia ruchoma estymacja trendu zawsze brakuje końca, co STL (poniżej) naprawia za pomocą bardziej starannego ekstrapolacji.
for period p (e.g. p = 12 for monthly data with yearly seasonality):
Trend(t) = (1/p) · Σ_{i=−p/2}^{p/2} Y(t+i) (centred; a small tweak
handles even p by
averaging two overlapping
windows so each point
gets an unbiased weight)
Wyciąganie sezonowości: średnia według faz
Po usunięciu trendu (odejmując w przypadku dodawania, dzieląc na mnożenie), pozostaje sezonowość plus szum. Aby izolować składnik sezonowy, grupujemy każdą obserwację według jej położenia w cyklu — wszystkie stycznie razem, wszystkie luty razem, i tak dalej dla danych miesięcznych — a następnie liczymy średnią po wszystkich cyklach obecnych w serii:
detrendowane(t) = Y(t) − Trend(t) (w przypadku dodawania) indeks_sezonowy[m] = średnia detrendowane(t) dla wszystkich t z fazą(t) = m Sezonowe(t) = indeks_sezonowy[faza(t)] (normalizowane do sumy lub średniej równej 0) Średnianie po cyklach sprawia, że metoda ta jest odporna na szum w dowolnym jednym cyklu: pojedynczy niezwykle zimny styczeń nie przeskalowuje estymowanego indeksu sezonowego stycznia znacząco po średnianiu z kilku innych stycznich. To także oznacza, że klasyczna metoda wymaga co najmniej dwóch, a idealnie wielu pełnych cykli danych przed tym, aby jej estymacja sezonowa była wiarygodna — z jednym obserwowanym cyklem, sezonowość i pozostawione reszty są nieodróżnialne.
detrended(t) = Y(t) − Trend(t) (additive case) seasonal_index[m] = mean of detrended(t) over all t with phase(t) = m Seasonal(t) = seasonal_index[phase(t)] (normalised to sum/average to 0)
Co zostało: residuum i jego zastosowanie
Residuum(t) = Y(t) − Trend(t) − Seasonal(t) to wszystko, co model nie mógł wyjaśnić — prawdziwe szumy, ale również rzeczywiste sygnały, które trend/sezonowy model jest za proste, aby zidentyfikować: jednorazowe wydarzenia, strukturalne przełomowe momenty, świąt przesuwające się po kalendarzu (które nie można przedstawić stałą sezonową indeks monthly), lub sezonowy wzór, który samego siebie wolno zmienia w ciągu lat. Residuum to miejsce, gdzie żyje detekcja anomalii: razem z usunięciem trendu i sezonowości, punkt, który nadal jest wielokrotnie odchylenia standardowego od zera, jest prawdziwie atykalny, w sposób, który nie byłby jasno widoczny, gdybym tylko patrzył na serię brzytwową (duże wartości w grudniu mogą być całkowicie normalnym zachowaniem sezonowym; taka sama absolutna skok po dekompozycji nie jest).
STL: bardziej ostrożna i bardziej odporna dekompozycja
STL (Seasonal-Trend decomposition using Loess, Cleveland et al. 1990) ulepsza klasyczny receptę trzema sposobami. Zastępuje ona stałą okno średniej ruchomej metodą Loess — lokalną wagiową regresji wielomianowej — zarówno dla trendu, jak i sezonowego suflerowania, co łagodnie obsługuje problem brakujących końcowych punktów i pozwala na wolne przemieszczanie się własności sezonowych przez lata zamiast ich zmuszania do jednego ustalonego kształtu. Iteruje: szacuje trend, a następnie sezonowość z dekomponowanej serii, a potem ponownie trend z serii bezsezonowej, konvergując po kilku przebiegach zamiast wykonywania każdego kroku tylko raz. Dodatkowo obsługuje ona odporne wagi, sprowadzając wagę obserwacji atypowych podczas iteracji tak, aby kilka niezwykle punktów nie prowadziło całą estymację trendu lub sezonowości poza ścieżkę — rzeczywisty zaletą nad klasycznym podejściem z prostym średnianiem, które traktuje każdą obserwację jako równie wiarygodną.
Znalezienie samego okresu: periodogram
Wszystko powyżej założone jest, że już wiesz okres sezonowy p. Gdy nie masz takiej informacji — lub chcesz sprawdzić na obecność okresowości, której się nie spodziewałeś — transformata Fouriera dyskretna odpowiada bezpośrednio na pytanie, przekształcając serię na sumę sinusoid i cosinusoid o dyskretnych częstotliwościach i informując, ile mocy (kwadratowej amplitudy) znajduje się na każdej z nich:
X(f) = Σ_t Y(t) · exp(−2πi f t) transformata Fouriera dyskretna Moc(f) = |X(f)|² periodogram okres = 1 / f w częstotliwości, gdzie Moc(f) osiąga maksimum Lived periodogram sprawia, że sezonowość jest widoczna wizualnie w sposób, który często nie jest widoczny w raw time series: prawdziwy okresowy komponent pojawia się jako ostry, wysoki szczyt na swojej częstotliwości (a często mniejsze szczyty u jego harmonicznych, jeśli kształt sezonowy nie jest puresinusoidalny), podczas gdy czysty szum rozprowadza swoją moc prawie równomiernie po wszystkich częstotliwościach. Jedynym trudnym ograniczeniem jest częstotliwość Nyquista: próbkowana raz na jednostkę czasu, DFT może rozwiązać okresowości do dwóch próbek na cykl — dowolny prawdziwy okresowy komponent szybszy niż to skrada się i ukrywa jako niższą, fałszywą częstotliwość (aliasing), więc musi być wybrana prędkość próbkowania z myślą o najświeższym cyklu, który naprawdę interesuje nas w umyśle.
X(f) = Σ_t Y(t) · exp(−2πi f t) discrete Fourier transform Power(f) = |X(f)|² the periodogram period = 1 / f at the frequency where Power(f) peaks
Często zadawane pytania
Jak mogę wiedzieć, czy używać rozkładu dodawania lub mnożenia?
Spójrz na to, czy wielkość sezonowych oscylacji pozostaje prawie stała przez czas lub rośnie wraz z poziomem trendu. Jeśli seria z powyższym wzrostem trendu również pokazuje sezonowe szczyty, które proporcjonalnie stają się większe, gdy trend wzrasta, użyj modelu mnożenia (lub równoważnie, podnieś do logarytmu serii i rozładuj ją dodawanie). Jeśli wielkość sezonowej oscylacji pozostaje prawie stała bez względu na poziom tendencji, dodawanie jest właściwym wyborem.
Dlaczego wyodrębnianie trendu metodą średniej ruchomej zawsze przerywa niektóre dane na początku i końcu?
Środkowa średnia ruchoma o długości okna p potrzebuje p/2 punktów na obu stronach punktu, który jest estymowany, więc prosto nie ma ono prawidłowego okna dla pierwszych i ostatnich p/2 punktów serii. STL poprawia to używając lokalnej regresji (Loess), która może bardziej grzecznie ekstrapolować blisko krawędzi, ale nawet estymacja trendu STL jest w ogólności mniej pewna bezpośrednio przy granicach danych.
Co powiedzieliśmy o puknięciu okresowej diagramu okresowego?
Powiedziało to, że znacząca część wariancji serii jest skoncentrowana w tym konkretnym okresie — silne dowody na istnienie rzeczywistego okresowego składnika o okresie 1/f, a nie szumu przypadkowego, który rozprzestrzeniłby swoją moc prawie równomiernie po wszystkich okresach zamiast skupiać ją. Nie samodzielnie to mówi, że ma ona kształt tego okresowego składnika; mniejsze puknięcia w wielokrotnościach całkowitej częstotliwości zwykle oznaczają, że cykl sezonowy nie jest czystym sinusem.
Wypróbuj na żywo
Wszystko powyżej działa bezpośrednio w Twojej przeglądarce — otwórz Time Series Decomposition: Trend, Seasonality & Residuals i zmieniaj parametry podczas działania. Nic nie jest instalowane ani przesyłane na serwer, cały model działa w jednej karcie.
▶ Otwórz symulację Time Series Decomposition: Trend, Seasonality & Residuals