Ga naar hoofdinhoud

Tutorial Tijdreeksvoorspelling

Een uitgebreide gids voor tijdreeksvoorspellingen. Leer werken met Python en ondersteunende frameworks. Leer over de betrokken statistische modellering.
Bijgewerkt 2 okt 2026  · 15 min lezen

Verken met AI

ChatGPTClaudePerplexity

Tijdreeksgegevens zijn gegevens die over hetzelfde onderwerp op verschillende tijdstippen zijn verzameld, zoals het bbp van een land per jaar, de aandelenkoers van een bepaald bedrijf over een periode, of je eigen hartslag die elke seconde wordt geregistreerd. Alle gegevens die je continu op verschillende tijdsintervallen kunt vastleggen, zijn een vorm van tijdreeksdata.

Hieronder staat een voorbeeld van tijdreeksgegevens met het aantal COVID-19-gevallen in de Verenigde Staten zoals gerapporteerd aan de CDC. De x-as toont het verstrijken van de tijd en de y-as geeft het aantal COVID-19-gevallen in duizenden weer.


tijdreeksdata met het aantal COVID-19-gevallen in de Verenigde Staten zoals gerapporteerd aan CDC

Meer conventionele datasets waarin informatie op één moment wordt opgeslagen, zoals informatie over klanten, producten en bedrijven, staan bekend als cross-sectionele data. Een voorbeeld hiervan zie je in de onderstaande dataset, waarin landen met de meeste COVID-19-gevallen worden gevolgd binnen een vaste en consistente periode voor alle landen.


landen met de meeste COVID-19-gevallen volgen

Het is niet heel moeilijk om het verschil tussen cross-sectionele en tijdreeksdata te onderscheiden, omdat de analyse-doelen voor beide datasets sterk verschillen. In onze voorbeelden waren we eerst geïnteresseerd in het volgen van COVID-19-gevallen over een periode, en daarna in het analyseren van COVID-19-gevallen per land binnen een vaste periode.

Een typische dataset uit de praktijk is waarschijnlijk een hybride van deze formats. Denk bijvoorbeeld aan een retailer zoals Walmart die elke dag duizenden producten verkoopt. Als je de verkoop per product op een bepaalde dag analyseert, is dat een cross-sectionele analyse. Je zou bijvoorbeeld willen weten wat het bestverkopende artikel op kerstavond is. Als je daarentegen de verkoop van één specifiek artikel over een periode (zeg de laatste 5 jaar) wilt achterhalen, dan is dat een tijdreeksanalyse.

De doelen verschillen bij de analyse van tijdreeks- en cross-sectionele data, en een dataset uit de echte wereld is vaak een hybride van beide.

Wat is tijdreeksvoorspelling?

Tijdreeksvoorspelling is precies wat het lijkt: onbekende waarden voorspellen. Het omvat het verzamelen van historische data, deze voorbereiden voor algoritmen, en vervolgens toekomstige waarden voorspellen op basis van patronen die uit de historische gegevens zijn geleerd.

Er zijn talloze redenen waarom bedrijven geïnteresseerd kunnen zijn in het voorspellen van toekomstige waarden, zoals bbp, maandelijkse verkoop, voorraad, werkloosheid en mondiale temperaturen:

  • Een retailer wil misschien de toekomstige verkoop op SKU-niveau (stock keeping unit) voorspellen voor planning en budgettering.
  • Een kleine ondernemer wil mogelijk de verkoop per winkel voorspellen, zodat hij de juiste bezetting kan inplannen (meer mensen tijdens drukke periodes en omgekeerd).
  • Een softwaregigant als Google wil misschien het drukste uur van de dag of de drukste dag van de week weten, zodat ze servercapaciteit passend kunnen inplannen.
  • De gezondheidsdienst wil mogelijk het cumulatieve aantal toegediende COVID-vaccinaties voorspellen om te kunnen bepalen wanneer groepsimmuniteit naar verwachting wordt bereikt.

Typen tijdreeksvoorspelling

Er zijn drie typen tijdreeksvoorspelling. Welke je gebruikt, hangt af van het type data en de usecase:

