Strojové učenie · prognózy a optimalizácia zásob · maloobchod s potravinami

Dopyt za prázdnym regálom

Keď sa čerstvý produkt vypredá, predaje prestanú hovoriť pravdu. Odhadujeme dopyt za prázdnym regálom aj s intervalom a premieňame ho na zajtrajšiu objednávku.

Vyskúšajte naživo

01

Prehľad

FreshRetailNet-50K je verejný dataset predajov čerstvých potravín: 50 000 časových radov produktov z 898 predajní s hodinovými predajmi a hodinovým príznakom, či bol produkt na sklade. V dátach je 19,7 % predajných hodín bez tovaru a v 44 % produktových dní sa produkt aspoň raz vypredá. Počas týchto hodín dáta nezaznamenávajú takmer žiadne predaje. Prognóza natrénovaná na zaznamenaných predajoch preto považuje prázdny regál za pokojnú hodinu a jej prognózy vychádzajú nízko.

Dopyt skrytý každým výpadkom zásob odhadujeme ako číslo s 80 % intervalom. Model sa učí len z hodín, pre ktoré poznáme správnu odpoveď. Vezmeme deň, keď bol tovar stále na sklade, prenesieme naň vzor výpadku zo skutočného dňa s vypredaním, tieto hodiny skryjeme a model sa ich učí zrekonštruovať. Využíva zvyšok daného dňa, vlastnú históriu produktu, zľavu, kalendár, počasie a kategóriu. Na 167 predajniach, ktoré model nikdy nevidel, obsahoval interval skutočnú hodnotu v 80,0 % prípadov. Naša prvá verzia ju v dňoch, keď sa tovar naozaj vypredal, obsahovala len v 71 % prípadov, pretože tieto dni sú rušnejšie, než naznačujú ich hodiny s tovarom. Tréning na hodinách s tovarom z dní s vypredaním vrátil výsledok tohto testu na 79,5 %. Oba testy skrývajú hodiny, ktorých predaje sme skutočne pozorovali. Dopyt po vypredaní sa nedá pozorovať nikdy, preto jeho interval stojí na jednom predpoklade: že sa správa ako hodiny, ktoré vieme otestovať. V celom datasete pridáva náš stredný odhad k zaznamenaným predajom 17 %.

V ďalšom kroku premieňajú pravdepodobnostné prognózy zrekonštruovaný dopyt na objednávky. Otestovali sme ich na vyčlenenom týždni datasetu. Politika doplňovania zásob potom každý večer objedná do úrovne kvantilu prognózy, mínus zásoba, ktorú ešte možno predať. Zásoby starnú podľa princípu FIFO (prvý dnu, prvý von) a ich trvanlivosť je predpoklad 1, 2 alebo 3 dní, ktorý si nastavíte. Simulované prehratie vyčleneného týždňa ukazuje odpad a ušlé predaje v porovnaní s objednávaním podľa zaznamenaných predajov. V tomto prehratí stojí ušlý predaj dvakrát toľko čo znehodnotená jednotka a dopyt zahŕňa náš odhad. Objednávanie podľa nášho odhadu potom znížilo spoločné náklady na odpad a ušlé predaje o 4,6 %, 5,6 % a 10,9 % pri trvanlivosti 1, 2 a 3 dni. Keby výpadky zásob neskrývali vôbec žiadny dopyt, obe politiky by sa od seba líšili najviac o 1,3 %. Prínos závisí aj od toho, či ušlý predaj stojí viac než odpad. Ak ušlý predaj stojí rovnako ako znehodnotená jednotka alebo menej a výpadky neskrývali žiadny dopyt, objednávanie podľa nášho odhadu stojí o 1 až 5 % viac. Pri náklade na ušlý predaj rovnom 1 sa údaj pre 3 dni zmenší z −10,9 % na −0,2 %. Pri trvanlivosti 2 alebo 3 dni objednávajú obe politiky na hornej hranici nášho rozsahu prognóz (P95), takže tieto dva údaje sú najmenej isté. Predaje sú v škálovaných jednotkách samotného datasetu. Každé zrekonštruované číslo je náš odhad, nikdy nie pozorovanie. Regál vo filme je 3D render, ktorý prehráva deň jedného produktu z dát.

