Szeregi czasowe - odmiany ARIMA

W poprzednim rozdziale widzieliśmy teraz, jak działa model ARIMA i jego ograniczenia, że ​​nie radzi sobie z danymi sezonowymi lub wielowymiarowymi szeregami czasowymi, dlatego też wprowadzono nowe modele uwzględniające te funkcje.

Rzut oka na te nowe modele przedstawiono tutaj -

Automatyczna regresja wektorowa (VAR)

Jest to uogólniona wersja modelu autoregresji dla wielowymiarowych stacjonarnych szeregów czasowych. Charakteryzuje się parametrem „p”.

Średnia ruchoma wektora (VMA)

Jest to uogólniona wersja modelu średniej ruchomej dla wielowymiarowych stacjonarnych szeregów czasowych. Charakteryzuje się parametrem „q”.

Średnia krocząca automatycznej regresji wektorowej (VARMA)

Jest to połączenie VAR i VMA oraz uogólnionej wersji modelu ARMA dla wielowymiarowych stacjonarnych szeregów czasowych. Charakteryzuje się parametrami „p” i „q”. Podobnie ARMA może działać jak model AR, ustawiając parametr `` q '' na 0, a jako model MA, ustawiając parametr `` p '' na 0, VARMA może również działać jak model VAR, ustawiając parametr `` q '' jako 0 i jako model VMA, ustawiając parametr „p” na 0.

W [209]:

df_multi = df[['T', 'C6H6(GT)']]
split = len(df) - int(0.2*len(df))
train_multi, test_multi = df_multi[0:split], df_multi[split:]

W [211]:

from statsmodels.tsa.statespace.varmax import VARMAX

model = VARMAX(train_multi, order = (2,1))
model_fit = model.fit()
c:\users\naveksha\appdata\local\programs\python\python37\lib\site-packages\statsmodels\tsa\statespace\varmax.py:152: 
   EstimationWarning: Estimation of VARMA(p,q) models is not generically robust, 
   due especially to identification issues. 
   EstimationWarning)
c:\users\naveksha\appdata\local\programs\python\python37\lib\site-packages\statsmodels\tsa\base\tsa_model.py:171: 
   ValueWarning: No frequency information was provided, so inferred frequency H will be used. 
  % freq, ValueWarning)
c:\users\naveksha\appdata\local\programs\python\python37\lib\site-packages\statsmodels\base\model.py:508: 
   ConvergenceWarning: Maximum Likelihood optimization failed to converge. Check mle_retvals 
  "Check mle_retvals", ConvergenceWarning)

W [213]:

predictions_multi = model_fit.forecast( steps=len(test_multi))
c:\users\naveksha\appdata\local\programs\python\python37\lib\site-packages\statsmodels\tsa\base\tsa_model.py:320: 
   FutureWarning: Creating a DatetimeIndex by passing range endpoints is deprecated.  Use `pandas.date_range` instead.
   freq = base_index.freq)
c:\users\naveksha\appdata\local\programs\python\python37\lib\site-packages\statsmodels\tsa\statespace\varmax.py:152: 
   EstimationWarning: Estimation of VARMA(p,q) models is not generically robust, due especially to identification issues.
   EstimationWarning)

W [231]:

plt.plot(train_multi['T'])
plt.plot(test_multi['T'])
plt.plot(predictions_multi.iloc[:,0:1], '--')
plt.show()

plt.plot(train_multi['C6H6(GT)'])
plt.plot(test_multi['C6H6(GT)'])
plt.plot(predictions_multi.iloc[:,1:2], '--')
plt.show()

Powyższy kod pokazuje, jak model VARMA można wykorzystać do modelowania wielowymiarowych szeregów czasowych, chociaż model ten może nie być najlepiej dopasowany do naszych danych.

VARMA ze zmiennymi egzogenicznymi (VARMAX)

Jest to rozszerzenie modelu VARMA, w którym dodatkowe zmienne zwane kowariantami są używane do modelowania interesującej nas zmiennej podstawowej.

Sezonowa automatyczna regresywna zintegrowana średnia krocząca (SARIMA)

