您可以使用它来生成 和 的order
值seasonal_order
minimum AIC
。如果您知道 p,d 和 q 的范围,您可以自定义它。
import statsmodels.api as sm
import warnings
import itertools
# Define the d and q parameters to take any value between 0 and 1
q = d = range(0, 1)
# Define the p parameters to take any value between 0 and 3
p = range(0, 2)
# Generate all different combinations of p, q and q triplets
pdq = list(itertools.product(p, d, q))
# Generate all different combinations of seasonal p, q and q triplets
seasonal_pdq = [(x[0], x[1], x[2], 12) for x in list(itertools.product(p, d, q))]
warnings.filterwarnings("ignore") # specify to ignore warning messages
i = 0
AIC = []
SARIMAX_model = []
for param in pdq:
for param_seasonal in seasonal_pdq:
try:
i+=1
print('The iteration',i)
print('length of pdq',len(pdq))
print('length of seasonalpdq',len(seasonal_pdq))
mod = sm.tsa.statespace.SARIMAX(train_data,
order=param,
seasonal_order=param_seasonal,
enforce_stationarity=False,
enforce_invertibility=False)
results = mod.fit()
print('SARIMAX{}x{} - AIC:{}'.format(param, param_seasonal, results.aic), end='\r')
AIC.append(results.aic)
SARIMAX_model.append([param, param_seasonal])
except:
continue
print('The smallest AIC is {} for model SARIMAX{}x{}'.format(min(AIC), SARIMAX_model[AIC.index(min(AIC))][0],SARIMAX_model[AIC.index(min(AIC))][1]))
# Let's fit this model
mod = sm.tsa.statespace.SARIMAX(train_data,
order=SARIMAX_model[AIC.index(min(AIC))][0],
seasonal_order=SARIMAX_model[AIC.index(min(AIC))][1],
enforce_stationarity=False,
enforce_invertibility=False)