Hoe wij een slim voorraadbeheerssysteem bouwden
ACA bouwt een slim voorraadbeheerssysteem voor een klant met circa 30 retailvestigingen. Deze klant verkoopt verdeelt over deze winkels duizenden producten.
Wie kan bovenstaande vragen op elk moment beantwoorden voor al deze producten en alle winkels?
Ik zal je vertellen hoe wij in historische gegevens zijn gedoken en datawetenschap hebben gecombineerd met machine learning om enkele van bovenstaande vragen te beantwoorden.
Gegevens verzamelen
Winkelmanagers moeten voor elk afzonderlijk product in hun catalogus bepalen hoe groot de voorraad moet zijn. Een menselijke winkelmanager kan echter met minder variabelen rekening houden dan een AI-model. Dit leidt tot meer voorspellingen (een grotere buffervoorraad) en hogere opslagkosten. Wij willen winkelmanagers helpen om met behulp van een door machine learning aangestuurd slim voorraadbeheerssysteem de juiste voorraad te bepalen. Door naar ontwikkelingen uit het verleden te kijken, kunnen we een indicatie geven van hoeveel goederen er hoogstwaarschijnlijk in de komende periode worden verkocht.
"Bestudeer het verleden, als u de toekomst wilt voorspellen."
– Confucius
Gegevens verzamelen
Winkelmanagers moeten voor elk afzonderlijk product in hun catalogus bepalen hoe groot de voorraad moet zijn. Een menselijke winkelmanager kan echter met minder variabelen rekening houden dan een AI-model. Dit leidt tot meer voorspellingen (een grotere buffervoorraad) en hogere opslagkosten. Wij willen winkelmanagers helpen om met behulp van een door machine learning aangestuurd slim voorraadbeheerssysteem de juiste voorraad te bepalen. Door naar ontwikkelingen uit het verleden te kijken, kunnen we een indicatie geven van hoeveel goederen er hoogstwaarschijnlijk in de komende periode worden verkocht.
"Bestudeer het verleden, als u de toekomst wilt voorspellen."
– Confucius
We hebben eerst de verkoopgegevens bestudeerd, voordat we aan de slag gingen met een model om de vraag naar producten te voorspellen. De applicatie die we aan het bouwen zijn heeft ongeveer 9 maanden aan productgeschiedenis opgeleverd. We konden ook oudere systemen benutten om onze gegevens aan te vullen. Deze twee zaken leverden ons 21 maanden aan verkoopgegevens op, nog steeds minder dan gewenst. Er zijn meerdere jaren aan gegevens vereist om te bekijken wat de effecten van seizoenen zijn. We besloten toch een poging te wagen. Het doel was immers mensen bij hun proces te ondersteunen, de voorspellingen van het model zouden niet gebruikt worden om het huidige systeem te automatiseren.
Sommige producten kunnen afhankelijk van het weer populairder zijn. Strooizout wordt tijdens hele koude dagen bijvoorbeeld vaker verkocht. De vraag naar lantaarns in de vorm van pompoenen neemt toe in de aanloop naar Halloween. Dit gold ook voor bepaalde items in de productcatalogus van onze cliënt. Afhankelijk van het soort product kunnen temperatuur, neerslag of het aantal zonuren van invloed zijn op de vraag bij klanten. We verzamelden dus historische weergegevens over de locatie van de winkel. Het spreekt voor zich dat openingstijden, acties voor het product of voor vergelijkbare producten, prijsverschillen en niet voorradig zijn van producten ook allemaal factoren zijn die het gedrag van klanten beïnvloeden. Officiële feestdagen of sportevenementen kunnen ook een impact hebben op je activiteiten. Aan de hand van al deze voorspellende variabelen kan de nauwkeurigheid van een tijdreeksmodel verder worden verbeterd.
Het model bouwen
We beschikken nu over de benodigde gegevens en kunnen beginnen met het model. Een dagelijkse voorspelling bleek te uitgebreid voor onze klant en we besloten ons op een wekelijkse voorspelling te richten, omdat:
- hoe verder je in de toekomst probeert te kijken hoe groter de onzekerheid wordt, de lopende kosten voor een dagelijkse voorspelling zijn te hoog;
- er is onvoldoende variatie voor artikelen die slechts 0 tot 3 keer per week worden verkocht;
- een wekelijkse bevoorrading is ideaal voor veel retailers en/of leveranciers.
Een wekelijkse voorspelling leverde echter wel een extra uitdaging op. Een jaar bevat gemiddeld 52,18 weken. Dat betekent dat seizoenseffecten elk jaar iets later kunnen plaatsvinden. Er zijn echter ook voordelen: we konden aan een wekelijkse voorspelling ook minder populaire producten toevoegen die niet dagelijks worden verkocht.
We hebben een aantal technieken bekeken om tijdreeksen te voorspellen. We besloten vanwege het beperkte tijdsbestek te kiezen voor een model op basis van structurele tijdreeksen. Om het model te implementeren hebben we de STS-module van TensorFlow Probability geselecteerd. Hieronder kun je het resultaat zien 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 wekelijkse voorspelling van ons model, minus de dagelijkse verkochte items voor dat product. Het product is weliswaar op bepaalde momenten niet voorradig, maar dit geeft wel een goed beeld van de voorraad die de winkel in de volgende week nodig heeft.
Alles bij elkaar brengen
Het is moeilijk om een exact cijfer te verbinden aan de kosten voor een te grote voorraad. Uit het aantal artikelen dat wekelijks wordt opgeslagen, bleek dat ons model de voorraadkosten met bijna 75% zou verminderen. Lege schappen in een winkel zijn uiteraard niet heel aantrekkelijk voor klanten, maar onze klant kan met deze informatie de hoeveelheid en frequentie van leveringen terugbrengen naar een optimaal niveau.
Naast het feit dat het model een goede voorspelling biedt, kunnen we informatie verzamelen over hoeveel invloed een functie heeft op de voorspellingen van het model. Er wordt een structurele tijdreeks weergegeven als de som van eenvoudigere componenten. Dit betekent dat we daadwerkelijk kunnen zien wat de gevolgen zijn van de temperatuur op de verkoop. We kunnen bovendien bepalen wat de oorzakelijke gevolgen zijn als we een marketingcampagne zouden opzetten voor dit product. Dit betekent feitelijk dat we kunnen voorspellen hoeveel producten er zonder actie zouden zijn verkocht. Het is vaak een behoorlijke uitdaging om uit te leggen hoe een machine learning-model een doel produceert. We kunnen aan de hand van structurele tijdreeksen laten zien welke functies de voorspelling het meest beïnvloeden.
In bovenstaande grafiek wordt weergegeven wat de invloed van een seizoen (13 weken) is op de productverkoop. Zelfs in deze korte periode is er in juli een duidelijke verkooptoename zichtbaar.
Takeaway
Er is geen eenvoudige manier om de toekomst te voorspellen. Door echter naar het verleden te kijken, kunnen we patronen herkennen om vooruit te blikken. We hebben deze techniek gebruikt om een van onze cliënten inzicht te geven in de verkoop die zij in de komende week/weken zouden mogen verwachten. De verwachting is dat ons model in de toekomst steeds betrouwbaarder wordt, omdat de hoeveelheid historische gegevens toeneemt.
Deze blog begon met de vraag wie kan bepalen hoe groot de voorraad van duizenden producten in meerdere winkels zou moeten zijn. Met een beetje hulp van een slim voorraadbeheersysteem kan iedereen dat.