Zeitreihen - Variationen von ARIMA

Im vorherigen Kapitel haben wir nun gesehen, wie das ARIMA-Modell funktioniert und welche Einschränkungen es hat, dass es keine saisonalen Daten oder multivariaten Zeitreihen verarbeiten kann. Daher wurden neue Modelle eingeführt, die diese Funktionen enthalten.

Ein Blick auf diese neuen Modelle wird hier gegeben -

Vector Auto-Regression (VAR)

Es ist eine verallgemeinerte Version des automatischen Regressionsmodells für multivariate stationäre Zeitreihen. Es ist durch den Parameter 'p' gekennzeichnet.

Vector Moving Average (VMA)

Es ist eine verallgemeinerte Version des gleitenden Durchschnittsmodells für multivariate stationäre Zeitreihen. Es ist durch den Parameter 'q' gekennzeichnet.

Vector Auto Regression Moving Average (VARMA)

Es ist die Kombination von VAR und VMA und einer verallgemeinerten Version des ARMA-Modells für multivariate stationäre Zeitreihen. Es ist durch die Parameter 'p' und 'q' gekennzeichnet. Ähnlich wie ARMA in der Lage ist, sich wie ein AR-Modell zu verhalten, indem der Parameter 'q' auf 0 gesetzt wird, und wie ein MA-Modell, indem der Parameter 'p' auf 0 gesetzt wird, kann sich VARMA auch wie ein VAR-Modell verhalten, indem der Parameter 'q' eingestellt wird als 0 und als VMA-Modell durch Setzen des Parameters 'p' auf 0.

In [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:]

In [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)

In [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)

In [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()

Der obige Code zeigt, wie das VARMA-Modell zum Modellieren multivariater Zeitreihen verwendet werden kann, obwohl dieses Modell für unsere Daten möglicherweise nicht am besten geeignet ist.

VARMA mit exogenen Variablen (VARMAX)

Es ist eine Erweiterung des VARMA-Modells, bei der zusätzliche Variablen, sogenannte Kovariaten, verwendet werden, um die primäre Variable zu modellieren, an der wir interessiert sind.

Saisonaler automatischer regressiver integrierter gleitender Durchschnitt (SARIMA)

Dies ist die Erweiterung des ARIMA-Modells für den Umgang mit saisonalen Daten. Es unterteilt die Daten in saisonale und nicht saisonale Komponenten und modelliert sie auf ähnliche Weise. Es ist durch 7 Parameter gekennzeichnet, für nicht saisonale Teilparameter (p, d, q) wie für das ARIMA-Modell und für saisonale Teilparameter (P, D, Q, m), wobei 'm' die Anzahl der saisonalen Perioden und ist P, D, Q ähneln den Parametern des ARIMA-Modells. Diese Parameter können mithilfe der Rastersuche oder eines genetischen Algorithmus kalibriert werden.

SARIMA mit exogenen Variablen (SARIMAX)

Dies ist die Erweiterung des SARIMA-Modells um exogene Variablen, die uns helfen, die Variable zu modellieren, an der wir interessiert sind.

Es kann nützlich sein, eine Ko-Beziehungsanalyse für Variablen durchzuführen, bevor sie als exogene Variablen verwendet werden.

In [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

Die Pearson-Korrelation zeigt eine lineare Beziehung zwischen zwei Variablen. Um die Ergebnisse zu interpretieren, betrachten wir zunächst den p-Wert. Wenn er kleiner als 0,05 ist, ist der Wert des Koeffizienten signifikant, andernfalls ist der Wert des Koeffizienten nicht signifikant. Für einen signifikanten p-Wert zeigt ein positiver Wert des Korrelationskoeffizienten eine positive Korrelation an, und ein negativer Wert zeigt eine negative Korrelation an.

Daher scheinen für unsere Daten 'Temperatur' und 'C6H6' eine sehr positive Korrelation zu haben. Deshalb werden wir

In [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)

In [298]:

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

In [299]:

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

Out [299]:

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

Die Vorhersagen hier scheinen jetzt größere Variationen zu haben als die univariate ARIMA-Modellierung.

Selbstverständlich kann SARIMAX als ARX-, MAX-, ARMAX- oder ARIMAX-Modell verwendet werden, indem nur die entsprechenden Parameter auf Werte ungleich Null gesetzt werden.

Fractional Auto Regressive Integrated Moving Average (FARIMA)

Manchmal kann es vorkommen, dass unsere Serie nicht stationär ist, aber eine Differenzierung mit dem Parameter 'd', der den Wert 1 annimmt, kann zu einer Überdifferenzierung führen. Wir müssen also die Zeitreihen anhand eines Bruchwerts differenzieren.

In der Welt der Datenwissenschaft gibt es kein überlegenes Modell. Das Modell, das mit Ihren Daten arbeitet, hängt stark von Ihrem Datensatz ab. Die Kenntnis verschiedener Modelle ermöglicht es uns, eines auszuwählen, das an unseren Daten arbeitet, und mit diesem Modell zu experimentieren, um die besten Ergebnisse zu erzielen. Die Ergebnisse sollten sowohl als Plot- als auch als Fehlermetrik betrachtet werden. Manchmal kann auch ein kleiner Fehler schlecht sein. Daher ist das Zeichnen und Visualisieren der Ergebnisse unerlässlich.

Im nächsten Kapitel werden wir uns ein anderes statistisches Modell ansehen, die exponentielle Glättung.