7. 1. 2019

Algoritmus pro automatizované doobjednávání zboží na sklad e-shopu

Když nějaké zboží dochází na skladě e-shopu, je třeba na to pružně reagovat, aby nedošlo k jeho vyprodání – zvlášť pokud se jedná o důležité produkty. Dá se to řešit pomocí tabulky s docházejícím zbožím, v kombinaci s e-mailovým hlásičem, který bude v předstihu posílat e-mail nákupčím.
Navrhuji tento algoritmus a rád bych zde prověřil, jak je možné ho dále zdokonalit.

Algoritmus pro vyhodnocování počtu dní, kdy konkrétní zboží dojde na skladě

Pro spolehlivé upozorňování vidím jako důležité 3 kroky:
  1. musíme vědět jak rychle se konkrétní zboží vyprodává
  2. v něm musíme zahrnout i sezónní výkyvy v prodejnosti
  3. upozornit potřebný počet dní předem, aby se zboží stihlo včas doobjednat a naskladnit

Pro odhad, kdy se konkrétní produkt vyprodá, je třeba brát jen počet dní, po které je skutečně na skladě a lze koupit v e-shopu (dále budu používat termín „dostupné“ zboží). Podělením počtu prodaných kusů počtem dní, kdy bylo zboží dostupné, získáme průměrný počet kusů prodaných za den. Číslo by mělo být zaokrouhlené na 1-2 desetinná čísla podle toho, jak často se zboží prodává (pozn. 0,01 znamená 4 prodané kusy za rok). Příklad: zboží bylo dostupné 15.1.-4.2., tedy 20 dní, během kterých se prodalo 10 kusů. 10/20=0,5 prodaného produktu za den.

Vliv sezónnosti

Aby algoritmus v únoru nedoporučoval objednávat počet kusů zboží, který by odpovídal prodávanosti v předvánoční sezónně, je ideální rozdělit rok na 365 dnů a sledovat průměrnou prodávanost v jednotlivých dnech v loňském roce s tím, že  bychom toto číslo povýšili o procento růstu/poklesu, které očekáváme pro rok aktuální. Pokud bychom tedy plánovali tento rok zvýšit prodeje o 10 %, vynásobili bychom čísla v jednotlivých dnech 1,1krát. Příklad: zboží bylo dostupné všech 365 dní v roce a prodalo se ho 200 kusů, tedy průměrně 0,55 kusů denně. Ale v březnu se ho prodávalo průměrně jen 0,1 kusů za den, zatímco v listopadu 2 kusy denně. Pokud by byl plán prodat o 10 % zboží více, počítali bychom, že chceme v průměrný listopadový den letos prodat 2,2 kusu produktu.

Tento algoritmus je možné aplikovat u zboží které jsme prodávali už v minulém roce. Co ale udělat u novinek?

Nové zboží

Jednodušší je varianta, kdy je nové zboží zbožím nahrazujícím původní – třeba nová generace stejného produktu s menší obměnou – v tom případě je možné nastavit, aby nové zboží podědilo vývoj prodejnosti zboží nahrazovaného (pokud už nebudeme původní zboží prodávat).

Zajímavější to bude v případech, kdy se jedná o zcela nové zboží. Pokud nejde zboží přirovnat k jinému zboží, aby podědilo vývoj prodejnosti (třeba pro jistotu ponížený o určité procento), tak lze nejdříve objednat zkušební množství a podle zájmu o něj pak doobjednat. Mohli bychom ale také postupovat tak, že bychom jednotlivým dnům v roce přiřadili proporcionální hodnotu celkových tržeb/marže za celý rok. Příklad: pokud bychom měli hlavní sezónu před Vánoci a nízkou v březnu, tak bychom v březnových dnech dosahovali např. 0,1 % celkových ročních tržeb, zatímco v listopadových dnech třeba 1 %. Každý den v roce by tak měl určitou váhu a podle ní bychom věděli, jestli zboží objednávat méně nebo více.

