Optimizarea veniturilor retailerului cu IA pentru prognoza vânzărilor
Publicat: 2022-03-11Prognoza este o tehnică care utilizează date și evenimente istorice pentru a construi estimări despre tendințele viitoare, potențialele dezastre și comportamentul general al oricărui subiect. Prognoza poate fi folosită ca suport probabilistic pentru analiza deciziilor, pentru a estima cheltuieli, venituri și planuri bugetare.
Prognoza în afaceri poate fi împărțită în două categorii distincte: prognoza calitativă și prognoza cantitativă .
- Prognoza calitativă. Prognoza calitativă se referă la cercetarea pieței și strategiile de piață, prin urmare este mai mult condusă de experți și influențată de factori umani. De obicei, este destinată construirii unei strategii pe termen scurt.
- Prognoza cantitativă. Prognoza cantitativă exclude orice factor uman. Depinde doar de datele istorice pe care le are o entitate și își propune să prezică care sunt anumiți factori precum vânzările, prețurile și alte aspecte financiare pe termen lung.
Pentru mai multe informații, puteți arunca o privire la manualul Investopedia privind previziunile financiare.
Ambele tipuri de prognoză s-au dovedit foarte promițătoare și au reușit să creeze îmbunătățiri de afaceri pentru multe entități.
Dacă doriți să aflați mai multe despre modul în care previziunile pot afecta deciziile de piață, un loc bun de început este Prediction Markets: Fundamentals, Designs, and Applications de Stefan Luckner și colab.
O problemă pe care o putem aborda folosind prognoza cantitativă este prognoza cererii sau prognoza vânzărilor.
Abordări privind prognoza cererii și prognoza vânzărilor
Să presupunem că sunteți un comerciant cu amănuntul care operează o mulțime de magazine și fiecare magazin are un sistem static de reaprovizionare a stocurilor de produse bazat pe decizii umane care se bazează pe anumite evenimente, cum ar fi anotimpurile și tendințele pieței.
Ocazional, te vei confrunta cu una dintre aceste probleme care poate duce la două probleme majore:
- Produse supra-aprovizionate. Având un stoc substanțial de produse planificate pentru a fi vândute într-un anumit interval de timp, dar nevândute.
- Produse epuizate. Având posibilitatea de a vinde un produs, dar nu puteți, deoarece produsul nu este disponibil.
Potrivit unui sondaj IHL Group asupra 600 de gospodării și comercianți cu amănuntul, comercianții cu amănuntul pierd anual aproape 1 trilion de dolari din vânzări din cauza problemelor legate de epuizarea stocurilor.
„Cumpărătorii se confruntă cu epuizarea stocurilor într-una din trei călătorii de cumpărături, potrivit raportului, care a fost trimis prin e-mail către Retail Dive. La comercianții cu amănuntul de produse alimentare, de droguri și de masă, ei întâlnesc articole epuizate într-una din cinci călătorii, la magazinele universale și la comercianții cu amănuntul de specialitate este unul din patru, iar la magazinele de electronice unul din trei”, a constatat IHL Group.
După cum se pare, ambele probleme duc la o scădere a veniturilor, deoarece fie am pierdut o probabilitate de vânzare, fie am investit mai mulți bani în produse nevândute, ceea ce înseamnă că avem active care nu vor genera venituri în curând pentru a le compensa costurile.
Acest lucru este în mod clar dăunător pentru fluxul de numerar al entității și pentru a aborda acest risc, avem nevoie de două lucruri:
- Mai multe intrări pentru a ne ajuta să luăm decizia
- O echipă de prognoză care poate face planificarea strategică pe termen lung pentru sistemele de reaprovizionare a stocurilor
Deci, întrebarea este: care sunt indicațiile că trebuie să adoptați AI în compania dvs. pentru a vă ajuta procesul de prognoză?
Pentru a lua această decizie, aveți nevoie de răspunsuri experți la următoarele întrebări:
- Este dificil să vă anticipați canalul de vânzări?
- Estimările dvs. de vânzări sunt inexacte sau nu sunt suficient de precise (chiar dacă aveți date istorice)?
- Suferiți de probleme legate de stocul epuizat sau de stoc excesiv?
- Nu puteți extrage informații descriptive și inferențiale din datele pe care le dețineți pentru a vă conduce deciziile și planificarea?
Răspunsurile la aceste întrebări ar trebui să fie un semnal clar care să vă ajute să decideți dacă să începeți să utilizați AI în strategiile dvs. de prognoză sau nu.
Cum poate AI să beneficieze procesul de prognoză a vânzărilor?
Inteligența artificială a arătat rezultate excelente în depășirea prognozelor umane în multe companii, permițând luarea deciziilor și planificarea mai rapide, precum și strategii mai fiabile de gestionare a riscurilor. Acesta este motivul pentru care companiile de top adoptă AI în planificarea lor.
Atunci când se confruntă cu o problemă de prognoză a cererii, metoda de prognoză a seriilor de timp poate fi utilizată pentru a prezice vânzările pentru fiecare produs, permițând astfel companiilor să optimizeze reaprovizionarea stocurilor și să minimizeze apariția problemelor menționate mai sus. Cu toate acestea, multe modele se luptă cu prognoza la nivel de produs individual sau la nivel de categorie de produse, din cauza lipsei caracteristicilor necesare. Deci, întrebarea este: cum îl putem face să funcționeze și să profităm la maximum de datele noastre?
Pentru comercianții cu amănuntul din viața reală, aceste probleme sunt orice altceva decât banale. Fie aveți peste 1.000 de produse care introduc multă neliniaritate în setul de date și dependențe multivariate, fie trebuie să fiți avertizat cu privire la cantitatea de reaprovizionare estimată a stocurilor cu mult preaviz pentru a le putea produce sau cumpăra, sau faceți tot ce aveți nevoie pentru a-l achiziționa până când cererea se materializează.
În acest caz, modelele clasice precum ARIMA și ETS nu vor funcționa și vom avea nevoie de o metodă mai robustă, cum ar fi RNN-urile și XGBoost, și de aceea avem nevoie de multă creație de caracteristici pentru a rezolva această problemă.
Pentru ca acest lucru să funcționeze, trebuie să:
- Obțineți caracteristicile de intrare necesare pentru a explica varietatea și diversitatea produselor.
- Clasificați datele noastre, astfel încât fiecare categorie să aibă același comportament în serie de timp și fiecare categorie va fi abordată folosind un model independent.
- Antrenați modelele noastre cu privire la caracteristicile de intrare clasificate dobândite.
De dragul acestui articol, vom lua XGBoost ca exemplu de astfel de model.
Caracteristici necesare în modelele de prognoză a vânzărilor
Setul de caracteristici necesare pentru această problemă este clasificat în patru grupuri principale:
- Caracteristici legate de timp
- Caracteristici legate de vânzări
- Caracteristici legate de preț
- Caracteristici legate de stoc
Caracteristici legate de timp
Spre deosebire de învățarea profundă (rețeaua neuronală recurentă), modelele de învățare automată nu pot obține dependențe pe termen lung sau pe termen scurt într-o serie de timp fără a crea un strat manual de extracție a caracteristicilor pentru caracteristica datetime .
Din dată pot fi extrase multe caracteristici, cum ar fi:
- An
- Zi
- Ora
- Weekend sau zi lucrătoare (indiferent dacă ziua este zi lucrătoare sau weekend)
- Zi a săptămânii
Multe abordări doar extrag acele caracteristici de timp și le folosesc ca intrări și modele de tren, dar se poate face inginerie ulterioară. După cum putem vedea, caracteristicile (zi, oră, zi din săptămână) sunt periodice, ceea ce înseamnă că au o gamă de valori repetitive. Cum poate un model să facă față asta?
Răspunsul scurt este că nu se poate pentru că ceea ce vede modelul este că ora 00:00 este la 23 de ore distanță de 23:00, dar de fapt, este la o oră distanță. O modalitate de a rezolva acest lucru este de a converti aceste caracteristici în transformare ciclică.
Folosind conceptul de sinus și cosinus, sau de reprezentare vectorială, se poate converti fiecare oră (24 de ore) într-un unghi, iar folosind sinusul și cosinusul acestora va fi mult mai ușor pentru model să detecteze proporțiile reale dintre ore, indiferent a periodicitatii.
Acest lucru va elimina discontinuitatea care se întâmplă în caracteristicile de timp periodice sau orice caracteristică periodică.
Pentru articolul nostru, vom folosi setul de date Sample Superstore găsit public și vom încerca să anticipăm vânzările lunare țintă pentru o anumită categorie de produse.
De asemenea, vom folosi mediul Python 3.7 cu următoarele biblioteci:
- NumPy
- panda
- XGBoost
- Sklearn
Acum, vă voi arăta cum să construiți funcția de conversie a caracteristicilor perioadei și vă voi testa dacă a fost utilă sau nu.

