0

在训练了一个 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

基于此,这意味着如果我要从具有新观测值的训练模型生成预测,观测值本身的变化将影响预测的完整性。

对此有何解释?考虑到观察结果数量的变化,将训练模型应用于新观察结果的标准做法是什么?

如果我想更新模型,但无法控制我是否从训练集一开始就拥有所有原始观察结果,那么这个测试将表明我的预测也可能是随机数。

4

1 回答 1

1

主要问题

这里的主要问题是您没有将新结果对象 ( 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

with 与近单位根过程相关联(最大特征值 = 0.99957719)。

这意味着特定数据点对预测的影响需要很长时间才能消失。在您的情况下,这仅意味着对前 10 个期间的预测的影响仍然很小。

这不是问题,这只是这个特定估计模型的工作方式。

于 2022-02-24T00:23:43.553 回答