Regresia ferestrei de rulare: a Simple Approach for Time Series Next value Predictions

Srinath Perera
Srinath Perera

Follow

Jun 3, 2016 – 7 min citește

Dată o serie de timp, prezicerea următoarei valori este o problemă care a fascinat o mulțime de programatori pentru o lungă perioadă de timp. Evident, un motiv cheie pentru această atenție este reprezentat de piețele bursiere, care promiteau bogății incalculabile dacă reușeai să le descifrezi. Cu toate acestea, cu excepția câtorva persoane (a se vedea Un interviu rar cu matematicianul care a spart Wall Street), aceste bogății s-au dovedit evazive.

Grație IoT (Internet of Things), analiza seriilor temporale este pe cale să revină în prim-plan. IoT ne permite să plasăm senzori omniprezenți peste tot, să colectăm date și să acționăm pe baza acestor date. Dispozitivele IoT colectează date în timp, iar datele rezultate sunt aproape întotdeauna date din serii de timp.

Cele ce urmează sunt câteva cazuri de utilizare pentru predicția seriilor de timp.

  1. Predicerea încărcării cu energie electrică
  2. Predicerea cererii pentru magazinele cu amănuntul
  3. Servicii (de ex. ghișeele de check-in ale companiilor aeriene, birouri guvernamentale) predicția clienților
  4. Pronosticarea veniturilor
  5. Monitorizarea vitală a îngrijirii la terapie intensivă
  6. Predicția randamentului și a culturilor

Să explorăm tehnicile disponibile pentru predicțiile seriilor de timp.

Prima întrebare este aceea că „nu este vorba de regresie?”. Este aproape, dar nu este același lucru cu regresia. Într-o serie de timp, fiecare valoare este afectată de valorile imediat anterioare acestei valori. De exemplu, dacă există mult trafic la ora 4.55 într-o intersecție, există șanse ca și la ora 4.56 să existe ceva trafic. Acest lucru se numește autocorelație. Dacă efectuați o regresie, veți lua în considerare doar x(t), în timp ce, din cauza autocorelației, x(t-1), x(t-2), … vor afecta, de asemenea, rezultatul. Așadar, ne putem gândi la previziunile seriilor de timp ca la o regresie care ia în considerare și autocorelația.

Pentru această discuție, să luăm în considerare „Setul de date privind consumul individual de energie electrică al gospodăriilor”, care sunt date colectate de la o gospodărie pe parcursul a patru ani în intervale de un minut. Să luăm în considerare doar trei câmpuri, iar setul de date va arăta după cum urmează.

Prima întrebare se referă la modul în care măsurăm succesul? Facem acest lucru prin intermediul unei funcții de pierdere, în care încercăm să minimizăm funcția de pierdere. Există mai multe funcții de pierdere, iar acestea au avantaje și dezavantaje diferite.

  1. MAE ( Mean absolute error) – aici toate erorile, mari și mici, sunt tratate în mod egal
  2. Root Mean Square Error (RMSE) – aceasta penalizează erorile mari datorită termenului pătrat. De exemplu, cu erori și , MSE pentru ambele va fi 0,5, în timp ce RMSE este 0,5 și. 0,45.
  3. MAPE ( Mean Absolute Percentage Error) – Deoarece #1 și #2 depind de intervalul de valori al variabilei țintă, acestea nu pot fi comparate între seturile de date. În schimb, MAPE este un procent, deci relativ. Este ca acuratețea într-o problemă de clasificare, unde toată lumea știe că o acuratețe de 99% este destul de bună.
  4. RMSEP ( Root Mean Square Percentage Error) – Acesta este un hibrid între #2 și #3.
  5. Rata de eroare a predicțiilor aproape corecte (AC_errorRate) – procentul de predicții care se situează la un procent de %p din valoarea reală

Dacă încercăm să prognozăm următoarea valoare, avem mai multe opțiuni.

Standardul de aur pentru acest tip de probleme este modelul ARIMA. Ideea de bază din spatele modelului ARIMA este de a împărți seria temporală în diferite componente, cum ar fi componenta de tendință, componenta de sezonalitate etc. și de a estima cu atenție un model pentru fiecare componentă. Consultați Using R for Time Series Analysis (Utilizarea R pentru analiza seriilor temporale) pentru o bună prezentare generală.

