Sunteți pe pagina 1din 11

Time

Introducere
Series Student: Petrean Vlad

Secolul al XXI-lea este pe bună dreptate denumit secolul vitezei. Acest lucru este se
datoreazăat atât avansului tehnologic cât şi mai ales vitezei ridicate de acces la informaţie
precum şi utilizarea acesteia în majoritatea domeniilor existente. Unul dintre cele mai
importante aspect al avansului tehnologicaceste progrese tehnologice îl este reprezentat de
cătrereprezintă internet prin intermediul căruia putem realiza o bună parte din activităţile
noastre zilnice administrative: achitarea diferitelor facturi, achiziţia unor bunuri online
ş.a.m.d.
Nu puţine sunt aplicaţiile de tip ,,e-commerce” prin intermediul cărora se pot realiza
astfel de lucruri. Astfel de magazine online precum Amazon, Ebay, Emag etc, sunt foarte
populare în întreaga lume şi accesate într-un număr extrem de mare în fiecare lună de
utilizatori . Numărul ridicat de operaţiuni online de utilizatori permite colectarea precum şi
înregistrarea unui volumn imens de date iar mai concret pentru a avea un reper, site-ul
Amazon a avut înregistrat în luna Mai anul 2019 un număr de 2.5 miliare de accesări. Aşadar
pentru fiecare astfel de accesare putem avea stocat într-o bază de date o anumită înregistrare.
Aceste date pot fi utilizate respectiv prelucrate prin intermediul tehnologiilor contemporane
pentru a creşte profitul furnizorilor şi a ajuta la dezvoltarea acestora prinvind strategia de
vânzări. O astfel de prelucrare se poate realiza prin intermediul modelului ARIMA, ce are la
bază noţiunea de TimeSeries, în jurul căreia va fi redactat articolul de faţă.

Descrierea domeniului
Desigur, scopul fiecărei companii ce are la bază activitatea de comerţ este să realizeze
un profit cât mai ridicat prin vânzarea diferitelor articole, indiferent de natura lor: produse
alimentare, îmbrăcăminte, electronice, etc. Scoţând acest lucru în evidenţă, ei bine, trebuie să
avem în vedere, faptul că pentru a putea asigura maximizarea acestui profit, modelul ideal de
afacere ar presupune achiziţionarea unui stoc având o cantitate X şi vânzarea acestei cantităţi la
un preţ Y. Însă în realitate, mai ales datorită faptului că există o competiţie dură între
,,retaileri’’, modelul de faţă este rar întâlnit. Anume fie stocul nu este destul de mare pentru a
satisface cerea clienţilor, sau chiar dimpotrivă produsele din acel stoc nu au parte de vânzările
aşteptate şi atunci companiile trebuie să reducă din preţuri, cauzând astfel pierderi ale
profitului.
Prezentarea problemei
Din această cauză tot mai multe companii de comerţ încearcă prin diferite metode, să
estimeze valoarea şi cantitatea vânzărilor. Forme mai vechi ale acestor metode au fost
reprezentate de către programe soft care pe baza încasărilor în casele de marcat, realizau un
update în timp real pentru a nu rămâne niciodată fără produse pe stoc. Mai precis, dacă se
înregistra o vânzare, în spate se comanda acelaşi produs în mod automat, sau se aduna în
vederea aprovizionării următorului stoc.
Alte metode mai noi, constau în utilizarea diferiţilor algoritmi bazaţi pe inteligenţă
artificială ce analizează un set mare de date, şi în urma unor operaţii matematice mai avansate
vor reuşi să ofere o astfel de predicţie. Ce trebuie menţionat privind folosirea inteligenţei
artificiale, anume, nu există o soluţie generală în rezolvarea acestei probleme. Nu în cazul
fiecărei predicţii de stocuri vom putea folosi un algoritm X. Acest lucru se datorează faptului că
fiecare problemă, sau mai bine spus datele ce se doresc a fi preconizate, diferă între ele din
punct de vedere al caracteristicilor. De exemplu, dacă dorim să facem o predicţie la
îmbrăcăminte, ei bine, iarna vom avea anumite articole şi vara vom avea articole specifice
anotimpului cald. Sau un alt exemplu mai relevant şi mai cunoscut în întreaga lume: vânzarea
produselor electronice în perioada ,,Black Friday’’, când vânzăriile cresc brusc pentru o perioadă
scurtă şi trebuie asigurate stocuri mai mari pentru a satisface cererea. Din aceasta cauză trebuie
analizat fiecare caz şi observat care soluţie este mai optimă şi mai important dacă aceasta
constă în utilizarea unui algoritm bazat pe inteligenţă artificială.

