在训练了sarimax模型之后,我希望将来能够用新的观测来预编预报,而不必再训练它。然而,我注意到我在新应用的预测中使用的观测数改变了预测。
根据我的理解,只要给出足够的观测量,允许正确地计算自回归和移动平均,该模型甚至不会使用先前的历史观测来通知自己,因为系数没有经过再训练。在一个(3,0,1)的例子中,我认为它至少需要3个观测才能应用其经过训练的系数。然而,情况似乎并非如此,我怀疑我是否正确地理解了这一模式。
作为一个示例和测试,我对相同的数据应用了一个经过训练的sarimax,去掉了最初的几个观察结果,用以下代码测试行数对预测的影响:
import pandas as pd
from statsmodels.tsa.statespace.sarimax import SARIMAX, SARIMAXResults
y = [348, 363, 435, 491, 505, 404, 359, 310, 337, 360, 342, 406, 396, 420, 472, 548, 559, 463, 407, 362, 405, 417, 391, 419, 461, 472, 535, 622, 606, 508, 461, 390, 432]
ynew = y[10:]
print(ynew)
model = SARIMAX(endog=y, order=(3,0,1))
model = model.fit()
print(model.params)
pred1 = model.predict(start=len(y), end = len(y)+7)
model2 = model.apply(ynew)
print(model.params)
pred2 = model2.predict(start=len(ynew), end = len(ynew)+7)
print(pd.DataFrame({'pred1': pred1, 'pred2':pred2}))结果如下:
pred1 pred2
0 472.246996 472.711770
1 494.753955 495.745968
2 498.092585 499.427285
3 489.428531 490.862153
4 477.678527 479.035869
5 469.023243 470.239459
6 465.576002 466.673790
7 466.338141 467.378903基于这一点,这意味着,如果我要从一个经过训练的模型中得到新的观测结果,那么观测数量的变化将影响到预测的完整性。
对此有何解释?鉴于新观测数目的变化,应用经过训练的新观测模型的标准做法是什么?
如果我想更新模型,但无法控制是否从我的训练集一开始就有所有的原始观测,这个测试将表明我的预测可能也是随机数。
发布于 2022-02-24 00:23:43
主要议题
这里的主要问题是,您没有在第二组预测中使用新的结果对象(model2)。你有:
pred2 = model.predict(start=len(ynew), end = len(ynew)+7)但你应该:
pred2 = model2.predict(start=len(ynew), end = len(ynew)+7)如果您修复了这个问题,您将得到非常类似的预测:
pred1 pred2
0 472.246996 472.711770
1 494.753955 495.745968
2 498.092585 499.427285
3 489.428531 490.862153
4 477.678527 479.035869
5 469.023243 470.239459
6 465.576002 466.673790
7 466.338141 467.378903要理解它们为什么不相同,还有第二个问题(这不是代码中的问题,而是数据/模型的统计特性)。
二级发行
您的估计参数意味着一个非常持久的模型:
print(params)给出
ar.L1 2.134401
ar.L2 -1.683946
ar.L3 0.549369
ma.L1 -0.874801
sigma2 1807.187815它与近单位根过程相关联(最大特征值= 0.99957719)。
这意味着,一个特定的数据点对预测的影响需要很长时间才能消失。在你的例子中,这只是意味着对前10个周期的预测仍然有很小的影响。
这不是一个问题,它只是这个特定的估计模型的工作方式。
https://stackoverflow.com/questions/71241967
复制相似问题