02

Čo sme vytvorili

  • Rekonštrukcia cenzurovaného dopytu. Kvantilové modely LightGBM od P10 po P90, natrénované skrývaním hodín, keď bol tovar na sklade. Sú kalibrované kontrolami split-conformal na samostatných predajniach a validované na 167 vyčlenených predajniach. Jedna z týchto kontrol používa len skutočné dni s vypredaním.
  • Pravdepodobnostné prognózy pre vyčlenený týždeň, vždy na jeden deň dopredu. Sú natrénované na zaznamenaných predajoch aj na zrekonštruovanom dopyte a hodnotené pomocou CRPS, pinball loss, WAPE a skreslenia (bias) v porovnaní s jednoduchými referenčnými modelmi.
  • Politika objednávania do cieľovej úrovne (order-up-to), ktorá sleduje starnutie zásob. Predáva podľa princípu FIFO pri predpokladanej trvanlivosti 1 až 3 dni. Kvantil objednávky sa pre každý pomer nákladov ladí na dvoch týždňoch spätného testovania a potom sa pre vyčlenený týždeň zmrazí.
  • Simulované prehratie, ktoré začína s prázdnym regálom. Výsledok ohraničuje dvakrát: raz s dopytom, ktorý zahŕňa náš odhad, a raz len so zaznamenanými predajmi.
  • Interaktívne prehratie 2 000 časových radov, všetky z vyčlenených predajní. Vo vašom prehliadači si môžete vybrať predajňu a produkt, zobraziť zaznamenaný alebo odhadnutý dopyt, posúvať náklad ušlého predaja voči znehodnotenej jednotke a meniť trvanlivosť. Politika sa naživo znovu vyladí a prehrá.
03

Technológie

Python, pandas, NumPy, LightGBM (kvantilová regresia), kalibrácia split-conformal · three.js (fyzikálne založené renderovanie, akumulovaná hĺbka ostrosti a mäkké tiene) · čistý JavaScript (vanilla) pre optimalizátor v prehliadači

04

Čísla

Všetky čísla pochádzajú z našich vlastných behov na FreshRetailNet-50K (Dingdong-Inc, CC BY 4.0). Predaje sú v škálovaných jednotkách datasetu.

ČísloAko sme ho zmerali
19,7 % predajných hodín bez tovaru na sklade

Hodinové príznaky dostupnosti, 06:00–22:00, pre všetkých 50 000 časových radov a 97 dní. V 44,0 % produktových dní sa produkt aspoň raz vypredal. V 4,0 % nebol k dispozícii celý deň.

80,0 % pokrytie intervalom (cieľ 80 %)

Celkom 444 393 produktových dní zo 167 vyčlenených predajní. Na hodiny s tovarom sa preniesol skutočný vzor výpadku zásob, tieto hodiny sa skryli a overili sme, či skutočný súčet padol do nášho intervalu P10–P90.

79,5 % pokrytie v skutočných dňoch s vypredaním

Celkom 222 549 vyčlenených dní, v ktorých sa tovar vypredal o 12:00 alebo neskôr. Skryli sme 3 hodiny s tovarom, ktoré končia 2 hodiny pred výpadkom. Bez tréningu na dňoch s vypredaním bolo pokrytie 71,4 % a odhad bol o 39 % podhodnotený.

40 % chyba na skrytých hodinách (WAPE pre P50)

Tých istých 444 393 dní. Rovnaké hodiny z nedávnych dní s tovarom na sklade dávajú chybu 49 %. Škálovanie hodín s tovarom podľa obvyklého hodinového profilu dáva 60 %.

+17 % dopytu skrytého výpadkami zásob

Súčet našich odhadov P50 za všetkých 2,1 milióna produktových dní s výpadkom zásob v porovnaní s celkovými zaznamenanými predajmi. Súčet mediánov celkový súčet podhodnocuje. Súčet denných hodnôt P10 a P90 namiesto toho dáva 8 % a 30 %.