Toto řešení by bylo vhodné pro zboží, které má stejné sezónní výkyvy, jako celý e-shop průměrně. To bude ale nastávat málokdy, proto navrhuji zboží přiřadit ke konkrétní kategorii zboží a sledovat váhy dní během roku jen této kategorie, protože bude sezónu zohledňovat mnohem efektivněji. Váhy jednotlivých dní by se tak nepočítaly z tržeb/marže všeho zboží v e-shopu, ale jen ze zboží ve stejné kategorii. Pozn.: pozor na to, aby statistiku nezkreslovalo, pokud máme mimo sezónu zboží této kategorie vyprodané nebo jinak nedostupné.

Váhy díky přiřazení ke kategorii mohou zpřesnit i předpokládané prodeje u zboží, které není nové, ale často bylo v loňském roce nedostupné a neměli bychom tak možnost váhy stanovit jinak. V tom případě můžeme vzít prodejnost ve dnech, které známe a ostatní dny dopočítat podle vah prodejnosti kategorie.

Objednání zboží, které se brzy vyprodá?

Řekněme tedy, že známe počty předpokládaných prodejů každého zboží v našem e-shopu. Na základě toho jsme schopni zjistit, za kolik dní se pravděpodobně které zboží vyprodá. U každého dodavatele bychom pak měli evidovat počet dní, se kterým musíme počítat od objednání do naskladnění a zveřejnění v e-shopu. Algoritmus by nás tak měl na nutnost doskladnění upozornit v dostatečném předstihu, tedy počet dní pro objednání + počet dní pro nashromáždění dostatečného množství zboží u jednoho dodavatele, aby mohlo být objednáno.

Teď musíme ošetřit to, že u každého dodavatele objednáváme v jiných časových rozestupech, na základě toho, kdy se nám nashromáždí tolik zboží k objednání, abychom splnili podmínky minimální objednávky dodavatele, aby se nám vyplatila doprava, nebo splnili jinou podmínku.

V administraci e-shopu by tedy měla být tabulka ke každému dodavateli, ve které se bude hromadit seznam zboží k objednání, cílová částka pro minimální hodnotu objednávky bez DPH, hodnota aktuálně připravované objednávky a hodnota, za kterou ještě musíme doobjednat (minimální hodnota mínus aktuální hodnota). Součástí této tabulky by měla být možnost zobrazit ostatní zboží tohoto dodavatele, u kterého bude vždy počet dní, během kterých se zboží pravděpodobně vyprodá (seřazené vzestupně) a označení důležitosti konkrétního produktu – ideálně barevné ikonky např. TOP100, TOP300, TOP500 podle toho, jak je pro nás tento produkt důležitý z pohledu celkových potenciálních tržeb/marže v následujícím období, třeba 1-2 měsíců. To nám umožní rychle přidat  další zboží do objednávky tím, že budeme moci u každého produktu přidat počet kusů pro objednání.

Pokud bychom chtěli systém ještě zdokonalit, mohli bychom si zadat jak často chceme u kterého dodavatele objednávat (např. jednou za 30 dní) a algoritmus může doporučovat přesný počet kusů zboží, který je třeba doobjednat, aby vystačilo po potřebnou dobu. Dopočítal by zase množství na základě loňské prodejnosti v těchto dnech a předpokládaného růstu.

Pokud tedy dosáhneme minimální hodnoty objednávky, ideální je mít možnost exportu pro dodavatele, nebo si budeme muset vystačit s tím, že objednávku přepíšeme do objednávkového systému dodavatele.

Na co bychom si měli dávat pozor?
Pokud je objednávek některého zboží málo, ale v objednávce je vždy hodně kusů, může to s algoritmem negativně zamávat. Přeženu do na příkladu: pokud se zboží celý rok neprodá žádný kus kromě jednoho dne – může to být náhoda, která se nemusí opakovat ve stejném dni  příští rok nebo ani měsíci či celý rok. Stejně tak pokud je jen pár objednávek do roka po více kusech, může to být náhoda, která nemusí znamenat, že se následující rok prodá ve stejném dni nebo měsíci.

Jak algoritmus vylepšit?

Toto je zatím teoretická úvaha za použití selského rozumu, která by využívala strojového učení a nesporně má mouchy. Určitě bude potřebovat dozor s kritickým myšlením a budu muset ještě popřemýšlet, jak by mohla fungovat lépe. Určitě by toho dost vyplynulo z praxe. Poradíte ještě před implementací, jak by se dala zvýšit její spolehlivost?


Žádné komentáře:

Okomentovat