我有两个时间序列,代表两个独立的数据观察期。我希望对这些数据拟合一个自回归模型。换句话说,我希望进行两次部分拟合,或者说进行两次增量学习。
这是一个简化的描述,描述了一个并不罕见的情景,也可能适用于对大型数据集的批量拟合。
我该如何做到这一点(在statsmodels中或其他方式)?如果解决方案可以推广到其他时间序列模型,如ARIMA,将会是额外的加分项。
用伪代码来说明,类似于:
import statsmodels.api as smfrom statsmodels.tsa.ar_model import AutoRegdata = sm.datasets.sunspots.load_pandas().data['SUNACTIVITY']data_1 = data[:len(data)//3]data_2 = data[len(data)-len(data)//3:]# 这是标准的单次拟合用法res = AutoReg(data_1, lags=12).fit()res.aic# 这更接近于我想要的model = AutoReg(lags=12)model.partial_fit(data_1)model.partial_fit(data_2)model.results.aic
回答:
Statsmodels并没有直接提供这种功能。不过,正如Kevin S提到的,pmdarima确实有一个包装器,提供了这种功能。具体来说是update方法。根据他们的文档说明:“使用额外的观察到的endog/exog值更新模型拟合。”
请看下面的示例,围绕您的特定代码:
from pmdarima.arima import ARIMAimport statsmodels.api as smdata = sm.datasets.sunspots.load_pandas().data['SUNACTIVITY']data_1 = data[:len(data)//3]data_2 = data[len(data)-len(data)//3:]# 这是标准的单次拟合用法model = ARIMA(order=(12,0,0))model.fit(data_1)# 使用新参数更新模型参数model.update(data_2)