使用 Statsmodels 的 SARIMAX 预测有问题吗?
Is there a Problem with SARIMAX Predictions Using Statsmodels?
我正在使用 Statsmodels 库在 Python 中构建时间序列模型。
当我对一个对象使用预测方法时,我似乎得到了错误的结果
具有外生回归变量的 SARIMAX 模型。 (预测方法似乎在没有外部回归器的情况下工作得很好。)
这里是问题的完整重现:
import numpy as np
import pandas as pd
from statsmodels.tsa.statespace.sarimax import SARIMAX, SARIMAXResults
history = np.array([95818, 126537, 102856, 161188, 150539, 165138, 146603, 154334,
150875, 134049, 137822, 126369, 124641, 111735, 126453])
history_exog = np.array([11.9835, 12.1981, 11.7108, 10.8174, 9.48247, 8.49162, 8.15208, 7.81663,
8.22422, 9.9492, 10.8724, 10.9911, 9.55874, 6.67079, 3.13028])
future_exog = np.array([0.279386, -1.72252, -2.87699, -2.64897, -1.51616])
model = SARIMAX(history,
order=(1,0,0),
seasonal_order=(0,0,0,52),
exog = history_exog,
enforce_stationarity=False,
enforce_invertibility=False)
model_fit = model.fit(method = 'cg')
yhat = model_fit.predict(start = len(history),
end = len(history) + 5 - 1,
exog = future_exog)
model_fit.summary()
我得到的提前五步预测(yhat)如下:
- 138068
- 145810
- 149686
- 147245
- 140676
您可以在第一个预测中看到问题。给定模型参数,我本以为预测会是:
yhat(t+1) = (126453 x 0.9898) + (-4579.3944 x 0.279386) = 123883.76
我得到的预测是138068。
我哪里错了?或者这可能是一个错误?
SARIMAX model 的形式是“带 SARIMA 错误的回归”。例如,对于 ARX(1) 模型,这是:
y(t) = beta' x(t) + e(t)
e(t) = phi e(t-1) + z(t)
虽然您的预测方程对于以下形式的模型是准确的:
y(t) = beta' x(t) + phi y(t-1) + z(t)
如果您对 AR(p) 模型感兴趣(即不包含任何 MA 项),那么您可以使用 sm.tsa.AutoReg
,它就是那种形式。
我正在使用 Statsmodels 库在 Python 中构建时间序列模型。
当我对一个对象使用预测方法时,我似乎得到了错误的结果 具有外生回归变量的 SARIMAX 模型。 (预测方法似乎在没有外部回归器的情况下工作得很好。)
这里是问题的完整重现:
import numpy as np
import pandas as pd
from statsmodels.tsa.statespace.sarimax import SARIMAX, SARIMAXResults
history = np.array([95818, 126537, 102856, 161188, 150539, 165138, 146603, 154334,
150875, 134049, 137822, 126369, 124641, 111735, 126453])
history_exog = np.array([11.9835, 12.1981, 11.7108, 10.8174, 9.48247, 8.49162, 8.15208, 7.81663,
8.22422, 9.9492, 10.8724, 10.9911, 9.55874, 6.67079, 3.13028])
future_exog = np.array([0.279386, -1.72252, -2.87699, -2.64897, -1.51616])
model = SARIMAX(history,
order=(1,0,0),
seasonal_order=(0,0,0,52),
exog = history_exog,
enforce_stationarity=False,
enforce_invertibility=False)
model_fit = model.fit(method = 'cg')
yhat = model_fit.predict(start = len(history),
end = len(history) + 5 - 1,
exog = future_exog)
model_fit.summary()
我得到的提前五步预测(yhat)如下:
- 138068
- 145810
- 149686
- 147245
- 140676
您可以在第一个预测中看到问题。给定模型参数,我本以为预测会是:
yhat(t+1) = (126453 x 0.9898) + (-4579.3944 x 0.279386) = 123883.76
我得到的预测是138068。
我哪里错了?或者这可能是一个错误?
SARIMAX model 的形式是“带 SARIMA 错误的回归”。例如,对于 ARX(1) 模型,这是:
y(t) = beta' x(t) + e(t)
e(t) = phi e(t-1) + z(t)
虽然您的预测方程对于以下形式的模型是准确的:
y(t) = beta' x(t) + phi y(t-1) + z(t)
如果您对 AR(p) 模型感兴趣(即不包含任何 MA 项),那么您可以使用 sm.tsa.AutoReg
,它就是那种形式。