Jest to rozszerzenie modelu ARIMA o dane sezonowe. Dzieli dane na składniki sezonowe i niesezonowe i modeluje je w podobny sposób. Charakteryzuje się 7 parametrami, dla części niesezonowej (p, d, q) parametry takie same jak dla modelu ARIMA, a dla części sezonowej (P, D, Q, m) parametry, gdzie `` m '' to liczba okresów sezonowych, a P, D, Q są zbliżone do parametrów modelu ARIMA. Parametry te można skalibrować za pomocą wyszukiwania siatki lub algorytmu genetycznego.

SARIMA ze zmiennymi egzogenicznymi (SARIMAX)

Jest to rozszerzenie modelu SARIMA o zmienne egzogeniczne, które pomagają nam modelować interesującą nas zmienną.

Przydatne może być przeprowadzenie analizy współzależności na zmiennych przed umieszczeniem ich jako zmiennych egzogenicznych.

W [251]:

from scipy.stats.stats import pearsonr
x = train_multi['T'].values
y = train_multi['C6H6(GT)'].values

corr , p = pearsonr(x,y)
print ('Corelation Coefficient =', corr,'\nP-Value =',p)
Corelation Coefficient = 0.9701173437269858
P-Value = 0.0

Korelacja Pearsona pokazuje liniową zależność między 2 zmiennymi, aby zinterpretować wyniki, najpierw patrzymy na wartość p, jeśli jest mniejsza niż 0,05, to wartość współczynnika jest istotna, w przeciwnym razie wartość współczynnika nie jest istotna. Dla istotnej wartości p dodatnia wartość współczynnika korelacji wskazuje na korelację dodatnią, a wartość ujemna na korelację ujemną.

Dlatego w przypadku naszych danych „temperatura” i „C6H6” wydają się mieć wysoce dodatnią korelację. Dlatego będziemy

W [297]:

from statsmodels.tsa.statespace.sarimax import SARIMAX

model = SARIMAX(x, exog = y, order = (2, 0, 2), seasonal_order = (2, 0, 1, 1), enforce_stationarity=False, enforce_invertibility = False)
model_fit = model.fit(disp = False)
c:\users\naveksha\appdata\local\programs\python\python37\lib\site-packages\statsmodels\base\model.py:508: 
   ConvergenceWarning: Maximum Likelihood optimization failed to converge. Check mle_retvals
   "Check mle_retvals", ConvergenceWarning)

W [298]:

y_ = test_multi['C6H6(GT)'].values
predicted = model_fit.predict(exog=y_)
test_multi_ = pandas.DataFrame(test)
test_multi_['predictions'] = predicted[0:1871]

W [299]:

plt.plot(train_multi['T'])
plt.plot(test_multi_['T'])
plt.plot(test_multi_.predictions, '--')

Z [299]:

[<matplotlib.lines.Line2D at 0x1eab0191c18>]

Wydaje się, że przewidywania tutaj uwzględniają obecnie większe odchylenia w przeciwieństwie do jednowymiarowego modelowania ARIMA.

Nie trzeba dodawać, że SARIMAX może być używany jako model ARX, MAX, ARMAX lub ARIMAX, ustawiając tylko odpowiednie parametry na wartości niezerowe.

Ułamkowa automatyczna regresywna zintegrowana średnia krocząca (FARIMA)

Czasami może się zdarzyć, że nasz szereg nie jest stacjonarny, ale różnicowanie z parametrem „d” przyjmującym wartość 1 może spowodować nadmierną różnicę. Dlatego musimy rozróżnić szeregi czasowe za pomocą wartości ułamkowej.

W świecie nauki o danych nie ma jednego lepszego modelu, model działający na danych zależy w dużej mierze od zbioru danych. Znajomość różnych modeli pozwala nam wybrać taki, który będzie pracował na naszych danych i eksperymentować z nim, aby osiągnąć najlepsze wyniki. Wyniki należy traktować jako wykresy, a także metryki błędów, czasami niewielki błąd może być również zły, dlatego niezbędne jest wykreślenie i wizualizacja wyników.

W następnym rozdziale przyjrzymy się innemu modelowi statystycznemu, wygładzaniu wykładniczemu.