我试图使用statsmodels' ARIMA预测时间序列。我使用sklearn' TimeSeriesSplit
来评估我的模型。不幸的是,当我预测下一个数据折叠(具有真值Y_test
)时,我会得到一个恒定的预测:
if is_arima:
Y_train = Y_train.astype(float)
# build basic ARIMA model
arima_model = ARIMA(Y_train, order=(2,0,1))
# fit it, using exogenous variables
arima_results = arima_model.fit()
# predict next len(test) values, using exogenous variables (X_test)
preds = arima_results.forecast(steps=len(Y_test))[0]
print(preds)
这给了我:
115.65096239 120.89113477 121.52020239 121.59572014 121.60478583
121.60587414 121.60600479 121.60602047 121.60602235 121.60602258
121.6060226 121.60602261 121.60602261 121.60602261 121.60602261
121.60602261 121.60602261 121.6060226 121.6060226 121.6060226
121.6060226 121.6060226 121.6060226 121.6060226 121.6060226
121.6060226 121.6060226 121.6060226 121.6060226 121.6060226...
这让我觉得我的ARIMA在时间t没有使用预测来预测时间t + 1?
我知道输出不是完全恒定的,但我的数据集显示出很大的变化,所以这是有点关注的。知道发生了什么吗?
谢谢!
答案 0 :(得分:0)
您使用的是ARIMA(2,0,1),因此您的预测是
x(t) = constant + w(t) + a1 * x(t-1) + a2 * x(t-2) + b1 * w(t-1)
因此,您的预测取决于2个因素。您具有自回归项和移动平均项。您的自回归项只是前一个期间值的常数乘以2之前的值的常数。然后有一个移动平均项,它是前一时期预测的误差的常数倍。因此,您的模型可能主要由前两个时期控制,并且它可能很快找到平衡。
尝试打印出参数,然后将其插入excel以查看模型中发生了什么。
print(arima_model.summary())
print(arima_model.params)
答案 1 :(得分:0)
您正在使用递归策略进行多步预测,即,先前步骤中生成的预测将用于迭代地预测下一个预测。这会导致错误累积,结果是预测收敛到一个值。 在很长的数据序列中,有马软件的性能都不好。