Zeitreihen - ARIMA

Wir haben bereits verstanden, dass für eine stationäre Zeitreihe eine Variable zum Zeitpunkt 't' eine lineare Funktion früherer Beobachtungen oder Restfehler ist. Daher ist es Zeit für uns, beide zu kombinieren und ein ARMA-Modell (Auto-Regressive Moving Average) zu haben.

Manchmal ist die Zeitreihe jedoch nicht stationär, dh die statistischen Eigenschaften einer Reihe wie der Mittelwert ändern sich mit der Zeit. Und die statistischen Modelle, die wir bisher untersucht haben, gehen davon aus, dass die Zeitreihen stationär sind. Daher können wir einen Vorverarbeitungsschritt zum Differenzieren der Zeitreihen einschließen, um sie stationär zu machen. Jetzt ist es wichtig für uns herauszufinden, ob die Zeitreihen, mit denen wir uns befassen, stationär sind oder nicht.

Verschiedene Methoden, um die Stationarität einer Zeitreihe zu ermitteln, suchen nach Saisonalität oder Trend in der Darstellung von Zeitreihen und überprüfen den Mittelwert- und Varianzunterschied für verschiedene Zeiträume, den Augmented Dickey-Fuller (ADF) -Test, den KPSS-Test, den Hurst-Exponenten usw. .

Lassen Sie uns mithilfe des ADF-Tests sehen, ob die Temperaturvariable unseres Datensatzes eine stationäre Zeitreihe ist oder nicht.

In [74]:

from statsmodels.tsa.stattools import adfuller

result = adfuller(train)
print('ADF Statistic: %f' % result[0])
print('p-value: %f' % result[1])
print('Critical Values:')
for key, value In result[4].items()
   print('\t%s: %.3f' % (key, value))

ADF-Statistik: -10.406056

p-Wert: 0,000000

Kritische Werte:

1%: -3,431

5%: -2,862

10%: -2,567

Nachdem wir den ADF-Test durchgeführt haben, interpretieren wir das Ergebnis. Zuerst werden wir die ADF-Statistik mit den kritischen Werten vergleichen. Ein niedrigerer kritischer Wert sagt uns, dass die Reihe höchstwahrscheinlich nicht stationär ist. Als nächstes sehen wir den p-Wert. Ein p-Wert größer als 0,05 deutet auch darauf hin, dass die Zeitreihe nicht stationär ist.

Alternativ deuten ein p-Wert kleiner oder gleich 0,05 oder eine ADF-Statistik kleiner als kritische Werte darauf hin, dass die Zeitreihe stationär ist.

Daher ist die Zeitreihe, mit der wir uns befassen, bereits stationär. Bei stationären Zeitreihen setzen wir den Parameter 'd' auf 0.

Wir können die Stationarität von Zeitreihen auch mit dem Hurst-Exponenten bestätigen.

In [75]:

import hurst

H, c,data = hurst.compute_Hc(train)
print("H = {:.4f}, c = {:.4f}".format(H,c))

H = 0,1660, c = 5,0740

Der Wert von H <0,5 zeigt ein anti-persistentes Verhalten und H> 0,5 zeigt ein persistentes Verhalten oder eine Trendreihe. H = 0,5 zeigt zufälliges Gehen / Brownsche Bewegung. Der Wert von H <0,5 bestätigt, dass unsere Serie stationär ist.

Für instationäre Zeitreihen setzen wir den Parameter 'd' auf 1. Außerdem wird der Wert des automatisch regressiven Trendparameters 'p' und des gleitenden durchschnittlichen Trendparameters 'q' für die stationäre Zeitreihe berechnet, dh durch Zeichnen ACP und PACP nach Differenzierung der Zeitreihen.

Das ARIMA-Modell, das durch 3 Parameter (p, d, q) gekennzeichnet ist, ist uns jetzt klar. Lassen Sie uns also unsere Zeitreihen modellieren und die zukünftigen Temperaturwerte vorhersagen.

In [156]:

from statsmodels.tsa.arima_model import ARIMA

model = ARIMA(train.values, order=(5, 0, 2))
model_fit = model.fit(disp=False)

In [157]:

predictions = model_fit.predict(len(test))
test_ = pandas.DataFrame(test)
test_['predictions'] = predictions[0:1871]

In [158]:

plt.plot(df['T'])
plt.plot(test_.predictions)
plt.show()

In [167]:

error = sqrt(metrics.mean_squared_error(test.values,predictions[0:1871]))
print ('Test RMSE for ARIMA: ', error)

Testen Sie RMSE für ARIMA: 43.21252940234892