MARGO

Aktualności

Tutorial: Podstawy stosowania Pythona do prognozowania szeregów czasowych

Dowiedz się, jak prognozować dane w szeregach czasowych z wykorzystaniem bibliotek Pythona

Autor: Youssef Bennani Senior Data Scientist

07/11/2018

W tutorialu wprowadzamy kilka podstawowych pojęć z zakresu szeregów czasowych, aby umożliwić „szybką” predykcję przyszłych wartości w odniesieniu do danych czasowych. Tutorial ten nie jest wyczerpujący, lecz przedstawia kilka podstawowych narzędzi dostępnych w Pythonie, które pozwalają wykonać pierwsze operacje przetwarzania. Tutaj znajdziesz kod pozwalający uzyskać te wyniki: https://gitlab.com/margo-group/public/SeriesTemporelles.

Szereg czasowy, zwany też szeregiem chronologicznym, to ciąg wartości liczbowych uporządkowanych w czasie, często z tym samym krokiem czasowym rozdzielającym kolejne obserwacje.

Poniższa ilustracja pokazuje szereg czasowy przedstawiający dzienne obroty generowane przez witrynę prowadzącą sprzedaż online w pierwszym roku jej działania. Będziemy korzystać z tego szeregu w całym tutorialu, aby zilustrować opisywane przez nas modele predykcji.

Jednym z najważniejszych pojęć w analizie szeregów czasowych jest stacjonarność. Chodzi o to, by wiedzieć, czy obserwacje z danego szeregu czasowego są generowane przez strukturę*, która ulega zmianom w czasie, czy nie.

Praktycznym sposobem na to, by sprawdzić, czy szereg czasowy jest stacjonarny, czy też nie, jest analiza w czasie ewolucji struktury jego średniej, jego wariancji oraz ich wzajemnej korelacji.

Dla wyjaśnienia, jeśli zapisujemy {st}Tt=1 jako szereg czasowy, będzie on stacjonarny**, gdy:

 

E[st]=m<∞,∀t,

V[st]=σ2<∞,∀t,

γ(t1,t2)=γ(t2−t1),

 

przy czym:

Cov(st1,st2)=E[(st1−m)(st2−m)].

 

Te trzy twierdzenia wskazują, że średnia, wariancja i zależność między wartościami szeregu mają strukturę skończoną i niezależną od czasu.

 

Poprzednia ilustracja pokazuje, że ten szereg nie jest stacjonarny; widać, że poziomy obrotów i ich zmienność ewoluują w czasie.

 

Istnieje wiele testów statystycznych***, które pozwalają stwierdzić, czy dany szereg jest stacjonarny, czy też nie. Możliwa jest sytuacja, że średnia, wariancja i autokorelacje szeregu stanowiącego punkt wyjścia nie są stałe w czasie, ale statystyki dotyczące zmian szeregu między d okresami – już tak. Można więc nadać stacjonarny charakter niestacjonarnemu szeregowi, różnicując go d razy, czyli traktować go jako {st−st−d}. Mówimy tu o operatorze opóźnień zapisywanym jako L, zastosowanym d razy.

 

Model ARIMA

Model ARIMA, nazywany również modelem Boxa-Jenkinsa, składa się z trzech elementów: procesu autoregresyjnego (AR), stopnia różnicowania (I) oraz procesu średniej ruchomej (MA).

 

Autoregresja zakłada, że wartość w momencie t jest kombinacją liniową wartości poprzednich momentów z uwzględnieniem elementu błędu.

 

AR(p):st=m+∑pi=1ϕist−i+ϵt

 

Część dotycząca średniej ruchomej zakłada, że szereg jest kombinacją liniową białego szumu**** i jest zapisany w następujący sposób:

 

MA(q):st=ϵt+∑qi=1θiϵt−i

 

Element różnicowania zaś polega na jednokrotnym lub wielokrotnym zastosowaniu operatora opóźnień L.

 

Tym samym model ARIMA przybiera następującą postać:

ARIMA(p,d,q):(1−∑pi=1ϕiLi)(1−L)dst=m+(1+∑qi=1θiLi)ϵt)

 

Bardziej szczegółowa wersja modelu ARIMA (występująca pod nazwą SARIMA) proponuje modelowanie sezonowości szeregu czasowego z wykorzystaniem dodatkowego parametru S, który oznacza okres oraz parametrów P, D i Q, które reprezentują czynniki p, d i q szeregu zróżnicowanego S razy.

 

Parametry p, d, q, S, P, D i Q są określane poprzez optymalizację kryterium informacyjnego Akaikego (AIC). Kryterium to pozwala określić stosunek między złożonością danego modelu i jego dopasowaniem.

 

