6

J'utilise statsmodels.tsa.SARIMAX() pour former un modèle avec des variables exogènes. Existe-t-il un équivalent de get_prediction() lorsqu'un modèle est entraîné avec des variables exogènes de sorte que l'objet retourné contienne la moyenne et l'intervalle de confiance prédits plutôt qu'un simple tableau de résultats moyens prédits? Les méthodes predict() et forecast() prennent des variables exogènes, mais ne renvoient que la valeur moyenne prédite.Python Statsmodels: Utilisation de SARIMAX avec des régresseurs exogènes pour obtenir des moyennes et des intervalles de confiance prédits

SARIMA_model = sm.tsa.SARIMAX(endog=y_train.astype('float64'), 
          exog=ExogenousFeature_train.values.astype('float64'), 
          order=(1,0,0), 
          seasonal_order=(2,1,0,7), 
          simple_differencing=False) 

model_results = SARIMA_model.fit() 

pred = model_results.predict(start=train_end_date, 
           end=test_end_date, 
           exog=ExogenousFeature_test.values.astype('float64').reshape(343,1), 
           dynamic=False) 

pred est ici un tableau de valeurs prédites plutôt que d'un objet contenant des valeurs moyennes estimées et intervalles de confiance que vous obtiendriez si vous exécutiez get_predict(). Notez que get_predict() ne prend pas de variables exogènes.

Ma version de statsmodels est de 0,8

Répondre

3

Il y a eu des problèmes liés rétrocompatibilité en raison de laquelle les résultats complets (avec des intervalles pred, etc.) ne sont pas exposés.

Pour vous obtenir ce que vous voulez maintenant: utiliser les fonctions get_prediction et get_forecast avec des paramètres décrits ci-dessous

pred_res = sarimax_model.get_prediction(exog=ExogenousFeature_train.values.astype('float64'), full_results=True,alpha=0.05) 
    pred_means = pred_res.predicted_mean 
    # Specify your prediction intervals by alpha parameter. alpha=0.05 implies 95% CI 
    pred_cis = pred_res.conf_int(alpha=0.05) 

    # You can then plot it (import matplotlib first) 
    fig = plt.figure(figsize=(12, 8)) 
    ax = fig.add_subplot(1,1,1) 
    #Actual data 
    ax.plot(y_train.astype('float64'), '--', color="blue", label='data') 
    # Means 
    ax.plot(pred_means, lw=1, color="black", alpha=0.5, label='SARIMAX') 
    ax.fill_between(pred_means.index, pred_cis.iloc[:, 0], pred_cis.iloc[:, 1], alpha=0.05) 
    ax.legend(loc='upper right') 
    plt.draw() 

Pour plus d'informations, rendez-vous à: