Predikce zásob pomocí AI

5. Feature engineering I, skok v přesnosti

Výběr DL modelu

V minulém díle padlo rozhodnutí opřít další vývoj o deep-learningové architektury. Aby byly budoucí vizualizace lépe čitelné, budu dál soustředit pozornost především na Temporal Fusion Transformer (TFT). K této volbě mě přivedly tři zásadní argumenty:

  1. Škálování s komplexitou – čím bohatší a členitější je datová sada (desítky featur, promo příznaky, sezónnost, relativní ukazatele), tím markantněji TFT překonává ostatní modely.
  2. Limity DeepAR u long-tailu – DeepAR má tendenci stahovat položky s nízkým nebo řídkým obratem k nule; tím deformuje plán nákupu pomaloproudých, ale důležitých položek.
  3. Attention = inteligentní výběr featur – TFT dokáže automaticky určit, které vstupní sloupce jsou v daném okamžiku klíčové, a zároveň tuto volbu interpretovat. To je při 100+ features nezanedbatelná výhoda.

Na začátku se sice zdálo, že model DeepAR dosahuje srovnatelných metrik při nižších výpočetních nárocích, ale jakmile jsme rozšířili vstupy o složitější sezónní, promo a relativní signály, rozdíl se otočil: výkon TFT začal škálovat, zatímco DeepAR narážel na své limity.

Scénář 1 - proč je špatně

V průběhu dalšího testování se velmi rychle ukázala nevýhoda prvního scénáře – tedy kdy tréninkové a validační data byli shodné.

V grafech lze vidět, že Scénáři 1 sleduje predikce pro realitu velmi dobře po celou dobu, protože model měl možnost „budoucnost“ vidět. Jakmile dostal zcela nové 3 měsíce (Scénář 2), rozdíl se projevil velmi rychle. Na posledním grafe se sezónním zboží lze vidět, že model totálně selhával.

MetrikaScenario 1Scenario 2
Hodnota (ALL)Hodnota (Item)Hodnota (ALL)Hodnota (Item)
WAPE32.163245.795953.117766.9848
RMSE62.065525.274683.149345.7434
R²0.86030.7754
MAPE63.949495.889
ROBUST0.479666.01290.418498.0722
STABLE0.38190.4615

Při kontrole výsledků scénáře 2 je vidět, že model vykazuje určitou schopnost predikce, zejména u položek s dlouhou a stabilní historií. Výsledky ale byly stále výrazně pod očekáváním. Ukázalo se, že model zásadně selhává ve třech klíčových oblastech:

  • Položky s nízkým obratem – predikce klesala k nule; riziko předzásobení long-tailu.
  • Promo špičky – bez explicitní informace o slevě modely zvýšený prodej jen částečně reprodukovali.
  • Sezónní cykly – u vysoce sezónních položek modely podhodnocovaly amplitude letních a vánočních vrcholů.


Bylo zřejmé, že model potřebuje další vstupy, z nichž vyčte kontext, který v surových číslech chybí – feature engineering.

Co jsou to features

Při práci s AI nad časovými řadami má každý řádek v datech podobu:
Produkt × Časový okamžik (např. položka A v březnu 2024).

Vše ostatní na řádku – jako je segment, druh, obrat, cena nazýváme features. Tyto sloupce dávají modelu potřebné souvislosti – pomáhají pochopit chování produktu v čase, jeho podobnost s ostatními a vliv okolních faktorů jako jsou promo akce nebo sezóna.

Proč?

  • Holé číslo obratu říká jen kolik se prodalo.
  • Features dodají kontext proč se to stalo: byl srpen, běžela sleva, položka je novinka, zrovna vrcholí sezóna.
  • Díky nim model rozpozná vzorce, které by z čisté řady prodejů nikdy nezískal.

Jak model pracuje s features

Jak bylo řečeno, v našem datasetu tvoří každý řádek dvojici Produkt (ID) × Měsíc (time_idx).
Vše ostatní nazýváme features.

Seznam features pro dataset projektu
ID, seasonality, category, type, segment, segment 1, segment 2, name, turnover, date, time_idx, weight, SALE, SALE_INTENSITY, product_volume__bin

3 typy features
Základní rozdělení je na statické a dynamické, tedy jestli se  hodnoty mění v čase.
Typ zboží je pro všechny měsíce stejný, naopak slevová akce je pouze v několika měsících.

Typ featurePříkladJak pomáhá modelu
StatickéTyp, ID, kategorie, segmentSíť sdílí vzory napříč sortimentem a pomáhá novinkám, které mají málo historie. Hodnoty jsou stejné pro všechny měsíce.
Dynamické známéKalendář, slevaHodnoty se mění v každém měsíci, známe je i pro budoucí měsíce.
Dynamické neznáméobratHodnoty se mění v každém měsíci, neznáme je pro budoucí měsíce. Jedná se většinou o veličiny, které chceme předpovědět.

