Wykrywanie trendów i sezonowości bez ‘czarnej skrzynki’: STL i wizualne diagnostyki
Praktyczny przewodnik po STL: jak rozdzielić trend, sezonowość i reszty bez „czarnej skrzynki”. Dobór parametrów, diagnostyki, braki danych i przykłady KPI.
1. Wprowadzenie: po co dekompozycja trendu i sezonowości oraz kiedy używać STL
W wielu szeregach czasowych — od KPI operacyjnych po metryki produktowe — to, co widzimy na wykresie, jest mieszaniną kilku zjawisk naraz. Długoterminowy trend może rosnąć lub spadać, sezonowość może cyklicznie powtarzać się w tygodniach, miesiącach czy kwartałach, a na to nakładają się zdarzenia jednorazowe, szum oraz błędy pomiaru. Bez rozdzielenia tych składników łatwo o błędne wnioski: spadek „w tym tygodniu” może być tylko typowym efektem dnia tygodnia, a wzrost w grudniu może wynikać z sezonu, a nie z realnej poprawy procesu.
Dekompozycja (rozbicie szeregu na komponenty) służy temu, by odpowiedzieć na kilka praktycznych pytań:
- Co jest zmianą strukturalną? — czyli czy sytuacja faktycznie się poprawia/pogarsza (trend), czy tylko „falujemy” w ramach normalnego cyklu.
- Jak duża i stabilna jest sezonowość? — czy powtarzalność jest silna, słaba, a może nieregularna.
- Co jest anomalią? — łatwiej wykryć nietypowe odchylenia, gdy porównujemy je do oczekiwanego poziomu wynikającego z trendu i sezonu.
- Jak porównywać okresy? — np. tydzień do tygodnia lub miesiąc do miesiąca w sposób „odsezonowany”, by porównanie miało sens.
W tym kontekście STL (Seasonal-Trend decomposition using Loess) jest popularną metodą „bez czarnej skrzynki”, bo daje czytelny podział na komponenty i wspiera interpretację wizualną. W przeciwieństwie do podejść, które od razu zwracają prognozę lub pojedynczy wskaźnik, STL przede wszystkim pomaga zrozumieć, co dzieje się w danych: jaki jest kierunek zmiany, jaki jest rytm sezonowy i gdzie leżą odchylenia.
Kiedy szczególnie warto sięgnąć po STL:
- Gdy masz wyraźną sezonowość (np. dzień tygodnia, sezon miesięczny, roczny) i chcesz oddzielić ją od trendu, zamiast „na oko” zgadywać, co jest czym.
- Gdy zależy Ci na interpretowalności — np. w analizie KPI, raportowaniu do biznesu, analizie przyczynowej, gdzie trzeba pokazać, skąd biorą się zmiany.
- Gdy sezonowość nie jest idealnie stała — w praktyce amplituda cyklu bywa różna w czasie (np. mocniejszy efekt weekendów w niektórych miesiącach), a STL jest użyteczny tam, gdzie proste, sztywne modele sezonowe bywają zbyt „kanciaste”.
- Gdy podejrzewasz wpływ zdarzeń jednorazowych (promocje, awarie, kampanie, zmiany regulaminu) i chcesz je zobaczyć jako odchylenia na tle trendu i sezonowości.
Kiedy STL może nie być najlepszym pierwszym wyborem (lub wymaga ostrożności):
- Gdy nie ma sezonowości albo jest bardzo słaba — wtedy dekompozycja może niewiele wnieść, a prostsze wygładzanie trendu bywa wystarczające.
- Gdy dane są bardzo krótkie w stosunku do długości sezonu — trudno wiarygodnie „nauczyć się” cyklu, jeśli widzimy zaledwie fragment powtórzeń.
- Gdy seria ma skoki poziomu (nagłe zmiany bazowego poziomu) i priorytetem jest wykrycie punktu zmiany — STL może pomóc w oglądzie, ale do samej detekcji zmian strukturalnych często stosuje się inne narzędzia.
- Gdy interesuje Cię głównie prognozowanie — STL jest świetne do diagnostyki i przygotowania danych, natomiast sama prognoza zwykle wymaga dodatkowego modelu.
Najważniejsza wartość STL w praktyce polega na tym, że porządkuje rozmowę o szeregu czasowym: co jest trwałą zmianą, co jest cyklem, a co jest odstępstwem. Dzięki temu decyzje operacyjne (np. czy reagować alarmem, czy „przeczekać” typowy dołek sezonowy) mogą opierać się na danych, a nie na intuicji.
2. STL w praktyce: składniki (trend, sezonowość, reszty) i ich interpretacja
STL (Seasonal-Trend decomposition using Loess) to metoda, która rozkłada szereg czasowy na trzy czytelne komponenty: trend, sezonowość i reszty. Jej praktyczna wartość polega na tym, że zamiast traktować zmienność danych jako jedną „mieszaninę” zjawisk, możemy osobno zobaczyć długookresowy kierunek, powtarzalny wzorzec oraz to, co nie pasuje do żadnego z nich. Dzięki temu diagnoza jest bardziej przejrzysta: łatwiej rozróżnić np. rzeczywistą zmianę biznesową od zwykłego efektu kalendarza.
Podczas szkoleń Cognity ten temat wraca regularnie – dlatego zdecydowaliśmy się go omówić również tutaj, w możliwie praktycznej i interpretowalnej formie.
W ujęciu intuicyjnym można to zapisać jako: obserwacja = trend + sezonowość + reszta. Nie chodzi tu o idealne dopasowanie, ale o sensowny, interpretowalny podział sygnału, który pomaga odpowiadać na pytania „co rośnie/spada?”, „co cyklicznie się powtarza?” i „co jest anomalią lub szumem?”.
Trend: kierunek długookresowy
Trend to wygładzona ścieżka pokazująca wolniejsze zmiany poziomu szeregu w czasie. W praktyce to komponent, który najczęściej łączymy z narracją biznesową: wzrostem bazy klientów, spadkiem popytu, efektem zmian produktu, procesów czy kanałów sprzedaży.
- Jak czytać trend? Patrz na nachylenie (tempo zmian) i punkty zwrotne (moment, w którym trend zmienia kierunek).
- Co może zmylić? Silna sezonowość lub pojedyncze skoki potrafią „wciągać” trend, jeśli dane nie są stabilne. Dlatego trend interpretuj jako kierunek, a nie jako precyzyjny opis każdego tygodnia czy dnia.
- Do czego używać? Do komunikowania „co się dzieje z poziomem KPI w długim horyzoncie” oraz do porównywania okresów bez wpływu cyklicznych wahań.
Sezonowość: powtarzalny wzorzec
Sezonowość opisuje systematyczny, powtarzalny wzorzec w stałym cyklu: np. w obrębie tygodnia, miesiąca czy roku. W odróżnieniu od trendu odpowiada na pytanie, jak wygląda typowy cykl oraz które momenty w cyklu są regularnie „mocniejsze” lub „słabsze”.
- Jak czytać sezonowość? Zwróć uwagę na amplitudę (jak duże są typowe odchylenia w cyklu) oraz stabilność kształtu (czy wzorzec jest podobny w czasie).
- Co oznacza duża amplituda? Duża amplituda sezonowości sugeruje, że porównywanie surowych wartości między kolejnymi punktami (np. tydzień do tygodnia) bywa mylące — bo zmiana może wynikać głównie z kalendarza, nie z realnej poprawy/pogorszenia.
- Do czego używać? Do planowania operacyjnego (np. obsady, budżetów), do ustawiania realistycznych celów per dzień/tydzień oraz do „odsezonowania” KPI przy analizach trendu.
Reszty: to, czego nie wyjaśnia trend i sezonowość
Reszty (często nazywane też komponentem nieregularnym) to część szeregu, która zostaje po odjęciu trendu i sezonowości. Z perspektywy diagnostyki to bardzo ważny fragment, bo właśnie tu widać: jednorazowe zdarzenia, anomalie, błędy pomiaru oraz dodatkowe wzorce, których prosty podział na trend i sezonowość nie uchwycił.
- Jak czytać reszty? Szukaj nietypowo dużych odchyleń (pojedyncze „piki”) oraz klastrów odchyleń (ciągi dodatnich lub ujemnych reszt), które mogą sugerować zmianę procesu, kampanię, awarię lub przesunięcie w zachowaniu użytkowników.
- Co oznacza „czysta” reszta? Jeśli reszty wyglądają jak losowy szum bez struktury, to zwykle znak, że trend i sezonowość dobrze opisują regularną część zjawiska.
- Do czego używać? Do wykrywania zdarzeń jednorazowych, oceny jakości danych i sygnalizowania momentów, które wymagają wyjaśnienia biznesowego.
Jak łączyć interpretację komponentów w praktyczne wnioski
Największą korzyścią ze STL jest możliwość zadania trzech prostych pytań i uzyskania na nie oddzielnych odpowiedzi:
- Co się zmienia w długim terminie? Odpowiada trend.
- Co powtarza się cyklicznie? Odpowiada sezonowość.
- Co jest „ponad” normalny rytm? Odpowiadają reszty.
W analizie KPI oznacza to m.in. bardziej uczciwe porównania: zamiast reagować na typowy dołek sezonowy jak na kryzys, można sprawdzić, czy w resztach pojawiło się coś nietypowego albo czy trend faktycznie się odwrócił. Z drugiej strony, gdy trend jest stabilny, a reszty pokazują serię dodatnich odchyleń, może to sygnalizować pojawienie się nowego czynnika (np. skutecznej kampanii) jeszcze zanim stanie się to „widoczne” w surowym szeregu.
3. Dobór parametrów STL: długość sezonu, okna wygładzania, robust, iteracje i kompromisy
STL (Seasonal-Trend decomposition using Loess) daje dużą kontrolę nad tym, jak model ma rozdzielić serię na trend, sezonowość i reszty. Ta kontrola odbywa się głównie przez kilka parametrów: długość sezonu (period), okna wygładzania (dla sezonowości i trendu), oraz ustawienia odporności (robust) i iteracji. W praktyce dobór parametrów to balans między: (1) wiernością wobec danych, (2) gładkością i interpretowalnością komponentów, (3) odpornością na anomalie.
Długość sezonu (period): fundament całej dekompozycji
Period określa, co uznajesz za jeden pełny cykl sezonowy. To parametr „twardy”: jeśli jest źle ustawiony, pozostałe ustawienia będą „naprawiać” problem w sposób, który zwykle psuje interpretację komponentów.
- Dane dzienne: najczęściej period=7 (tydzień). Jeśli dominują wzorce roczne, period≈365 (ale STL wymaga wtedy dłuższej historii i często lepiej działa na danych agregowanych, np. tygodniowych).
- Dane tygodniowe: period≈52.
- Dane miesięczne: period=12.
- Dane godzinowe: typowo period=24 (dobowy) lub 168 (tygodniowy), w zależności od tego, co ma być „sezonem” w tym rozkładzie.
Wskazówka praktyczna: wybierz ten cykl, który jest najbardziej stabilny i biznesowo sensowny (np. tygodniowość w sprzedaży detalicznej, dobowość w ruchu na stronie). Drugi cykl (np. roczny) częściej traktuje się jako część trendu/zmiany poziomu, o ile nie masz bardzo długiej historii.
Okna wygładzania: sezonowość i trend
STL używa lokalnej regresji (LOESS). Parametry okien decydują, jak „elastyczny” ma być komponent sezonowy i trend. Intuicyjnie: mniejsze okno = większa reaktywność (ale większe ryzyko dopasowania szumu), większe okno = większa gładkość (ale ryzyko spłaszczenia realnych zmian).
| Parametr | Co kontroluje | Gdy za mały | Gdy za duży |
|---|---|---|---|
| Okno sezonowości (seasonal smoother) | Na ile sezonowość może zmieniać kształt w czasie | Sezon „pływa”, może wchłaniać anomalie i szum | Sezon jest zbyt sztywny; realne zmiany wzorca trafiają do reszt lub trendu |
| Okno trendu (trend smoother) | Jak szybko trend może się zmieniać | Trend zaczyna łapać krótkookresowe wahania; trudniejsza interpretacja | Trend staje się „linijką”; skoki poziomu i zmiany dynamiki zostają w resztach |
Reguła zdrowego rozsądku: trend powinien być wyraźnie gładszy niż sezonowość. Jeśli trend wygląda jak „poszarpana linia”, najczęściej okno trendu jest zbyt małe albo period źle dobrany.
Robust: odporność na outliery kosztem czułości
Tryb robust w STL iteracyjnie zmniejsza wpływ obserwacji odstających na dopasowanie komponentów. To zwykle dobry wybór, gdy w danych pojawiają się:
- jednorazowe piki/dołki (promocje, awarie, incydenty),
- zmiany definicji metryki skutkujące pojedynczymi „dziwnymi” punktami,
- okresy z błędami pomiaru.
Kompromis: robust zwiększa stabilność komponentów, ale bywa mniej czuły na krótkie, prawdziwe zmiany (np. nagły, trwały skok poziomu może zostać chwilowo potraktowany jak „nietypowy”). Dlatego robust jest szczególnie sensowny, gdy Twoim celem jest diagnostyka trendu i sezonu w obecności anomalii, a nie maksymalnie szybka reakcja na każdy zwrot serii.
Iteracje: kiedy „wystarczy” i po co je zwiększać
STL działa iteracyjnie, a w trybie robust iteracje pełnią dodatkową rolę: umożliwiają stopniowe wyznaczanie wag ograniczających wpływ odstających punktów. Więcej iteracji oznacza zwykle:
- większą stabilność wyniku (do pewnego momentu),
- większy koszt obliczeniowy,
- mniejsze ryzyko, że pojedyncze anomalie „wkręcą się” w trend lub sezon.
Jeśli wynik między uruchomieniami jest „kapryśny” (np. drobne zmiany danych mocno zmieniają komponenty), bywa to sygnał, że potrzebujesz: większych okien wygładzania, trybu robust lub większej liczby iteracji.
Typowe kompromisy i szybkie heurystyki do strojenia
- Chcesz wykrywać drobne zmiany trendu szybciej → zmniejsz okno trendu, ale kontroluj czy trend nie zaczyna przejmować sezonowości/szumu.
- Chcesz stabilny, „prezentacyjny” trend → zwiększ okno trendu i rozważ robust, szczególnie przy danych z incydentami.
- Sezonowość wygląda inaczej w różnych okresach (np. zmiana zachowań klientów) → zmniejsz okno sezonowości, aby dopuścić wolniejsze „dryfowanie” kształtu sezonu; uważaj, by nie zaczął on łapać anomalii.
- Reszty mają wyraźny wzór okresowy → często oznacza to zbyt sztywną sezonowość (okno sezonowe za duże) lub zły period.
Minimalny przykład konfiguracji (jako punkt startowy)
Poniżej krótki przykład pokazujący, jak parametry pojawiają się w kodzie. Konkretne wartości traktuj jako punkt wyjścia do dalszego strojenia.
# Python (statsmodels)
from statsmodels.tsa.seasonal import STL
# y: szereg czasowy, np. dzienny
stl = STL(y, period=7, seasonal=13, trend=61, robust=True)
res = stl.fit()
trend = res.trend
seasonal = res.seasonal
resid = res.resid
Interpretacja parametrów w przykładzie: period=7 narzuca tygodniowość; seasonal i trend to długości okien wygładzania (większe = gładsze); robust=True zwiększa odporność na odstające punkty.
4. Wizualne diagnostyki szeregów czasowych: jakie wykresy robić i jak je czytać
Wizualna diagnostyka to najszybszy sposób, by ocenić: czy w danych w ogóle widać trend, czy sezonowość jest stabilna, czy występują zmiany reżimu oraz czy problemem są braki, outliery albo agregacja. Zanim przejdziesz do dekompozycji, warto „przeskanować” szereg kilkoma wykresami, bo każdy odpowiada na inne pytanie i ogranicza ryzyko mylnej interpretacji. W Cognity wierzymy, że dobre zrozumienie tego tematu to podstawa efektywnej pracy z narzędziami cyfrowymi – szczególnie wtedy, gdy decyzje biznesowe opierają się na wnioskach z danych czasowych.
4.1. Zestaw minimum: 5 wykresów, które warto zrobić zawsze
- Wykres liniowy (time plot) z surową serią + ewentualnie wersja wygładzona (rolling/LOESS) – do oceny trendu, skoków poziomu i anomalii.
- Wykres sezonowy (seasonal plot) – ta sama pora w cyklu (np. dni tygodnia, miesiące) nałożona na siebie; pokazuje stabilność kształtu sezonowości.
- Heatmapa kalendarzowa (dzień × tydzień / miesiąc × rok) – szybko ujawnia „plamy” sezonu, święta, okresy promocyjne i brakujące dni.
- Wykres reszt / różnic (np. Δy lub odchylenie od średniej sezonowej) – wstępna ocena, czy po usunięciu oczywistych wzorców zostaje losowy szum czy struktura.
- ACF/PACF – czy widać powtarzalne opóźnienia (lagi) sugerujące sezonowość i autokorelację (ważne przy doborze podejścia do prognozowania i filtracji).
4.2. Jak czytać najważniejsze wykresy
1) Wykres liniowy: poziom, trend, skoki i heteroskedastyczność
Na wykresie liniowym szukaj czterech sygnałów:
- Trend: długookresowy wzrost/spadek; sprawdź, czy jest gładki czy „łamany”. Załamania często wskazują na zmiany procesu (np. nowy kanał, zmiana definicji KPI).
- Sezonowość: regularne wahania; jeśli amplituda rośnie wraz z poziomem, możliwa jest sezonowość „multiplikatywna” (warto o tym pamiętać przy interpretacji).
- Outliery i epizody: pojedyncze piki/dołki vs. kilkudniowe „platformy”. Pojedyncze piki częściej są zdarzeniami, platformy sugerują zmianę reżimu lub problem z pomiarem.
- Zmienność w czasie: gdy rozrzut rośnie lub maleje, wnioski z analizy reszt (i późniejszych modeli) będą zależeć od tego, czy uwzględnisz zmienną wariancję.
2) Wykres sezonowy: czy sezon jest stały, czy „pływa”
Wykres sezonowy buduje się przez nałożenie cykli (np. każdy tydzień osobno na osi dni tygodnia, każdy rok osobno na osi miesięcy). Odczyt:
- Stały kształt: linie/cykle podobne do siebie → sezonowość stabilna i łatwa do wyodrębnienia.
- Rozjeżdżający się kształt: różne cykle mają inne „szczyty” → możliwa zmiana zachowania klientów, kalendarza lub definicji.
- Dryf amplitudy: sezon jest, ale raz silniejszy, raz słabszy → to sygnał do ostrożności w interpretacji komponentu sezonowego.
3) Heatmapa kalendarzowa: wzorce, święta, braki danych
Heatmapy są świetne, bo pokazują strukturę w dwóch wymiarach: czas krótki i długi jednocześnie. Czytaj je tak:
- Pasy i szachownice → regularna sezonowość (np. weekendy).
- Wyspy o wysokiej wartości → kampanie/zdarzenia; jeśli powtarzają się co rok, to sezon „kalendarzowy”.
- Białe/ciemne dziury → braki danych lub dni bez rejestracji; łatwo odróżnić realny spadek od braku pomiaru.
- Granice (np. początek kwartału) → mogą ujawniać artefakty agregacji i raportowania.
4) Wykresy „po odjęciu oczywistości”: reszty, różnice, odchylenia
Zanim zaczniesz formalną dekompozycję, pomocne jest spojrzenie na serię po prostym „oczyszczeniu”, np.:
- Różnice pierwszego rzędu (Δy) – uwypuklają zmiany, wygaszają trend.
- Odchylenie od średniej sezonowej (np. minus średnia dla danego dnia tygodnia) – wstępnie pokazuje, co zostaje poza sezonem.
Interpretacja: jeśli po takim zabiegu nadal widać powtarzalne wzorce, to znak, że sezonowość jest bardziej złożona (np. kilka nakładających się cykli) lub że sezon zmienia się w czasie.
5) ACF/PACF: czy i gdzie „odbijają” cykle
ACF (autokorelacja) jest szybkim testem wizualnym na obecność struktury czasowej:
- Piki w lagach sezonowych (np. 7, 14, 21 dla danych dziennych z tygodniem) → silna sezonowość.
- Wolno opadająca ACF → trend lub silna inercja (seria „ciągnie się” w czasie).
- Brak istotnych pików → seria może być bliska białemu szumowi albo wymaga innej skali/agregacji.
ACF/PACF nie zastępują wykresów w czasie; są uzupełnieniem, które pomaga odróżnić „wrażenie sezonowości” od faktycznej powtarzalności.
4.3. Dodatkowe wykresy, gdy chcesz doprecyzować hipotezy
- Boxploty per sezon (np. boxplot wartości dla każdego dnia tygodnia/miesiąca): czy różnice sezonowe dotyczą średniej, czy głównie ogonów/zmienności.
- Wykresy kwantylowe w czasie (rolling quantiles): czy rośnie „typowy” poziom czy tylko ekstrema.
- Wykres rozrzutu y(t) vs y(t-1): szybka ocena inercji i nieliniowości.
- Porównanie dwóch okresów (overlay przed/po dacie): czy nastąpił skok poziomu, zmiana sezonu lub wariancji.
4.4. Szybka ściąga: który wykres do jakiego pytania?
| Wykres | Najlepszy do | Typowe czerwone flagi |
|---|---|---|
| Linia w czasie | Trend, skoki, epizody, zmienność | Skok poziomu, rosnąca amplituda, długie „płaskie” odcinki |
| Seasonal plot | Stabilność kształtu sezonu | Zmiana miejsca szczytu, rozjazd cykli, sezon tylko w części lat |
| Heatmapa | Kalendarz, święta, braki danych | Dziury (missing), regularne pasy raportowe, wyspy anomalii |
| Różnice / odchylenia | Struktura po „zgaszeniu” trendu/sezonu | Pozostają cykle, klastry dodatnich/ujemnych reszt |
| ACF/PACF | Powtarzalność i lagi sezonowe | Piki na lagach sezonu, wolny spadek ACF |
4.5. Minimalny przykład (opcjonalnie): jak wygenerować podstawowe diagnostyki
# Python (pandas + matplotlib/statsmodels) – szkic
import pandas as pd
import matplotlib.pyplot as plt
from statsmodels.graphics.tsaplots import plot_acf, plot_pacf
# y: pd.Series z DatetimeIndex
fig, ax = plt.subplots(2, 2, figsize=(12, 7))
y.plot(ax=ax[0,0], title="Time plot")
y.rolling(7).mean().plot(ax=ax[0,0], alpha=0.8)
plot_acf(y.dropna(), ax=ax[0,1], lags=60)
plot_pacf(y.dropna(), ax=ax[1,1], lags=60)
# Prosty wykres sezonowy: dzień tygodnia
by_dow = y.groupby(y.index.dayofweek)
ax[1,0].boxplot([by_dow.get_group(i).dropna().values for i in range(7)])
ax[1,0].set_title("Boxplot per day-of-week")
ax[1,0].set_xticklabels(["Mon","Tue","Wed","Thu","Fri","Sat","Sun"])
plt.tight_layout()
Kod jest tylko szkicem: kluczowe jest, by dopasować diagnostyki do częstotliwości danych (dzienna/tygodniowa/miesięczna) i do tego, jakie cykle podejrzewasz.
5. Braki danych i outliery: wykrywanie, imputacja, podejście robust i wpływ na komponenty
STL jest „przezroczyste” w tym sensie, że łatwo zobaczyć, co zostało uznane za trend, co za sezonowość, a co za resztę. Ta przejrzystość ma jednak warunek: dane wejściowe muszą być sensownie przygotowane. Braki danych (missing values) i odstające obserwacje (outliery) potrafią „przeciągnąć” wygładzanie, rozlać jednorazowe zdarzenie na trend albo zniekształcić amplitudę sezonowości.
W tej sekcji skupiamy się na tym, jak szybko je wykrywać, jak dobierać prostą imputację oraz kiedy włączyć tryb robust w STL – bez wchodzenia w parametry i kalibrację (to osobny temat).
5.1. Dwa różne problemy: braki vs. outliery
Choć często występują razem (np. luka w danych po awarii systemu i „odbicie” po powrocie), warto je rozdzielać:
- Braki danych: brak wartości w czasie, przerwana ciągłość szeregu, nieobserwowane punkty.
- Outliery: wartości istnieją, ale są nietypowe względem lokalnego kontekstu (poziomu i sezonowości). Mogą być błędem lub realnym zdarzeniem.
W praktyce najgorsza jest sytuacja, gdy outlier jest traktowany jak „normalna” obserwacja, a brak danych jest wypełniany w sposób, który tworzy sztuczną sezonowość.
5.2. Szybkie wykrywanie braków danych
Najpierw sprawdź, czy oś czasu jest kompletna i regularna (np. każdy dzień/godzina). Typowe sygnały problemu:
- Nieciągła oś czasu (brakujące znaczniki czasu), choć liczba rekordów „wygląda” poprawnie.
- Zduplikowane znaczniki czasu (dwa odczyty dla tej samej godziny/dnia) – często maskują brak w innym miejscu.
- Bloki braków (kilka–kilkadziesiąt kolejnych braków) – to najtrudniejszy przypadek, bo imputacja łatwo „wymyśla” wzorce.
Minimum diagnostyczne to: (1) lista brakujących timestampów, (2) długości najdłuższych luk, (3) udział braków w sezonie (np. w danym dniu tygodnia).
5.3. Szybkie wykrywanie outlierów (bez „czarnej skrzynki”)
Outlier to nie zawsze błąd. Dla dekompozycji kluczowe jest pytanie: czy to zdarzenie powinno zostać w trendzie/sezonowości, czy w resztach? Do szybkiego wykrywania, zanim uruchomisz STL, stosuje się proste reguły oparte o lokalny kontekst:
- Odchylenie od mediany/kwartyli w oknie kroczącym (np. median ± k·MAD) – odporne na pojedyncze skoki.
- Porównanie do typowego profilu sezonowego (np. „dziś vs typowy poniedziałek”) – przydatne w danych z silnym tygodniowym rytmem.
- Reguły domenowe: wartości ujemne tam, gdzie nie mają sensu; nagłe skoki o rząd wielkości; przekroczenia fizycznych limitów.
Warto od razu oznaczać outliery jako: potencjalny błąd vs prawdopodobne zdarzenie biznesowe. To wpływa na decyzję: korygować, zostawić, czy analizować osobno.
5.4. Imputacja braków: prosto, celowo i z ryzykiem pod kontrolą
STL w większości implementacji nie lubi wartości brakujących – trzeba coś z nimi zrobić. Kluczowa zasada: imputacja ma uzupełnić ciągłość, ale nie powinna dodawać nowej informacji o trendzie czy sezonowości.
| Metoda | Kiedy ma sens | Ryzyko / efekt uboczny |
|---|---|---|
| Forward/Backward fill (przeniesienie ostatniej/next wartości) | Krótkie luki w danych o powolnych zmianach | Spłaszcza zmienność; przy silnej sezonowości „psuje” rytm |
| Interpolacja liniowa | Krótkie luki, brak gwałtownych zmian | Wygładza skoki; może zaniżać piki/dołki sezonowe |
| Imputacja sezonowa (np. wartość z poprzedniego sezonu: t−m) | Gdy sezonowość jest stabilna i dominująca | Utrwala historyczne wzorce nawet, gdy sezon się zmienia |
| Prosta kombinacja (np. interpolacja + korekta sezonowa) | Gdy wiesz, że są i trend, i sezonowość | Łatwo „przeimputować” – wprowadzić sztuczne dopasowanie |
| Zostawienie luki i analiza poza STL | Długie braki lub braki w krytycznych okresach | Brak pełnej dekompozycji; wymaga decyzji analitycznej |
Praktyczna heurystyka: im dłuższa luka, tym bardziej imputacja staje się modelowaniem. Długie braki często lepiej oznaczyć i traktować jako osobny incydent jakości danych niż „udawać”, że znamy przebieg.
5.5. Co robić z outlierami: usuwać, korygować czy zostawić?
Możliwe strategie (od najprostszych):
- Zostawić bez zmian, jeśli outlier to realne zdarzenie, które ma trafić do reszt (np. jednorazowa kampania, awaria systemu powodująca skok ticketów).
- Winsoryzacja / clipping (ucięcie do percentyla/limitu), gdy wartości są fizycznie niemożliwe lub ewidentnie błędne.
- Zamiana na NA i imputacja, jeśli outlier jest błędem pomiaru, a nie zjawiskiem.
- Oddzielne flagowanie zdarzeń (kolumna „incident”), gdy chcesz zachować wartość, ale nie chcesz, by wpływała na wnioski o trendzie/sezonowości.
Najważniejsze: podejście do outlierów powinno być spójne (ta sama reguła w czasie) i audytowalne (da się wskazać, które punkty zmieniono i dlaczego).
5.6. Tryb robust w STL: kiedy warto
STL ma wariant odporny, który zmniejsza wagę punktów odstających w procesie wygładzania. W praktyce bywa to lepsze niż agresywne czyszczenie danych, bo:
- pozwala zachować surowe wartości (mniej „ręcznej” ingerencji),
- ogranicza „wciąganie” pików do trendu,
- zwykle stabilizuje sezonowość w obecności incydentów.
Kiedy szczególnie rozważyć robust: gdy masz powtarzające się, ale rzadkie skoki (np. blackouty, jednorazowe akcje) i chcesz, by były traktowane jako anomalia/reszta, a nie zmiana struktury.
Uwaga: robust nie zastępuje sprawdzenia jakości osi czasu i nie naprawi problemu długich bloków braków danych.
5.7. Jak braki i outliery „przeciekają” do komponentów STL
Typowe efekty uboczne, które warto rozpoznawać na wykresach komponentów:
- Trend „łapie” incydent: pojedynczy skok powoduje garb/załamanie trendu, które trwa zbyt długo w porównaniu do zdarzenia.
- Sezonowość puchnie: outlier w jednym dniu tygodnia podbija amplitudę sezonu, przez co „typowy” profil staje się zbyt agresywny.
- Reszty wyglądają zbyt spokojnie: po nadmiernej imputacji lub zbyt mocnym czyszczeniu anomalii, reszty tracą informację o realnych zdarzeniach.
- Schodki i płaskie odcinki: często efekt forward fill na dłuższych lukach.
- Fałszywe periody: nieumiejętna imputacja potrafi wytworzyć pozorny rytm (np. co 7 dni), którego nie ma w danych.
Jeśli po dekompozycji widzisz te symptomy, to zwykle nie jest „wina STL”, tylko sygnał, że trzeba wrócić do prostych decyzji: co jest brakiem, co jest błędem, a co jest zdarzeniem, które powinno pozostać widoczne.
5.8. Minimalny, praktyczny workflow (bez rozbudowanej inżynierii)
- Ureguluj oś czasu: upewnij się, że masz dokładnie jeden punkt na każdy okres.
- Oznacz braki i długości luk; dla krótkich luk zastosuj prostą imputację, dla długich rozważ osobne traktowanie.
- Wykryj kandydatów na outliery prostą regułą odporną (okno kroczące) i podziel na „błąd” vs „zdarzenie”.
- Włącz robust, jeśli chcesz, by incydenty mniej wpływały na trend i sezonowość.
- Zachowaj ślad zmian: lista punktów imputowanych i skorygowanych (audyt).
Dzięki temu STL pozostaje narzędziem do czytelnej dekompozycji, a nie przypadkowym mikserem artefaktów jakości danych.
# Pseudokod (Python): minimalne kroki przed STL
# 1) zapewnij regularny indeks czasu
s = s.asfreq('D') # np. dzienne dane
# 2) imputacja krótkich luk (przykład)
s_imp = s.interpolate(limit=3) # tylko do 3 dni luki
# 3) proste flagowanie outlierów (odporne)
med = s_imp.rolling(21, center=True).median()
mad = (s_imp - med).abs().rolling(21, center=True).median()
flag_outlier = (s_imp - med).abs() > 6 * mad
# 4) decyzja: błędy zamień na NA i imputuj, zdarzenia zostaw
s_clean = s_imp.mask(flag_outlier & is_error)
6. Przykłady KPI (sprzedaż, ticket volume): rekomendowane wykresy, interpretacje i wnioski biznesowe
STL jest szczególnie użyteczne przy KPI, które mają powtarzalny rytm (dzień tygodnia, miesiąc, sezon) i jednocześnie podlegają zmianom trendu (wzrost/ spadek) oraz zdarzeniom jednorazowym (kampanie, awarie, święta). Poniżej dwa typowe przypadki: sprzedaż i wolumen zgłoszeń (tickets). Celem nie jest „idealne dopasowanie”, tylko czytelna historia danych: co jest trendem, co sezonowością, a co nietypowym odchyleniem.
Sprzedaż (przychód / liczba transakcji)
Co zwykle widać w danych: silną sezonowość tygodniową (weekendy vs dni robocze) oraz roczną (święta, wakacje), trend wynikający ze wzrostu bazy klientów/cen, a także piki po kampaniach.
| Wykres (minimum) | Na co patrzeć | Typowe wnioski biznesowe |
|---|---|---|
| Seria czasowa (oryginał) + trend STL | Czy trend rośnie/spada i kiedy zmienia tempo | Ocena „bazowego” wzrostu; identyfikacja momentów przełomu (np. zmiana ceny, kanału) |
| Sezonowość STL (np. tygodniowa) jako wykres liniowy | Które dni tygodnia/miesiąca mają najwyższy/ najniższy poziom | Planowanie personelu i budżetów kampanii; optymalizacja godzin/dni publikacji |
| Reszty STL jako wykres punktowy w czasie | Skupiska dodatnich/ujemnych odchyleń, pojedyncze ekstremy | Wykrywanie efektów kampanii, anomalii cenowych, błędów raportowania |
| Reszty STL: histogram / gęstość | „Ogony” i skośność (czy nietypowe spadki są częstsze niż wzrosty) | Ocena ryzyka: czy spadki bywają gwałtowne; przygotowanie progów alertów |
Jak czytać komponenty w praktyce (sprzedaż):
- Trend odpowiada na pytanie: „Czy bez względu na sezonowość idziemy w górę czy w dół?”. Jeśli trend rośnie, a surowa seria „stoi”, to często znak, że sezonowość (np. słabszy okres) maskuje wzrost.
- Sezonowość odpowiada: „Jaki jest powtarzalny wzorzec?”. Dla sprzedaży istotne jest, czy sezonowość jest stabilna (np. poniedziałki zawsze słabsze), czy się spłaszcza/wyostrza.
- Reszty to „to, czego nie tłumaczy trend i sezonowość”: działania promocyjne, zdarzenia zewnętrzne, awarie systemów, brak danych. Wysokie dodatnie reszty w oknie kampanii to sygnał liftu; długie pasmo ujemnych reszt może sugerować problem operacyjny lub zmianę zachowania klientów.
Przykładowe decyzje oparte na STL (sprzedaż):
- Ocena skuteczności kampanii: porównuj reszty w oknie kampanii do „typowego” rozrzutu reszt (czy efekt jest większy niż normalna zmienność).
- Budżetowanie i targety: targety lepiej odnosić do trendu (bazowego poziomu), a nie do surowej serii w „słabym” sezonie.
- Wykrywanie problemów danych: nagłe, pojedyncze ekstremum w resztach przy braku analogicznego sygnału w innych KPI często wskazuje błąd ETL/raportowania.
Ticket volume (liczba zgłoszeń / incydentów)
Co zwykle widać w danych: mocną sezonowość tygodniową (spadki w weekendy), czasem dzienną (godziny), trend zależny od skali produktu i jakości, oraz piki powiązane z wdrożeniami/awariami.
| Wykres (minimum) | Na co patrzeć | Typowe wnioski biznesowe |
|---|---|---|
| Seria czasowa + trend STL | Długoterminowy kierunek: czy liczba ticketów bazowo rośnie | Ocena jakości/obciążenia: rosnący trend może oznaczać dług technologiczny lub wzrost bazy użytkowników |
| Sezonowość tygodniowa STL | „Normalny” profil tygodnia (np. poniedziałkowe spiętrzenia) | Grafiki zespołu, dyżury, planowanie zmian i wdrożeń poza szczytami |
| Reszty STL w czasie + oznaczone progi (np. percentyle) | Piki incydentowe vs typowa zmienność | Alerty operacyjne (incident detection) i priorytetyzacja analizy przyczyn |
| Mapa kalendarzowa (heatmap) wartości lub reszt | Powtarzalne „gorące” dni/tygodnie | Identyfikacja okresów przeciążenia (np. po release’ach, na początku miesiąca) |
Jak czytać komponenty w praktyce (tickets):
- Trend jest kluczowy do rozdzielenia: „czy mamy trwały wzrost obciążenia” od „czy to tylko sezon (np. poniedziałki)”.
- Sezonowość wspiera operacje: jeśli sezonowość pokazuje stałe poniedziałkowe piki, to jest to wzorzec planistyczny, nie „ciągły kryzys”.
- Reszty pomagają wykrywać incydenty: wysokie dodatnie reszty oznaczają „więcej ticketów niż normalnie o tej porze” i są lepszym sygnałem alarmowym niż surowy wolumen.
Porównanie: sprzedaż vs ticket volume (co zwykle działa najlepiej)
| Aspekt | Sprzedaż | Ticket volume |
|---|---|---|
| Główne pytanie biznesowe | Czy rośniemy i co daje „lift” ponad bazę? | Czy rośnie obciążenie i gdzie są incydenty ponad normę? |
| Najbardziej użyteczny komponent | Trend + reszty (efekty kampanii) | Reszty (alerty) + sezonowość (planowanie) |
| Najczęstsze „fałszywe alarmy” bez STL | Mylenie sezonu (święta) z trwałym wzrostem/spadkiem | Mylenie poniedziałków/po-release’ów z anomalią |
| Rekomendowany sposób raportowania | „Bazowy trend” + odchylenia kampanijne (reszty) | „Normalny profil tygodnia” + wyjątki (reszty ponad próg) |
Mini-szablon: jakie wykresy wkleić do dashboardu KPI
- Panel 1: surowa seria + trend STL (jedna oś, prosta legenda).
- Panel 2: sezonowość STL (osobno dla głównej sezonowości, np. tydzień).
- Panel 3: reszty STL w czasie z zaznaczonym progiem (np. 95 percentyl historyczny).
- Panel 4 (opcjonalnie): heatmap kalendarzowa reszt lub wolumenu, aby szybko znaleźć skupiska problemów/okazji.
# szkic (Python, statsmodels) – tylko dla orientacji
from statsmodels.tsa.seasonal import STL
stl = STL(y, period=7, robust=True)
res = stl.fit()
trend = res.trend
seasonal = res.seasonal
resid = res.resid
Największa wartość STL w KPI operacyjnych i komercyjnych polega na tym, że pozwala komunikować zmiany w „bazie” (trend) oddzielnie od normalnych wahań (sezonowość) i zdarzeń nadzwyczajnych (reszty) — co bezpośrednio przekłada się na lepsze alerty, lepsze planowanie i bardziej uczciwe porównania okres do okresu.
7. Gdy sezonowość się zmienia: krótka procedura diagnostyczno-naprawcza i ponowna kalibracja
Sezonowość w danych biznesowych rzadko jest „raz na zawsze” stała. Zmieniają ją m.in. nowe kanały sprzedaży, zmiany regulaminów, kampanie, przesunięcia zachowań klientów, a także czynniki zewnętrzne (np. święta wypadające inaczej w kalendarzu lub zmiany w sposobie raportowania). STL dobrze nadaje się do pracy w takich warunkach, ale warto pamiętać, że STL opisuje sezonowość na podstawie lokalnych wzorców — jeśli wzorzec się przesuwa, „ucieka” lub miesza z trendem, potrzebujesz krótkiej procedury sprawdzającej i ponownej kalibracji.
Kiedy podejrzewać, że sezonowość przestała pasować
- Reszty przestają wyglądać jak szum: pojawiają się regularne fale, serie dodatnich/ujemnych odchyleń lub wyraźna struktura.
- Sezonowość „wędruje”: amplituda rośnie/maleje, a komponent sezonowy nie nadąża za zmianą poziomu lub kształtu cyklu.
- Trend robi się „pofalowany”: sezonowość częściowo przenika do trendu (albo trend do sezonowości), co widać jako nienaturalne oscylacje.
- Zmiana reżimu: po konkretnym momencie (np. wdrożenie nowego procesu) wcześniejszy wzorzec tygodniowy/miesięczny przestaje się powtarzać.
- Efekty kalendarzowe dominują: święta, długie weekendy czy liczba dni roboczych zaczynają silniej wpływać niż „typowy” cykl sezonowy.
Procedura diagnostyczno-naprawcza (krótko i praktycznie)
Poniżej minimalny zestaw kroków, który zwykle wystarcza, by rozróżnić: (a) realną zmianę sezonowości, (b) problem jakości danych, (c) nieadekwatne ustawienia dekompozycji.
- 1) Zlokalizuj moment zmiany
Ustal, od kiedy wzorzec zaczął odbiegać. Jeśli potrafisz wskazać konkretną datę/okres, później łatwiej odróżnisz zmianę biznesową od artefaktów w danych. - 2) Odróżnij zmianę sezonowości od problemu danych
Sprawdź, czy w okolicy zmiany nie ma braków, skoków raportowania, zmian definicji KPI, migracji systemu lub jednorazowych zdarzeń. Jeśli tak, najpierw „napraw” dane (lub oznacz okres jako niereprezentatywny), dopiero potem kalibruj sezonowość. - 3) Oceń, czy to zmiana amplitudy, kształtu czy okresu
Innej reakcji wymaga sytuacja, gdy cykl jest ten sam, ale zmienia się siła wahań, a innej — gdy zmienia się sam układ dni/tygodni z wysokimi i niskimi wartościami. Zmiana okresu (np. przejście z cyklu tygodniowego na dwutygodniowy) to sygnał do weryfikacji, czy na pewno modelujesz właściwą „częstotliwość biznesową”. - 4) Sprawdź „przecieki” między komponentami
Jeśli trend wygląda jak poszarpany lub sezonowość jest podejrzanie płaska, to znak, że wygładzanie jest niedopasowane. W praktyce chodzi o to, by sezonowość przejmowała powtarzalny wzorzec, a trend — długofalowy ruch poziomu. - 5) Zastosuj podejście okienne lub segmentowe
Gdy sezonowość zmienia się w czasie, rozważ analizę w dwóch oknach: „przed” i „po” zmianie. To prosta metoda, by potwierdzić, że wzorzec rzeczywiście się przełączył, a nie jest tylko chwilową anomalią. - 6) Uaktualnij kalibrację i porównaj wyniki
Po zmianach ustawień lub zakresu danych porównaj, czy reszty stają się bardziej losowe, a komponenty bardziej stabilne i interpretowalne. Jeśli po rekonstrukcji trend i sezonowość są „czystsze”, to znak, że kalibracja idzie w dobrą stronę. - 7) Udokumentuj nowy reżim sezonowy
Zapisz, od kiedy obowiązuje nowy wzorzec i z jakim zdarzeniem biznesowym go wiążesz (jeśli to możliwe). Taka notatka oszczędza czas przy kolejnych przeglądach i ułatwia komunikację w zespole.
Ponowna kalibracja: na co uważać, by nie „przemodelować” danych
- Nie gon sezonowości za każdą anomalią: jeśli dopasujesz sezonowość do jednorazowych zdarzeń, stracisz zdolność do wykrywania nietypowych odchyleń.
- Uważaj na zbyt agresywne wygładzanie: może „wyprać” realne zmiany sezonowe i przerzucić je do reszt lub trendu.
- Uważaj na zbyt elastyczną sezonowość: może zacząć tłumaczyć szum i incydenty jako „nową sezonowość”.
- Traktuj zmiany definicji KPI jak granice porównywalności: w takich punktach dekompozycja często wymaga osobnego podejścia przed/po, bo komponenty nie muszą mieć ciągłości interpretacyjnej.
Efekt końcowy: co uznawać za „naprawione”
Po skutecznej diagnostyce i kalibracji zwykle obserwujesz trzy rzeczy: (1) sezonowość jest spójna z intuicją biznesową i stabilna w krótkich horyzontach, (2) trend odzyskuje gładki, sensowny przebieg bez cyklicznych zafalowań, (3) reszty nie niosą już wyraźnej powtarzalnej struktury. To praktyczne kryteria, które pozwalają wrócić do wiarygodnego wykrywania trendów, oceny wpływu zdarzeń i monitorowania odchyleń.
8. Przykłady zastosowań (HR/edukacja/produkty) oraz checklista założeń i diagnostyka modelu
STL przydaje się wszędzie tam, gdzie chcesz zobaczyć (a nie tylko „wyliczyć”) co jest długoterminową zmianą, co powtarzalnym wzorcem, a co szumem. W praktyce oznacza to: szybsze wyjaśnianie wahań KPI interesariuszom, sensowniejsze porównania „miesiąc do miesiąca” po odjęciu sezonowości oraz wczesne wychwytywanie nietypowych zdarzeń.
Przykłady zastosowań
-
HR (np. rekrutacja, absencje, rotacja)
Wolumen aplikacji: rozdzielenie wpływu sezonu (np. cykle akademickie, urlopy) od trendu (zmiany atrakcyjności ofert, efekty kampanii).
Absencje: wydzielenie powtarzalnych wzorców (np. tygodniowość, okresy świąteczne) i szybkie wskazanie epizodów nietypowych (np. lokalne ogniska chorób, incydenty operacyjne).
Rotacja: ocena, czy skoki w odejściach to sezon (np. po bonusach/ocenach) czy trwała zmiana trendu (np. reakcja na politykę wynagrodzeń).
-
Edukacja (np. aktywność uczących się, frekwencja, wyniki)
Aktywność w platformie: sezonowość tygodniowa (dni robocze vs weekend) oraz „piki” przed terminami zaliczeń; trend pokazuje, czy program angażuje coraz bardziej czy coraz mniej.
Frekwencja: odfiltrowanie kalendarza (święta, ferie, sesje) od długofalowych zmian (np. przejście na hybrydę, zmiana planu zajęć).
Wyniki/oceny: identyfikacja okresów, w których wyniki odbiegają od typowego wzorca sezonowego (np. zmiana trudności materiału, zmiana formy egzaminu).
-
Produkty cyfrowe (np. aktywni użytkownicy, konwersja, retencja, zgłoszenia)
DAU/WAU/MAU: oddzielenie rytmu tygodnia i świąt od realnego wzrostu/spadku; łatwiejsza ocena wpływu wdrożeń bez mylenia ich z sezonem.
Konwersja: sprawdzenie, czy zmienność to efekt kampanii/UX (trend) czy regularny cykl (np. „payday effect”, weekendy); reszty pomagają wyłapać anomalie pomiaru.
Ticket volume: rozpoznanie regularnych pików (np. poniedziałki, po wydaniach) i nietypowych zdarzeń (awarie, regresje), które pojawiają się w resztach.
Checklista założeń i szybka diagnostyka jakości dekompozycji
-
Jasno zdefiniowana częstotliwość i regularność próbkowania: czy obserwacje są w równych odstępach (dzień/dzień, tydzień/tydzień)? Jeśli nie, ryzykujesz „fałszywe” wzorce sezonowe.
-
Sezon ma sens biznesowy: zanim uznasz komponent sezonowy za „prawdę”, sprawdź, czy odpowiada znanym cyklom (tydzień, miesiąc, rok, kalendarz szkolny). Brak takiego uzasadnienia bywa sygnałem problemu z danymi lub parametrami.
-
Stabilność sezonowości w czasie: czy amplituda i kształt sezonu są podobne na przestrzeni lat/kwartałów? Gwałtowne zmiany mogą oznaczać zmianę zachowań użytkowników, zmianę definicji KPI albo konieczność innej konfiguracji.
-
Trend nie „podkrada” sezonu i odwrotnie: jeśli trend zaczyna falować w rytmie sezonowym albo sezon „dryfuje” jak trend, to typowy sygnał złego dopasowania (np. za agresywne/za słabe wygładzanie).
-
Reszty wyglądają jak szum, a nie jak wzorzec: w dobrym rozkładzie reszty nie powinny mieć widocznej sezonowości ani systematycznych długich serii dodatnich/ujemnych odchyleń. Jeśli mają, coś zostało niewyjaśnione.
-
Wrażliwość na outliery: pojedyncze incydenty (awaria, akcja marketingowa, migracja danych) nie powinny „ciągnąć” trendu i sezonu na wiele tygodni. Jeśli tak się dzieje, potraktuj je jawnie jako zdarzenia nadzwyczajne lub wzmocnij odporność procedury.
-
Spójność definicji KPI: zmiany instrumentacji, definicji zdarzeń, sposobu liczenia użytkowników czy zgłoszeń często udają „trend”. Zweryfikuj, czy na osi czasu nie ma punktów zmiany metodologii.
-
Efekty kalendarza: święta ruchome, długie weekendy, ferie czy przerwy semestralne potrafią wyglądać jak anomalie albo „łamany” trend. Warto umieć je rozpoznać i nie interpretować jako trwałej zmiany zachowań.
-
Porównania po „odsezonowaniu” mają sens: jeśli po usunięciu sezonowości nadal widzisz powtarzalne wzorce zależne od dnia tygodnia/miesiąca, to odsezonowanie jest niepełne lub sezon ma więcej niż jeden cykl.
-
Granice interpretacji: STL pomaga opisać strukturę danych, ale nie dowodzi przyczynowości. Trend i sezon to komponenty opisowe — wnioski o przyczynach wymagają kontekstu (zmian w produkcie, politykach HR, kalendarzu edukacyjnym).
Jeżeli po tej checklistcie komponenty wyglądają intuicyjnie, reszty są „nieuporządkowane”, a sezonowość ma biznesowy sens, to masz solidną bazę do dalszych wniosków i komunikacji wyników bez uciekania w nieprzejrzyste modele. Jeśli chcesz poznać więcej takich przykładów, zapraszamy na szkolenia Cognity, gdzie rozwijamy ten temat w praktyce.