Univariate voorspelling

Een univariate tijdreeks, zoals de naam al aangeeft, is een reeks met één tijdafhankelijke variabele. Als je bijvoorbeeld elk uur de temperatuurwaarden voor een regio bijhoudt en de toekomstige temperatuur wilt voorspellen op basis van historische temperaturen, dan is dat univariate tijdreeksvoorspelling. Je data kan er zo uitzien:

Univariate voorspelling

Multivariate voorspelling

Een multivariate tijdreeks daarentegen heeft meer dan één tijdafhankelijke variabele. Elke variabele is niet alleen afhankelijk van zijn eigen verleden, maar ook in zekere mate van andere variabelen. Deze afhankelijkheid wordt gebruikt om toekomstige waarden te voorspellen.

Neem het bovenstaande voorbeeld en stel dat onze dataset in dezelfde periode ook andere weergerelateerde kenmerken bevat, zoals vochtpercentage, dauwpunt, windsnelheid, enzovoort, naast de temperatuurwaarden. In dit geval moeten meerdere variabelen worden meegenomen om de temperatuur optimaal te voorspellen. Zo'n reeks valt onder multivariate tijdreeks. Je dataset ziet er dan zo uit:

Multivariate voorspelling

Je voorspelt nog steeds toekomstige temperatuurwaarden, maar je kunt nu andere beschikbare informatie in je voorspelling gebruiken, omdat we aannemen dat de temperatuur ook van deze factoren afhangt.

multivariate tijdreeksvoorspelling Bron: Van Nguyen

Bij multivariate tijdreeksvoorspelling kunnen de invoervariabelen van twee typen zijn:

  • Exogeen: invoervariabelen die niet worden beïnvloed door andere invoervariabelen en waarvan de uitvoervariabele afhankelijk is.
  • Endogeen: invoervariabelen die worden beïnvloed door andere invoervariabelen en waarvan de uitvoervariabele afhankelijk is.

In deze tutorial bespreken we verschillende klassieke modellen, maar niet alle ondersteunen multivariate tijdreeksvoorspelling. In zulke situaties bieden machinelearningmodellen uitkomst, omdat je elk tijdreeksprobleem als een regressieprobleem kunt modelleren. Later in deze tutorial bekijken we hiervan een voorbeeld.

Methoden voor tijdreeksvoorspelling

Tijdreeksvoorspellen kan grofweg in de volgende categorieën worden ingedeeld:

  • Klassieke/statistische modellen — voortschrijdende gemiddelden, exponentiële smoothing, ARIMA, SARIMA, TBATS
  • Machine learning — lineaire regressie, XGBoost, Random Forest of elk ML-model met reductiemethoden
  • Deep learning — RNN, LSTM

Deze tutorial richt zich op de eerste twee: klassieke/statistische modellen en machine learning. Deep learning-methoden vallen buiten de scope.

Statistische modellen

Voor tijdreeksvoorspelling met statistische modellen zijn er aardig wat populaire en geaccepteerde algoritmen. Elk heeft andere wiskundige eigenschappen en gaat gepaard met aannames die moeten worden vervuld. Deze tutorial gaat niet diep in op de wiskunde, maar biedt intuïtie die hopelijk helpt.

ARIMA

ARIMA is een van de populairste klassieke methoden voor tijdreeksvoorspelling. Het staat voor autoregressive integrated moving average en is een type model dat een tijdreeks voorspelt op basis van zijn eigen vorige waarden, dus zijn eigen lags en vertraagde voorspellingsfouten. ARIMA bestaat uit drie componenten:

  • Autoregressie (AR): verwijst naar een model waarin een variabele wordt geregregeerd op zijn eigen vertraagde (eerdere) waarden.
  • Geïntegreerd (I): staat voor het differencen van ruwe observaties om de tijdreeks stationair te maken (d.w.z. datapunten worden vervangen door het verschil met de vorige waarde).
  • Voortschrijdend gemiddelde (MA): neemt de afhankelijkheid op tussen een observatie en een residuele fout uit een voortschrijdendgemiddelde-model toegepast op vertraagde observaties.

