ABONAMENTE VIDEO REDACȚIA
RO
EN
×
▼ 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

Sponsori

  • comply advantage
  • ntt data
  • 3PillarGlobal
  • Betfair
  • Telenav
  • Accenture
  • Siemens
  • Bosch
  • FlowTraders
  • MHP
  • Connatix
  • MetroSystems
  • BoatyardX
  • Colors in projects

VIDEO: NUMĂRULUI 95