Een handleiding voor het gebruik van counterfactual forecasting om de kosteneffectiviteit van eerdere promoties in winkels in de detailhandel te schatten.
Tijdens een praktijkproject van 3 maanden ontwikkelden en industrialiseerden we een counterfactual prognosemodel (eerst met Prophet, daarna met XGBoost) om de prestaties van eerdere in-store promoties van een winkelketen te beoordelen, om de vraagplanners te helpen bij hun keuzes voor promotiecampagnes.
Dit model wordt getraind en voorspelt dan hypothetische verkopen (baseline genoemd) in het verleden als er geen promotie was geweest. Het verschil tussen de daadwerkelijke promotieverkoop en deze basislijn geeft de incrementele verkoop, die we uplift noemen.
Dankzij handgemaakte temporele kenmerken bereikten we een voorspellingsnauwkeurigheid van bijna 90%.
Bedrijfscontext
Bij het plannen van toekomstige promotiecampagnes moeten de planners van de vraag beslissen welke productassortimenten afgeprijsd zullen worden, met een bepaald promotiemechanisme (bijv. “-15%”, “koop er 2, krijg er 1 gratis” enz...).
Dit zijn moeilijke beslissingen, want:
Voor de meeste detailhandelsbedrijven is de campagnekeuzes worden gemaakt op basis van hun bedrijfskennis en de prestaties van eerdere promoties. De “prestaties van eerdere promoties” is moeilijk in te schatten. Promotiecampagnes verhogen inderdaad de verkoop (in de meeste gevallen), maar hoe kunnen we de efficiëntie of Return On Investment (ROI) schatten als we niet weten wat de verkoop zou zijn geweest zonder een promotie? Deze hypothetische waarde van de verkoop zonder promotie kan een basislijn. Met andere woorden, het draait allemaal om het kunnen inschatten van de stijgende verkoop (of omhoog) van een promotiecampagne, die overeenkomt met de daadwerkelijke verkoop, min de basislijn.
Om deze vraag te beantwoorden, hebben we een tool ontwikkeld die de promotionele omzetstijging van eerdere campagnes kon schatten, met een nauwkeurigheid van bijna 90%.
Deze taak is een hele uitdaging, omdat het doel is om voorspellingen te doen van hypothetisch verkoop in een andere situatie (hier, als de promotiecampagne voor een bepaald product niet had plaatsgevonden). Dit kan “contrafeitelijke prognose”. Dit artikel is voornamelijk gebaseerd op onze ervaring met een project dat we voor een Franse winkelketen hebben gedaan.
Het doel is om de aanpak die we hebben gebruikt te beschrijven, tips en voorbehouden te geven bij het implementeren van een counterfactual forecasting-oplossing (data voorbereiding, modellering), leg de evaluatie proces en bespreken ten slotte de beperkt en volgende stappen voor deze aanpak.
Wat is counterfactual forecasting en waarom is het moeilijk te voorspellen?
Contrafeitelijke voorspelling is het proces om iets in de vorm te voorspellen: wat zou X zijn als er geen Y. In ons gebruiksscenario, X de verkoop en Y zou een promotiecampagne zijn.
Er zijn eigenlijk meerdere velden waar dit proces kan worden toegepast: voorraadtekort (schatting van het tekort als gevolg van artikelen die niet op voorraad zijn), eventuele speciale evenementen die niet te lang duren (Covid: werkt niet!) om genoeg data te hebben om die contrafeitelijke situatie te schatten.
Het promotieprobleem kan op 3 manieren worden aangepakt (gesorteerd op oplopende moeilijkheidsgraad):
In dit artikel, zullen we ons richten op de eerste stap aangezien dit het doel van ons project was. In de volgende secties zullen we echter een paar inzichten geven over hoe de volgende twee aangepakt kunnen worden.
Er zijn twee belangrijke redenen die de taak van counterfactual forecasting tot een uitdagend proces maken:
Voorgestelde benadering
We hebben de volgende aanpak gebruikt om ons hulpmiddel te bouwen:

Belangrijke opmerking: Het doel is om de prognoses te gebruiken tijdens de promotieperioden, die in het verleden liggen. Dit is omdat deze taak een achteraf analyse dat, in tegenstelling tot klassieke voorspellingen, het mogelijk om te trainen op data die na de inferentieperiode, die overeenkomt met de promotiecampagne. Er is hier geen sprake van data lekkage, omdat we een fenomeen uit het verleden proberen te verklaren. De workflow voor training en inferentie ziet er dus als volgt uit:

Uitvoering
De data voorbereiden
Om het promotieprobleem aan te pakken, moet u het juiste data-formaat gebruiken. Gewoonlijk hebben we toegang tot twee soorten data:
1. Promotionele data (beschrijvende informatie met betrekking tot promoties)
2. Verkoop data.

De voorbewerkte data is in principe de verkoop data, verrijkt met promotie-informatie (linkse join, zie bovenstaande afbeelding). Elke rij met een niet-nul “Promo type” komt overeen met een dag waarop het product in promotie is.
Voordat u de eerste implementatie uitvoert, is het belangrijk om de kwaliteit van de data beoordelen. Hier volgen enkele richtlijnen voor de uit te voeren controles:
1. Zoek naar belangrijke problemen in de tijdreeksen:
2. Definieer een korrelgrootte voor de use case:
Als de tijdreeksen schoon genoeg zijn, is het dus een goed uitgangspunt om de meest granulaire benadering te kiezen (bijv. product X dag, vooral als u met Prophet werkt, zoals wij in dit project hebben gedaan).
3. Het hebben van een duidelijk promotiebereikWelke producten/families van producten maken deel uit van een bepaalde promotie? Worden de promoties op nationaal niveau gepland? (zo niet, dan kan men bijvoorbeeld niet de verkoop van een product in alle winkels van een land samenvoegen).
Nadat de data gecontroleerd en voorbereid is, is het tijd om te modelleren.
Modelleren
Eerste iteraties en belangrijke opmerkingen
Wij begonnen onze eerste iteraties met Profeet omdat het ons in staat stelde om een basislijn erg snel, gemakkelijk toevoegen regressoren, en interpreteren de resultaten op natuurlijke wijze (dankzij de additieve ontbinding).
Hier volgt een samenvatting van de belangrijkste iteratieverbeteringen die we tijdens het project hadden:

In principe is de belangrijkste verbeteringen kwamen van de regressoren hebben we toegevoegd:
Tot slot hielp het aanpassen van de manier waarop we de nauwkeurigheid van de prognose maten (zie sectie Evaluatie hieronder) ook om een nauwkeurigere manier te hebben om de prestaties te beoordelen.
Waarom zijn we overgestapt op XGBoost?
Ondanks de goede prestaties en interpreteerbaarheid van Profeet, realiseerden we ons dat XGBoost was het meest geschikt, om meerdere redenen:
Evaluatie en grenzen
Evaluatie
Zoals hierboven geschreven, is er geen grondwaarheid bij contrafeitelijke prognoses, waardoor de prestatiebeoordeling complexer is dan bij klassieke prognoses.
We hebben echter een manier gevonden om onze prestaties te meten, of beter gezegd zo nauwkeurig mogelijk in te schatten. Dit is hoe:

Bij klassieke voorspellingen meten we de prestaties meestal met behulp van een kruisvalidatie strategie (hier, uitzetvenster) voor een bepaalde validatieperiode (bijv. het laatste jaar van de beschikbare data). Voor deze validatieperiode verschuift het venster waarin we de prestaties meten in elke vouw (“evaluatievenster”), en de voorste data wordt gebruikt voor de vertragingskenmerken (“Data gebruikt om voorspellingen te doen”). In een promotiegebruikssituatie, we voegen wat data toe na het evaluatievenster om de training - inferentie workflow beschreven in het gedeelte “Voorgestelde aanpak”.
We kunnen deze kruisvalidatiestrategie dus toepassen op de subset van data waar er geen promotie is, met de Forecast Accuracy (FA) als metriek.

Met deze aanpak konden we een voorspellingsnauwkeurigheid van bijna 90% met een granulariteit op het niveau van familie X dag, wat een behoorlijke prestatie is, vergelijkbaar met wat we hebben bereikt bij andere projecten voor klassieke voorspellingen.
Hoewel deze prestatie bevredigend kan zijn, heeft onze aanpak enkele beperkingen.
Grenzen
Verdergaan & volgende stappen
De modellering verbeteren
Er kunnen verschillende effecten worden toegevoegd om de netto impact van een promotie te meten:
De eerste twee effecten werden niet meegenomen in onze analyse vanwege de gekozen granulariteit (gezinsniveau) en de laatste twee waren moeilijk grondig te kwantificeren met de tijd die we hadden voor dit project.
Samengevat, de netto extra verkoop van een promotie kan worden weergegeven met deze waterval:

Verder gaan dan de a posteriori-analyse
Zoals eerder gezegd, zodra de (posterieure) analyse van eerdere promoties is uitgevoerd (fase A), dan is het mogelijk om verder gaan door de winstgevendheid voorspellen van toekomst promoties (fase B) en ten slotte een optimalisatie van de promotieplan (fase C).
Natuurlijk is het voorspellen van (een schatting van) de toekomstige winstgevendheid van een promotie moeilijker dan het schatten van de winstgevendheid van een eerdere promotie, omdat we geen data beschikbaar rond de promotie. Het idee is om hergebruik de model ontwikkeld in fase A met data die geen historische data is, maar voorspelde data op basis van een klassiek voorspellingsmodel, en wel als volgt:
Train eerst het klassieke voorspellingsmodel op de beschikbare data (tot vandaag):

Doe vervolgens de voorspellingen met dit model (de te voorspellen periode moet het bereik van de temporele kenmerken bestrijken die door het “basismodel” gebruikt zullen worden):

Gebruik ten slotte het getrainde basismodel met temporele kenmerken op basis van de voorspellingen van het eerste model en schat de basislijn, die de verkoopstijging zal geven:

Natuurlijk heeft dit proces per definitie meer onzekerheid, aangezien de fouten van de twee gestapelde modellen gecorreleerd zullen zijn.
Om het promotieplan te optimaliseren, bestaat de strategie er ten slotte uit om wat er in de vorige fase is gedaan te gebruiken om kies de beste combinatie van promotieparameters om optimaliseren a bedrijfsmeter zoals de ROI.
Conclusie
Gebruik contrafeitelijke prognose om bedrijfsproblemen op te lossen is geen gebruikelijke taak die in de literatuur te vinden zijn.
We zagen echter dat het een krachtig hulpmiddel om het probleem van beoordelen grondig de prestaties van eerdere promoties, door hypothetische verkoop voorspellen (basislijn) als er geen promotie was geweest. We onderzochten ook aanbevelingen voor feature engineering voor een autoregressief (Prophet) of gradient boosting (XGBoost) model. Tot slot hebben we een aantal richtlijnen beschreven om de analyse nog verder te verfijnen en ook verder te gaan dan alleen een a posteriori analyse.
Met dank aan de collega data wetenschappers die met mij aan dit project hebben gewerkt: Kasra & Ombeline. Ook dank aan de Artefactors die dit artikel heeft proefgelezen.

BLOG







