Tijdreeksdecompositie: begrijp trends, seizoensinvloeden en ruis
Leer hoe je tijdreeksdata opsplitst in betekenisvolle componenten zoals trend, seizoensinvloeden en resttermen met additieve en multiplicatieve modellen. Leer over zowel klassieke als STL‑methoden. Verken seizoenscorrecties en oefen met forecasting met decompositiemodellen.
Decompositie is een van de interessantste dingen in data science. In de kern draait decompositie om het opsplitsen van iets complex in eenvoudigere, beter interpreteerbare onderdelen. Dat kan gaan om een matrix, een model of een signaal.
Omdat het een algemeen idee is, kan het veel vormen aannemen. In de lineaire algebra heb je bijvoorbeeld QR-decompositie, eigendecompositie, singular value decomposition en Cholesky-decompositie, om er een paar te noemen. In andere domeinen zijn er de Fourriertransformatie, principalecomponentenanalyse en zelfs topic modeling met methoden als LDA. De variabiliteit in regressiemodellen kan worden ontleed in som‑van‑kwadratencomponenten: SST, SSR en SSE. Je kunt zelfs beslissingsbomen zien als een vorm van decompositie.
Hier bekijken we een van onze favorieten: tijdreeksdecompositie. Als we je nieuwsgierigheid hebben gewekt, volg dan onze cursus Forecasting in R met professor Rob Hyndman.
Wat is tijdreeksdecompositie?
Tijdreeksdecompositie is een methode om een tijdreeks op te splitsen in afzonderlijke componenten: trend of trend‑cyclus, seizoensinvloeden en resttermen. Het doel is om de onderliggende patronen beter te begrijpen en de nauwkeurigheid van voorspellingen te verbeteren.
Wat zijn de componenten van een tijdreeks?
Laten we de tijdreekscomponenten bekijken. Dat is waarschijnlijk de beste manier om het idee te begrijpen.
Trendcomponent
De trend van een tijdreeks (zoals de naam al aangeeft) is de langetermijnbeweging. We moeten erbij zeggen dat de trendcomponent vaak wordt opgevat als de trend‑cyclus, waarbij cycli worden gezien als lange, onregelmatige patronen. Autoverkopen werden historisch gezien in zevenjarige cycli geacht te bewegen (om wat voor reden dan ook), al is dat waarschijnlijk, met de opkomst van elektrische auto’s, niet meer zo.
De belangrijkste vraag bij de trend is meestal: Neemt de data op de lange termijn toe, af of blijft ze stabiel? Een wereldwijde stijging van de oceaantemperaturen in de afgelopen decennia is een duidelijke (lees: slechte) trend.
Seizoenscomponent
De seizoenscomponent kost iets meer tijd om uit te leggen, omdat die wat complexer is. De seizoenscomponent van een tijdreeks zijn de terugkerende kortetermijncycli in de data die op regelmatige intervallen optreden. Denk aan dagelijks, maandelijks, wekelijks, per kwartaal. Belangrijk is dat die intervallen behoorlijk regelmatig zijn. Je kunt bijvoorbeeld zien dat koffiehuiskopen een wekelijkse seizoensinvloed volgen als mensen op zondag liever thuis koffie zetten. (We verkennen deze vraag over bestellingen bij koffiezaken in de volgende sectie.)
Het punt met seizoensinvloeden is dat ze ingewikkelder kunnen zijn dan ze lijken. Denk eraan dat het aantal weken in een jaar geen geheel getal is (~52,18). Of dat de maanden niet gelijk zijn verdeeld: februari heeft 28 (of 29) dagen, maar juli heeft altijd 31.
Omdat elk jaar iets meer dan 52 weken heeft, en maanden ook variëren, kun je de meeste maanden niet netjes in weken opdelen. Dat zie je meteen op een kalender. Minder voor de hand liggend voor een data-analist is dat, als je naar wekelijkse data kijkt en die vervolgens samenvoegt tot maanddata, je inconsistente dingen kunt zien, zoals dat de ene januari vier maandagen heeft en de volgende vijf.
De rest-/irreguliere/remaindercomponent
Alles wat overblijft nadat je de trend‑cyclus en de seizoenscomponent hebt verwijderd, noemen we, terecht, de restcomponent. Die omvat afwijkende zaken in de data, zoals een groot evenement, en willekeurige ruis. In tegenstelling tot wat je misschien denkt op basis van de naam, is de restcomponent geen nutteloos bijproduct. Alle data bevatten onverklaarde variabiliteit, en het kwantificeren daarvan is belangrijk. Interessant genoeg nemen resttermen vaak de vorm aan van een Gaussverdeling in een goed‑gedrage reeks, in welk geval we zwarte‑zwanengebeurtenissen kunnen evalueren met hypothesetests.
Modellen voor tijdreeksdecompositie
Nu we de onderdelen van een tijdreeks hebben behandeld, moeten we vermelden dat er twee algemene typen tijdreeksdecompositie zijn. We beginnen met het additieve model.
Additieve decompositie
Hier is de formule voor additieve decompositie:
Let op de plustekens. Deze formule zegt dat als je de trend optelt bij de seizoenscomponent en daar de resttermen bij optelt, je de oorspronkelijke tijdreeks terugkrijgt. In het algemeen gebruiken we een additieve decompositie wanneer de seizoensvariatie in de tijd constant is.
Multiplicatieve decompositie
Hier is de formule voor multiplicatieve decompositie. Let in deze versie op de vermenigvuldigingstekens.
We gebruiken een multiplicatief model wanneer de seizoensvariatie meebeweegt met de trend. Dus wanneer je ziet dat de omvang van de seizoenseffecten groter wordt naarmate de totale reeks stijgt of daalt. Wat we hier beschrijven is eigenlijk een vorm van heteroscedasticiteit.
Technieken voor tijdreeksdecompositie
Tot nu toe hebben we besproken wat er in een tijdreeksdecompositie zit en de twee belangrijkste typen. Nu moeten we het hebben over de twee meest gebruikte methoden. Elk daarvan kan additief of multiplicatief worden toegepast.
Klassieke decompositie
Klassieke decompositie is makkelijker te begrijpen. Het stamt uit de jaren 1920, maar is nog steeds relevant. Om klassieke decompositie te laten zien, gebruiken we Excel. Klassieke decompositie, net als STL, dat we zo laten zien, kan met een additief of multiplicatief model. In dit voorbeeld maken we een additieve versie.
Als je het zelf wilt proberen, gebruik dan het CSV‑bestand index_1 in deze zeer interessante koffieverkoopdataset op Kaggle. Ter referentie: we hebben de verkopen per dag geaggregeerd en samengevat.
Eerst berekenen we de trend‑cyclus. We constateren een wekelijkse seizoensinvloed, en er zijn zeven dagen in een week, dus de seizoensperiode is oneven, wat betekent dat ons voortschrijdend gemiddelde gecentreerd moet worden met een symmetrisch venster. Dus een voortschrijdend gemiddelde over 7 dagen. Let goed op de uitlijning en centrering in het Excel‑blad.
Vervolgens vinden we de gedetrende reeks door de trend van de oorspronkelijke reeks af te trekken.
Dan bepalen we de seizoenscomponent door de gedetrende waarden per seizoensperiode te middelen. Een belangrijke toevoeging: Je zult zien dat de seizoenscomponent waarschijnlijk niet exact optelt tot nul. Corrigeer dit met normalisatie:
Bereken het gemiddelde van je seizoenscomponent.
Trek het seizoensgemiddelde af van elke seizoenswaarde.
Tot slot trekken we voor de remainder de trend en seizoensperiode af van de oorspronkelijke reeks.
Als we zouden zien dat onze reeks een seizoenseffect had dat veranderde met het dataniveau, dan zouden we in plaats daarvan een multiplicatieve decompositie overwegen. De stappen voor multiplicatieve decompositie zijn grotendeels hetzelfde, behalve dat we delen in plaats van aftrekken. Concreet zouden we de gedetrende reeks vinden door de oorspronkelijke reeks te delen door de trend‑cyclus. En later zouden we voor de remainder de oorspronkelijke reeks delen door het product van de trend- en seizoenscomponenten. (Als alternatief hadden we de natuurlijke logaritme van de oorspronkelijke reeks kunnen nemen en een additieve decompositie toepassen. Dat komt neer op hetzelfde.)
STL‑decompositie
STL‑decompositie, wat staat voor seasonal and trend decomposition using LOESS, is een modernere variant van decompositie. Het is lastiger om uit te leggen, maar is over het algemeen flexibeler dan de klassieke methode. STL werkt met een methode genaamd LOESS, die simpele regressiemodellen fit op kleine overlappende stukjes van de data. Deze lokaal gewogen regressie wordt toegepast om de trend- en seizoenscomponenten afzonderlijk te isoleren.
Deze methode pakt specifieke nadelen van klassieke decompositie aan, namelijk dat je bij de klassieke variant geen schattingen van de trend‑cyclus of remainder hebt voor de eerste en laatste observaties. Je ziet dit aan de lege Excel‑cellen in de rijen 3, 4, 5 en 20, 21 en 22 hierboven.
We moeten ook zeggen dat de trend‑cyclus zoals bepaald door klassieke decompositie snelle stijgingen en dalingen afvlakt, waardoor belangrijke zaken in de reeks over het hoofd kunnen worden gezien. Tot slot gaat klassieke decompositie ervan uit dat er een seizoenspatroon is, maar met genoeg data zien we soms dat het seizoenspatroon verandert.
Laten we beginnen met het maken van een tijdplot van de oorspronkelijke reeks. Net als hiervoor aggregeren en vatten we de Kaggle‑dataset eerst samen om de reeks te krijgen die we willen.
coffee_sales_data <- read.csv("/Users/x/Desktop/index_1.csv")
coffee_sales_data <- as.data.frame(coffee_sales_data)Mogelijk gemaakt door
library(dplyr)
library(ggplot2)
coffee_sales_data |>
group_by(date)|>
summarize(money = sum(money))|>
ggplot(aes(x = as.Date(date), y = money))+
geom_line(color ='#01ef63')+
labs(title ="Coffee Sales")+
labs(subtitle ="Time series")Mogelijk gemaakt door
Vervolgens ontleden we onze reeks in trend-, seizoens- en remaindercomponenten. Het vak bovenaan de decompositiegrafiek toont de oorspronkelijke reeks, zij het wat gecomprimeerd.
Er zijn ook nadelen aan STL‑decompositie; als je geïnteresseerd bent, hebben we die informatie in onze veelgestelde vragen toegevoegd.
Tijdreeksdecompositie en seizoenscorrecties
Vaak is het handig om een seizoensgecorrigeerde versie van de data te maken. Tijdreeksdecompositie helpt hierbij. Om een seizoensgecorrigeerde versie te maken, tellen we simpelweg de trend en de remainder bij elkaar op. Of we kunnen de seizoenscomponent van de oorspronkelijke reeks aftrekken; beide leveren hetzelfde op.
We ontdekken dat er in deze specifieke dataset niet bijzonder sterke seizoensinvloeden zijn, wat op zichzelf interessant is.
De kracht van seizoensgecorrigeerde data is dat die kan helpen bepaalde kenmerken van onze reeks te begrijpen. Zo kunnen we zien of de onderliggende trend het gevolg is van seizoensinvloeden. En we kunnen ongewone verschijnselen in de data beter onderzoeken. Denken we dat onze vrijdagactie werkte omdat het vrijdag was of omdat het een actie was? Met tijdreeksdecompositie en seizoenscorrecties kunnen we dat soort vragen testen.
Tijdreeksdecompositie en forecasting
Misschien verrast het je dat tijdreeksdecompositie ook nuttig is bij forecasting. We denken daar op twee manieren over. Ten eerste willen we onze tijdreekscomponenten begrijpen om te bepalen welk voorspellingsmodel we moeten gebruiken. Als we sterke seizoensinvloeden zien, neigen we naar modellen als Holt‑Winters exponentiële smoothing of ETS‑methoden, die specifiek zijn gemaakt om met zowel trend als seizoenscomponenten om te gaan.
Ten tweede kunnen we gedecomponeerde data zelfs als onderdeel van onze forecasting gebruiken, wat ons opties geeft. We kunnen bijvoorbeeld een niet‑seizoensmatig voorspellingsmodel draaien op een seizoensgecorrigeerde versie van onze data. (We kunnen de seizoenscomponent later weer toevoegen.) Seizoenscorrectie is vooral handig als we flexibele modellen willen gebruiken, zoals standaard ARIMA en lineaire regressie.
Hier maken we een eenvoudig ARIMA‑model om de seizoensgecorrigeerde data te voorspellen.
season_adjust_data_filtered <- season_adjust_data |>
filter(series =="season_adjust")|>
as_tsibble(index = date)
seasonal_adjust_arima_model <- season_adjust_data_filtered |>
model(
ARIMA(value))
seasonal_adjust_arima_model |>
forecast(h ="14 days")|>
autoplot(season_adjust_data_filtered, color ='#01ef63')+
labs(title ="Forecast of Seasonally Adjusted Coffee Sales",
subtitle ="Simple ARIMA Model",
y ="Money (Seasonally Adjusted)",
x ="Date")Mogelijk gemaakt door
We kunnen ook de seizoensgecorrigeerde reeks voorspellen en de seizoenscomponent terugplaatsen, wat ons in feite een seizoensvoorspelling geeft. Dit alles is mogelijk gemaakt door onze oorspronkelijke decompositie.
# Build tagged historical and forecast data
historical_data <- components |>
as_tibble()|>
select(date, money)|>
mutate(source ="historical")
forecast_data <- final_forecast |>
as_tibble()|>
transmute(date, money = money_forecast)|>
mutate(source ="forecast")# Bind and create tsibble
full_data <- bind_rows(historical_data, forecast_data)|>
as_tsibble(index = date, validate =FALSE)# Plot with color by source
full_data |>
ggplot(aes(x = date, y = money, color = source))+
geom_line()+
scale_color_manual(values = c("historical"="#203147",# dark blue for real data"forecast"="#01ef63"# green for forecast))+
labs(
title ="Coffee Sales: Actual and Forecast",
subtitle ="Historical vs Forecast",
y ="Money",
x ="Date")Mogelijk gemaakt door
Tot slot
Ik hoop dat je ons artikel over tijdreeksdecompositie leuk vond! Onthoud dat decompositie slechts één onderdeel is van tijdreeksanalyse. Wil je expert worden, schrijf je dan in voor onze cursus Forecasting in R met professor Rob Hyndman, die meehielp aan de ontwikkeling van de R‑pakketten die we voor onze visuals gebruikten. We hebben ook een cursus Visualizing Time Series Data in Python als je de ideeën in dit artikel interessant vond maar de voorkeur geeft aan Python, dat hier ook erg goed voor is.
Auteur
Josef Waples
Ik ben een schrijver en editor op het gebied van data science en heb bijgedragen aan onderzoeksartikelen in wetenschappelijke tijdschriften. Ik ben vooral geïnteresseerd in lineaire algebra, statistiek, R en dergelijke. Ik speel ook best wat schaak!
Ik ben een contentstrateeg die graag complexe onderwerpen eenvoudig maakt. Ik heb bedrijven als Splunk, Hackernoon en Tiiny Host geholpen om boeiende en informatieve content te maken voor hun doelgroep.
FAQs
Wat is tijdreeksdecompositie?⌄
Tijdreeksdecompositie is het proces waarbij je een tijdreeks opsplitst in drie interpreteerbare componenten: trend, seizoensinvloeden en resttermen (of irreguliere component). De trend toont langetermijnontwikkeling, de seizoenscomponent vangt terugkerende kortetermijncycli en de restterm weerspiegelt willekeurige ruis of onverwachte gebeurtenissen. Decompositie helpt analisten de structuur van de data beter te begrijpen en kan forecasting verbeteren door elke component afzonderlijk te modelleren.
Waarom ontbreken er waarden aan het begin en einde bij klassieke decompositie?⌄
Gecentreerde voortschrijdende gemiddelden vereisen symmetrische data rond elk punt. Bij een 7‑daags voortschrijdend gemiddelde kun je geen gecentreerde waarde berekenen voor de eerste drie of laatste drie dagen. Daardoor levert klassieke decompositie geen schattingen aan de randen op, waardoor er gaten ontstaan in de trend-, seizoens- en restcomponent aan het begin en einde.
Wanneer gebruik ik additieve vs. multiplicatieve decompositie?⌄
Gebruik additieve decompositie wanneer de seizoensschommelingen grofweg constant blijven in de tijd.
Gebruik multiplicatieve decompositie wanneer de seizoenscomponent toeneemt of afneemt met de trend, wat betekent dat het effect mee schaalt met het niveau van de data. Dit komt vaak voor bij heteroscedastische tijdreeksen (met niet‑constante variantie).
Kan ik wisselen tussen additieve en multiplicatieve decompositie?⌄
Ja. Een gebruikelijke aanpak is om de reeks logaritmisch te transformeren en additief te decomponeren. Dit is wiskundig gelijkwaardig aan een multiplicatief model in de oorspronkelijke schaal. Het kan het modelleren vereenvoudigen en de variantie stabiliseren.
Volgen resttermen uit decompositie altijd een Gaussverdeling?⌄
Nee. Hoewel STL‑decompositie veronderstelt dat resttermen ongeveer normaal verdeeld zijn, is dat in echte data niet altijd zo. De resttermen kunnen scheef, leptokurtisch zijn of beïnvloed worden door uitschieters en structurele breuken. Als de decompositie echter goed past, lijkt de remainder vaak op Gaussiaanse ruis.
Wat zijn de nadelen van klassieke decompositie?⌄
Klassieke decompositie heeft meerdere beperkingen:
Randeffecten: zoals genoemd, kan ze de trend‑cyclus of resttermen aan het begin of het einde van de reeks niet schatten.
Vaste seizoensinvloeden: ze gaat ervan uit dat seizoenspatronen stabiel zijn en niet veranderen in de tijd.
Gevoeligheid voor uitschieters: omdat ze is gebaseerd op voortschrijdende gemiddelden en simpele gemiddelden, is ze vatbaarder voor verstoring door extreme waarden.
Beperkte flexibiliteit: ze gebruikt vooraf gedefinieerde afvlakregels en kan zich minder goed aanpassen aan niet‑standaard patronen.
Waarom is STL‑decompositie beter dan klassieke decompositie?⌄
STL pakt veel beperkingen van klassieke decompositie aan:
Kan omgaan met niet‑constante seizoensinvloeden, waarbij patronen in de tijd veranderen.
Biedt schattingen aan de randen, zodat er geen missende waarden aan de uiteinden zijn.
Staat gebruikersgedefinieerde afvlakparameters toe, wat meer controle geeft over hoe sterk elke component wordt afgevlakt.
Is robuust tegen uitschieters met robuuste fitopties.
Heeft STL‑decompositie beperkingen?⌄
Ja. Hoewel STL flexibeler is, zijn er een paar kanttekeningen:
STL ondersteunt alleen additieve decompositie, geen multiplicatieve. Als er multiplicatief gedrag is, is een logtransformatie nodig.
Er is parameterafstemming nodig voor seizoens- en trendvensters om optimale resultaten te krijgen.
Er wordt uitgegaan van periodieke seizoensinvloeden, wat onregelmatige of veranderende seizoensperioden minder goed kan vangen zonder aanpassingen.
Wat is LOESS in STL‑decompositie?⌄
LOESS (Locally Estimated Scatterplot Smoothing) is een vorm van lokale regressie die in STL‑decompositie wordt gebruikt om vloeiende krommen te schatten op subsets van de data. In plaats van één globale trend te fitten, past LOESS veel kleine, eenvoudige regressies toe over overlappende vensters. Deze lokale fits worden gecombineerd tot vloeiende schattingen van de trend- en seizoenscomponenten. Dit maakt LOESS bijzonder geschikt om geleidelijke veranderingen en onregelmatige patronen in tijdreeksdata vast te leggen.
Wat is een voortschrijdend gemiddelde in tijdreeksanalyse?⌄
Een voortschrijdend gemiddelde is een afvlaktechniek die wordt gebruikt om kortetermijnschommelingen te verminderen en langetermijntrends in tijdreeksdata te benadrukken. Het werkt door het gemiddelde te nemen over een vast venster (zoals 7 dagen of 12 maanden) dat langs de reeks "meeschuift". Een 7‑daags voortschrijdend gemiddelde vlakt bijvoorbeeld elk punt af door het te middelen met de drie dagen ervoor en erna. Voortschrijdende gemiddelden worden vaak gebruikt om de trendcomponent in klassieke decompositie te schatten.
Wat is een decompositiemodel?⌄
Een decompositiemodel is een manier om een tijdreeks op te delen in afzonderlijke delen die elk een ander type patroon in de data verklaren. Die delen omvatten meestal een trend (de langetermijnrichting), seizoensinvloeden (terugkerende kortetermijncycli) en resttermen (willekeurige ruis of onregelmatige gebeurtenissen). Er zijn twee hoofdtypen decompositiemodellen: additief, waarbij de delen bij elkaar worden opgeteld, en multiplicatief, waarbij de delen met elkaar worden vermenigvuldigd. De keuze hiertussen hangt af van de vraag of de omvang van seizoensveranderingen constant blijft of meegroeit met het algehele niveau van de data.
Leer hoe u gegevens analyseert met draaitabellen en intermediaire logische functies voordat u doorgaat naar hulpmiddelen zoals wat-als-analyse en prognoses.
Leer de basisvaardigheden die je nodig hebt om Excel te gebruiken, van het voorbereiden van gegevens tot het schrijven van formules en het maken van visualisaties. Je hoeft geen ervaring te hebben.
Decompositie is een van de interessantste dingen in data science. In de kern draait decompositie om het opsplitsen van iets complex in eenvoudigere, beter interpreteerbare onderdelen. Dat kan gaan om een matrix, een model of een signaal.
Omdat het een algemeen idee is, kan het veel vormen aannemen. In de lineaire algebra heb je bijvoorbeeld QR-decompositie, eigendecompositie, singular value decomposition en Cholesky-decompositie, om er een paar te noemen. In andere domeinen zijn er de Fourriertransformatie, principalecomponentenanalyse en zelfs topic modeling met methoden als LDA. De variabiliteit in regressiemodellen kan worden ontleed in som‑van‑kwadratencomponenten: SST, SSR en SSE. Je kunt zelfs beslissingsbomen zien als een vorm van decompositie.
Hier bekijken we een van onze favorieten: tijdreeksdecompositie. Als we je nieuwsgierigheid hebben gewekt, volg dan onze cursus Forecasting in R met professor Rob Hyndman.
Wat is tijdreeksdecompositie?
Tijdreeksdecompositie is een methode om een tijdreeks op te splitsen in afzonderlijke componenten: trend of trend‑cyclus, seizoensinvloeden en resttermen. Het doel is om de onderliggende patronen beter te begrijpen en de nauwkeurigheid van voorspellingen te verbeteren.
Wat zijn de componenten van een tijdreeks?
Laten we de tijdreekscomponenten bekijken. Dat is waarschijnlijk de beste manier om het idee te begrijpen.
Trendcomponent
De trend van een tijdreeks (zoals de naam al aangeeft) is de langetermijnbeweging. We moeten erbij zeggen dat de trendcomponent vaak wordt opgevat als de trend‑cyclus, waarbij cycli worden gezien als lange, onregelmatige patronen. Autoverkopen werden historisch gezien in zevenjarige cycli geacht te bewegen (om wat voor reden dan ook), al is dat waarschijnlijk, met de opkomst van elektrische auto’s, niet meer zo.
De belangrijkste vraag bij de trend is meestal: Neemt de data op de lange termijn toe, af of blijft ze stabiel? Een wereldwijde stijging van de oceaantemperaturen in de afgelopen decennia is een duidelijke (lees: slechte) trend.
Seizoenscomponent
De seizoenscomponent kost iets meer tijd om uit te leggen, omdat die wat complexer is. De seizoenscomponent van een tijdreeks zijn de terugkerende kortetermijncycli in de data die op regelmatige intervallen optreden. Denk aan dagelijks, maandelijks, wekelijks, per kwartaal. Belangrijk is dat die intervallen behoorlijk regelmatig zijn. Je kunt bijvoorbeeld zien dat koffiehuiskopen een wekelijkse seizoensinvloed volgen als mensen op zondag liever thuis koffie zetten. (We verkennen deze vraag over bestellingen bij koffiezaken in de volgende sectie.)
Het punt met seizoensinvloeden is dat ze ingewikkelder kunnen zijn dan ze lijken. Denk eraan dat het aantal weken in een jaar geen geheel getal is (~52,18). Of dat de maanden niet gelijk zijn verdeeld: februari heeft 28 (of 29) dagen, maar juli heeft altijd 31.
Omdat elk jaar iets meer dan 52 weken heeft, en maanden ook variëren, kun je de meeste maanden niet netjes in weken opdelen. Dat zie je meteen op een kalender. Minder voor de hand liggend voor een data-analist is dat, als je naar wekelijkse data kijkt en die vervolgens samenvoegt tot maanddata, je inconsistente dingen kunt zien, zoals dat de ene januari vier maandagen heeft en de volgende vijf.
De rest-/irreguliere/remaindercomponent
Alles wat overblijft nadat je de trend‑cyclus en de seizoenscomponent hebt verwijderd, noemen we, terecht, de restcomponent. Die omvat afwijkende zaken in de data, zoals een groot evenement, en willekeurige ruis. In tegenstelling tot wat je misschien denkt op basis van de naam, is de restcomponent geen nutteloos bijproduct. Alle data bevatten onverklaarde variabiliteit, en het kwantificeren daarvan is belangrijk. Interessant genoeg nemen resttermen vaak de vorm aan van een Gaussverdeling in een goed‑gedrage reeks, in welk geval we zwarte‑zwanengebeurtenissen kunnen evalueren met hypothesetests.
Modellen voor tijdreeksdecompositie
Nu we de onderdelen van een tijdreeks hebben behandeld, moeten we vermelden dat er twee algemene typen tijdreeksdecompositie zijn. We beginnen met het additieve model.
Additieve decompositie
Hier is de formule voor additieve decompositie:
Let op de plustekens. Deze formule zegt dat als je de trend optelt bij de seizoenscomponent en daar de resttermen bij optelt, je de oorspronkelijke tijdreeks terugkrijgt. In het algemeen gebruiken we een additieve decompositie wanneer de seizoensvariatie in de tijd constant is.
Multiplicatieve decompositie
Hier is de formule voor multiplicatieve decompositie. Let in deze versie op de vermenigvuldigingstekens.
We gebruiken een multiplicatief model wanneer de seizoensvariatie meebeweegt met de trend. Dus wanneer je ziet dat de omvang van de seizoenseffecten groter wordt naarmate de totale reeks stijgt of daalt. Wat we hier beschrijven is eigenlijk een vorm van heteroscedasticiteit.
Technieken voor tijdreeksdecompositie
Tot nu toe hebben we besproken wat er in een tijdreeksdecompositie zit en de twee belangrijkste typen. Nu moeten we het hebben over de twee meest gebruikte methoden. Elk daarvan kan additief of multiplicatief worden toegepast.
Klassieke decompositie
Klassieke decompositie is makkelijker te begrijpen. Het stamt uit de jaren 1920, maar is nog steeds relevant. Om klassieke decompositie te laten zien, gebruiken we Excel. Klassieke decompositie, net als STL, dat we zo laten zien, kan met een additief of multiplicatief model. In dit voorbeeld maken we een additieve versie.
Als je het zelf wilt proberen, gebruik dan het CSV‑bestand
index_1in deze zeer interessante koffieverkoopdataset op Kaggle. Ter referentie: we hebben de verkopen per dag geaggregeerd en samengevat.Eerst berekenen we de trend‑cyclus. We constateren een wekelijkse seizoensinvloed, en er zijn zeven dagen in een week, dus de seizoensperiode is oneven, wat betekent dat ons voortschrijdend gemiddelde gecentreerd moet worden met een symmetrisch venster. Dus een voortschrijdend gemiddelde over 7 dagen. Let goed op de uitlijning en centrering in het Excel‑blad.
Vervolgens vinden we de gedetrende reeks door de trend van de oorspronkelijke reeks af te trekken.
Dan bepalen we de seizoenscomponent door de gedetrende waarden per seizoensperiode te middelen. Een belangrijke toevoeging: Je zult zien dat de seizoenscomponent waarschijnlijk niet exact optelt tot nul. Corrigeer dit met normalisatie:
Bereken het gemiddelde van je seizoenscomponent.
Trek het seizoensgemiddelde af van elke seizoenswaarde.
Tot slot trekken we voor de remainder de trend en seizoensperiode af van de oorspronkelijke reeks.
Als we zouden zien dat onze reeks een seizoenseffect had dat veranderde met het dataniveau, dan zouden we in plaats daarvan een multiplicatieve decompositie overwegen. De stappen voor multiplicatieve decompositie zijn grotendeels hetzelfde, behalve dat we delen in plaats van aftrekken. Concreet zouden we de gedetrende reeks vinden door de oorspronkelijke reeks te delen door de trend‑cyclus. En later zouden we voor de remainder de oorspronkelijke reeks delen door het product van de trend- en seizoenscomponenten. (Als alternatief hadden we de natuurlijke logaritme van de oorspronkelijke reeks kunnen nemen en een additieve decompositie toepassen. Dat komt neer op hetzelfde.)
STL‑decompositie
STL‑decompositie, wat staat voor seasonal and trend decomposition using LOESS, is een modernere variant van decompositie. Het is lastiger om uit te leggen, maar is over het algemeen flexibeler dan de klassieke methode. STL werkt met een methode genaamd LOESS, die simpele regressiemodellen fit op kleine overlappende stukjes van de data. Deze lokaal gewogen regressie wordt toegepast om de trend- en seizoenscomponenten afzonderlijk te isoleren.
Deze methode pakt specifieke nadelen van klassieke decompositie aan, namelijk dat je bij de klassieke variant geen schattingen van de trend‑cyclus of remainder hebt voor de eerste en laatste observaties. Je ziet dit aan de lege Excel‑cellen in de rijen 3, 4, 5 en 20, 21 en 22 hierboven.
We moeten ook zeggen dat de trend‑cyclus zoals bepaald door klassieke decompositie snelle stijgingen en dalingen afvlakt, waardoor belangrijke zaken in de reeks over het hoofd kunnen worden gezien. Tot slot gaat klassieke decompositie ervan uit dat er een seizoenspatroon is, maar met genoeg data zien we soms dat het seizoenspatroon verandert.
Laten we beginnen met het maken van een tijdplot van de oorspronkelijke reeks. Net als hiervoor aggregeren en vatten we de Kaggle‑dataset eerst samen om de reeks te krijgen die we willen.
Vervolgens ontleden we onze reeks in trend-, seizoens- en remaindercomponenten. Het vak bovenaan de decompositiegrafiek toont de oorspronkelijke reeks, zij het wat gecomprimeerd.
Merk op dat, anders dan bij klassieke decompositie, de dataframe die we terugkrijgen geen gaten aan het begin of einde heeft.
Er zijn ook nadelen aan STL‑decompositie; als je geïnteresseerd bent, hebben we die informatie in onze veelgestelde vragen toegevoegd.
Tijdreeksdecompositie en seizoenscorrecties
Vaak is het handig om een seizoensgecorrigeerde versie van de data te maken. Tijdreeksdecompositie helpt hierbij. Om een seizoensgecorrigeerde versie te maken, tellen we simpelweg de trend en de remainder bij elkaar op. Of we kunnen de seizoenscomponent van de oorspronkelijke reeks aftrekken; beide leveren hetzelfde op.
We ontdekken dat er in deze specifieke dataset niet bijzonder sterke seizoensinvloeden zijn, wat op zichzelf interessant is.
De kracht van seizoensgecorrigeerde data is dat die kan helpen bepaalde kenmerken van onze reeks te begrijpen. Zo kunnen we zien of de onderliggende trend het gevolg is van seizoensinvloeden. En we kunnen ongewone verschijnselen in de data beter onderzoeken. Denken we dat onze vrijdagactie werkte omdat het vrijdag was of omdat het een actie was? Met tijdreeksdecompositie en seizoenscorrecties kunnen we dat soort vragen testen.
Tijdreeksdecompositie en forecasting
Misschien verrast het je dat tijdreeksdecompositie ook nuttig is bij forecasting. We denken daar op twee manieren over. Ten eerste willen we onze tijdreekscomponenten begrijpen om te bepalen welk voorspellingsmodel we moeten gebruiken. Als we sterke seizoensinvloeden zien, neigen we naar modellen als Holt‑Winters exponentiële smoothing of ETS‑methoden, die specifiek zijn gemaakt om met zowel trend als seizoenscomponenten om te gaan.
Ten tweede kunnen we gedecomponeerde data zelfs als onderdeel van onze forecasting gebruiken, wat ons opties geeft. We kunnen bijvoorbeeld een niet‑seizoensmatig voorspellingsmodel draaien op een seizoensgecorrigeerde versie van onze data. (We kunnen de seizoenscomponent later weer toevoegen.) Seizoenscorrectie is vooral handig als we flexibele modellen willen gebruiken, zoals standaard ARIMA en lineaire regressie.
Hier maken we een eenvoudig ARIMA‑model om de seizoensgecorrigeerde data te voorspellen.
We kunnen ook de seizoensgecorrigeerde reeks voorspellen en de seizoenscomponent terugplaatsen, wat ons in feite een seizoensvoorspelling geeft. Dit alles is mogelijk gemaakt door onze oorspronkelijke decompositie.
Tot slot
Ik hoop dat je ons artikel over tijdreeksdecompositie leuk vond! Onthoud dat decompositie slechts één onderdeel is van tijdreeksanalyse. Wil je expert worden, schrijf je dan in voor onze cursus Forecasting in R met professor Rob Hyndman, die meehielp aan de ontwikkeling van de R‑pakketten die we voor onze visuals gebruikten. We hebben ook een cursus Visualizing Time Series Data in Python als je de ideeën in dit artikel interessant vond maar de voorkeur geeft aan Python, dat hier ook erg goed voor is.