ABONAMENTE VIDEO REDACȚIA
RO
EN
NOU
Numărul 149
Numărul 148 Numărul 147 Numărul 146 Numărul 145 Numărul 144 Numărul 143 Numărul 142 Numărul 141 Numărul 140 Numărul 139 Numărul 138 Numărul 137 Numărul 136 Numărul 135 Numărul 134 Numărul 133 Numărul 132 Numărul 131 Numărul 130 Numărul 129 Numărul 128 Numărul 127 Numărul 126 Numărul 125 Numărul 124 Numărul 123 Numărul 122 Numărul 121 Numărul 120 Numărul 119 Numărul 118 Numărul 117 Numărul 116 Numărul 115 Numărul 114 Numărul 113 Numărul 112 Numărul 111 Numărul 110 Numărul 109 Numărul 108 Numărul 107 Numărul 106 Numărul 105 Numărul 104 Numărul 103 Numărul 102 Numărul 101 Numărul 100 Numărul 99 Numărul 98 Numărul 97 Numărul 96 Numărul 95 Numărul 94 Numărul 93 Numărul 92 Numărul 91 Numărul 90 Numărul 89 Numărul 88 Numărul 87 Numărul 86 Numărul 85 Numărul 84 Numărul 83 Numărul 82 Numărul 81 Numărul 80 Numărul 79 Numărul 78 Numărul 77 Numărul 76 Numărul 75 Numărul 74 Numărul 73 Numărul 72 Numărul 71 Numărul 70 Numărul 69 Numărul 68 Numărul 67 Numărul 66 Numărul 65 Numărul 64 Numărul 63 Numărul 62 Numărul 61 Numărul 60 Numărul 59 Numărul 58 Numărul 57 Numărul 56 Numărul 55 Numărul 54 Numărul 53 Numărul 52 Numărul 51 Numărul 50 Numărul 49 Numărul 48 Numărul 47 Numărul 46 Numărul 45 Numărul 44 Numărul 43 Numărul 42 Numărul 41 Numărul 40 Numărul 39 Numărul 38 Numărul 37 Numărul 36 Numărul 35 Numărul 34 Numărul 33 Numărul 32 Numărul 31 Numărul 30 Numărul 29 Numărul 28 Numărul 27 Numărul 26 Numărul 25 Numărul 24 Numărul 23 Numărul 22 Numărul 21 Numărul 20 Numărul 19 Numărul 18 Numărul 17 Numărul 16 Numărul 15 Numărul 14 Numărul 13 Numărul 12 Numărul 11 Numărul 10 Numărul 9 Numărul 8 Numărul 7 Numărul 6 Numărul 5 Numărul 4 Numărul 3 Numărul 2 Numărul 1
×
▼ LISTĂ EDIȚII ▼
Numărul 93
Abonament PDF

Prognoza stocurilor utilizând Amazon Forecast

Mihai Hulea
Project Manager, R&D and Future Technologies @ NTT DATA Romania



Bogdan Bustan
Python Developer, R&D and Future Technologies @ NTT DATA Romania



PROGRAMARE

Prognoza stocurilor face parte din familia analizei predictive, fiind folosită pentru a prezice necesarul de produse și pentru a optimiza lanțul de comenzi și activităţile operaţionale. Incluzând metode bazate pe date istorice, ea este strâns legată și de prognoza cererii și ofertei dar și de prognoza producției, acestea fiind folosite pentru dimensionarea capacității de stocare sau pentru decizii legate de intrarea în piețe noi.

Pentru a facilita prognoza stocurilor pentru companiile din zona de producție, în cadrul echipei R&D, am explorat soluții pentru prognoză folosind serviciul Amazon Forecast din suita AWS. Cele ce urmează au la bază experiența acumulată în urma implementării unui asemenea proiect pentru un client din zona industrială de producție.

Amazon Forecast este un serviciu cloud care face parte din platforma cloud Amazon AWS prin intermediul căruia pot fi generate prognoze utilizând serii de timp şi date adiţionale. Prin integrarea datelor adiționale pot fi generate predicții de până la 50% mai precise decât în cazul analizei seriilor de timp simple [1].

În cadrul acestui articol vor fi prezentate următoarele: în prima parte sunt prezentate câteva consideraţii generale în ceea ce privește algoritmii de predicţie pentru serii de timp şi serviciul Amazon Forecast, iar în partea a doua este expusă o implementare experimentală a unui predictor, utilizând un set de date de tip open source.

Ce sunt modelele de serii temporale?

O serie de timp sau serie temporală este o serie de puncte ce reprezintă date dependente de timp, dar care, de regulă, nu constituie o serie în strict sens matematic. Un exemplu potrivit de serie temporală este cursul de valori de la o bursă de schimb. O secvență de puncte ale unei serii de timp are punctele spațiate prin intervale egale de timp.

Algoritmii Amazon Forecast pentru prognoză

