Learnings beim Bau einer eigenen Bestellvorhersage
Eine Bestellvorhersage zu bauen ist kein leichtes Unterfangen. Die schiere Komplexität die dabei entsteht kann leicht unterschätzt werden. Wie wir es trotzdem gebaut haben und welche Learnings wir dabei hatten soll Inhalt dieses Blogposts sein.
Im Rahmen eines Kundenprojekts bekam ich die Aufgabe die Vorhersage für Bestellungen zu verbessern. Die bisherige Vorhersage war eigentlich nur ein simples "Mittelwert der letzten n Tage nehmen und auf die Zukunft verteilen".
Es fing damit an, dass wir eigentlich nur die Saisonalität unserer Artikel mit betrachten wollten. D.h. wir wollten grob modellieren, dass es Artikel gibt, deren Verkäufe z.B. im Winter abfallen und im Sommer ansteigen.
Dazu kam, dass wir mal die sog. zero-shot Foundation Models ausprobieren wollten. Das sind im Grunde Machine-Learning Modelle, die ganz ähnlich wie LLMs Zeitreihen vorhersagen und dabei state-of-the-art Performance erzielen, ohne dass sie auf den eigenen Daten trainiert werden müssen.
Damit wollten wir unseren 365-Tage Forecast verbessern. Welche Überlegungen dabei eingeflossen sind und wo unsere naive Vorhersage an ihre Grenzen stößt, soll Inhalt dieses Blogbeitrags sein.
Wofür eigentlich?
Die Bestellvorhersage sagt uns, wie viele Artikel wir heute einkaufen müssen, damit wir nächste Woche noch genügend auf Lager haben. Dabei gibt es zwei wesentliche Probleme, die entstehen, wenn unsere Vorhersage daneben liegt:
Underforecasting | Overforecasting |
|---|---|
Bestellen wir zu wenig, können Verkäufe nicht realisiert werden | Bestellen wir dagegen zu viel, dann läuft das Lager voll und es fallen Lagerkosten an |
Deswegen brauchen wir eine Bestellvorhersage, welche in der Lage ist, weder zu viel noch zu wenig vorherzusagen, wobei meistens Underforecasting schlimmer ist als Overforecasting, da entgangene Verkäufe oft mehr kosten als die anfallenden Kosten des Lagers.
Weiterhin sind in der Regel die Artikel, die man verkauft, nicht gleich die Artikel, die man einkauft. Stattdessen besteht der verkaufbare Artikel über eine Produktionskette aus anderen Artikeln. Das sind die Artikel, die wir einkaufen müssen. D.h. man muss den vorhergesagten Bedarf zunächst auf die einkaufbaren Stammartikel herunterrechnen, bevor man eine Vorhersage machen kann bzgl. welche und wie viele Artikel bestellt werden müssen.
Die naive Vorhersage
Wie eingangs schon erwähnt, war unsere erste Vorhersage ein naives Modell:
Wir nehmen die durchschnittlichen Verkäufe der letzten n Tage und verteilen sie einfach auf die nächsten m Tage
Und tatsächlich ist diese naive Herangehensweise gar nicht so schlecht. Natürlich verkaufen wir vielleicht in einem Monat weniger und in einem anderen Monat mehr als vorhergesagt. Im Mittel stimmt diese Vorhersage in vielen Fällen allerdings erstaunlich gut.
Wenn die Nachbestellungen bei den Lieferanten und die Produktion der Artikel ausreichend lange dauern, mitteln sich Fehler im Schnitt ziemlich gut weg.
Aber wo scheitert diese naive Vorhersage dann? Im Wesentlichen scheitert sie immer dann, wenn wir nicht genügend einkaufen und deswegen das Lager leer läuft. Ein einfaches Beispiel:
Es ist vor Black Friday & Black Week. Unser naiver Mittelwert erwartet durch den letzten Monat keine sonderlich großen Verkaufszahlen. Tatsächlich verkaufen wir allerdings innerhalb der Black Week eine Vielzahl an Artikeln mehr. Wir kaufen zuvor zu wenig Artikel ein und zur Black Week läuft dann unser Lager leer. Danach brechen die Verkaufszahlen ein, da wir unseren Sales-Rank bei Amazon dadurch verlieren. Es dauert Wochen bis Monate, bis die nächste Lieferantenbestellung im Lager eintrifft. Wir verpassen also nicht nur die Black Week Sales, sondern auch noch weitere Sales lange danach.
Was muss eine bessere Vorhersage können?
Jetzt will man die Vorhersage anpassen, aber was kann denn überhaupt so einen Verkauf beeinflussen?
Saisonalität: Weihnachtsartikel werden im Winter mehr verkauft als im Sommer.
Trends: Ein Artikel hat ein natürliches Wachstum in seinen Verkäufen
Der Artikelpreis sowie Werbe- und Rabatt-Aktionen boosten die Verkaufszahlen
Feiertage, Ferien, Black-Friday, Wochenenden usw. haben häufig einen positiven Effekt auf die Verkäufe
Die Liste ist im Allgemeinen sehr lang. Wenn man sich einmal damit beschäftigt hat, ist es auch nicht mehr abwegig, z.B. die mittlere Temperatur in Deutschland mit in die Verkaufsvorhersage mit einzubeziehen. Je mehr Daten man zur Verfügung hat, desto besser kann man alle äußeren Einflüsse auf die Verkaufszahlen modellieren.
Dennoch verbirgt sich dahinter eine Gefahr: Mehr hilft i.d.R. nicht gleich mehr. Einen äußeren Einfluss mit reinzunehmen kann genauso den Forecast verschlechtern. Jeder einzelne Schritt muss also evaluiert werden.
Wie validiere ich meine Vorhersage?
Eine Bestellvorhersage zu validieren ist nicht einfach. Schaut man sich per Hand einzelne Artikel stichprobenartig an, bekommt man oft ein falsches Gefühl dafür, was die Vorhersage eigentlich kann.
Deswegen braucht es Backtesting, wo man die Vorhersage für die Vergangenheit laufen lässt, um sie anschließend gegen tatsächliche Verkäufe zu halten. Nur so kann man ein Gefühl dafür bekommen, “wie gut” ein Vorhersagemodell wirklich ist und ob Änderungen am Forecast tatsächlich eine Verbesserung erzielt haben.
Wie kann so eine Vorhersage technisch aussehen?
Grundsätzlich kann man sagen, dass verschiedene Faktoren verschiedene Handhabungen voraussetzen.
Beispielsweise kann man mit einer statistischen “STL-Decomposition” eine Verkaufszeitreihe in einen Trend und eine Saisonalität aufspalten, um periodische Effekte mit einzubeziehen.
Wir haben uns dafür entschieden, ein zero-shot Modell auszuprobieren. Die zwei Hauptkandidaten waren dabei TimesFM von Google (2024) und Chronos-2 von Amazon (2025). Diese füttert man dann mit Verkaufszahlen, Feiertagen, Preisverläufen und weiteren Informationen, die für die Vorhersage relevant sind. Aus den Tests ging hervor, dass TimesFM in unserem Fall das bessere Modell ist.
Ausblick
Unsere jetzige Vorhersage ist noch lange nicht perfekt, aber sie zeigt bereits signifikante Verbesserungen gegenüber der alten Vorhersagelogik.
Eine gute Vorhersage zu bauen ist ein langer Prozess, in dem man immer wieder neue Edge-Cases und Bugs finden und beheben muss.
Dabei ist es meiner Meinung nach ein Must-Have, sich zu seinem Modell Auswertungsansichten und Benchmarks zu bauen, um korrekte Aussagen bilden zu können.
)
)
)
)
)
)
)
)
)
)