我正在尝试使用
python statsmodels进行样本预测.我不想仅仅预测训练集末尾的下一个x值,但我想一次预测一个值,并在预测时考虑实际值.换句话说,我想做滚动1期预测,但我不想每次都重新校准模型.我能找到的最近的帖子是:
ARMA out-of-sample prediction with statsmodels
但是,这使用ARMA而不是ARIMA.如何使用ARIMA实现这一目标还是有更好的方法?我知道我实际上可以拉动系数并自己应用函数但是在我的代码中我使用的ARIMA模型随着时间的推移是动态的,因此系数和滞后值的使用数量不是恒定的.任何帮助将不胜感激.
解决方法
如果我是对的,我有类似的问题:基本上我想把我的时间序列分成训练和测试集,训练模型,然后根据过去的历史任意预测测试集的任何元素.我没有设法使用ARIMA statsmodels类实现它.
这就是我使用statsmodel做的方式:我已经将一阶差异应用于系列以实现平稳性,并计算了一个arma模型:
model = sm.tsa.ARMA(fitting_data,order=(p,q),dates=fitting_dates).fit()
我已经将arma模型转换为纯粹的ar模型:
ar_params = model.arparams ma_params = model.maparams ar_coefficients = arma2ar(ar_params,ma_params,nobs=final_ar_coeff)
nobs参数会影响您将获得的自回归系数的数量.我尝试了几个值,增加它直到观察到预测没有显着变化.一旦你得到你的预测w.r.t.差异系列,你想把它们带回原来的系列.我实现了一种方法,在预测之前给出一个或一组预测和最后一个已知元素,计算原始系列中的预测:
def differenced_series_to_original(values,starting_value): original_series = [starting_value] [original_series.append(original_series[-1]+i) for i in values] return original_series[1:]
显然,值是您的预测列表,starting_value是最后一个已知元素.希望它有助于解决您的问题.