Danas ćemo pogledati predviđanje inventara skladišta, dok će se budući članci dotaknuti teme elastičnosti cijena. Podatak o elastičnosti cijena u kombinaciji s predviđanjem količine prodanih artikala će biti koristan model za bilo koga tko prodaje fizičke artikle. Pogotovo firme koje žele mijenjati cijenu artikla kako bi maksimizirali profit i kako bi znali koji artikli će biti potrebni u skladištu.

Uvod

Danas, u svijetu kvantnih računala (Google je upravo izbacio Tensorflow Quantum) i jako sposobnih UI (Umjetna Inteligencija) modela, čini se da postoji ogroman jaz između istraživača i ostatka IT korisnika.

Čini se da u istraživači zauzeti razmišljajući o (jako temeljnim i teškim) pitanjima kao što su interpretabilnost i kauzalnost, ostatak IT korisnika, primarno kompanije koje ne znaju puno o korištenju “UI” su zaglavili gledajući modele koji mogu razlikovati pse i mačke. To je mačka. Idemo dalje ljudi.

Jako malo krajnjih korisnika razumije utjecaj ove tehnologija i kako može pomoći vašem poslovanju iako niste stručnjaci u njoj. Dok ja sigurno ne mogu zagovarati da skočite s klasifikacije vaših kućnih ljubimaca na liječenje raka, sigurno bi pomoglo kada bi ljudi počeli razumijevati praktične doprinose ove tehnologije i kako ona može utjecati na vaše poslovanje.

Nema sve zanimljivo u svijetu UI/MU (Mašinsko ili Strojno Učenje) veze s dubokim učenjem (što je jako smiješno ime ovako ili onako). Moji osobni interesi usmjeravaju me u smjeru “probabilistic programming”, i dok još postoji jako puno stvari koje moram naučiti, mislim da je to polje koje će jednog dana dominirati MU svijetom pošto je takav način razmišljanja u svijetu točno ono što trebamo od računala, razmišljanje uz nesigurnost.

Ovaj post će koristiti postojeći dataset koji se može pronaći ovdje i povremeno će se u postu pojaviti grafovi ili Python kod za one “tehnički nastrojene”.

Započnimo od najjednostavnijeg koncepta, vremenska serija.

Vremenska serija

Vremenska serija je jednostavno lista nekih vrijednosti u vremenu. Ako možete zamisliti listu nekih brojeva koji su se pojavili/promijenili kroz vrijeme, to je vremenska serija.

Ako gledamo temperaturu počevši od danas (12.03.2020), ovdje u Puli, gdje ja živim, možemo dobiti listu temperatura:

Dan Čet Pet Sub Ned Pon Uto Sri Čet
Temp. 16 °C 14 °C 13 °C 12 °C 13 °C 15 °C 16 °C 16 °C

To je lista vrijednosti u vremenu. To je onda vremenska serija. Ako samo želimo vidjeti vrijednosti, te vrijednosti su:

[16, 14, 13, 12, 13, 15, 16, 16]

Ako želimo ovo prikazati na grafu, to možemo koristeći Python:

  1. import seaborn as sns
  2.  
  3. values = [16, 14, 13, 12, 13, 15, 16, 16]
  4. g = sns.lineplot(x=range(0, len(values)), y=values, markers=True, dashes=True)
  5. g.set(ylim=(0, None))

Na X-osi imamo dane u tjednu a na Y-osi imamo temperaturu. Imamo dvodimenzionalni graf, koji prikazuje točno tablicu iznad.

Koji su drugi primjeri vremenske serije? Pa sve što ima vrijednosti koje se mijenjaju kroz vrijeme. Cijene dionica, cijene goriva, broj ljudi u trgovinama zavisno o vremenu u danu, broj auta na cestama…

Pa što onda?

Pa, možete uzeti vrijednosti koje imate i dopustite MU modelu da “nauči” vrijednosti iz budućnosti. Na primjer, ako uzmemo očitanja temperature zadnjih 20 godina, model će prilično precizno predvidjeti koja će temperatura biti sutra.

Nije da on “vidi” u budućnost, ali može naučiti da je u nekim periodima temperatura bila niža i na temelju toga predvidjeti budući takav period da dobije točno predviđanje temperature.

Ista stvar vrijedi i za nekog tko radi u trgovini. Ako rade dovoljno dugo, iz iskustva znaju da zato što je danas petak, ljudi će doći u trgovinu i kupiti više piva (ili nečega drugoga).