O 2,4 % nižšie CRPS na vyčlenenom týždni

Prognóza natrénovaná na zrekonštruovanom dopyte vs. ten istý model natrénovaný na zaznamenaných predajoch: 0,192 vs. 0,197 (škálované CRPS, nižšie je lepšie). Hodnotené na 206 562 vyčlenených produktových dňoch bez výpadku, kde sa zaznamenané predaje rovnajú dopytu. Referenčný model empirických kvantilov z 28 dní dosahuje 0,240.

42 % vs. 56 % príliš nízkych prognóz v dňoch s vypredaním

Podiel vyčlenených dní s vypredaním, v ktorých je medián prognózy nižší než skutočne zaznamenané predaje, ktoré sú dolnou hranicou dopytu v daný deň. Prognóza zo zrekonštruovaného dopytu vs. prognóza zo zaznamenaných predajov. Táto kontrola zvýhodňuje vysoké prognózy, preto ju čítajte spolu so skreslením v dňoch bez výpadku: +3,1 % vs. −6,4 %.

−4,6 % / −5,6 % / −10,9 % náklady v prehratí pri trvanlivosti 1 / 2 / 3 dni

Náklady = (2 × ušlé predaje + znehodnotené jednotky) na jednotku dopytu za vyčlenený týždeň pre všetkých 50 000 časových radov, so začiatkom pri prázdnom regáli. Dopyt v prehratí = zaznamenané predaje plus náš odhad P50 pre hodiny výpadku. Porovnávame objednávanie podľa nášho odhadu s objednávaním podľa zaznamenaných predajov. Kvantil objednávky každej politiky bol vyladený na dvoch predchádzajúcich týždňoch. Ak namiesto toho skrytý dopyt náhodne vyberáme z nášho intervalu (200 výberov), dostaneme −4,0 % / −7,2 % / −12,6 %.

V rozmedzí 1,3 %, ak nebolo nič skryté

To isté prehratie so zaznamenanými predajmi ako jediným dopytom: +1,3 % / −0,3 % / +0,8 %.

−5 % až +5 % pri náklade ušlého predaja 0,5 až 1 znehodnotenej jednotky

To isté prehratie, iné pomery nákladov. S naším odhadom ako dopytom: −5,5 % až −0,2 %. Len so zaznamenanými predajmi: +0,8 % až +5,4 %, takže objednávanie podľa nášho odhadu stojí viac, keď nebolo nič skryté a ušlé predaje sú lacné. Pri trvanlivosti 2 a 3 dni sú obe vyladené politiky na strope P95 nášho rozsahu prognóz.

20,4 % vs. 23,0 % odpadu pri trvanlivosti 1 deň

Prehratie ako vyššie. Objednávanie podľa nášho odhadu znehodnotí 20,4 % dopytu a stratí 7,2 %. Objednávanie podľa zaznamenaných predajov znehodnotí 23,0 % a stratí 6,7 %. Objednávanie včerajších predajov vynásobených vyladeným koeficientom stojí 0,600 na jednotku dopytu oproti 0,347 pri našej politike.

42 ms na opätovné vyladenie a prehratie v prehliadači

Medián 10 behov v prehliadači headless Chromium na našom notebooku s M1 Pro. Každý beh vyladí 37 kvantilov objednávky × 2 politiky na 14 dňoch spätného testovania a potom prehrá 7-dňový týždeň pre 2 000 časových radov. Telefóny budú pomalšie.

05

Zábery

06

Vyskúšajte naživo

Interaktívne zobrazenie, ktoré beží vo vašom prehliadači. Kým ho neotvoríte, nič sa nenačíta.

Vyskúšať naživo Stiahnuť 3,3 MB

Riešite podobný problém?

Napíšte nám, čo potrebujete vypočítať, nasimulovať alebo rozhodnúť, a my vám povieme, ako by sme k tomu pristúpili.

Napíšte nám AI a strojové učenie