为什么观察次数会改变具有固定系数的 sarimax 模型的预测?
Why does the number of observations change the prediction of a sarimax model with fixed coefficients?
训练 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
基于此,这意味着如果我要根据训练有素的模型和新的观测值生成预测,则观测值数量本身的变化会影响预测的完整性。
这是怎么解释的?考虑到新观测值数量的变化,将经过训练的模型应用于新观测值的标准做法是什么?
如果我想更新模型但无法控制我是否拥有训练集一开始的所有原始观察结果,则此测试将表明我的预测也可能是随机数。
主要问题
这里的主要问题是您没有将新结果对象 (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
要理解为什么它们不相同,还有第二个问题(这不是您的代码中的问题,而只是您的 data/model 的统计特征)。
中刊
您的估计参数暗示了一个极其持久的模型:
print(params)
给予
ar.L1 2.134401
ar.L2 -1.683946
ar.L3 0.549369
ma.L1 -0.874801
sigma2 1807.187815
with 与 near-unit-root 过程相关联(最大特征值
= 0.99957719).
这意味着特定数据点对预测的影响需要很长时间才能消失。在您的情况下,这仅意味着对前 10 个周期的预测影响仍然很小。
这不是问题,这只是这个特定估计模型的工作方式。
训练 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
基于此,这意味着如果我要根据训练有素的模型和新的观测值生成预测,则观测值数量本身的变化会影响预测的完整性。
这是怎么解释的?考虑到新观测值数量的变化,将经过训练的模型应用于新观测值的标准做法是什么?
如果我想更新模型但无法控制我是否拥有训练集一开始的所有原始观察结果,则此测试将表明我的预测也可能是随机数。
主要问题
这里的主要问题是您没有将新结果对象 (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
要理解为什么它们不相同,还有第二个问题(这不是您的代码中的问题,而只是您的 data/model 的统计特征)。
中刊
您的估计参数暗示了一个极其持久的模型:
print(params)
给予
ar.L1 2.134401
ar.L2 -1.683946
ar.L3 0.549369
ma.L1 -0.874801
sigma2 1807.187815
with 与 near-unit-root 过程相关联(最大特征值 = 0.99957719).
这意味着特定数据点对预测的影响需要很长时间才能消失。在您的情况下,这仅意味着对前 10 个周期的预测影响仍然很小。
这不是问题,这只是这个特定估计模型的工作方式。