How to perform multi-step out-of-time forecast which does not involve refitting the ARIMA model?

You are right, if you want to do online forecasting using new data you will need to estimate the parameters over and over again which is computationally inefficient. One thing to note is that for the ARIMA model mainly the estimation of the parameters of the MA part of the model is computationally heavy, since these parameters are estimated using numerical optimization, not using ordinary least squares. Since after calculating the parameters once for the initial model you know what is expected for future models, since one observation won't change them much, you might be able to initialize the search for the parameters to improve computational efficiency.

Also, there may be a method to do the estimation more efficiently, since you have your old data and parameters for the model, the only thing you do is add one more datapoint. This means that you only need to calculate the theta and phi parameters for the combination of the new datapoint with all the others, while not computing the known combinations again, which would save quite some time. I very much like this book: Heij, Christiaan, et al. Econometric methods with applications in business and economics. Oxford University Press, 2004.

And this lecture might give you some idea of how this might be feasible: lecture on ARIMA parameter estimation

You would have to implement this yourself, I'm afraid. As far as I can tell, there is nothing readily available to do this.

Hope this gives you some new ideas!


As this very good blog suggests (3 facts about time series forecasting that surprise experienced machine learning practitioners):

"You need to retrain your model every time you want to generate a new prediction", it also gives the intuitive understanding of why this happens with examples.
That basically highlights time-series forecasting challenge as a constant change, that needs refitting.


I was struggling with this problem. Luckily, I found a very useful discussion about it. As far as I know, the case is not supported by ARIMA in python, we need to use SARIMAX.

You can refer to the link of discussion: https://github.com/statsmodels/statsmodels/issues/2788