Forecast in R

Tutorial Forecast in R

Forecast in R

Hoewel er steeds meer informatie op internet te vinden is over Forecasten, is dit nog weinig te vinden in het Nederlands. Ik heb een Nederlandse Tutorial gemaakt zodat ik mijn kennis kan delen.

Voor een grote media uitgeverij heb ik in R een sales forecast / omzetvoorspelling gemaakt voor de periode 2016/2017. In deze (Nederlandse) Forecast tutorial leg ik stap-voor-stap forecasten in R uit met behulp van een voorbeeld dataset en reproduceerbare R codes. Ook wordt uitleg gegeven over het gebruik van (auto)ARIMA.

Forecast package

Forecasten is het voorspellen/ schatten van een toekomstige (financiële) trend of gebeurtenissen. In dit geval gaat het om het voorspellen van toekomstige omzet op basis van beschikbare omzetdata uit het verleden en heden.

In deze blog wordt gebruik gemaakt van de R package forecast. Rob J. Hyndman, maker van deze package, is Professor of Statistics en schrijver van het online textboek Forecasting: principles and practice. Ik heb veel geleerd over forecasting dankzij hem. Ook heb ik het genoegen gehad hem te ontmoeten tijdens een conference in Eindhoven. Meer informatie over professor Hyndman is te vinden op zijn website.

Data

Gebruikte dataset is beschikbaar gesteld op datamarket.com, door Rob J. Hyndman en is te downloaden via deze link. Ga naar ‘Export‘, download het csv(,) bestand en zet de dataset in de juiste working directory.

In deze blog voorspellen we de sales op basis van Monthly car sales in Quebec 1960-1968.
Aangeraden wordt om de dataset te downloaden en iedere stap te volgen, voor het beter begrijpen van de procedure.

Alleen de eerste zeven jaar (96 rijen) van de dataset worden gebruikt, het laatste jaar (rij 97 tot en met 108) wordt bewaard zodat de forecast resultaten vergeleken kunnen worden met de echte waarden.

 

 

In het voorbeeld wordt gebruik gemaakt van een geschikte dataset waarvan de distributie al te zien was op de website. Met real-life data wordt aangeraden om eerst de data te controleren. Dat kan door het uitvoeren van exploratieve analyses en het plotten van de data zodat afwijkingen, missende waarden en vreemde patronen in de data ontdekt kunnen worden.

Timeseries

Voordat we de salesdata kunnen gebruiken maken we er eerst een timeseries object van. Controleer en order indien nodig datum in eigen dataset van hoog naar laag. Specificeer het begin en einde en geef een frequentie aan. In dit geval is er 12 keer per jaar een meting gedaan.
Let erop dat de timeserie hetzelfde begin- en eindpunt heeft als de dataframe.

 

 

 

Door het aangeven van de frequentie weet R dat het gaat om een maandelijkse meting. Door het start,- en eindpunt te geven weet R om welke maanden/jaren het gaat.

Voorbeeld tijdreeks

 

Onderliggende patronen

Met de functie decompose is het mogelijk om de timeserie op te breken in 3 verschillende timeseries, namelijk de trend , seizoen effecten en als laatste de overgebleven random effecten.

Additive timeserie

In dit geval is er sprake van een ‘additive’ decompositie, een timeserie waarbij seasonality gelijkmatig blijft naarmate de trend toeneemt. Indien de seasonality versterkt wordt bij een sterk toenemende trend, spreken we van een ‘multiplicative’ decomposition.

 

 


Arima

Met de juiste achtergrond is het makkelijker om het model te perfectioneren en de uitkomsten beter te begrijpen. In het voorbeeld wordt gebruik gemaakt van de functie auto.arima.

auto.arima

De R functie auto.arima, ontwikkeld door Hyndman and Khandakar is het automatische algoritme dat verschillende aspecten van modelselectie uitvoert. Dit model kan als basismodel gebruikt worden, hoewel dit niet altijd het beste model is en de meest nauwkeurige voorspellingen zal geven. Het uiteindelijke forecastmodel wordt over het algemeen beter indien er meer aan ‘gesleuteld’ wordt. In deze blog leg ik het basismodel uit.

Waar staat ARIMA voor?

ARiMA staat voor AutoRegressive integrated Moving Average.

AR ‘AutoRegressive'(p) is het procesgedeelte waar met behulp van een gewogen som van waarden geschat wordt wat de toekomstige waarden zullen zijn. Met andere woorden, dit gedeelte van het model geeft aan in welke mate vorige waarden een effect hebben op de huidige waarden.

I ‘Integrated’ (d) Voordat er een arima model wordt gemaakt, is het belangrijk dat de data stationary is. Met stationary wordt bedoeld dat de eigenschappen van de data op een bepaald moment onafhankelijk zijn van de tijd. Met andere woorden: er bevindt zich geen trend en seasonality in de tijd.
Het ‘integrated’ gedeelte van een ARiMA model zorgt ervoor dat de data stationary wordt, door te differentiëren. Bij differentiëren neem je het verschil van achtereenvolgende waarden. Hierdoor worden trends en seasonality verwijderd uit data. Indien de data nog steeds niet stationair zijn, kan dit nog een keer worden gedaan.

MA ‘Moving Average'(q) . Een moving average, in het Nederlands voortschrijdend gemiddelde, heeft over het algemeen als belangrijkste eigenschap een onderliggende trend te herkennen. In dit geval wordt de moving average gebruikt voor het voorspellen van toekomstige waarden. Dit gedeelte neemt de errors/residuals uit het model mee om een forecast te kunnen maken voor de toekomst.

Het arima model zal er als volgt uit komen te zien ARIMA(p,d,q)

Het automatische algoritme auto.arima geeft een goede indicatie van het model dat het beste gekozen kan worden, waardoor we niet meer handmatig alle verschillende modelopties hoeven te proberen. Aangeraden wordt wel om ‘omliggende’ modellen te bekijken voor de beste resultaten. Uiteindelijk wijst een zo laag mogelijke AIC/ BIC op een beter model.

Hoe werkt het auto.arima model?

Indien de data non-stationary zijn, dient er ‘gedifferentieerd’ ‘ te worden totdat de data stationary zijn.
Verschillende testen zijn er aanwezig om te controleren of een tijdreeks stationary is. Voorbeelden zijn de Augmented Dickey–Fuller test (ADF) of de Kwiatkowski-Phillips-Schmidt-Shin (KPSS) test. Het automatische algoritme van een auto.arima model combineert de twee verschillende testen en differentieert indien nodig, zodat de gebruiker zelf niet van te voren de data hoeft te differentiëren.

Na het vaststellen van het aantal keer dat er gedifferentieerd zal worden (meestal niet meer dan 2 keer) worden de waarden voor AR(p) en MA(q) stapsgewijs bepaald door het algoritme. Het algoritme zoekt op deze manier het beste model.

Het is ook mogelijk om zelf een arima model te maken.

Hoe kan ik forecasten met auto.arima?

Installeer en / of laad de forecast package

 

Maak een auto.arima model aan en bekijk het model:

 

 

Seizoenseffecten

Zoals hierboven is te zien, bestaat er ook een seasonal arima model. In sommige gevallen is het nodig om ‘seasonal differencing’ toe te passen, door het verschil te nemen van de huidige waarde en die van bijvoorbeeld een jaar geleden. Een Arima seasonal model ziet er als volgt uit

ARIMA(p,d,q)(P,D,Q)m de M staat voor het aantal perioden in een seizoen, in dit geval 12.

Forecast

Bovenstaande model gebruiken we voor het forecasten.
Met h kan de forecastperiode aangegeven worden. In dit voorbeeld gebruiken we 12 maanden.

 

Uitkomst Forecast

De donkerblauwe lijn laat de voorspelling voor de komende maanden zien, met daaromheen een 80- en 95% Confidence Interval (CI, betrouwbaarheidsinterval).
Over het algemeen worden de CI breder naarmate de tijdshorizon breder is. Echter stationary modellen (waar d=0) hebben een gelijkmatige CI.

 

 

Plot forecast met echte waarden

Het laatste jaar van de gebruikte data is apart gehouden zodat de voorspelling vergeleken kan worden met echte uitkomsten.

 

Model verkennen

Vaak loont het om de omliggende modellen van het ,door auto.arima gegeven, model te verkennen.
Aangeraden wordt om de omliggende parameters p en q (AR en MA) te veranderen door + of – 1 . Hiervoor kan Arima gebruikt worden. Het aantal maal dat er gedifferentieerd wordt blijft hetzelfde. Daarnaast kan een drift toegevoegd worden. Een drift zorgt ervoor dat de veranderingen in de tijd van de voorspelling vergelijkbaar zijn met de veranderingen in het verleden (bijvoorbeeld een opwaartse trend).

 

 

In sommige gevallen wordt er in auto.arima een model gemaakt met een lagere AIC waarden als ‘stepwise’ uit wordt gezet. Het nadeel hiervan is dat de berekening een stuk trager is.

 

 

In dit geval loont het om stepwise uit te zetten.

 

 


Conclusie

In deze blog heb ik de basis van arima uitgelegd met een voorbeelddataset. Het basis model is nog niet perfect maar komt al wel in de buurt van een nauwkeurige forecast. In de blogs die volgen ga ik verder in op het handmatig bouwen van een forecastmodel, het toevoegen van extra voorspellers en het effect van de gekozen tijdreeksfrequentie.

Voor vragen en opmerkingen ben ik bereikbaar via email. Ook voor extra hulp bij het forecasten kan informatie worden gevraagd.

Blogs