Poniższa ilustracja pokazuje wynik prognozowania szeregu za pomocą modelu ARIMA dla ostatnich 165 dni roku (obszar różowy). Widać, że uzyskana predykcja ma poziom wariancji zbliżony do szeregu wyjściowego. Jednak predykcja często nie zachowuje kierunku, w którym ewoluuje szereg.

 

  1. punkt szeregu źródłowego nie zawiera żadnej wartości. Może to wynikać z awarii witryny tego dnia lub po prostu z braku danych. Dzięki okresowości skalibrowanej za pomocą modelu ARIMA można zauważyć, że model przewiduje największy spadek obrotów w ciągu czterech tygodni następujących po 277. dniu szeregu. Pokazuje to zarazem możliwości tego modelu, jak i jego ograniczenia.

Prédiction Arima Tutoriel Python Margo

W kolejnej części artykułu koncentrujemy się na innym modelu prognozowania opartym na sieciach neuronowych.

 

Rekurencyjna sieć neuronowa (RNN)

Sztuczne sieci neuronowe są systemami informatycznymi inspirowanymi biologicznymi sieciami neuronowymi, z których składają się mózgi istot żywych. Systemy te uczą się danego zjawiska poprzez analizę wielu przykładów. Sieć opiera się na zbiorze połączonych jednostek zwanych neuronami. Każde połączenie między dwoma neuronami oznacza możliwość przekazywania sobie przez nie sygnałów.

 

Rekurencyjna sieć neuronowa (RNN) jest sztuczną siecią neuronową z połączeniami rekurencyjnymi, to znaczy z połączonymi między sobą neuronami, które mogą tworzyć cykle. Sieci tego rodzaju okazały się skuteczne w modelowaniu zagadnień związanych z automatycznym rozpoznawaniem słów, pisma odręcznego, kształtów i w prognozowaniu szeregów czasowych.

 

Aby ocenić efektywność prognoz uzyskiwanych dzięki RNN, dane szeregów są rozdzielane na dwa podzbiory: zbiór treningowy i zbiór testowy. Tak jak poprzednio, oddzielimy dane z pierwszych 200 dni od reszty szeregu.

 

Prostym sposobem na przetwarzanie danych czasowych za pomocą RNN jest postrzeganie kwestii predykcji jako zagadnienia związanego z regresją. W rzeczywistości bowiem reorganizujemy dane w taki sposób, aby wyjaśnić bieżącą wartość szeregu za pomocą wybranej liczby poprzedzających ją wartości. Ta liczba to rozmiar okna, przez które patrzymy na szereg i które codziennie przesuwa się o stopień dalej.

 

Wdrożona sieć używa jako wartości wejściowej liczby badanych opóźnień, warstwy ukrytej z 3 neuronami i warstwy wyjściowej.

 

Do oceny efektywności modelu używa się kryterium RMSE (root-mean-square error), to znaczy pierwiastka błędu średniokwadratowego dla wartości prognozowanych i zaobserwowanych. Sieć jest dopasowywana poprzez określenie funkcji aktywacji i metody optymalizacji za pomocą biblioteki Keras. Na koniec model jest dostosowywany do zbioru analizowanych danych. Otrzymujemy prognozy jak na poniższej ilustracji.

Uzyskane RMSE wynosi 317722, podczas gdy dla modelu ARIMA RMSE jest równe 344723. To pokazuje, że prognozowanie za pomocą RNN daje lepsze rezultaty niż w przypadku modelu ARIMA.

 

Sieć neuronowa RNN-LTSM

RNN-LSTM (LSTM jako long short term memory) to architektura rekurencyjnej sieci neuronowej, która w procesie nauki zapamiętuje wartości w dowolnych przedziałach. Tego typu architektura jest odpowiednia do klasyfikowania, przetwarzania i prognozowania szeregów czasowych, w których pomiędzy ważnymi zdarzeniami występują przesunięcia czasowe nieznanych rozmiarów i długości.

 

Wynik prognozowania za pomocą RNN-LTSM jest podany na poniższej ilustracji. W tym przypadku RMSE wynosi 294995. Oznacza to, że model RNN-LTSM przewyższa modele ARIMA i RNN pod względem precyzji prognozowania w odniesieniu do zbioru danych testowych.

 

Chcielibyśmy również podkreślić, że model ten nie przewiduje spadku obrotów po 277. dniu (co jest normalne). Natomiast z powodzeniem prognozuje szczyt, który ma miejsce tydzień później, przy czym nie ma to wpływu na kolejne tygodnie, jak było w przypadku modelu ARIMA.

 