Cu toate acestea, ARIMA are o problemă nefericită. Are nevoie de un expert ( o diplomă bună în statistică sau un student absolvent) pentru a calibra parametrii modelului. Dacă doriți să faceți ARIMA multivariat, adică să țineți cont de mai multe câmpuri, atunci lucrurile devin și mai dificile.

Totuși, R are o funcție numită auto.arima, care estimează parametrii modelului pentru dumneavoastră. Am încercat asta.

library("forecast")
....
x_train <- train data set
X-test <- test data set
..
powerTs <- ts(x_train, frequency=525600, start=c(2006,503604))
arimaModel <- auto.arima(powerTs)
powerforecast <- forecast.Arima(arimaModel, h=length(x_test))
accuracy(powerforecast)

Puteți găsi o discuție detaliată despre cum să faceți ARIMA din linkurile date mai sus. Am folosit doar 200k din setul de date, deoarece ne concentrăm pe seturi de date de dimensiuni medii. A dat un MAPE de 19,5.

Temporal Features

Cea de-a doua abordare este de a crea o listă de caracteristici care să surprindă aspectele temporale, astfel încât să nu se piardă informațiile de autocorelație. De exemplu, analiza tehnică a pieței bursiere utilizează caracteristici construite cu ajutorul mediilor mobile. În cazul simplu, un analist va urmări mediile mobile de 7 zile și de 21 de zile și va lua decizii pe baza punctelor de încrucișare dintre aceste valori.

În cele ce urmează sunt câteva idei de caracteristici

  1. colectarea mediilor mobile/ medianelor(e.ex. 7, 14, 30, 90 de zile)
  2. Timp de la un anumit eveniment
  3. Timp între două evenimente
  4. Măsuri matematice, cum ar fi Entropia, scorurile Z etc.
  5. X(t) ridicat la funcții precum power(X(t),n), cos((X(t)/k)) etc

Trucul obișnuit pe care îl folosesc oamenii este de a aplica aceste caracteristici cu tehnici precum Random Forest și Gradient Boosting, care pot oferi importanța relativă a caracteristicilor. Putem folosi aceste date pentru a păstra caracteristicile bune și a renunța la caracteristicile ineficiente.

Nu mă voi opri prea mult asupra acestui subiect. Cu toate acestea, cu ceva muncă asiduă, această metodă s-a dovedit a da rezultate foarte bune. De exemplu, cele mai multe concursuri sunt câștigate folosind această metodă (de exemplu, http://blog.kaggle.com/2016/02/03/rossmann-store-sales-winners-interview-2nd-place-nima-shahbazi /).

Dezvantajul, totuși, este că elaborarea caracteristicilor este o artă neagră. Este nevoie de multă muncă și experiență pentru a meșteșugi caracteristicile.

Rolling Windows-based Regression

Acum am ajuns la partea interesantă. Se pare că există o altă metodă care dă rezultate destul de bune fără multă îndrumare.

Ideea este că pentru a prezice X(t+1), următoarea valoare dintr-o serie de timp, alimentăm modelul nu doar cu X(t), ci și cu X(t-1), X(t-2) etc. O idee similară a fost discutată în Rolling Analysis of Time Series, deși este folosită pentru a rezolva o problemă diferită.

Să ne uităm la un exemplu. Să spunem că trebuie să prezicem x(t+1) dat fiind X(t). Atunci variabilele sursă și țintă vor arăta în felul următor.

Datele vor arăta în felul următor după ce au fost transformate cu fereastra de rulare de trei.

Apoi, vom utiliza setul de date transformat cu un algoritm de regresie bine cunoscut, cum ar fi regresia liniară și Random Forest Regression. Se așteaptă ca algoritmul de regresie să descopere coeficienții de autocorelație de la X(t-2) la X(t).

De exemplu, cu setul de date de mai sus, aplicarea regresiei liniare pe setul de date transformat folosind o fereastră de rulare de 14 puncte de date a furnizat următoarele rezultate. Aici, AC_errorRate consideră că prognoza este corectă dacă se situează în limita a 10% din valoarea reală.

LR AC_errorRate=44.0 RMSEP=29.4632 MAPE=13.3814 RMSE=0.261307

Acest lucru este destul de interesant, deoarece acest lucru învinge auto ARIMA în mod corect ( MAPE 0,19 față de 0,13 cu ferestre de rulare).

Așa că am încercat doar regresia liniară până acum. Apoi am încercat mai multe alte metode, iar rezultatele sunt prezentate mai jos.

Regresia liniară încă se descurcă destul de bine, cu toate acestea, este slabă în ceea ce privește menținerea ratei de eroare în limita a 10%. Învățarea profundă este mai bună la acest aspect, cu toate acestea, a necesitat un reglaj serios. Vă rugăm să rețineți că testele sunt efectuate cu 200 de mii de puncte de date, deoarece mă concentrez în principal pe seturi de date mici.

Am obținut cele mai bune rezultate de la o rețea neuronală cu 2 straturi ascunse cu dimensiunea de 20 de unități în fiecare strat, cu zero abandonuri sau regularizare, funcția de activare „relu” și optimizatorul Adam(lr=0,001) rulând timp de 500 de epoci. Rețeaua este implementată cu Keras. În timpul reglajului, am găsit articole și destul de utile.

Apoi am încercat aceeași idee cu alte câteva seturi de date.

  1. Set de date privind producția de lapte ( < mici < 200 de puncte de date)
  2. Set de date privind partajarea bicicletelor (aproximativ 18.000 de puncte de date)
  3. Rata de schimb de la USD la Euro ( aproximativ 6500 de puncte de date)
  4. Prețurile acțiunilor Apple (aproximativ 13000 de puncte de date)

Previziunile sunt realizate ca serii temporale univariate. Adică luăm în considerare doar momentele de timp și valoarea pe care o prognozăm. Orice valoare lipsă este imputată cu ajutorul padding-ului ( folosind cea mai recentă valoare). Pentru toate testele, am folosit o fereastră de dimensiune 14 pentru ca fereastră de rulare.

Tabelele următoare prezintă rezultatele. Aici, cu excepția Auto.Arima, celelalte metode care utilizează un set de date bazat pe o fereastră de rulare.

Nu există un câștigător clar. Cu toate acestea, metoda ferestrei rulante pe care am discutat-o, cuplată cu un algoritm de regresie, pare să funcționeze destul de bine.

Concluzie

Am discutat trei metode: ARIMA, Using Features to represent time effects și Rolling windows pentru a face previziuni ale următoarei valori a seriei temporale cu seturi de date de dimensiuni medii.

Dintre cele trei, cea de-a treia metodă oferă rezultate bune comparabile cu modelul auto ARIMA, deși are nevoie de un minim de îndrumare din partea utilizatorului final.

În consecință, credem că „Rolling Window based Regression” este o completare utilă pentru sacul de trucuri al meteorologului!

Cu toate acestea, acest lucru nu discreditează ARIMA, deoarece, cu o reglare de către experți, se va descurca mult mai bine. În același timp, cu caracteristici artizanale, metodele doi și trei se vor descurca, de asemenea, mai bine.

Un considerent crucial este alegerea dimensiunii ferestrei pentru metoda ferestrei rulante. Adesea ne putem face o idee bună din domeniu. Utilizatorul poate, de asemenea, să facă o căutare a parametrilor privind dimensiunea ferestrei.

În continuare sunt câteva lucruri care trebuie explorate în continuare.

  • Pot fi folosite RNN și CNN? Am încercat RNN, dar nu am putut obține rezultate bune până acum.
  • Ar putea fi util să alimentăm alte caracteristici, cum ar fi ora zilei, ziua săptămânii și, de asemenea, medii mobile ale diferitelor ferestre de timp.
  1. O prezentare generală a algoritmilor de optimizare cu coborâre de gradient
  2. CS231n Rețele neuronale convoluționale pentru recunoaștere vizuală

Dacă ți-a plăcut această postare s-ar putea să te intereseze și următoarele.

  • Introducere la detectarea anomaliilor: Concepts and Techniques
  • Chronicle of Big Data: A Technical Comedy

De asemenea, consultați unele dintre cele mai citite postări ale mele și discuțiile mele (video). Vorbiți cu mine la @srinath_perera sau găsiți-mă.

.

Lasă un răspuns

Adresa ta de email nu va fi publicată.