[PYTHON] Zeitreihenanalyse Teil 3 Prognose

1. Übersicht

2. Daten

In Anlehnung an die vorherige Zeit werden wir historische TOPIX-Daten und monatliche ausländische Besucherdaten verwenden. save.png save.png

3. Vorhersage des AR-Prozesses

In den folgenden Vorhersagen ist die Vorhersage, die den mittleren quadratischen Fehler (MSE) minimiert, die optimale Vorhersage. AR(p):\quad y_t=c+\phi_1y_{t-1}+\phi_2y_{t-2}+\cdots+\phi_py_{t-p}+\epsilon_t,\quad \epsilon_t\sim W.N.(\sigma^2) Bei der Vorhersage des AR-Prozesses ist ein sequentieller Vorhersageansatz unter Verwendung der folgenden Eigenschaften üblich. \left\\{\begin{array}{ll} E(y_\tau|\Omega_t)=y_\tau,&\tau\leq t \\\E(\epsilon_{t+k}|\Omega_t)=0,&k>0\end{array}\right. $ \ Omega_t = \ {y_t, y_ {t-1}, \ cdots, y_1 \} $

Zu diesem Zeitpunkt ist die optimale Ein-Jahres-Prognose \hat y_{t+1|t}=c+\phi_1y_t+\phi_2y_{t-1}+\cdots+\phi_py_{t-p+1} Und MSE MSE(\hat y_{t+1|t})=E(\epsilon_{t+1}^2)=\sigma^2 Wird sein. Als nächstes ist die optimale Zwei-Zeit-Prognose \begin{split}\hat y_{t+2|t}&=c+\phi_1\hat y_{t+1|t}+\phi_2y_t+\cdots+\phi_py_{t-p+2}+\epsilon_{t+2}\\\ &=(1+\phi_1)c+(\phi_1^2+\phi_2)y_t+(\phi_1\phi_2+\phi_3)y_{t-1}+\cdots\\phi_1\phi_py_{t-p+1}\end{split} Und zu diesem Zeitpunkt MSE MSE(\hat y_{t+2|t})=E(\epsilon_{t+2}+\phi_1\epsilon_{t+1})^2=(1+\phi_1^2)\sigma^2 Wird sein. Auf diese Weise wird die h-Term-Vorhersage sequentiell erhalten.

Das Obige ist die Punktvorhersage des AR-Prozesses, aber die Abschnittsvorhersage ist wie folgt.

P(-1.96\leq\frac{y-\mu}{\sigma}\leq1.96)=0.95 P(\mu-1.96\sigma\leq y\leq\mu+1.96\sigma)=0.95

N(\hat y_{t+1|t},MSE(\hat{y}_{t+1|t}))

\bigl( \hat y_{t+1|t}-1.96\sqrt{MSE(\hat y_{t+1|t})},\; \hat y_{t+1|t}+1.96\sqrt{MSE(\hat{y}_{t+1|t})}\bigr)

Wenn $ y \ sim N (\ mu, \ sigma ^ 2) $ gilt. Da hier die bedingte Verteilung von $ y_ {t + 1} $ ist, ist die 95% -Intervallvorhersage eine Periode voraus. Im Allgemeinen ist es schwierig, den h-Term-MSE von $ AR (p) $ zu finden, und es wird eine Methode verwendet, die ihn durch Simulation approximiert. 4. Vorhersage des MA-Prozesses

Wenn es unendlich viele Beobachtungen gibt, ist der invertierbare MA-Prozess y_t = \sum_{k=1}^{\infty}\eta_ky_{t-k}+\epsilon_t Und weil es in $ AR (\ infty) $ umgeschrieben werden kann, ist die optimale Vorhersage für $ MA (q) $ (1) Die optimale Vorhersage bis zur Periode $ q $ hängt von allen beobachteten Werten $ \ Omega_t $ ab. (2) Prognosen von $ q + 1 $ und darüber hinaus entsprechen einfach dem erwarteten Wert des Prozesses. (3) Für Vorhersagen von $ q + 1 $ und darüber hinaus entspricht die MSE der Diversifizierung von Prozessen. Es hat die Eigenschaft von.

Andererseits sind Vorhersagen über die $ q $ -Periode hinaus erwartete Werte des Prozesses, selbst wenn es nur eine begrenzte Anzahl beobachteter Werte gibt, und MSE ist die Streuung des Prozesses. Für Vorhersagen bis zur $ q $ -Periode wird häufig $ \ epsilon = 0 $ vor der Abtastperiode angenommen.

5. Vorhersage des ARMA-Prozesses

Die ARMA-Prozessvorhersage ist eine Kombination aus AR-Prozess- und MA-Prozessvorhersagen.

Im Folgenden werden wir versuchen, den ARMA-Prozess anhand der in Teil 2 verwendeten Daten zur Anzahl ausländischer Besucher in Japan vorherzusagen (https://qiita.com/asys/items/622594cb482e01411632).

save.png

In Teil 2 weiß ich, dass $ p = 4, q = 1 $ gut aussieht, also werde ich es verwenden. Dieses Mal werden von den insgesamt 138 Daten die ersten 100 für den Modellbau verwendet und die verbleibenden 38 werden vorhergesagt. Sie können leicht eine Vorhersage erhalten, indem Sie die Vorhersagefunktion wie folgt verwenden.

arma_model = sm.tsa.ARMA(v['residual'].dropna().values[:100], order=(4,1))
result = arma_model.fit()
pred = result.predict(start=0,end=138)
arma_model = sm.tsa.ARMA(v['residual'].dropna().values[:100], order=(4,1))
result = arma_model.fit()
pred = result.predict(start=0,end=138)
pred[:100] = np.nan
plt.figure(figsize=(10,4))
plt.plot(v['residual'].dropna().values, label='residual')
plt.plot(result.fittedvalues, label='ARMA(4,1)')
plt.plot(pred, label='ARMA(4,1) pred', linestyle='dashed', color='magenta')
plt.legend()
plt.grid()
plt.title('ARMA(4,1) prediction')
plt.show()

save.png

Die Vorhersage ist eine Kombination aus dem AR-Prozess und dem MA-Prozess und steht im Einklang mit dem intuitiven Verständnis, dass die Genauigkeit abnimmt, wenn die Vorhersageperiode länger wird. Andererseits ist die Vorhersagegenauigkeit für den ersten und den zweiten Term nicht schlecht. Die Verwendung von Prognosen hängt stark vom jeweiligen Zweck ab. An der Börse wirkt sich beispielsweise die Anzahl der monatlichen ausländischen Besucher in Japan auf die nachfolgenden Preisbewegungen eingehender Aktien aus. Sagen Sie daher die Anzahl vor der Veröffentlichung und Position voraus Es kann verwendet werden, um zu nehmen. In diesem Fall ist lediglich eine Vorhersage für eine Periode im Voraus erforderlich, und wir sind nur an der Genauigkeit der Vorhersage für eine Periode im Voraus interessiert. Wenn Sie sich also die Vorhersagegenauigkeit für einen Zeitraum im Voraus ansehen,

res_arr = []
for i in range(70,138):
    arma_model = sm.tsa.ARMA(v['residual'].dropna().values[:i], order=(4,1))
    result = arma_model.fit()
    pred = result.predict(i)[0]
    res_arr.append([v['residual'].dropna().values[i], pred])
res_arr = np.array(res_arr)

sns.regplot(x=res_arr[:,0], y=res_arr[:,1])
plt.xlabel('observed')
plt.ylabel('predicted')
plt.show()

save.png

Obwohl es eine positive Korrelation gibt, gibt es viele Variationen, und es ist eine Ebene, die zögert, sie in den tatsächlichen Kampf zu ziehen.

Recommended Posts

Zeitreihenanalyse Teil 3 Prognose
Zeitreihenanalyse Teil 4 VAR
Zeitreihenanalyse Teil 1 Autokorrelation
Umsatzprognose für die Zeitreihenanalyse
Python: Zeitreihenanalyse
RNN_LSTM1 Zeitreihenanalyse
Zeitreihenanalyse 1 Grundlagen
Python: Zeitreihenanalyse: Vorverarbeitung von Zeitreihendaten
Zeitreihenanalyse 3 Vorverarbeitung von Zeitreihendaten
Herausforderung für die zukünftige Umsatzprognose: ② Zeitreihenanalyse mit PyFlux
Herausforderung für die zukünftige Umsatzprognose: ⑤ Zeitreihenanalyse von Prophet
Zeitreihenanalyse 2 Stabilität, ARMA / ARIMA-Modell
Zeitreihenzerlegung
Zeitreihenanalyse 4 Konstruktion des SARIMA-Modells
Zeitreihenanalyse Nr. 6 Gefälschte Rückkehr und republikanischer Teil
Pandas Serie Teil 1
Python: Zeitreihenanalyse: Erstellen eines SARIMA-Modells
Python: Zeitreihenanalyse: Konstanz, ARMA / ARIMA-Modell
Kaggle ~ Gehäuseanalyse Part ~ Teil1
Python-Zeitreihenfrage
Herausforderung für die zukünftige Umsatzprognose: ④ Zeitreihenanalyse unter Berücksichtigung der Saisonalität nach Statistikmodellen
TOPIX-Zeitreihen anzeigen
Zeitreihendiagramm / Matplotlib
Python 3.4 Windows7-64bit-Umgebung erstellen (für die Analyse finanzieller Zeitreihen)
Python: Aktienkursprognose Teil 2
[Python] Zeichnen Sie Zeitreihendaten
Wrap-Analyse Teil1 (Datenaufbereitung)
Herausforderung für die zukünftige Umsatzprognose: ① Was ist Zeitreihenanalyse?
Python: Aktienkursprognose Teil 1
[Statistik] [Zeitreihenanalyse] Zeichnen Sie das ARMA-Modell und erfassen Sie die Tendenz.
Berechnung der Zeitreihen-Kundenbindung
Einfache Vorhersage von Zeitreihen mit Prophet
Zeitreihenplot gestartet ~ Python Edition ~
Über Zeitreihendaten und Übertraining
Japanische Analyseverarbeitung mit Janome Teil1
Differenzierung von Zeitreihendaten (diskret)
Bewegungsstatistik zur Vorhersage von Zeitreihen
LSTM (1) zur Zeitreihenvorhersage (für Anfänger)
Mehrdimensionale Datenanalysebibliothek xarray Teil 2
Leistungsfähigkeit von Vorhersagemethoden in der Zeitreihendatenanalyse Halboptimierung (SARIMA) [Memo]
Veranschaulichen Sie sofort die vorherrschende Periode in Zeitreihendaten mithilfe der Spektralanalyse