Tako MU radi. Nauči podatke i onda može koristiti što je naučio u novim situacijama.

Što to donosi meni?

Ako znate što i kada ljudi kupuju, možete prilagoditi cijelu svoju prodajnu strategiju.

Na primjer, ako ste velika prodavaonica, a model MU vam pokazuje da prodajete puno svijeća u veljači (iznenađujuće, Valentinovo), tada možete početi primjenjivati neke od strategija:

  • Mogli bismo naručiti svijeće, one se dobro prodaju u prvoj polovici veljače
  • Možemo ih pokušati kupiti unaprijed kad su jeftinije, kupiti ih u većim količinama i držati ih na zalihama do veljače (ako prostor dopušta)
  • Možda ćemo pokušati prodati više kombinacija artikala (svijeća + cvijeće), dodajemo vrijednost
  • Mogli bismo izmijeniti cijenu tako da maksimiziramo dobit (to sam spomenuo u planu za budući blog, tema je cjenovna elastičnost)

Iako vam se jedna strategija možda neće činiti mnogo, ako imate sve te ideje provedene, odjednom vam se promet u veljači povećava.

A sve to nije strašno teško, samo vam treba netko tko zna što radi i može vam pokazati kako to funkcionira.

Jesam li spomenuo da to radimo besplatno za jednu prodavaonicu? Da, možete to isprobati besplatno ako ste zainteresirani primijeniti to u svojim ostalim prodavaonicama. Možete nam se javiti ovdje.

Korišteni podaci

U skupu podataka imamo 45 prodavaonica, svaka od tih trgovina ima svoje odjele, a cilj predviđanja su “Weekly_Sales” odnosno tjedne prodaje. Svaka trgovina ima svoju vrstu.

Skup podataka sadrži tri godine podataka, a mi ćemo pokušati predvidjeti sljedećih 180 dana prodaje u odjelu određene trgovine. Korištenje povijesti iz prethodne dvije godine zapravo nam neće dati vrlo precizne rezultate pri pokušaju predviđanja sljedećih 180 dana, ali bit će nam lijep način da pokažemo kako to funkcionira.

Učitavamo podatke koristeći Pandas.

Vrsta posla koji radimo je tipična za “Životni ciklus strojnog učenja”:

  • Prikupite podatke
  • Preobrazite i očistite
  • Istražite podatke
  • Analizirajte i sastavite modele
  • Prezentirajte rezultate

Prikupili smo podatke, što je sam po sebi podvig. “Preobrazite i očistite” nešto je jednostavnije u ovom slučaju jer već imamo formatirane stvari na način na koji trebamo.

Na istraživanje!

Vizualizacija podataka

Tako sada možemo učitati podatke i vidjeti prodaju na temelju tjedana za sve odjele i sve trgovine.

To možemo učiniti, na primjer, za “Store 1” (Trgovinu 1):

Za “Store 2” (Trgovinu 2):

I za “Store 3” (Trgovinu 3):

I tako dalje…

Nakon početne vizualizacije, možemo uočiti neke stvari. Kao prvo, čini se da sve trgovine ne rade jednako dobro. Da, to je lako vidjeti kada su podaci vizualizirani. Kao drugo, čini se da postoji ogroman skok između nekih točaka koje imamo. Većina ih je u donjem dijelu gdje tjedna prodaja nije toliko značajna, ali neke su daleko iznad njih.

Sada, hipoteza je da je taj jaz jednostavno skok s jednog odjela na drugi. Na primjer, mogli bismo vidjeti takvu razliku između odjela s elektroničkom robom u odnosu na neke općenitije odjele.

Pogledajmo “Store 3” i pogledajmo kako se radi određeni odjel. No, prije svega, pogledajmo graf.

Kad pogledamo sve točke podataka iznad 60.000, a zatim ih grupiramo po odjelima, dobivamo dva odjela:

  • odjel 38
  • odjel 72

Dakle, samo dva od tih odjela uzrokuju nepodudarnost u podacima, budući da su iskočili od ostalih odjela. Ako pokušamo vizualizirati stvarni odjel 38, koji je daleko najuspješniji (sudeći po tjednoj prodaji), dobit ćemo:

Stvarna količina odstupanja koja vidimo u podacima proizlazi iz prikaza tjedne prodaje s obzirom na godine.