Het "AR"-gedeelte van ARIMA geeft aan dat de variabele van belang wordt geregregeerd op zijn eigen vertraagde (eerder geobserveerde) waarden. Het "MA"-gedeelte geeft aan dat de regressiefout eigenlijk een lineaire combinatie is van fouttermen waarvan de waarden gelijktijdig en op verschillende momenten in het verleden zijn opgetreden. De "I" (van "integrated") geeft aan dat de datapunten zijn vervangen door het verschil met hun vorige waarden (en dit differencen kan meer dan eens zijn uitgevoerd). Het doel van elk van deze onderdelen is de best mogelijke modelpassing op de data.

SARIMA

Een uitbreiding op ARIMA die de seizoenscomponent van de reeks direct modelleert, heet SARIMA. Een probleem met ARIMA is dat het geen seizoensdata ondersteunt, dus een tijdreeks met een herhalende cyclus. ARIMA verwacht data die niet seizoensgebonden is of waarvan de seizoenscomponent is verwijderd, bijvoorbeeld via seizoensdifferencen. SARIMA voegt drie nieuwe hyperparameters toe om AR, I en MA voor de seizoenscomponent van de reeks te specificeren.

Voorspelling met SARIMA-model Voorspelling met SARIMA-model

Exponentiële smoothing

Exponentiële smoothing is een methode voor tijdreeksvoorspelling voor univariate data. De methode kan worden uitgebreid voor data met een trend of seizoenscomponent. Het kan dienen als alternatief voor de populaire ARIMA-familie.

Bij exponentiële smoothing van tijdreeksdata worden exponentieel afnemende gewichten toegekend van nieuwste naar oudste observaties. Hoe ouder de data, hoe minder gewicht; nieuwere data krijgt meer gewicht.

  • Eenvoudige (single) exponentiële smoothing gebruikt een gewogen voortschrijdend gemiddelde met exponentieel afnemende gewichten.
  • Holt’s exponentiële smoothing is doorgaans betrouwbaarder voor data met trends.
  • Triple exponentiële smoothing (ook wel Multiplicative Holt-Winters genoemd) is betrouwbaarder voor paraboolachtige trends of data met trends én seizoensinvloeden.

vergelijking tussen single ES, double ES en two-stage EWMA vergelijkingsresultaten tussen single exponential smoothing (ES), double ES en two-stage EWMA

TBATS

TBATS-modellen zijn bedoeld voor tijdreeksdata met meerdere seizoenspatronen. Bijvoorbeeld: retailverkoopdata kan een dagelijks, wekelijks én jaarlijks patroon hebben.

In TBATS wordt een Box-Cox-transformatie toegepast op de oorspronkelijke tijdreeks, die vervolgens wordt gemodelleerd als een lineaire combinatie van een exponentieel gesmoothte trend, een seizoenscomponent en een ARMA-component.

Voorspelling met TBATS Voorspelling met TBATS

Machine learning

Als je geen statistische modellen wilt gebruiken of als ze niet goed presteren, kun je deze methode proberen. Machine learning is een alternatief om tijdreeksdata te modelleren voor voorspellingen. Hierbij extraheren we kenmerken uit de datum om toe te voegen aan onze "X-variabele" en is de waarde van de tijdreeks de "y-variabele". Laten we een voorbeeld bekijken:

Voor deze tutorial heb ik de dataset met Amerikaanse luchtvaartpassagiers gebruikt, te downloaden via Kaggle.

Voorbeeld van de dataset

We kunnen kenmerken uit de kolom "Date" halen, zoals maand, jaar, week van het jaar, enz. Zie voorbeeld:

# extract month and year from dates
data['Month'] = [i.month for i in data['Date']]
data['Year'] = [i.year for i in data['Date']]

# create a sequence of numbers
data['Series'] = np.arange(1,len(data)+1)

# drop unnecessary columns and re-arrange
data.drop(['Date', 'MA12'], axis=1, inplace=True)
data = data[['Series', 'Year', 'Month', 'Passengers']]

# check the head of the dataset
data.head()

Voorbeeldrijen na feature-extractie Voorbeeldrijen na feature-extractie

