Predikce zásob pomocí AI

3. Jak to validovat

Základní otázka před jakýmkoliv tréninkem

Smyslem validace je ověřit, jak si model poradí s daty, která nikdy neviděl – stejně, jako v reálném provozu. Proto je nutné dataset rozdělit na dvě části:

  • Tréninková data – na nich se model učí.
  • Validační (testovací) data – na nich se kontroluje, co model opravdu umí.


Ale kde stanovit hranici?

Chtěl jsem modelu poskytnout všechny možné informace – všechny SKU a všech 36 měsíců – abych zachytil co nejvíce vzorců. Část časové osy však musela zůstat skrytá; jinak by si síť jednoduše zapamatovala historii a v realitě se zhroutila.

Řešení? Vytvořil jsem tři validační scénáře, které postupně zvyšují přísnost: od „rychlé zkoušky“ (model validuje pouze na datech, jež už viděl) až po ostrý test jen na opravdu neviděných měsících.

3 scénáře validace

  • Scénář 1: Pro základní testování jsem nejprve použil validaci nad stejným datasetem jako byl trénink (tj. celé období 36 měsíců).
    Cílem bylo ověřit, jestli je model vůbec schopen najít vzory a predikovat hodnoty, které už viděl (je zde riziko přetrénování modelu).
  • Scénář 2: Trénink na omezené historii (33 měsíců), validaci na posledních 6 měsících (3+3,  3 měsíce, které model při tréninku viděl a 3 nové měsíce).
    Tento postup už mnohem lépe simuluje reálné nasazení: model nejprve „projde historií“, naučí se z ní vzory a teprve poté predikuje nové, neznámé období. Díky tomu lze:
    • Prověřit schopnost generalizace – jestli model umí správně extrapolovat trend, nebo jen opakuje to, co už zná.
    • Odhalit posun v sezonních vzorcích – například zda si poradí s vánoční špičkou či jinými vzory.
    • Odhalit vliv sale akcí – jestli výsledné predikce jsou ovlivněny plánovanými slevovými akcemi
    • Citlivost na nové položky – poslední měsíce často obsahují zboží s krátkou historií; validace tak rovnou ukáže, jak si model poradí se sortimentem, který se průběžně mění.
  • Scénář 3: Stejný trénink jako ve Scénáři 2, Validace = pouze poslední 3 měsíce (tedy data která neviděl). Tento scénář jsem používal jako kontrolní validaci.
    Až když jsem byl s výsledky spokojený, natrénoval jsem finální verzi na celém datasetu (bez vyčleněné validace), aby model využil 100 % dostupných dat pro ostré nasazení ve skladu.

Poznámka: Všechny metriky a grafy, které dál v článku ukazuji, pocházejí ze Scénáře 2 (pokud výslovně neuvedu jinak). Metriky jsou tedy počítány na posledních 3+3 měsíců. Vizualizace pro názornost zobrazuje 12 měsíců.

Následující graf ukazuje rozdíl mezi scénářem 1 a 2. Červený graf ukazuje Scénář 1, tedy kdy model při tréninku viděl všechny výsledky.
Zelený graf je
Scénář 2, kdy poslední 3 měsíce nebyly součástí tréninku. Je zřejmé, že je nutné do validací zahrnout hned od začátku neviděná data. 

Jakou metriku tedy vybrat, když není technicky možné ručně zkontrolovat každé zboží?
V praxi je běžné používat například R², RMSE nebo MAPE – proč tedy vůbec vymýšlet něco jiného? Zásadním problémem je existence nul a vysoká variabilita hodnot.

Proč jsou nuly problém?

Představte si, že model predikuje pro daný měsíc obrat 2 kusy, zatímco reálný prodej byl nula. Zdánlivě chyba jen 2 kusy, ale pokud použijeme procentuální metriku (například MAPE), vyjde nesmyslně vysoká chyba, protože se dělí nulou nebo velmi malým číslem.
Podobně je tomu u RMSE – pár „menších” odchylek na položkách s velkými prodeji může nafouknout celkovou chybu a zcela zastřít výkon modelu na hlavních položkách.

Proč je vysoká variabilita hodnot problém?

Příklad položkyReálný obratPredikovaný obratAbsolutní chybaRelativní chyba
A (nízký obrat)5 ks8 ks3 ks60%
B (vysoký obrat)5 000 ks4 800 ks200 ks–4 %
  • MAPE bude vysoké kvůli položce A (60 %), i když reálně jde o ±3 kusy.
  • RMSE naopak zvýrazní položku B (200 ks), protože je výrazně citlivý na velké absolutní chyby.
  • může vypadat výborně (99 % rozptylu vysvětleno) díky položkám s vysokými prodeji, ale pro „malé“ položky je tato metrika často málo vypovídající.

Jedna metrika nestačí. 

Vysoká variabilita položek, hodně nulových a malých položek.
Musel jsem přistoupit ke kombinaci více metrik.

MetrikaCo vlastně měříPoznámkaCíl
WAPE
(Vážená procentní chyba)
Kolik % celkových prodejů model „netrefil“.Citlivost na sortiment s nulovým obratem.⬇️
RMSE
(Prům. absolutní chyba)
O kolik kusů se v průměru netrefíme.Citlivost na sortiment s velkými obraty.⬇️

(Koeficient určení)
Jak velkou část pohybů v prodejích model správně „vysvětluje“.Hodně ovlivněn velkými obraty.⬆️
MAPE
(Průměrná absolutní procentuální chyba)
Průměrná procentní chyba každé položky.Citlivost na sortiment s nízkými obraty.⬇️
Robust scoreKombinace přesnosti, kontroly odchylek a shodu směru trendu. (1 = skvělé, 0 = špatné)Zachytí stoupající/klesající trend.⬆️
Stable scoreWAPE + kontrola odchylek a relativní chyby u drobných prodejů. (nižší = lepší)Zajišťuje, že predikce je hladká a stabilní měsíc po měsíci a není náchylná na sortiment s malými obraty.⬇️

Cíl označuje, jaké hodnoty potřebujeme (nízké ⬇️ nebo vysoké ⬆️).

Jako hlavní metriky používám WAPE, RMSE a R². 

  • MAPE metrika není vhodná pro variabilní položky.
  • Robust a Stable používám zejména pro ověření základní koncepce modelů. Pro drobné ladění se tyto hodnoty výrazně nemění. 

Moc jednoduché?

V průběhu tréninku jsem narazil na další problém v aplikaci metrik. Standardní metriky přes celý dataset jsou velmi vypovídající, ale neupozorňují na odchylky u jednotlivých položek. Z toho důvodu jsem rozšířil použité metriky na:

Verze metrikyJak se počítáNa co odpovídá
Výpočet za celý datasetHodnoty ze všech položek se sloučí do jednoho vektoru a z něj spočítám metriky.Kolik kusů se netrefí v celkovém objemu? Tedy finanční dopad na skladové zásoby.
Výpočet po položkáchMetrika se spočte pro každé zboží zvlášť, potom se z těchto čísel udělám průměr.Jak přesná predikce je u typického produktu? – tedy kvalita napříč celým sortimentem.

Příklad vypočtených metrik nad modelem s 2 vrstvami neuronových sítí a softplus normalizatorem. Významné jsou zde rozdíly mezi metrikami WAPE a MAPE. Druhá tabulka ukazuje správně natrénovaný model.

MetrikaHodnota (ALL)Hodnota (Item)
WAPE50.1925387.2097
RMSE69.082131.4245
0.6239
MAPE107.1253
ROBUST0.455207.7031
STABLE0.5869
MetrikaHodnota (ALL)Hodnota (Item)
WAPE31.161144.6504
RMSE50.260726.5974
0.9084
MAPE75.7044
ROBUST0.522684.916
STABLE0.3901

Vizuální pozorování

I přes kombinaci metrik jsem v průběhu testování zjistil, že vizuální kontrola je nutná.
Zejména u zboží s určitým rozložením hodnot, jako jsou speciální typy prodejů, mnoho nulových hodnot a sezónní prodej, jsou metriky nevypovídající – špatné výsledky se v množství schovají.

Následující příklad ukazuje tento případ. I když jeho metriky nevypadají špatně, tak predikce pro poslední měsíce je téměř nulová (červená). Tento případ nastává velmi často právě o zboží s velmi nízkými prodeji. 

MetrikaHodnota (ALL)Hodnota (Item)Hodnota (ALL)Hodnota (Item)
WAPE41.221861.473834.726251.7859
RMSE67.358629.083948.279123.7958
0.74530.8691
MAPE82.362670.7658
ROBUST0.443288.10010.478577.5447
STABLE0.48720.418
Červený grafZelený graf

Poznámka: Ve vizuální validaci je vždy reálný prodej zobrazen černou barvou a predikce barevně.