Prezentarea soluţiei propuse


Indiferent de predicţia pe care dorim să o realizăm, vom avea întotdeauna nevoie de un
set mare de date, care să conţină un caracter istoric. Pentru a realiza acest obiectiv, datele
trebuie să fie culese pe o perioadă de cel putin 2 – 3 ani şi este obligatoriu ca acest set de date
să aibă un caracter ,,original’’ ca să îi spunem aşa, anume nu vor putea fi generate pe baza unei
formule sau în mod aleator, deoarece atunci predicţia realizată nu va avea o acurateţe în
conformitate cu realitate, chiar dacă pe un set de test vom obţine rezultate satisfăcătoare.
Aşadar s-ar recomanda implementarea unei baze de date cât mai rapidă, unde să se
stocheze aceste informaţii, iar fiecare tabel să conţină cât mai multe coloane, chiar dacă unele
dintre ele vor fi inutile odată cu trecerea timpului, deoarece aceste informaţii dacă nu vor fi
stocate în momentul respective, nu vor mai putea fi recuperate. Odată obţinute datele, precum
am menţionat se vor putea elimina coloanele pe care programatorul le consideră
nesemnificative în rezolvarea problemei curente.
În continuare pe baza acestor date se va realiza o prelucrare. Scopul principal al unei
astfel de prelucrări are ca obiectiv dezvoltarea şi obţinerea unei predicţii pe baza informaţiilor
observate. Desigur nici o predicţie nu va putea să prezinte o acurateţe de 100%, însă dacă setul
de date este unul bine alcătuit şi pe baza lui se pot aplica diferite modele de învăţare, atunci
prezicerile astfel obţinute ar putea reprezenta un reper pentru un eventual analist sau
programator. Pe lângă modelul ARIMA menţionat la începutul lucrării, există multe alte metode
bazate tot pe învăţarea automata care pot contribui procesul de ,,forecasting’’. Printre cele mai
populare astfel de metode putem reaminti: ,,Polynomial Regression”, ,,Reţele Neuronale”,
,,Deep Learning”.

Time Series
Pentru a putea descrie modelul ARIMA, întâi de toate trebuie prezentată mai pe larg
noţiunea de Time Series.
Time series sau ,,seria serie cronologică” în limba română, este defapt un mod de a
reprezenta anumite date ordonate iar prin acest mod se evidenţiază uşor evoluţia acestora
datelor într-o perioadă de timp. Spre exemplu magazinele online înregistrează fiecare vânzare
realizată printr diverse tipuri de recorduri într-o bază de date.
Recordurile constituie defapt conţinutul unei astfel de serii cronologice. Desigur
iInteresul principal în pentru a organiza şi înregistra astfel de statistici constă în observarea în
mod automat a evoluţiei acestora precum şi obţinerea unor predicţii a modului în care vor
arăta datele în viitor. Exemplul anterior este unul specific comerţului, însă domeniile în care
pot şi sunt folosite seriile cronologice este unul foarte larg, de la domeniul geografic: prezicerea
evoluţiei temperaturilor, până la cel medical: predicţia numărului de nou născuţi într-o ţară în
următorii 10 ani spre exemplu.

Figura 1.1 Analiza creşterii preturlui ţiteiului


Figura 1.2 Predicţia profitului realizat de compania Amazon 2002-2022

Structura unui set de date Time Series


