[PYTHON] Analyse de séries chronologiques Partie 3 Prévisions

1. Vue d'ensemble

2. Données

Dans la continuité de la période précédente, nous utiliserons les données historiques TOPIX et les données mensuelles sur les visiteurs étrangers. save.png save.png

3. Prédiction du processus de RA

Dans les prédictions suivantes, la prédiction qui minimise l'erreur quadratique moyenne (MSE) est la prédiction optimale. 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) Pour prédire le processus AR, une approche de prédiction séquentielle utilisant les propriétés suivantes est courante. \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. Cependant, $ \ Omega_t = \ {y_t, y_ {t-1}, \ cdots, y_1 \} $

À ce stade, la prévision optimale à un terme est \hat y_{t+1|t}=c+\phi_1y_t+\phi_2y_{t-1}+\cdots+\phi_py_{t-p+1} Et MSE MSE(\hat y_{t+1|t})=E(\epsilon_{t+1}^2)=\sigma^2 Sera. Ensuite, la prévision optimale à deux termes est \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} Et à ce moment MSE MSE(\hat y_{t+2|t})=E(\epsilon_{t+2}+\phi_1\epsilon_{t+1})^2=(1+\phi_1^2)\sigma^2 Sera. De cette manière, la prévision à h terme est obtenue séquentiellement.

Ce qui précède est la prédiction ponctuelle du processus AR, mais la prédiction de section est la suivante.

Prenons une prévision de section à 95% une période à venir. Lorsque $ y \ sim N (\ mu, \ sigma ^ 2) $, 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 Est établi. Où la distribution conditionnelle de $ y_ {t + 1} $ est N(\hat y_{t+1|t},MSE(\hat{y}_{t+1|t})) Par conséquent, la prévision de section de 95% pour la période suivante est

\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) Sera.

En général, il est difficile de trouver le h-terme MSE de $ AR (p) $, et une méthode qui se rapproche par simulation est utilisée.

4. Prédiction du processus d'AM

S'il y a un nombre infini d'observations, le processus MA inversable est y_t = \sum_{k=1}^{\infty}\eta_ky_{t-k}+\epsilon_t Et comme il peut être réécrit en $ AR (\ infty) $, la prédiction optimale pour $ MA (q) $ est (1) La prédiction optimale jusqu'à la période $ q $ dépend de toutes les valeurs observées $ \ Omega_t $. (2) Les prévisions de $ q + 1 $ et au-delà sont simplement égales à la valeur attendue du processus. (3) Pour les prédictions de $ q + 1 $ et au-delà, la MSE est égale à la dispersion du processus. Il a la propriété de.

D'un autre côté, même lorsqu'il n'y a qu'un nombre fini de valeurs observées, les prédictions au-delà de la période $ q $ sont des valeurs attendues du processus et MSE est la dispersion du processus. Pour les prédictions jusqu'à la période $ q $, il est courant de supposer $ \ epsilon = 0 $ avant la période d'échantillonnage.

5. Prédiction du processus ARMA

La prédiction de processus ARMA est une combinaison du processus AR et des prédictions de processus MA.

Ci-dessous, nous tenterons de prédire le processus ARMA en utilisant les données sur le nombre de visiteurs étrangers au Japon qui ont également été utilisées dans la partie 2 (https://qiita.com/asys/items/622594cb482e01411632).

save.png

Dans la partie 2, je sais que $ p = 4, q = 1 $ semble bon, je vais donc l'utiliser. Cette fois, sur les 138 données totales, les 100 premières seront utilisées pour la construction du modèle et les 38 autres seront prédites. Vous pouvez facilement obtenir une prédiction en utilisant la fonction de prédiction comme suit.

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

La prédiction est une combinaison du processus AR et du processus MA, et il est cohérent avec la compréhension intuitive que la précision diminue à mesure que la période de prédiction s'allonge. En revanche, la précision de la prédiction pour les premier et deuxième termes n'est pas mauvaise. La façon d'utiliser les prévisions variera considérablement en fonction de l'objectif, mais par exemple, en bourse, le nombre de visiteurs étrangers mensuels au Japon affectera les mouvements de prix ultérieurs des stocks entrants, alors prévoyez le nombre avant la publication et la position Il peut être utilisé pour prendre. Dans ce cas, tout ce qui est nécessaire est une prédiction une période à l'avance, et nous ne sommes intéressés que par la précision de la prédiction une période à venir. Donc, si vous regardez la précision de la prédiction une période à l'avance,

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

Donc, bien qu'il y ait une corrélation positive, il y a beaucoup de variation, et c'est un niveau qui hésite à le mettre dans la bataille réelle.

Recommended Posts

Analyse de séries chronologiques Partie 3 Prévisions
Analyse des séries chronologiques partie 4 VAR
Analyse de séries chronologiques Partie 1 Autocorrélation
Analyse des séries chronologiques
Python: analyse des séries chronologiques
Analyse des séries chronologiques RNN_LSTM1
Analyse des séries chronologiques 1 Principes de base
Python: analyse des séries chronologiques: prétraitement des données des séries chronologiques
Analyse des séries chronologiques 3 Prétraitement des données des séries chronologiques
Défi des prévisions de ventes futures: ② Analyse des séries chronologiques à l'aide de PyFlux
Défi des prévisions de ventes futures: ⑤ Analyse des séries chronologiques par Prophet
Analyse des séries chronologiques 2 Stabilité, modèle ARMA / ARIMA
Décomposition des séries temporelles
Analyse des séries chronologiques 4 Construction du modèle SARIMA
Analyse des séries chronologiques n ° 6 Faux retour et partie républicaine
série pandas partie 1
Python: analyse des séries temporelles: création d'un modèle SARIMA
Python: Analyse des séries temporelles: Constantity, modèle ARMA / ARIMA
Kaggle ~ Analyse du logement ③ ~ Part1
Question sur la série chronologique Python
Défi des prévisions de ventes futures: ④ Analyse des séries chronologiques en tenant compte de la saisonnalité par Stats Models
Afficher les séries chronologiques TOPIX
Diagramme de séries chronologiques / Matplotlib
Python 3.4 Créer un environnement Windows7-64bit (pour l'analyse des séries chronologiques financières)
Python: prévision du cours de l'action, partie 2
[Python] Tracer des données de séries chronologiques
Wrap Analysis part1 (préparation des données)
Défi pour les prévisions de ventes futures: ① Qu'est-ce que l'analyse des séries chronologiques?
Python: prévision du cours de l'action partie 1
[Statistiques] [Analyse des séries chronologiques] Tracez le modèle ARMA et saisissez la tendance.
Calcul de la fidélité des clients dans les séries chronologiques
Prédiction de séries chronologiques facile avec Prophet
L'intrigue de séries temporelles a commencé ~ édition python ~
À propos des données de séries chronologiques et du surentraînement
Traitement de l'analyse japonaise à l'aide de Janome part1
Différenciation des données de séries chronologiques (discrètes)
Statistiques de mouvement pour la prédiction de séries chronologiques
LSTM (1) pour la prédiction de séries chronologiques (pour les débutants)
Bibliothèque d'analyse de données multidimensionnelle xarray Partie 2
Puissance des méthodes de prédiction dans l'analyse de données chronologiques Semi-optimisation (SARIMA) [Memo]
Illustrez instantanément la période prédominante dans les données de séries chronologiques à l'aide de l'analyse spectrale