向大家致以诚挚的问候。我正在处理时间序列,并试图用 SARIMAX 预测它。
因为有许多变化可以调整变量 order (p, d, q) 和seasonal_order (P, D, Q, s) 的值。
我想知道,是否有一个库可以自动计算 order 和seasonal_order 变量的值?以获得最佳结果。
感谢您在这方面给我的帮助。谢谢。
向大家致以诚挚的问候。我正在处理时间序列,并试图用 SARIMAX 预测它。
因为有许多变化可以调整变量 order (p, d, q) 和seasonal_order (P, D, Q, s) 的值。
我想知道,是否有一个库可以自动计算 order 和seasonal_order 变量的值?以获得最佳结果。
感谢您在这方面给我的帮助。谢谢。
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))
在这里,您会找到有关该主题的专家,他们一定能够帮助您解决您正在寻找的问题。
该实现被称为 SARIMAX 而不是 SARIMA,因为在方法名称中添加“X”意味着该实现还支持外生变量。
这些是并行时间序列变量,不直接通过 AR、I 或 MA 过程建模,而是作为模型的加权输入提供。
外生变量是可选的,可以通过“exog”参数指定。
所以它们都有相同的基础(本质上)。
如何配置 SARIMA
配置 SARIMA 需要为系列的趋势和季节性元素选择超参数。
趋势元素
需要配置三个趋势元素。
它们与 ARIMA 模型相同;具体来说:
季节性元素
必须配置四个不属于 ARIMA 的季节性元素;他们是:
提前知道这一点......你可以使用包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 会很有趣。建议,看看哪个性能更好。