在Python中更新ARIMA预测

时间:2017-03-08 11:27:53

标签: python time-series

我有3068个观察系列。 我想为第一次3037观测生成一个ARIMA(0,1,1)模型,并用这个模型预测第3038次到第3037次实际观测。 然后我想用3038实际观察更新这个ARIMA(0,1,1)模型,并用这个模型预测第3039次,第3038次实际观察。 继续...... 一些代码示例草案将不胜感激。

2 个答案:

答案 0 :(得分:0)

在我看来,更新整个ARIMA模型的速度很快,但到目前为止,我还没有找到仅将下一个观察值附加到模型的方法。我的完整模型重新拟合代码:

    for t in range(len(test)):
        model = ARIMA(history, order=(ar, i, ma))
        model_fit = model.fit(disp=0, solver=solver, max_iter=max_iter)
        output = model_fit.forecast()
        yhat = output[0]
        predictions.append(yhat)
        obs = test[t]  # the real observation (the expected value)
        history.append(obs)

您还可以通过一步预测多个值来绕过每个新观察的完整模型重新拟合。 我的代码一次性预测所有值(使用安全网,模型可能无法预测所有需要的点):

    iter = 0
    while iter < len(test):
        model = ARIMA(history, order=(ar, i, ma))
        model_fit = model.fit(disp=0, solver=solver)
        remaining_steps = len(test)-iter
        yhats, _, _ = model_fit.forecast(steps=remaining_steps)
        len_new = len(yhats)  # length of new predictions
        predictions = numpy.concatenate([predictions, yhats])
        history = numpy.concatenate([history, test[iter:iter+len_new]])
        iter += len_new

这是关于如何在R:https://stats.stackexchange.com/a/34191/149565

中完成的相关答案

答案 1 :(得分:0)

在使用Statsmodels API时,我想到了同样的问题,我发现金字塔API非常有用。 auto_arima()函数可让您添加新的观测值。这是一个示例http://www.alkaline-ml.com/pmdarima/0.9.0/auto_examples/arima/example_add_new_samples.html