我正在使用 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
最佳答案
存在一些与向后兼容性相关的问题,导致完整结果(带有预测间隔等)未公开。
为了让你现在得到你想要的:使用 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()
更多信息,请访问:
关于Python 统计模型 : Using SARIMAX with exogenous regressors to get predicted mean and confidence intervals,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39700424/