Let op dat de train-test-split voor tijdreeksdata speciaal is. Omdat je de volgorde van de tabel niet kunt wijzigen, moet je ervoor zorgen dat je niet willekeurig sampelt. Je wilt dat je testdata punten bevat die in de toekomst liggen ten opzichte van de punten in de traindata (tijd gaat altijd vooruit).

# split data into train-test set
train = data[data['Year'] < 1960]
test = data[data['Year'] >= 1960]

# check shape
train.shape, test.shape
>>> ((132, 4), (12, 4))

Nu we de train-test-split hebben gedaan, kunnen we een machinelearningmodel trainen op de traindata, scoren op de testdata en de prestaties evalueren. In dit voorbeeld gebruik ik PyCaret; een open-source, low-code machinelearningbibliotheek in Python die ML-workflows automatiseert. Om PyCaret te gebruiken, installeer je het met pip.

# install pycaret
pip install pycaret

Heb je hulp nodig bij de installatie, raadpleeg dan de officiële documentatie.

Stel dat PyCaret succesvol is geïnstalleerd:

# import the regression module
from pycaret.regression import *

# initialize setup
s = setup(data = train, test_data = test, target = 'Passengers', fold_strategy = 'timeseries', numeric_features = ['Year', 'Series'], fold = 3, transform_target = True, session_id = 123)

Om machinelearningmodellen te trainen, hoef je nu slechts één regel uit te voeren:

best = compare_models(sort = 'MAE')

Output van compare_models Output van compare_models

Het beste model op basis van 3-voudige cross-validatie en Mean Absolute Error (MAE) is Leased Angle Regression. We kunnen dit model nu gebruiken om de toekomst te voorspellen. Daarvoor moeten we toekomstige "X-variabelen" creëren. Dat kan door toekomstige datums te genereren en daaruit kenmerken te extraheren.

Omdat we ons model hebben getraind op data tot en met 1960, voorspellen we vijf jaar vooruit tot 1965. Om met ons finale model toekomstige voorspellingen te maken, moeten we eerst een dataset aanmaken met de kolommen Month, Year en Series voor de toekomstige datums. De onderstaande code maakt de toekomstige "X"-dataset.

future_dates = pd.date_range(start = '1961-01-01', end = '1965-01-01', freq = 'MS')
future_df = pd.DataFrame()
future_df['Month'] = [i.month for i in future_dates]
future_df['Year'] = [i.year for i in future_dates]    
future_df['Series'] = np.arange(145,(145+len(future_dates)))
future_df.head()

Voorbeeldrijen uit future_df Voorbeeldrijen uit future_df

Nu kunnen we future_df gebruiken om voorspellingen te maken:

predictions_future = predict_model(best, data=future_df)
predictions_future.head()

Output van predictions_future.head() Output van predictions_future.head()

En nu kunnen we het plotten:

concat_df = pd.concat([data,predictions_future], axis=0)
concat_df_i = pd.date_range(start='1949-01-01', end = '1965-01-01', freq = 'MS')
concat_df.set_index(concat_df_i, inplace=True)
fig = px.line(concat_df, x=concat_df.index, y=["Passengers", "Label"], template = 'plotly_dark')
fig.show()

Werkelijk (1949–1960) en voorspeld (1961–1964) aantal Amerikaanse luchtvaartpassagiers Werkelijk (1949–1960) en voorspeld (1961–1964) aantal Amerikaanse luchtvaartpassagiers

Er zijn hier een paar belangrijke punten. Wanneer je met univariate tijdreeksen werkt, kun je ze altijd omzetten naar regressieproblemen en oplossen zoals in dit voorbeeld. Let echter goed op cross-validatie. Je kunt geen willekeurige cross-validatie toepassen op tijdreeksmodellen en je moet tijdreeks-geschikte technieken gebruiken. In dit voorbeeld gebruikt PyCaret TimeSeriesSplit uit de scikit-learn-bibliotheek.

Python-frameworks voor voorspellen

Facebook Prophet

