Forecasten met R in Qlik Sense

R,forecast,qlik,qlik sense, qlik forecast,forecasting,analytics,business intelligence, qlik sense forecast, forecasting qlik,

Voorspellen van orders in BetsyBike

Vanaf de June 2017 release van Qlik Sense is het mogelijk om met de ‘SSEtoRserve plugin’ R script in Qlik Sense expressies in load script en front-end uit te voeren. Daarmee is het mogelijk om forecasts te berekenen vanuit Qlik Sense, in plaats van over te hoeven schakelen naar R. In dit blog ontdek je stap-voor-stap hoe je R script in de front-end van Qlik Sense laat draaien aan de hand van onze demo app ‘Betsy Bike’. Daarbij ontdek je in dit technische blog hoe een tijdreeks opgesplitst kan worden in componenten en hoe je een simpele forecast berekent.

Configuratie

Volg de instructies op https://github.com/qlik-oss/sse-r-plugin/blob/master/GetStarted.md om de R omgeving(R en R studio) en de SSEtoRserve plugin te installeren (download de SSEtoRserve plugin binaries van https://github.com/qlik-oss/sse-r-plugin/releases/download/v1.0.0/sse-r-plugin-1.0.0-qlik-oss.zip).

R script draaien

De SSEtoRserve plugin levert meerdere functies aan de gebruiker die in expressies in de front-end en load script kunnen worden gebruikt.

Voor dit voorbeeld maken we gebruik van R.ScriptEval. Deze functie verwacht een numerieke parameter en geeft een numeriek resultaat terug. Het is mogelijk om de Qlik expressies die de input voor de R call leveren te hernoemen. We hernoemen Sum(OrderQty) als OrderQty, zodat we in de R call ernaar kunnen refereren als q$OrderQty. Alle input parameters worden toegevoegd aan het q object, waarnaar je kan refereren vanuit de R context.

Demo app

De demo app bevat order hoeveelheden van BetsyBike, een rijwielhandel. Om meer grip te krijgen op de logistiek wil BetsyBike een voorspelling van order hoeveelheden, om buiten seizoens-pieken om de benodigde capaciteit in te kunnen schatten.

Tijdreeks opsplitsen in componenten

De tijdreeks bevat 36 maanden aan data. Als we de reeks bekijken (zie blauwe lijn in Figure 1) lijkt het alsof de reeks is opgebouwd uit een trend en een seizoens-effect. Om een voorspelling te doen om algemene capaciteitsbehoefte te schatten, willen we de trend naar de toekomst extrapoleren.

Om de reeks op te splitsen in componenten kunnen we de stl [1] functie toepassen om de reeks te splitsen in trend, seizoens-effect, en random error vectoren. De stl functie verwacht een ts [2] (timeseries) object als input; we kunnen met behulp van de ts functie de OrderQty data omzetten. Hierbij leveren we nog parameters die het begin en einde, en de periodiciteit van de reeks definiëren. Omdat de cardinaliteit van de input en output moeten matchen, moeten we een enkele reeks selecteren uit de output. Dit doen we door uit de $time.series component alleen de eerste kolom op te vragen om het seizoens-element op te vragen. De trend en random component worden op dezelfde wijze aangeroepen.

Bekijk het script

//season

R.ScriptEval(‘stl(ts(q$OrderQty, start=c(2006, 7), end=c(2009, 6), frequency=12), “periodic”)$time.series[,1]’, Sum(OrderQty) AS OrderQty)

//trend

R.ScriptEval(‘stl(ts(q$OrderQty, start=c(2006, 7), end=c(2009, 6), frequency=12), “periodic”)$time.series[,2]’, Sum(OrderQty) AS OrderQty)

//random

R.ScriptEval(‘stl(ts(q$OrderQty, start=c(2006, 7), end=c(2009, 6), frequency=12), “periodic”)$time.series[,3]’, Sum(OrderQty) AS OrderQty)

R,forecast,qlik,qlik sense, qlik forecast,forecasting,analytics,business intelligence, qlik sense forecast, forecasting qlik,
Decomposition of order quantity

Berekening van de forecast

Voor een simpele forecast maken we gebruik van de trend reeks en functies uit de R forecast library. Sommige R functies komen uit libraries, die eerst moeten worden geladen voordat ze beschikbaar zijn. Daarom worden deze calls voorzien van een commando om de betreffende library te laden. Een R call kan meerdere commando’s bevatten, deze worden gescheiden door ; .

We runnen een HoltWinters [3] filter op de trend reeks met gamma=FALSE omdat we geen rekening willen houden met seizoens-effecten – die zijn er met de stl call al uitgehaald.

Vervolgens kunnen we een forecast [4] runnen op het HoltWinters object en een bereik van 36 maanden specificeren. De eerste kolom van de output is de voorspelling, de tweede de bovengrens van het 80% betrouwbaarheidsinterval, de derde de ondergrens van het 80% betrouwbaarheidsinterval.

Tot slot maken we een data.frame [5] van de output en selecteren we de gewenste kolom om de juiste cardinaliteit te verkrijgen.

Bekijk het script

//HoltWinters forecast

R.ScriptEval(‘library(forecast);data.frame(forecast(HoltWinters(stl(ts(q$OrderQty, start=c(2006, 7), end=c(2009, 6), frequency=12), “periodic”)$time.series[,2],gamma=FALSE), h=36))[,1]’, Sum([OrderQty]) as OrderQty)

//Lo 80% confidence interval

R.ScriptEval(‘library(forecast);data.frame(forecast(HoltWinters(stl(ts(q$OrderQty, start=c(2006, 7), end=c(2009, 6), frequency=12), “periodic”)$time.series[,2],gamma=FALSE), h=36))[,2]’, Sum([OrderQty]) as OrderQty)

//Hi 80% confidence interval

R.ScriptEval(‘library(forecast);data.frame(forecast(HoltWinters(stl(ts(q$OrderQty, start=c(2006, 7), end=c(2009, 6), frequency=12), “periodic”)$time.series[,2],gamma=FALSE), h=36))[,3]’, Sum([OrderQty]) as OrderQty)

R,forecast,qlik,qlik sense, qlik forecast,forecasting,analytics,business intelligence, qlik sense forecast, forecasting qlik,
36 month forecast of order quantity

Ga je ook aan de slag met R?

Met de Juni 2017 release van Qlik Sense wordt het mogelijk om R script in Qlik Sense expressies te integreren. We hebben in dit blog een tijdreeks opgesplitst in componenten en een simpele forecast berekend.
Een belangrijk feit om in de gaten te houden is het matchen van cardinaliteit tussen input en output van R calls.
Voor meer informatie over het analyseren van tijdreeksen in R kun je de volgende pagina raadplegen: http://a-little-book-of-r-for-time-series.readthedocs.io/en/latest/src/timeseries.html.

Geschreven door Ruairidh Smith,
Qlik Consultant bij E-mergo

Referenties

 

Bekijk Qlik demo’s     Plan een afspraak in