SARIMAX 模型需要 q、d、q、m 参数才能正常运行。
- P 代表 AutoRegressive 模型的阶数,可以使用 PACF 图进行光学估计
- D 代表使时间序列静止的差异数,可以使用 adfuller 测试来估计,同时进行差异循环直到它变得静止。
- Q 代表 MovingAverage 模型的阶数,可以使用 ACF 图进行光学估计。
- M 代表表示季节性的周期数,可以使用seasonal_decompose 函数进行光学估计。
通常,如下所示的自定义 SARIMAX Grid CV 能够找到最佳参数集。
p = range(min_series_p, max_series_p+1)
d = range(min_series_d, max_series_d+1)
q = range(min_series_q, max_series_q+1)
matrix = list(it.product(p, d, q))
pdq = [(x[0], x[1], x[2]) for x in matrix]
pdq_s = [(x[0], x[1], x[2], sts_series_s) for x in matrix]
for param in pdq:
for param_s in pdq_s:
if param[0] == param_s[0] and param[1] == param_s[1] and param[2] == param_s[2]:
mod = SARIMAX(ts.to_numpy(), order=param, seasonal_order=param_s)
model_fit = mod.fit(iprint=0, disp=0, method_kwargs={"warn_convergence": False})
我想知道是否有任何方法可以以编程方式提取 p、q、m 值甚至它们的范围以减少网格,从而减少寻找最佳模型顺序的处理时间。
min_series_p = method()?
max_series_p = method()?
min_series_q = method()?
max_series_q = method()?
sts_series_m = method()?
有任何想法吗?