Co to jest sezonowość?
Sezonowość (ang. seasonality) to składnik szeregu czasowego, który powtarza się w stałym, znanym okresie. W danych miesięcznych okres wynosi 12, w dziennych często 7. W badaniach studentów sezonowość wyznacza rok akademicki: więcej zgłoszeń w czasie sesji, mniej w wakacje. Jebb i Tay (2017) opisują dekompozycję, która rozdziela szereg na trend, składnik sezonowy i resztę.
Jak rozpoznać i uwzględnić sezonowość?
- Wykres i dekompozycja. Dekompozycja STL pokazuje, o ile każdy miesiąc odbiega od trendu.
- ACF. Wyraźna autokorelacja przy opóźnieniu 12 (lub 7) wskazuje na wzorzec sezonowy. Wcześniej usuń trend, np. różnicowaniem.
- Regresja. Dodaj 11 zmiennych zero-jedynkowych dla miesięcy (dummy coding) albo funkcje sinus i cosinus.
- Model sezonowy. Sezonowy model ARIMA dobiera automatycznie m.in. algorytm Hyndmana i Khandakar (2008).
Sezonowość łamie stacjonarność, bo średnia zależy od miesiąca. Lopez Bernal i in. (2016) wymieniają korektę na trendy sezonowe wśród głównych problemów analizy przerwanego szeregu czasowego.
Przykład
Poradnia studencka liczyła wizyty co miesiąc przez 6 lat (72 miesiące, dane symulowane). Dekompozycja STL pokazała najwyższy składnik sezonowy w listopadzie (+15.5 wizyty względem trendu) i październiku (+10.1). Najniższe wartości przypadły na lipiec (−21.7), sierpień (−19.3) i grudzień (−18.7). Autokorelacja zróżnicowanego szeregu przy opóźnieniu 12 wyniosła .58. Model z samym trendem wyjaśniał R² = .16 zmienności. Dodanie zmiennych miesięcy podniosło R² do .87, F(11, 59) = 28.32, p < .001.
Jak opisać w pracy
Na co uważać
- Nieuwzględniona sezonowość udaje efekt. Program wprowadzony we wrześniu „podnosi” liczbę wizyt, bo w październiku rośnie ona co roku.
- Porównuj te same miesiące. Zestawienie lipca z listopadem mówi o sezonie, nie o zmianie.
- Kalendarz się przesuwa. Sesja, święta i ferie nie zawsze wypadają w tym samym miesiącu.
Sezonowy model ARIMA krok po kroku pokazuje wpis Szeregi czasowe w praktyce.
Sezonowość w R
Kod symuluje 6 lat danych miesięcznych, rozkłada szereg metodą STL, liczy autokorelację przy opóźnieniu 12 i porównuje regresję z trendem z regresją z trendem i zmiennymi miesięcy.
Dekompozycja STL, ACF(12) i zmienne miesięcy
R
set.seed(2444)
mies <- rep(1:12, times = 6) # 6 lat danych miesięcznych
efekt <- c(5, 8, 10, 6, 9, -4, -22, -25, 2, 12, 15, -16) # wzorzec roku akademickiego
wizyty <- ts(round(120 + 0.3 * (1:72) + efekt[mies] + rnorm(72, 0, 6)),
start = c(2020, 1), frequency = 12) # wizyty w poradni studenckiej
d <- stl(wizyty, s.window = "periodic") # trend + sezonowość + reszta
sez <- d$time.series[1:12, "seasonal"]; names(sez) <- month.abb
round(sez, 1) # składnik sezonowy (odchylenie od trendu)
round(acf(diff(wizyty), lag.max = 12, plot = FALSE)$acf[13], 2) # ACF(12) po usunięciu trendu różnicowaniem
czas <- 1:72; miesiac <- factor(mies)
m0 <- lm(wizyty ~ czas); m1 <- lm(wizyty ~ czas + miesiac)
anova(m0, m1) # czy zmienne miesięcy poprawiają model
round(c(R2_bez = summary(m0)$r.squared, R2_z = summary(m1)$r.squared), 2)Wynik w R
Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
6.0 8.4 7.1 4.5 9.3 -3.7 -21.7 -19.3 2.4 10.1 15.5 -18.7
[1] 0.58
Analysis of Variance Table
Model 1: wizyty ~ czas
Model 2: wizyty ~ czas + miesiac
Res.Df RSS Df Sum of Sq F Pr(>F)
1 70 13134.0
2 59 2091.2 11 11043 28.324 < 2.2e-16 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
R2_bez R2_z
0.16 0.87Bibliografia oprogramowania
Wyniki pochodzą z uruchomienia pokazanego kodu w R 4.5.3 (funkcje pakietu stats).
- R: R Core Team. (2026). R: A language and environment for statistical computing (Version 4.5.3) [Computer software]. R Foundation for Statistical Computing. https://www.R-project.org/
Najczęstsze pytania
Czym sezonowość różni się od cyklu?
Sezonowość ma stały, znany okres, np. 12 miesięcy lub 7 dni. Cykl to wahania o zmiennej długości, np. kilkuletnie, których okresu nie da się ustalić z góry.
Ile lat danych potrzeba, żeby ocenić sezonowość?
Potrzebujesz kilku pełnych okresów, bo każdy miesiąc musi wystąpić kilka razy. Przy dwóch latach danych sezonowość trudno odróżnić od przypadkowych zdarzeń w pojedynczym roku.
Jak usunąć sezonowość z danych miesięcznych?
Możesz odjąć składnik sezonowy z dekompozycji STL, zastosować różnicowanie sezonowe (yt − yt−12) albo dodać zmienne miesięcy do regresji. Napisz, którą metodę wybrano.
Powiązane hasła
Poradniki, w których użyjesz tego pojęcia
Potrzebujesz wsparcia w analizie danych?
Wybierz ofertę dopasowaną do pracy dyplomowej albo profesjonalnego projektu naukowego.
Wyceń analizęOferta dla studentówBibliografia i dalsza literatura naukowa (APA 7)
- Hyndman, R. J., & Khandakar, Y. (2008). Automatic time series forecasting: The forecast package for R. Journal of Statistical Software, 27(3). https://doi.org/10.18637/jss.v027.i03 ● Otwarty dostęp
- Jebb, A. T., & Tay, L. (2017). Introduction to time series analysis for organizational research: Methods for longitudinal analyses. Organizational Research Methods, 20(1), 61–94. https://doi.org/10.1177/1094428116668035
- Lopez Bernal, J., Cummins, S., & Gasparrini, A. (2016). Interrupted time series regression for the evaluation of public health interventions: A tutorial. International Journal of Epidemiology, 46(1), 348–355. https://doi.org/10.1093/ije/dyw098 ● Otwarty dostęp
Cytowania BibTeX
@article{hyndman2008automatic, author={Hyndman, Rob J. and Khandakar, Yeasmin}, title={{Automatic time series forecasting: The forecast package for R}}, journal={Journal of Statistical Software}, year={2008}, volume={27}, number={3}, doi={10.18637/jss.v027.i03}}@article{jebb2017introduction, author={Jebb, Andrew T. and Tay, Louis}, title={{Introduction to time series analysis for organizational research: Methods for longitudinal analyses}}, journal={Organizational Research Methods}, year={2017}, volume={20}, number={1}, pages={61--94}, doi={10.1177/1094428116668035}}@article{lopezbernal2016interrupted, author={Lopez Bernal, James and Cummins, Steven and Gasparrini, Antonio}, title={{Interrupted time series regression for the evaluation of public health interventions: A tutorial}}, journal={International Journal of Epidemiology}, year={2016}, volume={46}, number={1}, pages={348--355}, doi={10.1093/ije/dyw098}}