Podsumowanie

W tutorialu (i poprzez towarzyszący mu kod dostępny tutaj: https://gitlab.com/margo-group/public/SeriesTemporelles) pokazaliśmy, jak zastosować modele ARIMA, RNN i RNN-LSTM w procesie prognozowania danych szeregów czasowych z wykorzystaniem bibliotek Pythona. Stwierdziliśmy, że dla danych użytych w ramach tego testu najbardziej precyzyjny okazał się model RNN-LSTM.

 

 

*Mówimy o procesie stochastycznym generującym dane.

**Mówiąc dokładniej, podana tutaj definicja dotyczy stacjonarności słabej lub drugiego rzędu.

***Wyróżniamy dwa rodzaje testów stacjonarności: testy pierwiastka jednostkowego, jak rozszerzony test Dickeya-Fullera i test Phillipsa-Perrona, w których hipoteza zerowa przyjmuje, że szereg nie jest stacjonarny, oraz testy takie jak KPSS, w których hipoteza zerowa przyjmuje, że szereg jest stacjonarny.

****Biały szum to realizacja losowego procesu, w którym wariancja jest stała, a średnia i autokowariancja są zerowe.


Autor: Youssef Bennani Senior Data Scientist
Big Data
Data Science
Data to Business
Python

Aktualności

Projekty z dziedziny Data Science to wciąż droga pełna przeszkód

Projekty z dziedziny Data Science to wciąż droga pełna przeszkód W czasach, gdy wiele firm pretenduje do miana „spółek działających w oparciu o dane” nadal wiele projektów z zakresu Data Science kończy się porażką. W większości przypadków porażki wynikają z dobrze znanych i powtarzalnych przyczyn. Pierre Fares, Digital Offering & Business Transformation Officer w firmie Margo, opowiada o częstych pułapkach, których bezwzględnie należy unikać.

Więcej 
Aktualności

Utworzenie scentralizowanej platformy zarządzania logami za pomocą pakietu narzędzi Elastic

Ilość danych generowanych przez nasze systemy i aplikacje stale rośnie, co powoduje wzrost liczby centrów danych i systemów przechowywania danych. W obliczu tej eksplozji danych i inwestycji w wiedzę fachową i zasoby, decydenci potrzebują uzasadnionych analiz i zaawansowanych tabel, umożliwiających im zarządzanie swoimi systemami i klientami.

04/06/2018 Więcej 
Aktualności

Data Science w świecie handlu detalicznego: 10 najważniejszych przypadków wykorzystania

Data Science w coraz większym stopniu wpływa na modele biznesowe we wszystkich gałęziach przemysłu, zwłaszcza w sprzedaży detalicznej. Według IBM, 62% detalistów deklaruje, że wykorzystanie technik związanych z Big Data daje im poważną przewagę konkurencyjną. Dzięki data sicence możemy sprawdzić, czego potrzebuje klient i w jakim momencie jest obecnie na wyciągnięcie ręki. Aby to zrobić, musimy jedynie posiadać odpowiednie narzędzia i wdrożyć dobre procedury związane z ich używaniem. W niniejszym artykule przedstawiamy 10 najważniejszych zastosowań data science w handlu detalicznym.

01/06/2018 Więcej 
Aktualności

Zegary Lamporta i wzorzec Idempotent Producer (Kafka)

Znacie zegary Lamporta? Podczas konferencji Devoxx France 2018 była okazja, w trakcie bardzo interesującej prezentacji DuyHai DOAN, do poznania lub ponownego poznania tego algorytmu, sformalizowanego przez Lesliego Lamporta w 1978 r., częściej niż kiedykolwiek używanego dzisiaj w dziedzinie systemów rozproszonych, który w szczególności skłonił twórców Apache Kafka do wprowadzenia wzorca Idempotent Producer.

25/05/2018 Więcej 
Aktualności

Wprowadzenie do TensorFlow na datalab od Google Cloud Platform

TensorFlow to biblioteka programów do obliczeń numerycznych, działająca na zasadzie open source od 2015 r., opracowana przez Google. Szczególną cechą TensorFlow jest wykorzystanie diagramów przepływu danych (data flow graphs).

11/05/2018 Więcej 
Aktualności

Krótkie wprowadzenie do chatbotów tworzonych za pomocą Dialogflow

Ostatnio pracuję nad chatbotem, korzystając z aplikacji Google Dialogflow. Niniejszy artykuł zawiera kilka moich uwag dotyczących Dialogflow i chatbotów. Opisuję w nim też sposób, jak stworzyć prostego chatbota za pomocą platformy Dialogflow.

07/05/2018 Więcej