Predikce zásob pomocí AI

10. Finální model

Finální test – celý dataset

Chvíle pravdy: Jak se model zachová, když ho pustíme na všech 15 000 položek? Nastavení modelu a dat (podle dosavadních zjištění):

  • Feature engineering, 120 features (kombinace individuálního obratu a group-features)
  • Redukce extrémů
  • Sloučení řídkých kategorií
  • Trénink jen na položkách s alespoň 1 měsícem historie
  • Délka encoderu 18 měsíců
  • Architektura TFT
  • Validace: poslední 3 měsíce, které nebyly v tréninku


Pro závěrečný test jsem zvolil model
s group features, ale bez syntetických dat. Tento setup se ukázal jako nejstabilnější napříč celým sortimentem, i když syntetika zůstává zajímavou možností pro budoucí projekty nebo specifické subsety zboží.

MetrikaCelá historie33 měsíců13-32 měsíců
Hodnota (ALL)Hodnota (Item)Hodnota (ALL)Hodnota (Item)Hodnota (ALL)Hodnota (Item)
WAPE30.102249.712728.106941.672333.430440.1634
RMSE45.90722.389550.405123.914526.320417.0358
0.92320.930.7245
MAPE65.543857.33260.9407
ROBUST0.55172.27350.549858.71280.504966.3819
STABLE0.38840.36420.5422
Metrika6-12 měsíců1-6 měsícůbez historie
Hodnota (ALL)Hodnota (Item)Hodnota (ALL)Hodnota (Item)Hodnota (ALL)Hodnota (Item)
WAPE38.544445.851844.677847.105580.7317220.7146
RMSE26.628717.145843.130627.517895.970561.587
0.75290.7451-0.1913
MAPE64.67679.1142186.139
ROBUST0.523366.51180.544189.79980.4013250.967
STABLE0.48010.47760.9196

Výsledky podle délky historie:

  • Plná historie (36 měsíců) – WAPE kolem 30 % (ALL), vysoké R² (0,92+).
  • Středně dlouhá historie (12–35 měsíců) – podobné výsledky jako u plné historie, jen lehký pokles R². 
  • Krátká historie (6–12 měsíců) – stále solidní predikce, WAPE kolem 38 %.
  • Velmi krátká historie (1–6 měsíců) – vyšší chyby, ale přesto použitelná predikce pro orientační plánování.
  • Bez historie – predikce zůstává nepoužitelná, model nemá jediný bod pro určení scale.

Ve srovnání s kapitolou #9 (test na částečném datasetu) jsou metriky prakticky totožné – model drží stabilitu i při trojnásobném objemu dat. Vidět je i mírné zlepšení u SKU s krátkou historií, hlavně díky většímu počtu kategorií v rámci skupin → bohatší data pro embeddingy → lepší přenos vzorů.

Vizualizace

Porovnávám predikce modelu z částečného datasetu (minulá kapitola) s novou predikcí nad plným datasetem.

  • 🔴 Červená – predikce z modelu nad částečným datasetem.
  • 🟢 Zelená – predikce z finálního modelu nad celým datasetem.


Největší vizuální rozdíly jsou patrné u SKU s krátkou historií – právě tam teď hrají skupinové informace výraznější roli. U delších historií se křivky překrývají téměř dokonale, což potvrzuje, že navýšení tréninkového datasetu na plný rozsah nepoškodilo výkon u zavedených položek.

Slevové akce

Model si na plném datasetu vede velmi dobře, proto jsem ještě ověřil, jak zvládá promo kampaně. V tréninkových datech dostává informaci kdy a jak dlouho bylo konkrétní zboží ve slevě. V rámci feature engineeringu navíc přidávám kontext:

  • jak často mívá položka akci
  • jak dlouho promo obvykle trvá
  • jaký mělo v minulosti dopad na prodeje

Vizualizace ukazuje rozdíl v predikci když položka měla plánovanou slevu vs bez slevy.

  • 🔴 Červená – bez plánovaných slev
  • 🟢 Zelená – sleva na poslední 3 měsíce
  • Kde historie potvrzuje úspěšnost slev, predikce prodeje roste.
  • Kde kampaně v minulosti nefungovaly, křivka zůstává téměř beze změny (např. C511478).


To ukazuje, že model se dokáže rozhodovat podle
skutečného dopadu promo akcí v historii a sleva sama o sobě není univerzálním spouštěčem zvýšeného prodeje.

Produkční model

Abych zákazníkovi dodal plnohodnotné řešení, natrénoval jsem finální verzi modelu – tentokrát na celé historii 42 měsíců (od začátku projektu nějaké měsíce uplynuly).

 

Validační okno tentokrát neexistuje, takže hodnocení probíhá vizuálním porovnáním s interním forecastem zákazníka a skutečnými prodeji (které jsem dohrál zpětně). I když chybí přesná metrika, klíčové je, že zákazník je spokojený a v projektu vidí jednoznačný přínos.


Co ukazuje vizualizační aplikace:

  • ⚫ Historical data – skutečné prodeje
  • 🔵 POC prediction – výstup z testovacího modelu s jen základním nastavením
  • 🟢 Final prediction – finální model
  • 🔴 Customer forecast – interní predikce zákazníka
  • Predikce modelu se ve většině případů drží velmi blízko reálným hodnotám
  • Odchylky se objevují hlavně u anomálních prodejů, které se výrazně vymykají běžnému chování
  • Model spolehlivě zachycuje sezónní vzorce a drží jejich tvar i při kolísání objemů
  • Dokáže korigovat chyby manuálního forecastu zákazníka
  • U položek s kratší historií je predikce více ovlivněná chováním skupiny, což může vést k odchýlení od reality
  • Nové položky s historií kratší než 6 měsíců jsou pro model stále výzvou – přesnost zde začíná znatelně klesat

Vyzkoušejte si výsledky sami: https://demo-inventory-forecasts.streamlit.app/.
(Pokud aplikace spí, klikněte na “Yes, get this app back up!” – do minuty naskočí.)

Poznámka: všechny zobrazené údaje jsou anonymizované a lehce pozměněné.

Závěr série – Predikce zásob pomocí AI

Po deseti dílech tohoto dokumentu, tisících experimentů a terabajtech natrénovaných dat jsem se dostal k finálnímu řešení.

Během projektu jsem:

  • postavil robustní pipeline pro zpracování dat a feature engineering
  • zvládl práci s extrémy
  • přidal položky s neúplnou historií
  • otestoval desítky kombinací scénářů, modelů a nastavení
  • zavedl group-features pro přenos znalostí mezi podobnými položkami,

Finální volba 

TFT model s group-features, bez syntetických hodnot, trénovaný na položkách s minimálně 1 měsícem historie.

Výsledek? 

Stabilní predikce napříč celým sortimentem, silné zachování sezónnosti a schopnost korigovat chyby v manuálních forecastech zákazníka.