Dacă dorim să aplicăm noţiunea de Time Series pentru a rezolva o cerinţă sau o
problemă software, trebuie întâi de toate să analizăm datele puse la dispoziţie. Anume este
obligatoriu ca setul de date să aibă drept cheie pentru indexare fie la început fie în urma unei
prelucrări, o variabilă de tipul timp. Această proprietate este obligatorie, deoarece pe baza
coloanei respective se vor efectua diverse operaţii de grupare, ordonare şi prezicere. De aceea,
în cazul în care setul nostru de date este indexat după alte proprietăţi ce nu oferă neapărat
informaţii relevante la evoluţia acestora în timp, ei bine în acest caz nu se recomandă folosirea
seriilor cronologice.
Aşa cum s-a menţionat, un set de date nu trebuie în mod obligatoriu să fie indexat la
început după o coloană de tipul timp. Anume, setul respective poate fi modificat prin agregare
şi grupare astfel încât coloana cu tipul timp să deservească în cele din urmă drept index-ul
principal al noului set de date. De exemplu să ne imaginăm că avem date despre vânzarea unor
produse vestimentare, iar tabela aceasta are următoarele atribute: id_produs, culoare, mărime,
magazin_id şi data vânzării.
Astfel putem să agregăm toate produsele de aceeaşi mărime, culoare şi magazinul unde
s-au vândut având drept index data când s-au vândut. Odată cu această agregare şi volumul de
date probabil v-a scădea considerabil, de aceea este de preferat să avem la dispoziţie un număr
de înregristrări cât mai mare, pe o perioadă întinsă de timp. De exemplu dacă avem într-o
tabelă, înregistrare recorduri ce reprezintă vânzările unui produs într-un magazin. Strict
referitor la acest exemplu dacă vom dori să facem predicţie pe zile, anume câte vânări vom
avea pentru acel produs, mai întâi trebuie să grupăm toate produsele de acelaşi tip pentru o zi,
adică să mai avem o coloană ce ne va indica cantitatea produselor vândute într-o zi.
Pe lângă cele menţionate, înainte de a putea decide dacă putem aplica un model de
învăţare pentru a preconiza anumte caracteristici dorite, trebuie să supunem setul de date la
anumite teste pentru a decide dacă această metodă a seriilor de timp este una favorabilă
pentru cazul nostru. Un prim test este cel al valoriilor constante. Nu putem să folosim un model
de învăţare specific seriilor de timp pe un set de date ale căror valori prezintă un caracter
constant pe parcursul evoluţiei. Spre exemplu pentru cazul anterior, dacă în fiecare săptămână
am avea acelaşi număr de produse cu aceleaşi proprietăţi vândute de exact n ori, atunci
probabil nu ar mai fi nevoie de un astfel de model deoarece am putea singuri să obţinem o
concluzie prin faptul că valoriile nu se modifică în timp. De asemenea nici scenariul în care
recordurile au valori într-o formă asemănătoare unei funcţii nu este unul favorabil, deoarece, ei
bine ai o formulă după care ai putea să calculezi informaţiile dorite.
Componentele unui astfel de set de date specific seriilor de timp este alcătuit din 4
componente:

 Trend – evoluţia în sine a datelor într-o perioadă de timp, anume această


caracteristică poate fi doar crescător sau descrescător. De exemplu vânzările unui
magazine pot să crească sau să descrească, în funcţie de anumiţi factori. Această
evoluţie este reprezentată prin această caracteristică.

 Sezonalitate – observarea unui ,,pattern’’ (şablon) într-un set de date. Spre exemplu
în perioada sărbătoriilor de Crăciun, vânzăriile de produse vestimentare sunt în
creştere.

 Iregularitate – anumiţi factori ce nu pot fi anticipaţi sau preconizaţi. Spre exemplu


dacă dintr-o dată, se interzice fabricarea hainelor din bumbac, ceea ce nu putea fi
preconizat şi desigur va duce la o scădere majoră a vânzărilor produselor fabricate
din bumbac.
 Ciclu – reprezintă anumite mişcări observabile într-o perioadă de timp de creştere şi
scădere, spre exemplu peste acum 2 ani a fost o creştere a vânzărilor, acum este o
scădere a vânzărilor, peste 2 ani va mai fi o creştere ş.a.m.d

