ACA Group Blog | Inzichten over Softwareontwikkeling, UX/UI, Data & Innovatie

Hoe we een intelligent voorraadbeheersysteem bouwden

Geschreven door Stijn Van den Enden | 5-mei-2025 14:25:52

Wat is de ideale winkelvoorraad voor een product? Hoe kunnen we het aantal toekomstige verkopen bepalen? Is het mogelijk om het aantal productleveringen te verminderen zonder uit voorraad te raken?

ACA bouwt een intelligent voorraadbeheersysteem voor een klant met ongeveer 30 winkels. Tussen deze winkels verkoopt deze klant enkele duizenden producten. Wie kan bovenstaande vragen beantwoorden voor al deze producten voor elke winkel, op elk moment?

Ik zal je vertellen hoe we in historische gegevens doken, data science combineerden met machine learning en antwoorden kregen op bovenstaande vragen.

Gegevens verzamelen

Voor elk afzonderlijk product in de catalogus moet een shopmanager het gewenste winkelaanbod bepalen. Een menselijke shopmanager kan echter niet met zoveel variabelen rekening houden als een AI-model. Dit resulteert in meer anticipatie (een grotere voorraadbuffer) en dus hogere opslagkosten. Ons doel is om de shopmanager te helpen bij het bepalen van de juiste hoeveelheid voorraad met een intelligent voorraadbeheersysteem op basis van machine learning. Door te kijken naar de evolutie uit het verleden kunnen we een indicatie geven van hoeveel goederen er de komende tijd waarschijnlijk verkocht zullen worden.

"Als iemand de toekomst wil bepalen, moet hij het verleden bestuderen."
- Confucius
Voordat we begonnen na te denken over een model om de vraag naar producten te voorspellen, hebben we de verkoopgegevens onderzocht. Van de applicatie die we aan het bouwen zijn, hadden we ongeveer 9 maanden productgeschiedenis. We konden oudere systemen raadplegen om onze gegevens aan te vullen. Deze twee gecombineerd gaven ons 21 maanden verkoopgegevens, wat nog steeds minder dan ideaal is. Als je seizoenseffecten wilt detecteren, heb je gegevens van meerdere jaren nodig. We besloten het toch te proberen. Ons doel was om de mensen te helpen in hun proces, niet om het huidige systeem te automatiseren op basis van de voorspellingen van het model.
Sommige producten zijn populairder afhankelijk van het weer. Zo wordt strooizout meer verkocht op dagen met vrieskou. De populariteit van pompoenlantaarns piekt vlak voor 31 oktober. Dit was ook het geval voor sommige artikelen in de productcatalogus van onze klant. Afhankelijk van het type product kunnen de temperatuur, de neerslag of het aantal uren zonneschijn een factor zijn in de vraag van klanten. Daarom verzamelden we historische weergegevens voor de locatie van de winkel. Uiteraard hebben openingstijden van de winkel, promoties voor het product zelf of soortgelijke producten, prijsvariaties en het niet beschikbaar zijn van producten ook allemaal invloed op het gedrag van klanten. Feestdagen of sportevenementen kunnen ook van invloed zijn op je bedrijf. Door al deze voorspellende variabelen toe te voegen, kun je de nauwkeurigheid van een tijdreeksmodel verder verbeteren.

Het model bouwen

Nu we de benodigde gegevens hebben gevonden, is het tijd om aan een model te gaan werken. Omdat een dagelijkse voorspelling te fijnkorrelig was voor onze klant, besloten we ons te richten op een wekelijkse voorspelling om een paar redenen:

  • terwijl de onzekerheid toeneemt naarmate je verder in de toekomst kijkt, zijn de lopende kosten van een dagelijkse voorspelling te hoog.
  • er is niet genoeg variatie voor artikelen die slechts 0 tot 3 keer per week worden verkocht.
  • een wekelijkse herbevoorrading is ideaal voor de meeste retailers en/of leveranciers.

Een wekelijkse voorspelling vormt echter een extra uitdaging. Gemiddeld zijn er 52,18 weken in een jaar. Dat betekent dat seizoenseffecten elk jaar iets later kunnen plaatsvinden. Er zijn ook voordelen: een wekelijkse voorspelling gaf ons de mogelijkheid om minder populaire producten op te nemen, die niet dagelijks worden verkocht.

We hebben een paar technieken overwogen om tijdreeksen te voorspellen. Vanwege het beperkte tijdsbestek van de gegevens kozen we voor een model gebaseerd op structurele tijdreeksen. Om het model te implementeren hebben we gekozen voor de STS-module van TensorFlow Probability. Hieronder ziet u het resultaat van een voorspelling van ons model. De rode lijn vertegenwoordigt het aantal artikelen in de winkel voor een bepaald product. De blauwe lijn is de voorspelling van ons model op weekbasis, verminderd met de dagelijks verkochte artikelen voor dat product. Hoewel we op sommige punten uitverkocht raken, geeft dit een vrij goede schatting van hoeveel voorraad de winkel de komende week nodig heeft.

Alles samenvoegen

Het is moeilijk om een exacte waarde te geven aan de kosten van overbevoorrading. Door te kijken naar het totale aantal artikelen dat per week wordt opgeslagen, kwamen we erachter dat ons model de voorraadkosten met bijna 75% zou verlagen. Het is duidelijk dat lege schappen in een winkel niet aantrekkelijk zijn vanuit het oogpunt van de klant. Maar deze informatie geeft onze klant de mogelijkheid om de omvang en de frequentie van de leveringen tot een optimaal punt terug te brengen.

Naast het feit dat het model een goede voorspelling geeft, kunnen we informatie krijgen over hoeveel invloed een kenmerk heeft op de voorspelling van het model. Een structurele tijdreeks wordt weergegeven als de som van eenvoudigere componenten. Dit betekent dat we daadwerkelijk kunnen zien welk effect de temperatuur heeft op de verkoop. Bovendien kunnen we, als we een marketingcampagne voor dit product zouden starten, de causale invloed afleiden. In feite kunnen we schatten hoeveel producten zouden zijn verkocht als we geen promotie hadden. Het is vaak een grote uitdaging om uit te leggen hoe een machine-learningmodel precies zijn doel produceert. Met structurele tijdreeksen kunnen we aangeven welke kenmerken de grootste invloed hebben op de voorspelling.

De grafiek hierboven toont de invloed van een seizoen (13 weken) op productverkopen. Zelfs in deze korte tijdsperiode is er een duidelijke stijging in de verkoop in juli.

Takeaway

Er is geen eenvoudige manier om de toekomst te voorspellen. Maar door terug te kijken in de tijd kunnen we patronen ontdekken die we vooruit kunnen projecteren. We hebben deze techniek gebruikt om een van onze klanten een idee te geven van hoeveel verkoop ze zouden kunnen genereren in de komende week(en). Als we verder gaan, kunnen we ervan uitgaan dat ons model steeds betrouwbaarder wordt naarmate de historische gegevens groeien.

Ik begon deze blogpost met de vraag wie het winkelaanbod van duizenden producten in meerdere winkels zou kunnen bepalen. Met een klein duwtje in de goede richting van een intelligent voorraadbeheersysteem kan iedereen die persoon zijn.