我对 Python 上的 ARIMA 模型有疑问。
首先,我有一个 Pandas 训练数据框。我的时间序列是固定的,我想尝试非常简单的模型 ARIMA(1,0,0)。为此,我运行此代码:
import statsmodels.tsa.arima.model as sta
arima = sta.ARIMA(df_train.values, order=(1,0,0))
arima_fit = arima.fit()
print(arima_fit.summary())
我有这个结果:
==============================================================================
Dep. Variable: y No. Observations: 48
Model: ARIMA(1, 0, 0) Log Likelihood -785.406
Date: Mon, 14 Feb 2022 AIC 1576.812
Time: 16:05:01 BIC 1582.425
Sample: 0 HQIC 1578.933
- 48
Covariance Type: opg
==============================================================================
coef std err z P>|z| [0.025 0.975]
------------------------------------------------------------------------------
const 2.742e+07 1.58e+06 17.300 0.000 2.43e+07 3.05e+07
ar.L1 0.6879 0.093 7.397 0.000 0.506 0.870
sigma2 9.61e+12 0.396 2.43e+13 0.000 9.61e+12 9.61e+12
===================================================================================
Ljung-Box (Q): 24.64 Jarque-Bera (JB): 36.88
Prob(Q): 0.97 Prob(JB): 0.00
Heteroskedasticity (H): 6.74 Skew: -0.99
Prob(H) (two-sided): 0.00 Kurtosis: 6.81
===================================================================================
由于我在时间序列中的值介于 2e7 和 3.5e7 之间,我认为 const 值不正确。
让我们尝试另一种方法:
import pmdarima as pm
model_auto = pm.auto_arima(df_train.values, start_p=1, start_q=0, max_p=1, max_q=0, d=0)
print(model_auto.summary())
当然,结果是 ARIMA(1,0,0),这就是结果:
SARIMAX Results
==============================================================================
Dep. Variable: y No. Observations: 48
Model: SARIMAX(1, 0, 0) Log Likelihood -785.413
Date: Mon, 14 Feb 2022 AIC 1576.827
Time: 12:00:34 BIC 1582.441
Sample: 0 HQIC 1578.948
- 48
Covariance Type: opg
==============================================================================
coef std err z P>|z| [0.025 0.975]
------------------------------------------------------------------------------
intercept 8.204e+06 6.69e-10 1.23e+16 0.000 8.2e+06 8.2e+06
ar.L1 0.7003 0.018 39.941 0.000 0.666 0.735
sigma2 9.61e+12 7.92e-17 1.21e+29 0.000 9.61e+12 9.61e+12
===================================================================================
Ljung-Box (Q): 24.92 Jarque-Bera (JB): 34.80
Prob(Q): 0.97 Prob(JB): 0.00
Heteroskedasticity (H): 6.62 Skew: -0.97
Prob(H) (two-sided): 0.00 Kurtosis: 6.70
===================================================================================
这种方法似乎给出了很好的参数。实际上,常数项在 8e6 左右,预测值可以手动计算。从第一种方法开始,我不能这样做,因为对于 ARIMA(1,0,0),等式是:X_t = coef x X_{t-1} + cst。
假设 X_{t-1} = 3.1e7。
对于 sta.ARIMA 方法(第一个): X_t = 3.1e7*0.687 + 2.742e7 = 4.8717e7
对于 pm.auto_arima 方法(第二个): X_t = 3.1e7*0.7003 + 8.204e+06 = 2.99133e7
数据框不包括高于 3.5e7 的值。第一个预测值是错误的。
你有没有遇到过这个问题?