0

向大家致以诚挚的问候。我正在处理时间序列,并试图用 SARIMAX 预测它。

因为有许多变化可以调整变量 order (p, d, q) 和seasonal_order (P, D, Q, s) 的值。

我想知道,是否有一个库可以自动计算 order 和seasonal_order 变量的值?以获得最佳结果。

感谢您在这方面给我的帮助。谢谢。

4

2 回答 2

1

Jason Brownlee 博士,在他的页面https://machinelearningmastery.com上。我在 python 中发布可以为您服务的代码,它本身不是一个库,但也许它可以作为您正在寻找的东西的一种缓解。

您也可以推断这个想法(它在 SARIMA 中使用),但是通过一些更改和计算误差,它可能很有用。

SARIMA 到时间序列预测部分,您修改部分代码,它应该如下所示:

p = d = q = P = D = Q = s = range(0, 2)
pdqPDQs = list(itertools.product(p, d, q, P, D, Q, s))

在这里,您会找到有关该主题的专家,他们一定能够帮助您解决您正在寻找的问题。

于 2021-07-11T01:37:16.893 回答
0

该实现被称为 SARIMAX 而不是 SARIMA,因为在方法名称中添加“X”意味着该实现还支持外生变量。

这些是并行时间序列变量,不直接通过 AR、I 或 MA 过程建模,而是作为模型的加权输入提供。

外生变量是可选的,可以通过“exog”参数指定。

所以它们都有相同的基础(本质上)。

如何配置 SARIMA

配置 SARIMA 需要为系列的趋势和季节性元素选择超参数。

趋势元素

需要配置三个趋势元素。

它们与 ARIMA 模型相同;具体来说:

  • p:趋势自回归顺序。
  • d:趋势差序。
  • q:趋势移动平均订单。

季节性元素

必须配置四个不属于 ARIMA 的季节性元素;他们是:

  • P:季节性自回归顺序。
  • D:季节性差异顺序。
  • 问:季节性移动平均订单。
  • m:单个季节性周期的时间步数。

提前知道这一点......你可以使用包pmdarima

import numpy as np
import pandas as pd
from pmdarima import auto_arima

datos = [21.5294, 21.5228, 21.5289, 21.5096, 21.506, 21.5119, 21.5173, 21.5308, 21.5355, 21.5181, 21.5, 21.4972, 21.5067, 21.5149, 21.4994, 21.4967, 21.4774, 21.4662, 21.4752, 21.4858, 21.4581, 21.4398, 21.4385, 21.4471, 21.4399, 21.444, 21.4555, 21.4366, 21.4402, 21.4371, 21.4317, 21.4342, 21.411, 21.4174, 21.4149, 21.4151, 21.4186, 21.4411, 21.4569, 21.4628, 21.448, 21.4468, 21.4357, 21.4329, 21.4543, 21.4429, 21.4478, 21.4423, 21.4536, 21.4416, 21.4384, 21.4378, 21.4622, 21.4413, 21.4315, 21.4419, 21.4323, 21.429, 21.4103, 21.4194, 21.4364, 21.4245, 21.4348, 21.4276, 21.4113, 21.4235, 21.407, 21.412, 21.4263, 21.431, 21.4362, 21.432, 21.4445, 21.4487, 21.4623, 21.4766, 21.4785, 21.4891, 21.4869, 21.4903, 21.4839, 21.4856, 21.4909, 21.5048, 21.5005, 21.4905, 21.4906, 21.4914, 21.5052, 21.4898, 21.5232, 21.5234, 21.5086, 21.5108, 21.5017, 21.5141, 21.5055, 21.4953, 21.4618, 21.4504, 21.4667, 21.4602, 21.453, 21.4497, 21.4446, 21.4308, 21.4347, 21.4512, 21.4675, 21.4675, 21.465, 21.4624, 21.4682, 21.472, 21.4632, 21.4644, 21.4615, 21.4604, 21.4679, 21.4672]

indice = pd.date_range("2020-10-31 23:57:00", periods=len(datos), freq="T")

Data = pd.Series(data=datos, index=indice)
        
Data = datos.asfreq(freq='T')
   

model_fit = auto_arima(Data, start_p=0, max_p=6, start_q=0, max_q=3, seasonal=False, trace=True)

model_fit.summary()

你会得到以下结果...

Performing stepwise search to minimize aic
 ARIMA(0,0,0)(0,0,0)[0]             : AIC=1078.473, Time=0.01 sec
 ARIMA(1,0,0)(0,0,0)[0]             : AIC=inf, Time=0.18 sec
 ARIMA(0,0,1)(0,0,0)[0]             : AIC=inf, Time=0.11 sec
 ARIMA(1,0,1)(0,0,0)[0]             : AIC=-707.310, Time=0.22 sec
 ARIMA(2,0,1)(0,0,0)[0]             : AIC=inf, Time=0.68 sec
 ARIMA(1,0,2)(0,0,0)[0]             : AIC=-653.211, Time=0.27 sec
 ARIMA(0,0,2)(0,0,0)[0]             : AIC=inf, Time=0.19 sec
 ARIMA(2,0,0)(0,0,0)[0]             : AIC=inf, Time=0.16 sec
 ARIMA(2,0,2)(0,0,0)[0]             : AIC=-678.058, Time=0.47 sec
 ARIMA(1,0,1)(0,0,0)[0] intercept   : AIC=-720.672, Time=1.13 sec
 ARIMA(0,0,1)(0,0,0)[0] intercept   : AIC=-590.239, Time=0.17 sec
 ARIMA(1,0,0)(0,0,0)[0] intercept   : AIC=-722.662, Time=0.14 sec
 ARIMA(0,0,0)(0,0,0)[0] intercept   : AIC=-475.518, Time=0.06 sec
 ARIMA(2,0,0)(0,0,0)[0] intercept   : AIC=-720.684, Time=0.16 sec
 ARIMA(2,0,1)(0,0,0)[0] intercept   : AIC=-719.641, Time=0.58 sec



                               SARIMAX Results                                
==============================================================================
Dep. Variable:                      y   No. Observations:                  120
Model:               SARIMAX(1, 0, 0)   Log Likelihood                 364.331
Date:                Sat, 10 Jul 2021   AIC                           -722.662
Time:                        21:27:20   BIC                           -714.299
Sample:                             0   HQIC                          -719.266
                                - 120                                         
Covariance Type:                  opg                                         
==============================================================================
                 coef    std err          z      P>|z|      [0.025      0.975]
------------------------------------------------------------------------------
intercept      1.6975      0.648      2.618      0.009       0.427       2.968
ar.L1          0.9209      0.030     30.503      0.000       0.862       0.980
sigma2         0.0001   1.72e-05      7.758      0.000    9.95e-05       0.000
===================================================================================
Ljung-Box (L1) (Q):                   0.02   Jarque-Bera (JB):                 0.03
Prob(Q):                              0.88   Prob(JB):                         0.99
Heteroskedasticity (H):               0.84   Skew:                            -0.00
Prob(H) (two-sided):                  0.57   Kurtosis:                         3.08
===================================================================================


>>> model_fit.order
(1, 0, 0)

>>> model_fit.seasonal_order
(0, 0, 0, 0)

我希望这是您正在寻找的内容,并希望它对您有用。

比较这个包和@Federica_F 会很有趣。建议,看看哪个性能更好。

于 2021-07-11T02:48:37.050 回答