Modelul ARIMA
Modelele ARIMA (Autoregressive integrated moving average) aşa cum s-a precizat
anterior, sunt modele ale seriilor de timp care pot fi folosite pentru modelarea si prognoza
datelor univariate. Astfel se presupune că datele sunt rezultate dintr-un process stochastic
(având o probabilitate aleatoare) generat de cauze neprecizate, care prognozeaza valori
viitoare ca combinatii liniare a valorilor observate pina la acel moment si estimari ale socurilor
curente si anterioare private ca variabile aleatore (Box et al. 2008).[1]
Din punct de vedere structural, acest model este alcătuit la rândul său din două modele
anume AR (Autoregressive) şi MA (Moving average). Litera ,,I” din nume provine de la
componenta ce integrează cele două părţi menţionate anterior.
Modelul AR constă în studierea intervalului de timp dat. Pentru a explica cel mai bine
rolul acestui model, ne vom imagina o perioadă de timp care începe la moment Xt=0 şi continuă
prin momentul Xt=I şi ajunge într-un final până la momentul Xt=n. Unde indexul ,,t’’ reprezintă
o dată specifică. Aşadar rolul acestuit model este de a studia relaţia dintre t=i şi t=i-1 sau t=i+1
sau t=i-2, ş.a.m.d cu scopul de a observa un şablon.
Modelul MA (moving average). Precum s-a menţionat anterior, una dintre
componetenle unei serii de timp este reprezentată de iregularitate. Factorii externi care ne
afectează evoluţia setului nostru de date şi direct logica noastră de predicţie trebuie anticipaţi.
Aşadar prin modelul MA se doreşte calcularea valorii de iregularitate, iar acest lucru fiind unul
foarte dificil, se urmăreşte să se obţină o medie a tutror acestor perturbaţii în evoluţia unui set
de date.
Calcularea acestei valorii medii a iregularităţii va contribuii şi la predicţia pe viitor,
anume se va aplica valoarea medie când vom realiza o predicţie. De exemplu se va putea
preconiza cu o marjă de eroare cât mai mică, când vânzările unui produs vor creşte sau vor
descreşte din cauza unui eveniment neanticipat.
Figura 1.3 Strucutra modelul ARIMA

Definiţia parametrilor din imagine:

 P: numărul de observații de întârziere incluse în model, denumit și ordine de


întârziere.
 I: numărul de ori în care observațiile brute sunt diferențiate, numit și gradul de
diferențiere.
 Q: Mărimea ferestrei mobile mobile, numită și ordinea mediei mobile.
Pentru a demonstra cel mai bine cum funcţionează modelul ARIMA în continuare se va
prezenta un exemplu prin intermediul căruia vom arăta un caz un se poate aplica aceast model,
alături de implementarea propriu zisă. În cadrul limbajului Python, există deja definite o
mulţime de module ce conţin implementarea diferitelor modele de învăţare automată, iar pe
lângă acestea, mai există definite şi alte module auxiliare precum pandas, numpy sau matplotlib
cu ajutorul cărora se vor realiza operaţiile de prelucrare a datelor astfel încât acestea să se
potrivească cu modelul ARIMA.
Descriere scenariu: Managerul unui aeroport doreşte să determine pe baza numărului
de pasageri din lunile trecute, câţi pasageri va avea in lunile următoare:
Figura 1.4 Setul de date pentru pasagerii unui aeroport
Aşadar, desigur primul pas constă în încărcarea datelor existente deja în memoria
scriptului nostrum de Python, acest lucru putând fi făcut prin mai multe modalităţi. De exemplu
putem interoga direct baza de date, însă de preferat este să avem datele noastre într-un fişier
de tipul .csv pentru a mări viteza de încărcare în memorie, precum şi acesul la date. Odată
încărcat verificăm proprietăţile setului nostru de date: numărul de rânduri, numele coloanelor,
tipurile de date din fiecare coloană, eliminarea datelor cu valori null acolo unde este cazul şi
unde ne va afecta calcularea predicţiilor, etc.
Însă cel mai important procedeu, odată ce am încărcat datele în memorie, este
reprezentat de către indexarea rândurilor după coloana corespunzătoare timpului, în cazul de
faţă fiind coloana “Month”.