Prophet is open-sourcesoftware uitgebracht door Facebook’s Core Data Science-team. Het is beschikbaar op CRAN en PyPI.

Prophet is een procedure voor tijdreeksvoorspelling gebaseerd op een additief model waarbij niet-lineaire trends worden gefit met jaarlijkse, wekelijkse en dagelijkse seizoensinvloeden plus vakantie-effecten. Het werkt het best met tijdreeksen met sterke seizoensinvloeden en meerdere seizoenen aan historische data. Prophet is robuust voor ontbrekende data en trendverschuivingen en gaat doorgaans goed om met uitschieters.

Wil je meer weten, bekijk dan deze link.

Voorspelling met FB Prophet Voorspelling met FB Prophet

sktime

sktime is een open-source, uniform framework voor machine learning met tijdreeksen. Het biedt een gebruiksvriendelijk, flexibel en modulair platform voor een breed scala aan ML-taken met tijdreeksen. Het levert scikit-learn-compatibele interfaces en tools voor modelcompositie, met als doel het ecosysteem als geheel bruikbaarder en interoperabeler te maken.

sktime Meer weten over sktime? Bekijk deze link.

pmdarima

Pmdarima is een statistische bibliotheek die het gat in de Python-mogelijkheden voor tijdreeksanalyse vult. Dit omvat:

  • Het equivalent van R’s auto.arima-functionaliteit
  • Een verzameling statistische toetsen voor stationariteit en seizoensinvloeden
  • Seizoensdecomposities van tijdreeksen
  • Cross-validatiehulpmiddelen
  • Een rijke verzameling ingebouwde tijdreeksdatasets voor prototyping en voorbeelden

Meer over pmdarima lees je op deze pagina.

Kats

Kats is een ander geweldig open-sourceproject van Facebook, uitgebracht door hun Infrastructure Data Science-team. Beschikbaar via PyPI.

Kats is een toolkit om tijdreeksdata te analyseren; een lichtgewicht, gebruiksvriendelijk en generaliseerbaar framework voor tijdreeksanalyse. Kats wil een one-stop-shop zijn voor tijdreeksanalyse, inclusief detectie, voorspelling, feature-extractie/-embedding en multivariate analyse, enz.

Voorspelling met KATS Voorspelling met KATS

Meer weten over KATS? Bekijk deze link.

Orbit

Orbit is een geweldig open-sourceproject van Uber. Het is een Python-bibliotheek voor Bayesiaanse tijdreeksvoorspelling. Het biedt een vertrouwde en intuïtieve initialize-fit-predict-interface voor tijdreekstaken, met probabilistische programmeertalen onder de motorkap.

Voorspelling met Orbit Voorspelling met Orbit

Meer weten over Orbit? Bekijk deze link.

PyCaret

PyCaret is een open-source, low-code machinelearningbibliotheek in Python die ML-workflows automatiseert. Met PyCaret besteed je minder tijd aan code en meer aan analyse. Je kunt je model trainen, analyseren, sneller itereren dan ooit en het direct uitrollen als een REST API of zelfs een eenvoudige front-end ML-app bouwen, allemaal vanuit je favoriete Notebook.

PyCaret Time Series Module Architecture. Ontwikkeld door lead developer Nikhil Gupta. PyCaret Time Series Module Architecture. Ontwikkeld door lead developer Nikhil Gupta.

Vervolgens bekijken we een end-to-end voorbeeld van een tijdreeksvoorspellingstaak met de PyCaret-bibliotheek.

End-to-end voorbeeld

De tijdreeksmodule van PyCaret is beschikbaar in bèta en kan via pip worden gedownload.

pip install pycaret-ts-alpha

Link naar deze tutorial op Colab.

Dataset

Hier gebruiken we de airline-dataset, die ook beschikbaar is in PyCarets datarepository.

from pycaret.datasets import get_data
data = get_data('airlineer')

Dataset

data.plot()

data.plot()

Experiment opzetten

Experimenten in PyCaret start je met de functie setup. Deze functie verzorgt alle preprocessingtaken, train-test-split, cross-validatiestrategie en nog een paar andere zaken.

from pycaret.time_series import *
s = setup(data, session_id = 123)

