Python Statsmodels:使用SARIMAX和外生回归量来获得预测的平均值和置信区间

时间:2016-09-26 10:28:25

标签: python time-series forecasting statsmodels confidence-interval

我使用statsmodels.tsa.SARIMAX()来训练具有外生变量的模型。当使用外生变量训练模型时,是否存在等效的get_prediction(),以便返回的对象包含预测的平均值和置信区间而不仅仅是一组预测的平均值结果? predict()和forecast()方法采用外生变量,但只返回预测的平均值。

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是一个预测值数组,而不是一个包含预测平均值和置信区间的对象,如果你运行get_predict(),你会得到它们。注意,get_predict()不接受外生变量。

我的statsmodels版本是0.8

1 个答案:

答案 0 :(得分:4)

存在一些向后兼容性相关问题,因为没有公开完整结果(具有预测间隔等)。

为了得到你想要的东西:使用带有下述参数的get_prediction和get_forecast函数

    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()

有关详细信息,请转到: