Forecast in R

Tutorial Forecast in R

ef782cb0-8fb4-4562-864c-a6173153b852.png

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

 

voorbeeld-ts-1

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.

 

 

fc-dcmp-1

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.

 

fc-12m-1

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.

 

fc-validate-1

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.

 

 

 

fc-final-1

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 & AI: Kans of bedreiging? door Marco van den Doel — last modified 23-09-2021
Waarde creëren met data en AI zorgt voor nieuwe business mogelijkheden
Data gedrevenheid is proces van lange adem door Marco van den Doel — last modified 16-09-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 van den Doel — last modified 03-09-2021
Ondersteun uw customer journey met data strategie
Wat is data engineering? door Marco van den Doel — last modified 03-09-2021
Hoe word je een data engineer?
De fasen om te transformeren naar een data gedreven organisatie door Marco van den Doel — last modified 02-09-2021
Welke vier fasen doorloopt een organisatie naar data gedrevenheid?
Data gedreven organisaties hebben grotere kans om te overleven door Marco van den Doel — last modified 02-09-2021
Transformeren naar een data gedreven organisatie kost tijd
Data gedreven logistiek onderhoud voorkomt uitval door Marco van den Doel — last modified 06-09-2021
Operationele en logistieke kosten lager door gebruik van data
Er zijn meer logistieke wegen die naar Rome leiden door Marco van den Doel — last modified 03-09-2021
Duurzame innovatieve logistieke oplossing op basis van data science
Welke sandwich mogen wij voor u bereiden? door Marco van den Doel — last modified 03-09-2021
Data gedrevenheid is als een goede en juist belegde sandwich
Met data bijdragen aan een betere wereld door Marco van den Doel — last modified 03-09-2021
DIKW is partner van Sensing Clues
In het verleden behaalde resultaten... door Marco van den Doel — last modified 02-09-2021
Data zorgt voor betere resultaten in de toekomst
Blokkade Ever Given geeft noodzaak betere data science aan door Marco van den Doel — last modified 02-09-2021
Containerschip blokkeert Suezkanaal
Van voor naar achteren en van links naar rechts in de logistieke keten door Marco van den Doel — last modified 02-09-2021
Het verminderen van opslagkosten en verplaatsingen van het aantal containers
De zeven pilaren van DataOps door Marco van den Doel — last modified 03-09-2021
DataOps wordt gedefinieerd door zeven hoofdkenmerken
Kijk verder dan je dashboard door Marco van den Doel — last modified 02-09-2021
Met de DIKW Analytical Roadmap kijk je verder!
Data discovery tools door Marco van den Doel — last modified 03-09-2021
Hoe zorgen data gedreven organisaties er voor dat data snel gevonden wordt en dat nieuwe medewerkers snel productief zijn?
Van BICC naar DACoE deel 3 door Marco van den Doel — last modified 03-09-2021
Van BICC naar Data & Analytics Center of Excellence deel 3:  Van ambitie naar realiteit
COVID-19 Oktober forecast : Het kan vriezen het kan dooien door Marco van den Doel — last modified 03-09-2021
Ter ondersteuning van het corona dashboard van de rijksoverheid
Koning TOTO : Sjaak vs Bayes door Marco van den Doel — last modified 03-09-2021
Definitieve uitslag voetbal eredivisie op basis van een wiskundig model, Baysiaanse statistiek, en een kleine Monte Carlo simulatie
COVID-19 Weersverwachting door Marco van den Doel — last modified 03-09-2021
Ter ondersteuning van het corona dashboard van de rijksoverheid
Dashboard coronavirus door Marco van den Doel — last modified 03-09-2021
Eerste observaties van een datascientist
Van BICC naar DACoE deel 1 door Marco van den Doel — last modified 03-09-2021
Van BICC naar Data & Analytics Center of Excellence: waarom je moet veranderen om relevant te blijven
SERVAL Open Ears AI machine listening door Marco van den Doel — last modified 03-09-2021
Building artificial ears for (urban) jungle applications
Granuliet WOB documenten door Marco van den Doel — last modified 03-09-2021
Textmining LDA Topic Models toegepast op 2 GB aan WOB documenten over granuliet
BERT en Transformer Learners door Marco van den Doel — last modified 02-09-2021
Ontwikkelingen op het gebied van Natural Language Processing
Textmining vs NLP door Marco van den Doel — last modified 03-09-2021
De verschillen en toepassingen van textmining en Natural Language Processing
Wat is nieuw in IBM Cognos Analytics 11 door Marco van den Doel — last modified 03-09-2021
Cognos Analytics ontwikkelt zich snel en voortvarend als een betrouwbaar self-service platform voor data analyse
Predicting butter prices door Marco van den Doel — last modified 03-09-2021
Case study assignment for Certified Data Science Proffesional course DIKW Academy
Forecast in R door Marco van den Doel — last modified 03-09-2021
Tutorial Forecast in R

Data Science recente blogs

Data & AI: Kans of bedreiging? door Marco van den Doel — last modified 23-09-2021
Waarde creëren met data en AI zorgt voor nieuwe business mogelijkheden
Data gedreven logistiek onderhoud voorkomt uitval door Marco van den Doel — last modified 06-09-2021
Operationele en logistieke kosten lager door gebruik van data
Er zijn meer logistieke wegen die naar Rome leiden door Marco van den Doel — last modified 03-09-2021
Duurzame innovatieve logistieke oplossing op basis van data science

Data Science Nieuws & Evenementen

DIKW in top 50 beste data science bedrijven door Marco van den Doel — last modified 07-09-2021
DIKW is één van snelst groeiende bedrijven volgens MKB Data Science rapport
AI Hub Midden Nederland gelanceerd! door Marco van den Doel — last modified 06-09-2021
DIKW is partner van de AI Hub Midden Nederland en ondersteund en helpt het MKB in de regio.
AEDES innovatie boost datascience powered by DIKW door Marco van den Doel — last modified 06-09-2021
De innovatie boost van AEDES is binnen gehaald door de werkgroep Big data.