Output van de setup-functie Output van de setup-functie

Exploratory Data Analysis (EDA)

Voor EDA van univariate tijdreeksdata zijn er een paar dingen die je kunt en zou moeten doen.

Voor klassieke/statistische modellen kun je enkele statistische toetsen uitvoeren. In PyCaret is er een functie die dit voor je doet.

check_stats()

Output van de functie check_stats Output van de functie check_stats

Als je met univariate tijdreeksen werkt, kun je ze ook decomponeren in trend-, seizoens- en foutcomponenten voor verdere analyse.

plot_model(plot = 'decomp_classical")

Output van de functie plot_model ## Modeltraining en -selectie ## Output van de functie plot_model<c/entre> ## Modeltraining en -selectie ## Om meerdere modellen te trainen en er één te selecteren, draaien we slechts één regel code. best = compare_models() Output van de functie compare_models Output van de functie compare_models

PyCaret heeft meer dan 25 modellen getraind met tijdreeks-geschikte cross-validatie en een lijst gepresenteerd van hoog naar laag presterend. Het beste model in dit experiment voor deze dataset is Exponential Smoothing, met een mean absolute error van 7,781.

Modelanalyse

Voordat we dit model inzetten om toekomstige voorspellingen te genereren, kunnen we een paar analyseplots bekijken om de kwaliteit van ons model te beoordelen.

plot_model(best, plot = 'forecast', data_kwargs = {'fh': 24})

Tijdreeks-voorspellingsplot Tijdreeks-voorspellingsplot

plot_model(best, plot = 'residuals')

Plot met residuen van tijdreeks Plot met residuen van tijdreeks

plot_model(best, plot = 'insample')

In-sample-plot van tijdreeks In-sample-plot van tijdreeks

Modelimplementatie

Op dit punt kunnen we het model finaliseren en opslaan voor toekomstig gebruik.

# finalize model
final_best = finalize_model(best)

# save model
final_best = finalize_model(best)

Modelimplementatie

Om dit bestand later te laden en voorspellingen op toekomstige data te genereren:

# load model
loaded_model = load_model('my_best_model')

# generate predictions for the next 48 months
predict_model(loaded_model, fh = 48)

Output ingekort Output ingekort

Conclusie

Tijdreeksvoorspelling is een zeer nuttige vaardigheid. Veel real-life problemen hebben een tijdreekscharacter. Voorspellen kent toepassingen in talloze sectoren, met praktische voorbeelden zoals weersvoorspelling, economische voorspelling, zorg, financiën, retail, bedrijfsvoorspelling, milieukunde, sociale studies en meer.

In feite kan elke historische dataset met consistente intervallen worden geanalyseerd met tijdreeksanalysemethoden, wat leidt tot een voorspeltaak die leert van historische data en de toekomst probeert te voorspellen. Samenvattend zijn er drie brede categorieën voor tijdreeksvoorspelling:

  • Statistische modellen - exponentiële smoothing, ARIMA, SARIMA, TBATS, enz.
  • Machine learning - lineaire regressie, XGBoost, Random Forest, enz.
  • Deep learning - RNN, LSTM

Wil je je kennis en vaardigheden in tijdreeksvoorspelling verder uitbouwen, bekijk dan het geweldige traject "Time Series with Python" van Datacamp. In dit track leer je tijdreeksdata manipuleren met pandas, werken met statistische bibliotheken zoals NumPy en statsmodels om data te analyseren, en je visualisatievaardigheden ontwikkelen met Matplotlib, SciPy en seaborn. Aan het einde weet je hoe je de toekomst kunt voorspellen met ARIMA-klassemodellen en hoe je voorspellingen en inzichten genereert met machinelearningmodellen.

Onderwerpen
Data Science
Machine Learning
Gerelateerd

blog

AI vanaf nul leren in 2026: een complete gids van de experts

Ontdek alles wat je moet weten om in 2026 AI te leren, van tips om te beginnen tot handige resources en inzichten van industrie-experts.
Adel Nehme's photo

Adel Nehme

15 min

Meer BekijkenMeer Bekijken