0

我对 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 的值。第一个预测值是错误的。

你有没有遇到过这个问题?

4

0 回答 0