自回归模型的部分拟合或增量学习

Partial fit or incremental learning for autoregressive model

我有两个时间序列代表两个独立的数据观察期。我想为这些数据拟合一个自回归模型。换句话说,我想进行两次部分拟合,或者两次增量学习。

这是对一种常见情况的简化描述,也适用于大型数据集的批量拟合。

我该怎么做(在 statsmodels 或其他方式中)?如果解决方案可以推广到 ARIMA 等其他时间序列模型,则加分。

在伪代码中,类似于:

import statsmodels.api as sm
from statsmodels.tsa.ar_model import AutoReg

data = sm.datasets.sunspots.load_pandas().data['SUNACTIVITY']
data_1 = data[:len(data)//3]
data_2 = data[len(data)-len(data)//3:]

# This is the standard single fit usage
res = AutoReg(data_1, lags=12).fit()
res.aic

# This is more like what I would like to do
model = AutoReg(lags=12)
model.partial_fit(data_1)
model.partial_fit(data_2)
model.results.aic

Statsmodels 不直接具有此功能。正如 Kevin S 提到的,pmdarima 确实有一个提供此功能的包装器。具体更新方法。根据他们的文档:“用额外观察到的 endog/exog 值更新模型拟合。”.

请参阅下面有关您的特定代码的示例:

from pmdarima.arima import ARIMA
import statsmodels.api as sm

data = sm.datasets.sunspots.load_pandas().data['SUNACTIVITY']
data_1 = data[:len(data)//3]
data_2 = data[len(data)-len(data)//3:]

# This is the standard single fit usage
model = ARIMA(order=(12,0,0))
model.fit(data_1)

# update the model parameters with the new parameters
model.update(data_2)

我不知道如何在 autoreg 中实现,但我认为它可以通过某种方式实现,但需要手动评估结果或以某种方式添加数据。

但是在ARIMA和SARIMAX中,已经实现了,而且很简单。

对于增量学习,有 3 个相关函数,并且已记录在案 here。首先是 apply,它对新的不相关数据使用拟合参数。然后是extendappend。追加可以改装。不过我不知道确切的区别。

这是我的示例,不同但相似...

from statsmodels.tsa.api import ARIMA

data = np.array(range(200))

order = (4, 2, 1)

model = ARIMA(data, order=order)
fitted_model = model.fit()


prediction = fitted_model.forecast(7)

new_data = np.array(range(600, 800))
fitted_model = fitted_model.apply(new_data)
new_prediction = fitted_model.forecast(7)

print(prediction)  # [200. 201. 202. 203. 204. 205. 206.]
print(new_prediction)  # [800. 801. 802. 803. 804. 805. 806.]

这会替换所有数据,因此它可以用于不相关的数据(未知索引)。我对它进行了分析,并且与 fit 相比,应用速度非常快。