Fiecare predictor Amazon Forecast utilizează un algoritm pentru a antrena un model, apoi folosește modelul pentru a face o previziune folosind un grup de date de intrare. Amazon Forecast oferă următorii algoritmi:

ARIMA

Modelul de tip autoregresiv cu medie mobilă, ARIMA este un algoritm utilizat frecvent pentru prognozarea seriilor de timp. ARIMA caută structuri temporale standard în setul de date de intrare.

Scopul fiecăreia dintre aceste caracteristici este de a face modelul să se potrivească cât mai bine datelor.

DeepAR+

Amazon Forecast DeepAR + este un algoritm de învățare supervizat pentru prognoza unor serii de timp scalare (unidimensionale) folosind rețele neuronale recurente (RNN). Metodele de prognoză clasică, cum ar fi modelele de tip autoregresiv cu medie mobilă (ARIMA) sau netezirea exponențială (ETS), se potrivesc unui singur model pentru fiecare serie de timp individuală, apoi utilizează acel model pentru extrapolarea seriei de timp în viitor. Cu toate acestea, în numeroase aplicații există multe serii de timp similare ce prezintă caracteristici de corelație. În acest caz, poate fi benefic să se instruiască un singur model în comun pentru toate seriile de timp. DeepAR + adoptă această abordare. Când setul de date conține sute de serii de timp, algoritmul DeepAR + depășește metodele standard ARIMA și ETS. De asemenea, se poate utiliza modelul instruit pentru a genera prognoze pentru serii de timp noi, care sunt similare celor pe care a fost instruit.

ETS

Netezirea exponențială (ETS) este utilă în special pentru seturi de date cu sezonalitate și alte presupuneri anterioare despre date. ETS calculează o medie ponderată pentru toate observațiile din setul de date din seria de timp de intrare ca predicție. Ponderile scad exponențial în timp, mai degrabă decât constant ca în metode mai simple precum ARIMA. Ponderile depind de un parametru constant, care este cunoscut sub numele de parametru de netezire.

Non-Parametric Time Series (NPTS)

Algoritmul NPTS (Amazon Time Series Non Parametric Time Series) este un predictor scalabil și probabilistic. Acesta prezice distribuția valorii viitoare a unei serii de timp date prin eșantionare din observații anterioare. Predicțiile sunt delimitate de valorile observate. NPTS este util mai ales atunci când seria de timp este intermitentă (sau rară, care conține multe zerouri) și valori mari și sporadice. De exemplu, prognozarea cererii pentru articole individuale în care seria de timp are numeroase numere mici. Amazon Forecast oferă variante de NPTS care diferă prin eșantionarea observațiilor anterioare, luând sau nu în considerare existența unor sezonalități.

Prophet

Prophet este un model popular Bayesian local de serie temporală. Algoritmul Amazon Forecast Prophet folosește implementarea Python a Prophet de către cei de la Facebook.

Prophet este util în special pentru seturile de date care:

Prophet este un model de regresie aditivă, folosind trenduri de creștere liniară sau creștere de tip curbă logistică. Acesta include o componentă sezonieră modelată folosind serii Fourier și o componentă sezonieră săptămânală modelată folosind variabile dummy (variabile binare).

Seturi de date pentru antrenare

Amazon Forecast împarte seturile de date pentru antrenare în domenii: Retail, Invetory Planning, EC2 Capacity, Work Force, Web Traffic, Metrics, Custom. Pentru prognoza stocurilor se recomandă domeniul Invetory Planning ce folosește trei tipuri pentru seturile de date, după cum urmează:

Evaluarea modelelor

De obicei, pentru primul antrenament este recomandat să se folosească AutoML pentru a determina cel mai bun model în conformitate cu următoarele metrici:

Paşii pentru obţinerea unei predicţii Amazon Forecast

În Figura 1 este prezentat fluxul standard pentru generarea unui model de predicţie și aplicarea acestuia utilizând serviciul Amazon Forecast. Modelele Amazon Forecast se obțin folosind următoarea serie de operațiuni:

Figura 1 - Obţinerea unui predicţii utilizând Amazon Forecast.

Implementare experimentală - estimarea vânzărilor în funcție de locații

Pentru implementarea experimentală se va utiliza setul de date train.csv (Figura 2) pus la dispoziție de către Kaggle în cadrul competiției Store Item Demand Forecast Challange [2] . Setul de date cuprinde înregistrări cu privire la vânzarea de articole din magazine pentru 50 de articole în 10 magazine pe o perioadă de 5 ani.

Figura 2 - Datele inițiale, primele cinci intrări

În cadrul fișierului train.csv se redenumesc capetele de coloane pentru a fi conforme cu Target Time Series. Așadar, date devine timestamp, store devine location, item devine item_id și sales devine demand. Datele încărcate au următoarea schemă pentru Amazon Forecast:

Figura 3 - Schema JSON pentru train.csv

Odată structurat, fișierul train.csv este încărcat într-un S3 bucket. Fișierul va fi accesat ulterior din Amazon Forecast prin specificarea căii complete către acesta.