Data gedreven werken door Nick van de Venn — last modified 26-05-2023
Bij datagedreven werken staan mens én data centraal
Hoe gebruik je ChatGPT om je data pipeline te bouwen? door Nick van de Venn — last modified 11-05-2023
Marcel-Jan zocht het uit voor zijn grote hobby: astronomie.
Lead consultant en manager Business Analytics Patrick Meulstee door Nick van de Venn — last modified 06-04-2023
Over remote werken op Bonaire
Hoogwaardige data opleidingen bij DIKW Academy door nick van de venn — last modified 28-02-2023
Waarom wij geloven in  de praktische opzet van onze cursussen
Lead data engineer Remy Lamberty door Nick van de Venn — last modified 27-03-2023
Over remote werken vanuit India
Van pizzakoerier naar business intelligence consultant door Nick van de Venn — last modified 15-12-2022
Het verhaal hoe Brian een vaste waarde werd binnen DIKW
Data management door Nick van de Venn — last modified 18-11-2022
Met vertrouwen bouwen op data
Bayesiaanse Statistiek door Marc Jacobs — last modified 25-07-2022
Wiskundig raamwerk voor ouderwets leren
R vs Python door Nick van de Venn — last modified 05-07-2022
Samenwerken is de sleutel
Je fietsroutes eenvoudig in kaart brengen... door Nick van de Venn — last modified 05-05-2022
Marcel-Jan doet het eenvoudig met behulp van Python.
Het DIKW model door marco — last modified 24-02-2022
In vier stappen waarde creëren met data
DIKW Academy: Waar theorie en praktijk samen komen door marco — last modified 21-02-2022
DIKW docenten delen hun expertise uit de praktijk
Laat data voor u renderen! door marco — last modified 08-02-2022
Bluemine: Analytics as a service
30 jaar intelligence: Nieuwe uitdagingen om met data waarde toe te voegen door marco — last modified 08-02-2022
Van oude computerterminal naar smartphone
De fascinerende wereld van testen door marco — last modified 30-12-2021
Verwacht het onverwachte
Verzekeraar creëert meerwaarde met slimme data hub door marco — last modified 20-12-2021
Klant maakt met betere voorspellingen met data
Op naar een mooi data gedreven 2022! door marco — last modified 14-12-2021
Data gedreven organisatie dient blijvend te worden gevoed
Machine Learning: De gereedschapskist van de data scientist door marco — last modified 21-12-2021
Machine Learning algoritmes zijn de gereedschappen voor een data scientist
Met data de wind in de zeilen door marco — last modified 28-01-2022
Met data management kiest u de juiste koers
Hoe ethisch is Facebook? door marco — last modified 05-11-2021
Is regulering en wetgeving voor AI nodig?
Boekbespreking: Data Teams van Jesse Anderson door marco — last modified 02-11-2021
Voor succesvolle big data projecten zijn drie teams nodig
Smells like AI door marco — last modified 01-11-2021
Artificial Intelligence creëert nieuwe muziek
De waarde van data voor het MKB door marco — last modified 09-12-2021
Bluemine ontzorgt MKB door data beheer
Data & AI: Kans of bedreiging? door marco — last modified 21-12-2021
Waarde creëren met data en AI zorgt voor nieuwe business mogelijkheden
Data gedrevenheid is proces van lange adem door marco — last modified 02-11-2021
Data is een ingrediënt dat zorgt voor meerwaarde op lange termijn
Hoe data leidt tot de optimalisatie van de customer journey door marco — last modified 02-11-2021
Ondersteun uw customer journey met data strategie
Wat is data engineering? door marco — last modified 03-02-2022
Hoe word je een data engineer?
De fasen om te transformeren naar een data gedreven organisatie door marco — last modified 02-11-2021
Welke vier fasen doorloopt een organisatie naar data gedrevenheid?
Data gedreven organisaties hebben grotere kans om te overleven door marco — last modified 02-11-2021
Transformeren naar een data gedreven organisatie kost tijd

Data Science recente blogs

Bayesiaanse Statistiek door Marc Jacobs — last modified 25-07-2022
Wiskundig raamwerk voor ouderwets leren
R vs Python door Nick van de Venn — last modified 05-07-2022
Samenwerken is de sleutel
Machine Learning: De gereedschapskist van de data scientist door marco — last modified 21-12-2021
Machine Learning algoritmes zijn de gereedschappen voor een data scientist

Data Science Nieuws & Evenementen

Data science opleidingen gaan weer van start! door marco — last modified 08-02-2022
Vanaf 21 september start ons succesnummer weer! Twaalf weken data science in R, we hebben er weer zin in
Aedes data science workshop 2 van 3 door marco — last modified 07-02-2022
Voor Aedes organiseert DIKW drie workshops data science
DIKW in top 50 beste data science bedrijven door marco — last modified 22-10-2021
DIKW is één van snelst groeiende bedrijven volgens MKB Data Science rapport