In Anlehnung an die vorherige Zeit werden wir historische TOPIX-Daten und monatliche ausländische Besucherdaten verwenden.
In den folgenden Vorhersagen ist die Vorhersage, die den mittleren quadratischen Fehler (MSE) minimiert, die optimale Vorhersage.
Zu diesem Zeitpunkt ist die optimale Ein-Jahres-Prognose
Das Obige ist die Punktvorhersage des AR-Prozesses, aber die Abschnittsvorhersage ist wie folgt.
Wenn es unendlich viele Beobachtungen gibt, ist der invertierbare MA-Prozess
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.
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).
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()
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()
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