def convert_periodic(val,period): theta = 2*np.pi*val/period sin_period = np.sin(theta) cos_period = np.cos(theta) return sin_period,cos_period def convert_month(x): return convert_periodic(x,12) df['sin_month'], df['cos_month'] = zip(*df['month'].map(convert_month))
Cu acest lucru, suntem gata să testăm dacă funcția adăugată va îmbunătăți sau nu performanța.
X = df.drop(['Order Date','Sales','sin_month', 'cos_month'],axis = 1) y = np.log1p(df['Sales']) X_train,X_test,y_train,y_test = train_test_split(X,y,test_size = 0.2, shuffle=False)
După cum putem vedea, am făcut o transformare jurnal 1p pentru caracteristica noastră de vânzări țintă, deoarece este o caracteristică distorsionată (nu este distribuită în mod normal).
Acum, vom potrivi un regresor XGBoost pe date.
y_pred = model.predict(X_test) print(f'Loss without cyclic conversion on testing set is {sqrt(mean_squared_error(y_pred,y_test))}') Loss without cyclic conversion on testing set is 0.4313676193485837
În continuare, vom încerca cu caracteristica creată de noi.
X = df.drop(['Order Date','Sales'],axis = 1) y = np.log1p(df['Sales']) X_train,X_test,y_train,y_test = train_test_split(X,y,test_size = 0.2, shuffle=False) y_pred = model.predict(X_test) print(f'Loss with cyclic conversion on testing set is {sqrt(mean_squared_error(y_pred,y_test))}') Loss with cyclic conversion on testing set is 0.33868030449130826
După cum putem vedea, pierderea s-a îmbunătățit de la 0,43 RMSE la 0,33 RMSE.
Alte caracteristici legate de timp la care te poți gândi, în funcție de problema ta, sunt:
- Numărul de luni de când articolul a fost în magazin
- Numărul de zile de la ultima vânzare
Caracteristici legate de vânzări
Aceasta este principala caracteristică de bază de intrare necesară pentru a ne prezice vânzările, deci cum să profităm la maximum de datele despre vânzări? Putem realiza acest lucru folosind conceptul de lag și autocorelare.
Caracteristicile de întârziere sunt înregistrări istorice de vânzări pentru produse. De exemplu, dacă am luat o funcție cu 12 decalaje pentru vânzările lunare ca intrare în modelul nostru pentru a estima vânzările pentru mai 2020, înseamnă că vom furniza modelului înregistrări de date între mai 2019 și aprilie 2020. Acest lucru poate fi foarte util.
De asemenea, poate fi interpretat folosind diagrame de autocorelare pentru a verifica cât de corelată este caracteristica țintă cu caracteristicile sale întârziate. Acest lucru ajută, de asemenea, la selectarea doar a caracteristicilor corelate dintre caracteristicile întârziate, astfel încât reducem utilizarea memoriei și redundanța caracteristicilor.
Iată cum putem adăuga caracteristici de decalaj în cadrul nostru de date:
for i in range(3): df[f'lag_{i+1}'] = df['Sales'].shift(i+1) df = df.dropna() df.head()
Aici, am ales o valoare a unei caracteristici cu trei întârzieri care să fie inclusă în setul nostru de antrenament. Această caracteristică este un hiperparametru — o puteți alege pe baza graficului de autocorelare sau încercând mai multe valori și alegând doar cele mai bune în etapa de reglare.
X = df.drop(['Order Date','Sales'],axis = 1) y = np.log1p(df['Sales']) X_train,X_test,y_train,y_test = train_test_split(X,y,test_size = 0.2, shuffle=False) y_pred = model.predict(X_test) print(f'Loss with lag features on testing set is {sqrt(mean_squared_error(y_pred,y_test))}') Loss with lag and aggregated sales features on testing set is 0.2862175857169188
Acum, RMSE s-a îmbunătățit la 0,28, folosind atât caracteristici de întârziere, cât și conversii ciclice.
Câteva funcții suplimentare legate de vânzări pe care le puteți adăuga:
- Fracțiunea de articole vândute (fracția de articole vândute în funcție de vânzările totale dintr-un magazin)
- Frecvența evenimentelor de vânzare pentru categoria articolului
- Adăugând conceptul de vechime în muncă
Vechimea este un concept introdus pentru a atribui un nivel de vechime articolelor noi dintr-un magazin:
- Vechime 0: articole noi pentru companie
- Vechime 1: articole nu s-au vândut niciodată în acest magazin, ci sunt vândute în alte magazine ale companiei
- Vechime 2: articole care au mai fost vândute în acest magazin
Caracteristici legate de preț
Un argument simplu este că una dintre cauzele directe ale creșterii și scăderii vânzărilor este prețul și promoțiile. Prețul este una dintre cele mai bune modalități de a diferenția între diferite categorii, subcategorii și super-categorii de produse.
De exemplu, presupunând că fiecărui produs i-au fost atribuite o categorie și o subcategorie, se pot crea următoarele caracteristici de preț:
- (Medie, Max, Min, Median) prețuri pentru fiecare categorie
- (Medie, Max, Min, Median) prețuri în subcategorie
- Comparații între acele statistici, cum ar fi diferența dintre fiecare statistică atât din categorie, cât și din subcategorie
Această agregare poate fi efectuată de mai multe ori folosind mai multe grupări după subiect (presupunând că ne propunem să anticipăm cererea lunară), cum ar fi:
- Lunar, Magazin, categorie
- Lunar, Magazin, subcategorie
- Lunar, magazin, articol, categorie
- Lunar, Magazin, Articol, subcategorie
De asemenea, pot fi adăugate mai multe caracteristici, cu excepția grupării Lunare , pentru a studia comportamentul prețurilor în general.
Caracteristici legate de stoc
Acesta nu este atât de comun în rândul comercianților cu amănuntul și al prognozatorilor de vânzări, dar face o mare diferență în modelele de prognoză a vânzărilor. Seturile de date de stoc au în principal datele de inventar ale fiecărui produs, zilnic în fiecare magazin. Din aceasta, îl putem combina cu datele de vânzări pentru a obține un raport lunar al cifrei de afaceri pentru fiecare produs. Acest raport va indica cât de repede stocul unui produs este vândut complet și are două avantaje principale:
- Poate ajuta modelul să prognozeze vânzările pe baza nivelului actual al stocului.
- Ne poate ajuta să folosim această valoare pentru a grupa produsele în produse cu mișcare lentă, medie și rapidă. Această grupare ne va ajuta cu luarea deciziilor și modelarea.
Pentru aceasta, aveți nevoie de date zilnice de inventar pentru fiecare produs, împreună cu datele de vânzări, iar apoi puteți calcula rata de rotație a stocurilor după cum urmează:
Sugestie: Aceste agregari se fac pe baza unui interval de timp. De exemplu, dacă lucrăm la prognoza vânzărilor lunare, atunci ITO va fi calculat ca vânzări totale din ultima lună peste valoarea medie a stocului în aceeași lună.
Prognoza vânzărilor poate transforma datele în oportunitate
Pe scurt, prognoza vânzărilor poate ajuta firmele să crească veniturile și să obțină profit, cu condiția ca acestea să aibă conductele de date potrivite și să utilizeze metodele corecte de inginerie a caracteristicilor. Acest articol a fost o încercare pentru a arăta că toate tipurile de date pot fi utile în rezolvarea acestei probleme.
Fiecare companie ar trebui să investigheze dacă AI este necesară pentru problemele sale de prognoză și, în cazul în care este, va avea nevoie de ingineri AI experți și de sfaturi de la inginerii de învățare automată pentru a crea un sistem propriu de prognoză a vânzărilor.
Dacă sunteți o companie/detailist dispus să aplice această tehnică de prognoză a vânzărilor, începeți prin a aduna toate datele pe care le puteți, în special vânzările zilnice, inventarul zilnic și tranzacțiile zilnice.
Odată ce dețineți aceste date, le puteți folosi pentru a vă crește veniturile și pentru a optimiza strategiile de reaprovizionare a stocurilor, permițând afacerii dvs. să obțină cel mai mare profit posibil cu resursele disponibile, așa cum este demonstrat în mai multe exemple de mai sus, precum și pentru practicile de prognoză a vânzărilor utilizate de comercianții de top. .
Referinte:
Setul de date
Citiri suplimentare despre previziunile financiare