SARIMAX预测(在Python中)具有良好的样本内拟合,但预测直接恢复为均值

时间:2019-08-07 13:40:42

标签: python-3.x forecasting arima

我正在尝试使用Statsmodels和Python使用SARIMAX进行时间序列预测。该模型的样本拟合良好,但预测很快恢复为均值。我在做什么错了?

数据是一个包含每天收入的时间序列。数据具有很强的每周模式和正线性趋势。

我还向模型添加了外生变量,其中包含瑞典的假期。我为模型尝试了不同的参数,还进行了网格搜索。

无论我尝试使用什么参数,样本内预测(提前一个步骤)都非常合适,但预测的样本外预测仍会迅速恢复为均值。

某些代码:

首先,我拟合模型

mod = sm.tsa.statespace.SARIMAX(endog.loc['2015-01-01':'2019-06-30','y'], 
                            exogfuture.loc['2015-01-01':'2019-06-30'],
                            order=param, 
                            seasonal_order=paramS,
                            enforce_stationarity=True, 
                            enforce_invertibility=True)
res = mod.fit(disp=False)

然后我尝试进行预测和预测:

forecast = res.forecast(steps = 93, exog = exogfuture.loc['2019-07-01':'2019-10-01'])
predict = res.get_prediction(exog = exogfuture.loc['2019-01-01':'2020-07-01'])
predict_ci = predict.conf_int()

然后我绘制观测值,一步一步预测和样本外预测:

fig, ax = plt.subplots(figsize=(9,4))

revenue.loc['2019-01-01':'2019-07-01', 'y'].plot(ax=ax, label='Observed')

predict.predicted_mean.loc['2019-01-01':'2019-07-01'].plot(ax=ax, 
label='One-step-ahead forecast')

ci = predict_ci.loc['2019-01-01':'2019-07-01']
ax.fill_between(ci.index, ci.iloc[:,0], ci.iloc[:,1], color='r', 
alpha=0.1)
ax.xaxis.set_major_locator(ticker.IndexLocator(base=1, offset=1))

forecast.loc['2019-01-01':'2020-07-01'].plot(ax=ax, label='Forecast')

legend = ax.legend()

因此,我需要帮助才能查看我正在做的事情,从而使预测直接恢复为均值!我知道模型应该最终完成,但这会立即发生。

0 个答案:

没有答案