Číselné vs. kategorické

  • Číselné features (obrat, průměry, slevy) – předávají se přímo do modelu
  • Kategorické features (typ zboží, segment) – se převádějí na embeddingy – krátké vektory, které se učí spolu s modelem.

 

Proč embeddings fungují

Dva vektory uložené „blízko sebe“ = dvě kategorie, jejichž poptávka se chová podobně. Nový produkt z „nářadí“ tak okamžitě těží z historie „elektro-příslušenství“, pokud je jejich prodejní profil příbuzný.

Jaké features jsem použil

V této fázi tréninku jsem se zaměřil na features, které pomáhají modelu pochopit vztah mezi obratem v jednotlivých měsících. Každá skupina těchto vstupů doplňuje jiný typ informace: sezónní rytmus, vývoj v čase, vliv promoakcí i relativní chování vůči ostatním položkám.


🗓️ Date-encoding

Model nepracuje s měsíci, ale s číselným pořadím (time_idx je 0 – 36). Pomocí těchto features mu tyto vazby identifikujeme.

  • Harmonické kódování měsíce (sin / cos) → model pozná, že po prosinci následuje leden a celý rok se točí v cyklu.
  • Pomůže zachytit periodické vztahy v prodeji (kvartály, roky, letní sezóna)

 

📊 Relativní (poměrové) features

  • Určí odchylku nebo podíl prodeje vůči širšímu celku (průměr skupiny, maximum sezóny, long-term trend …).
  • Model tak snadno pozná, kdy je položka nad nebo pod svým normálem a rychleji reaguje na nečekané výkyvy.

 

🌀 Lag & Rolling okna

  • Předá podrobnou informaci, jaký byl nedávný vývoj.
  • Pomáhá rychleji zachytit momentum (zpomaluje se nebo zrychluje prodej).
  • Rolling mean / std odfiltrují šum a ukážou, zda je aktuální prodej nad / pod svým klouzavým průměrem.

 

🌊 Wavelet signály

  • Rozloží křivku na krátké vlnky vs. dlouhé trendy.
  • Síť tak vidí jemné promo skoky i pomalé, víceleté cykly najednou.

 

📈 Trend

  • Doplní směr a sklon prodeje.
  • Informace o kolísání prodeje kolem svého průměru.

 

🔢 Absolutní i log-hodnoty

Většinu features jsem vytvořil jak v absolutních hodnotách, tak i v logaritmické hodnotě.
Proč logaritmus?

  • Zkomprimuje extrémy → nezadusí malé položky.
  • Stabilizuje rozptyl, křivky jsou blíž normálu → model se učí rychleji.
  • Převádí poměrové skoky (×2, ×3) na lineární posun, který model snadno zachytí.

Výsledek

Pomocí této kombinaci vstupů model nejen předpovídá obrat, ale chápe i kontext jednotlivých měsíců: co je běžný trend, co je výkyv, a co znamená promo.
Po sérii iterací jsem skončil na cca 75 featurách — tato sada přinesla největší zlepšení metrik vůči nárokům na čas a paměť. Další navyšování features už výsledek zlepšovalo jen minimálně, zatímco trénink výrazně zpomalovalo. Kombinace více features pak také vedla ke vzájemnému ovlivňování.

Grafy porovnávají odezvu tří verzí modelu:

  • Červená křivka – původní predikce bez dodatečných features.
  • Zelená křivka – model obohacený o harmonické date-encoding features (sin/cos měsíce).
  • Fialová křivka – stejný model dále rozšířený o relativní a rolling features odvozené z obratu.

Kontrast mezi křivkami ukazuje, jak každý balík features zlepšuje (nebo mění) schopnost modelu sledovat reálný prodej.

Metriky ukazují, jak přidané informace posunují kvalitu modelu:

Metrikabez featuresdatumové featuresobratové features
Hodnota (ALL)Hodnota (Item)Hodnota (ALL)Hodnota (Item)Hodnota (ALL)Hodnota (Item)
WAPE53.117766.984832.065146.771130.260844.5829
RMSE83.149345.743472.17525.135446.142722.3537
R²0.77540.81110.9012
MAPE95.88962.966560.0505
ROBUST0.418498.07220.490765.26970.494862.2027
STABLE0.46150.38390.365

Vliv features na rychlost

Na testovacím vzorku jsem změřil, jak rostoucí počet featur zatěžuje zdroje (13 featur = základ).

FeaturesČas tréninkuGPU memory
120x 7x 2,5
444x 26x 6

Subscribe for Latest News

You have been successfully Subscribed! Ops! Something went wrong, please try again.

Better forecasting thanks to AI

Business Info.

IČO: 172 28 018

DIČ: CZ 172 28 018

Data Box ID: ykwdnxf

sales@neebile.cz

Jičínská 226/17, Praha, Žižkov, PSČ 130 00 Česká republika

(910) 658-2992

© 2025 Vytvořeno DigitalWays