通过 Nixtla 的 AutoARIMA 进行顺序预测

问题描述 投票:0回答:1

我想使用 Nixtlas 的 StatsForecast 一次一步地进行预测,这样当记录新的观察结果时,就会根据所述观察结果生成新的预测。

这是我的幼稚实现:

import pandas as pd
import numpy as np
import os

from statsmodels.tsa.arima_process import arma_generate_sample
from statsforecast import StatsForecast
from statsforecast.models import AutoARIMA

os.environ['NIXTLA_ID_AS_COL'] = '1'


n = 100

## Generate synthetic AR(3) data. 
ar3 = arma_generate_sample([1, 0.5, 0.5, 0.5], [1], n)
df = pd.DataFrame(data=ar3, columns=['y']).assign(unique_id=0)
df['ds'] = pd.date_range('01-01-2020', periods=ar3.size, freq='D')

## Instantiate a StatsForecast object
sf = StatsForecast(
    models = [AutoARIMA(season_length = 1)],
    freq = 'D'
)

res = []
## Generate sequential predictions
for k in range(n//2, n):

    ## In this cycle we pretend we have k observations 
    train = df.iloc[:k]
    
    ## Generate a prediction from k observations 
    pred = sf.forecast(df=train, h=1).loc[0, 'AutoARIMA']


    ## Collect data
    time = train.ds.max() + pd.Timedelta('1D')
    truth = df[df.ds == time].y.values[0]    
    res.append(dict(pred=pred, time=time, truth=truth))
    
res = pd.DataFrame(res).set_index('time')
res.plot()

问题:在我的实现中,

StatsForecast
对象反复优化ARIMA模型的顺序,这非常耗时。

我希望能够:

  1. 训练 AutoARIMA 一次,冻结基础 ARIMA 模型,并在每次收集新观测值(即每个周期)时使用它进行预测。
  2. 一次找到最佳 ARIMA 阶数,每次收集新观测值时拟合模型系数,然后进行预测。

我可以通过

获取订单
from statsforecast.arima import arima_string
arima_string(sf.fit(train).fitted_[0,0].model_)

然后将参数输入到

statsmodels.tsa.arima.model.ARIMA
对象中。这看起来是一个相当复杂且相当麻烦的方法。即使如此,我在将订单从 Nixtla 翻译为
statsmodels
时也可能会犯错误。必须有更好的方法。

statsmodels arima sarimax statsforecast
1个回答
0
投票
auto_model = AutoARIMA(....)
fitted_model = auto_model.fit(train['y'])

# The parameters
p, q, P, Q, m, d, D = fitted_model.model_['arma']
# use them as inputs in a ARIMA model
auto_model_saved = ARIMA(order=(p, d, q), seasonal_order=(P, D, Q), season_length = m)
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.