10
votes

Python Arima variable exogène hors de l'échantillon

J'essaie de prédire une série chronologique dans Python StatsModels Arima Package avec l'inclusion d'une variable exogène, mais ne peut pas comprendre la bonne façon d'insérer la variable exogène dans l'étape de prédire. Voir ici pour Docs. xxx pré>

ajoutez maintenant une variable exogène de tendance p> xxx pré>

avis, comme nous l'attendions, il s'agit d'une ligne de tendance, augmentant 0,013132 avec chacun Augmenter la tique à temps (bien sûr, il s'agit de données aléatoires, donc si vous exécutez que les valeurs seront différentes, mais l'histoire de tendance positive ou négative sera la même). Donc, la valeur suivante (pour le temps = 14) doit être 0.555226 + 0.013132 * 14 = 0,739074. P>

import numpy as np
from scipy import stats
import pandas as pd
import statsmodels.api as sm

vals = np.random.rand(13)
ts = pd.TimeSeries(vals)
df = pd.DataFrame(ts, columns=["test"])
df.index = pd.Index(pd.date_range("2011/01/01", periods = len(vals), freq = 'Q'))

exogx = np.array(range(1,14))
fit2 = sm.tsa.ARIMA(df, (0,0,0),exog = exogx).fit()
print(fit2.fittedvalues)
pred2 = fit2.predict(start = 12, end = 16, exog = np.array(range(13,17))*10000)
print(pred2)


1 commentaires

Notez que ces problèmes sont allés à (mais pas directement discuté) dans les articles suivants: Github.com/ STATSModels / STATSModels / Problèmes / 1076 Stackoverflow.com/Questtions/18721547/...


3 Réponses :


4
votes

Ceci est probablement mieux affiché sur le GitHub Issue Tracker . J'ai déposé un billet cependant.

Il est préférable de déposer un billet là-bas, sinon je pourrais l'oublier. Assez occupé ces jours-ci.

Il y avait un bogue dans la logique pour le cas particulier de k_ar == 0. doit être corrigé. Faites-moi savoir si vous pouvez / ne peut pas donner à ce patch un spin. Sinon, je peux faire des tests plus rigoureux et la fusionner.

STATSModels au-dessus de l'étincelle? Je suis intrigué.


0 commentaires

2
votes

Tout en fit2, vous avez déjà mentionné des variables, donc pas besoin de le répéter:

exogx = np.array(range(1,5)) # I think you will need 4 exegeneous variables to perform an ARIMAX(0,0,0) since you want out of sample forecast with 4 steps ahead
fit2 = sm.tsa.ARIMA(df, (0,0,0),exog = exogx).fit()
# if you want to do an out-of-sample-forecast use fit2.forecast(steps) instead
#I would do this
pred = fit2.forecast(steps = 4)
fcst_index = pd.date_range(start = df.shift(1,'10T').index[-1]  , periods = 4, freq = '10T')
fcst_serie = pd.Series(data = pred1[0], index = fcst_index)
print fcst_serie


1 commentaires

Quelqu'un a-t-il réussi à faire ce travail, s'il vous plaît? Face au même problème.



0
votes

Si quelqu'un utilise une fonction de prévision, cela a fonctionné pour moi pour une prédiction d'une étape.

Historique strong> est la matrice d'entraînement p>

EXOG FORT> est externe Array variable p>

y_exog_test strong> est sorti de la variable externe correspondante correspondante. Changez-le à ARIMAX et il devrait fonctionner P>

model = sm.tsa.statespace.SARIMAX(history, trend='c', order=(1,1,1),seasonal_order=(0,1,0,24),exog=yexog)

model_fit = model.fit()

predicted = model_fit.forecast(step=1,exog=[[Y_exog_test]], dynamic=True)


0 commentaires