Figura 1.5 Încărcarea şi indexarea setului de date.


Pe urmă trebuie să verificăm faptul că setul nostru de date nu este staţionar, anume
datele din cadrul său nu au o evoluţie statică, monotonă. Cel mai uşor lucru prin care putem să
verificăm această calitate este prin a reprezenta sub forma unui grafic datele noastre.
Folosindu-ne de un modul predefinit in Python anume ,,matplotlib’’ vom putea să
afişăm setul de date folosindu-ne de axele X şi Y unde axa X reprezintă timpul iar axa Y
reprezintă numărul de pasageri. Aşa cum se poate observa şi din tabelul evoluţia sau trendul
setului nostru de date este unul crescător, ceea ce demonstrează faptul că nu avem de a face cu
un set de date staţionar.

Figura 1.6 Instanţierea modelului ARIMA.

După ce am verificat acest aspect, vom continua prin a calcula parametrii fiecărei
componente care alcătuiesc modelul ARIMA menţionate mai sus. Odată calculaţi aceşti
parametri, tot ceea ce rămâne de făcut este reprezentat de instanţierea unui obiect de tipul
ARIMA, folosindu-ne de setul de date modificat şi de cei doi parametri calculaţi anterior. De
menţionat este că atât pentru calcularea celor doi parametri cât şi pentru instanţierea şi
crearea unui model ARIMA, avem predefinit modulul ,,statsmodels’’.
Aşadar vom antrena acest model prin simpla apelare a unei metode prezentă în clasa
Statsmodel. Se observă prin acest mod avantajul pe care îl oferă limbajul de programare Python
în acest sens, deoarece programatorul nu mai este nevoit să implementeze algoritmi descrişi în
vedera obţinerii unor rezultate.

Rezultate obţinute
Odată antrenat modelul, putem obţine rezultate în funcţie de intervalul pentru care
dorim să realizăm o predicţie. De exemplu dacă vom prezice numărul de pasageri la un interval
de doi ani vom avea următoarele date:
An Număr de pasageri
1949 100
1951 180
1953 260
1955 330
1957 400
1959 500
1961 620

Concluzii
În zilele noastre aplicaţiile de gestionare a unui anumit tip de date se diferenţiază între
ele din punct de vedere al performanţei lor şi prin capacitatea de a prelucra aceste date, în
sensul că nu mai este de ajuns doar să execuţi operaţiile elementare şi să le afişezi unor
utilizatori.
Diferenţa între astfel de aplicaţii constă în posibilitatea propriu zisă de a obţine
,,foloase’’ ca să le numesc aşa cât mai profitabile de pe urma acestora. Un astfel de exemplu
constă în predicţia de stocuri necesară pentru un magazine, sau anticiparea numărului de
pasageri pe care îi va avea un aeroport pentru a ştii dacă anul viitor va fi nevoie să se
achiziţioneze un nou avion şi care să fie capacitatea acestuia iar astfel de probleme sunt foarte
diverse.
Desigur există multe metode prin care putem soluţiona astfel de cerinţe iar cea
prezentată în lucrarea de faţă anume, Serii cronologice este printre cele mai vechi metode cu
ajutorul căreia putem realiza o astfel de predicţie.
Aşa cum s-a prezentat, munca programatorului s-a redus foarte mult deoarece o gamă
largă de algoritmi există deja implementaţi in limbaje de programare precum Python, R, etc,
însă cu toate acestea, programatorului îi revine în continuare sarcina de a găsi algoritmul mai
optim pentru fiecare situaţie în parte.
BIBLIOGRAFIE
[1] - http://www.stiucum.com/economie/statistica/Serii-cronologice13985.php
https://www.youtube.com/watch?v=e8Yw4alG16Q

https://www.machinelearningplus.com/time-series/time-series-analysis-python/

https://www.shanelynn.ie/using-pandas-dataframe-creating-editing-viewing-data-in-python/

Imaginile au fost preluate prin motorul de căutare Google

S-ar putea să vă placă și