Učenje i predviđanje

Krenimo sada na stvarni algoritam za ML i predviđanje. Iskoristimo ove tri trgovine iznad i pokušajmo vidjeti koliko možemo s tim predvidjeti u budućnosti.

Ovdje je puno izbora.

Ljudi uglavnom započinju s nečim jednostavnijim poput ARIMA i SARIMA i napreduju odatle. Nećemo uskakati u korištenje dubokog učenja i LSTM-a, iako bi to moglo biti zanimljiva tema za ljude koji su zainteresirani za tu temu.

Prije svega, upotrijebimo nešto jednostavno na čemu ne moramo puno raditi.

Koristit ćemo Prophet. Prilično je jednostavan i lako ga je iskoristiti na bilo kakvom setu podataka. Prvi put sam se susreo s njegovom uporabom na lokalnom Meetup događaju Istra Programming Languages.

Alternativa je naprednije STS modeliranje u tensorflow-probability ili direktno korištenje probabilistic programming (pymc3 ili tensorflow-probability).

U svakom slučaju, sve to funkcionira slično. Koriste nešto što se naziva “generalized additive models” što znači da imaju različite modele za modeliranje trendova, sezonalnih događaja, utjecaja praznika, korone (da, takve stvari utječu na stvarnost, a samim tim i na model).

y(t) = Trend(t) + Seasonality(t) + Holiday(t) + Noise(t) + …

Ako ga pokrenemo u “Trgovini 3” i “Dept 38”, tijekom sljedećih 180 dana možemo vidjeti sljedeće:

Točke koje vidimo su stvarne podatkovne točke koje imamo. Tamnije plava linija najbolje odgovara liniji koju je model pronašao, dok je cijelo svjetlije plavo područje na kojem je model više od 80% siguran da će rezultat završiti.

Možda ne možemo imati savršene informacije, ali možemo imati podatke u koje možemo biti sigurni. Odgovor ne mora biti vrlo precizan da bismo izvukli korisne zaključke za povećanje prodaje.

Na primjer, ako želimo biti 95% sigurni, možemo mijenjati dio preciznosti za sigurnost i dobiti ovako nešto:

Vidimo da je neizvjesnost oko krajnje točke veća, ali sada možemo biti sigurniji da će se poklopiti s područjem sigurnosti. Sve je pitanje kompromisa. A što ćemo dobiti za aditivni model?


Pogledajmo u neke druge trgovine. Što je s odjelom 72?

Lijepo! Čini se da ide prema gore. Pogledajmo što to može uzrokovati.

Trend je u porastu! Može biti da ovo postaje sve popularnija trgovina. Kako ste to mogli procijeniti? Pa, jednostavno možete potaknuti korisnike da ispune anketu i dobiju bodove vjernosti za to. Opet, to biste mogli raditi povremeno i otkriti što uzrokuje rast ili pad.

Što je s odjelom 1?

Možemo li predvidjeti prodaju sve naše tri prodavaonice? Naravno, pogledajmo to, ali samo za „Odjel 1“.

Joj. Nije baš lijepo, ali na kraju postižemo neke rezultate. Pogledajmo komponente:

Opet vidimo nešto nesigurnosti u trendu, a nesigurnost raste kako više „idemo u budućnost“, što je prirodno jer što više pokušavamo gledati u budućnost, to je neka budućnost manje sigurna.

Zaključak

Prvo, vjerojatno bih za sve to trebao koristiti koristio Jupyter Notebook. Vjerojatno i hoću u budućnosti, to je bila neka vrsta “zaboravi, bit će brže to objasniti ovako”.

Kao drugo, predvidjeli smo prodaju prodavaonica i njihovih odjeljenja.

Yay!

Nije bilo uzbudljivo i nezaboravno kao što ste očekivali?

To je zato što sve ove stvari nisu neka mračna magija, već gomila velikih riječi koje zvuče zastrašujuće (to je moja definicija IT-a – sve je to “cool” dok ne shvatite kako funkcionira).

U ovim modelima postoje razine složenosti, a da sam je napravio od nule trebalo bi mi dosta vremena, a post na blogu postao bi ogroman, ali da bismo brzo započeli stvarni posao, ne trebamo tako duboko kopati.

Još uvijek su dugački blog postovi naporni za napisati i samo mali broj ljudi će ih ustvari i pročitati.

Sretno učenje, ljudi, uživajte!