我正在尝试使用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()
因此,我需要帮助才能查看我正在做的事情,从而使预测直接恢复为均值!我知道模型应该最终完成,但这会立即发生。