Een handleiding voor het gebruik van counterfactual forecasting om de kosteneffectiviteit van eerdere promoties in winkels in de detailhandel te schatten.

Lees ons artikel over

.

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:

  • Kiezen voor te veel promoties zou niet zijn een effectief strategie (klanten raken gewend aan promoties en hebben de neiging om op de volgende te wachten).
  • De verkeerde promoties zou leiden tot tekorten en verliezen.

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 verkoopmin 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 voorbereidingmodellering), 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):

  • 1. Inzicht in eerdere promoties: een grondige schatting maken van de prestaties (verkoopstijging of ROI bijvoorbeeld) van eerdere promotiecampagnes.

  • 2. Voorspellen de prestaties van toekomstige promotie campagnes gezien hun kenmerken (afgeprijsde producten, begin- en einddatum, mechanisme...)

  • 3. Het promotieplan optimaliserenHet vinden van de beste opzet van toekomstige promoties om een bedrijfsmetriek te maximaliseren.

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:

  • Er is een gebrek aan literatuur of voorbeelden over dit onderwerp, terwijl het zeer nuttig is in de detailhandel en andere bedrijfstakken.

  • In counterfactual forecasting, er is geen grondwaarheid, omdat het iets is wat niet gebeurd is. De beoordeling van de prestaties lijkt dus vrij moeilijk (gelukkig hebben we een aanpak bedacht die in het gedeelte Evaluatie zal worden gepresenteerd).

Voorgestelde benadering

We hebben de volgende aanpak gebruikt om ons hulpmiddel te bouwen:

  • 1. Trein een voorspelling model op data buiten promotie, om een basislijn te leren van hoe de verkoop eruit zou moeten zien zonder geplande promoties.

  • 2. Voorspel op alle data punten (eigenlijk worden alleen de voorspellingen tijdens de promotie gebruikt, maar het kan goed zijn om de voorspellingen overal te bewaren voor de interpretatie).

  • 3. Vergelijk die voorspelde basislijn met de werkelijke verkoop tijdens elke promotie om de stijging ervan af te leiden.

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:

  • Intermitterend en/of zeer lage verkoop (het zal moeilijk zijn om een basislijn te leren).

  • Promoties duren te lang en/of te frequent zijn (dus niet genoeg data punten om op te trainen).

  • Sommige producten zijn in meerdere promoties op hetzelfde moment (welke promotie is verantwoordelijk voor deze extra verkoop?)

2. Definieer een korrelgrootte voor de use case:

  • Tijd granulariteit: zal de analyse dagelijks of wekelijks zijn?

  • Item granulariteit: één tijdreeks per artikel? Per familie van artikelen? Soms kunt u de granulariteit niet verkleinen als het aantal verkochte eenheden per tijdselement niet hoog genoeg is of als de tijdreeks te intermitterend is. De samengevoegde verkoop zullen soepeler, met minder volumeproblemen, maar soms zullen ze gebrek aan interpreteerbaarheid.

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:

  • De behandeling van speciale evenementen (Black Friday was specifiek belangrijk)
  • Temporele vertragingen (Zelfs als het model van Prophet autoregressief is, hebben we vroegere en toekomstige verkoopvertragingen toegevoegd, wat erg nuttig is gebleken voor de nauwkeurigheid van het model).

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:

  • We hadden meer dan 1000 tijdreeksen wat dus betekent meer dan 1000 modellen van Prophet om te trainen.
  • Profeet heeft moeite met begrijpen niet-lineaire relaties tussen kenmerken en hun impact op het doel. Deze kenmerk kruis Deze kwestie wordt goed beschreven in dit artikel.
  • We bereikten de dezelfde prestatie terwijl verminderen met een factor van 10 de trainingstijd.

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

  • Ten eerste, sommige externe factoren zijn niet overwogen. Bijvoorbeeld mediacampagnes. Deze externe factoren kunnen een (positieve) invloed hebben op de verkoop en dus kunnen we zou kunnen overschatten de omhoog gegenereerd door de bestudeerde promotie.
  • Ten tweede, het geval van langdurige promoties: Inderdaad, het verwijdert een belangrijk aantal data van de training dataset.

  • Last but not least kan de algemene promotie-impact worden verbeterd rekening houdend met meerdere effecten zoals kannibalisatie, halo-effect, anticipatie-/opslageffecten, die in de laatste sectie worden beschreven.

Verdergaan & volgende stappen

De modellering verbeteren

Er kunnen verschillende effecten worden toegevoegd om de netto impact van een promotie te meten:

  • Kannibalisatie: Het feit dat een product gepromoot wordt en dus aantrekkelijker is, zal een negatieve invloed hebben op de verkoop van een vergelijkbaar product.

  • Halo: Het feit dat een product gepromoot wordt en dus aantrekkelijker is, zal een positief effect hebben op de verkoop van “vaak samen gekochte” producten.

  • Anticipatie: Klanten kopen minder van de afgeprijsde producten vóór een promotie, omdat ze weten dat de prijzen aantrekkelijker zullen zijn.

  • Opslag: Klanten kopen na een promotie minder van de afgeprijsde producten, omdat ze tijdens de promotie meer hebben gekocht dan normaal.

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.

Medium Blog bij Artefact.

Dit artikel werd oorspronkelijk gepubliceerd op Medium.com.
Volg ons op ons medium Blog !