După importarea datelor se începe antrenarea unui predictor. Se folosește Train new predictor, unde se specifică orizontul de prognoză, acesta fiind numărul de unități de timp pentru prognoză. În cazul acestui set de date se va utiliza ca unitate de timp ziua. Deoarece datele au câmpul pentru locații se specifică location ca forecast dimension. Algoritmul poate fi ales manual sau poate fi ales automat prin AutoML.

Pentru acest set de date, folosind AutoML, cel mai bun model a fost identificat Prophet cu următoarele metrici:

RMSE = 8,3302, wQL[0.5]/MAPE = 0,1173, wQL[0.9] = 0,0536 și wQL[0.1] = 0,0510

Dacă setul de date nu este foarte bine cunoscut se recomandă începerea antrenării cu AutoML deoarece acesta va evalua mai mulţi algoritmi și îl va returna pe cel mai bun. Acest mod de antrenare vine și cu un cost, timpul de antrenare fiind de 4 - 5 ori mai mare decât atunci când se alege manual un algoritm. Dacă pipeline-ul de predicţie este matur și este cunoscut algoritmul cel mai eficient, atunci este de preferat ca acesta să fie ales în mod manual.

Pentru a genera prognoza folosind acest model se utilizează opţiunea Create a forecast din pagina predictorului antrenat. Entitatea Forecast creată va genera prognoze în funcție de orizontul menționat în pașii anteriori. Prognozele pot fi testate din fereastra Forecast lookup conform cu Figura 4 și Figura 5.

Figura 4 - Prognoza pentru produsul 10 la locația 10 folosind Prophet

Figura 5 - Prognoza pentru produsul 10 la locația 5 folosind Prophet

Entitatea Forecast poate fi echivalată cu un back-end de predicţie ale cărui detalii de infrastructură sunt invizibile programatorului. Entitatea Forecast poate fi accesată în mod programatic în două moduri:

Diagrama UML de componente din Figura 6 prezintă structura generală a unei posibile aplicații client pentru vizualizarea predicţiilor.

Figura 6 - Diagrama de componente UML aplicatie client.

Tehnologiile propuse sunt Spring Framework pentru componenta back-end și React pentru componenta front-end. Baza de date "locală" este utilizată pentru a stoca datele istorice utilizate pentru antrenarea modelului și datele de test. Aceste date pot fi utilizate pentru a afișa comparativ, pentru un orizont de timp, în paralel, datele prognozate și datele reale istorice de test în vederea evaluării performanţelor algoritmului de predicție.

Figura 7- Implementarea aplicației client, cu vizualizarea datelor din anul anterior suprapusă

Un screenshot din aplicația client este prezentat în Figura 7. Pentru a evalua performanțele modelului de predicție, datele reale sunt afișate în paralel cu datele prezise. Valorile P90 și P10 sunt limitele intervalului de încredere de 80%, valoarea reală fiind în 10% din cazuri sub valoarea prognozată P10 și în 90% din cazuri sub valoarea prognozată P90.

Lecții învățate din viața reală

Pentru proiectul prezentat anterior în implementarea experimentală datele sunt structurate, respectă perioada de eșantionare și sunt complete având date zilnice pentru fiecare produs, pentru fiecare locație, partea de pre-procesare fiind minimală. În proiectele din viața reală datele disponibile de cele mai multe ori nu au fost adunate cu scopul de a fi folosite în algoritmi de predicție. Pentru pregătirea acestor date a fi folosite cu Amazon Forecast apare o nouă etapă de analiză și pre-procesare, fiind și cea mai cronofagă etapă. Datele pot avea eșantioane lipsă pentru zilele în care produsele nu s-a vândut. Pentru a gestiona asemenea situații se utilizează metode pentru a umple golurile din setul de date precum re-eșantionarea săptămânală, adunarea cumulativă sau umplerea datelor cu valori nule [4]. Fiecare din aceste metode de pre-procesare induc efort ulterior. În cazul re-eșantionării avem de-a face cu reducerea granularității prognozei. În cazul adunării cumulative este necesară în post-procesare operațiunea inversă, de scădere. Pentru cazul pre-procesării prin umplere cu valori nule apar rezultate nesatisfăcătoare din cauza tabelei de date sparse.

Bibliografie

[1] https://aws.amazon.com/forecast/

[2] https://www.kaggle.com/c/demand-forecasting-kernels-only

[3] https://docs.aws.amazon.com/forecast/latest/dg/API_forecastquery_QueryForecast.html

[4] "Introduction to Time-Series Forecsting with Python", Jason Brownlee, 2020

NUMĂRUL 149 - Development with AI

Sponsori

  • Accenture
  • BT Code Crafters
  • Accesa
  • Bosch
  • Betfair
  • MHP
  • BoatyardX
  • .msg systems
  • P3 group
  • Ing Hubs
  • Cognizant Softvision
  • Colors in projects