import optuna
from statsmodels.tsa.statespace.sarimax import SARIMAX
def objective(trial):
p = trial.suggest_int('p', 0, 2)
d = trial.suggest_int('d', 0, 2)
q = trial.suggest_int('q', 0, 2)
P = trial.suggest_int('P', 0, 2)
D = trial.suggest_int('D', 0, 2)
Q = trial.suggest_int('Q', 0, 2)
s = 12 # seasonal cycle length
model = SARIMAX(your_data, order=(p,d,q), seasonal_order=(P,D,Q,s))
model_fit = model.fit(disp=False)
return model_fit.aic # or other suitable criterion
study = optuna.create_study()
study.optimize(objective, n_trials=100) # adjust as needed
optimal_params = study.best_params
trial 인수는 optuna.trial.Trial의 인스턴스이다. 최적화 프로세스 중에 Optuna는 내부적으로 objective로 전달되는 trial 객체를 생성한다.
p = trial.suggest_int('p', 0, 2) 은 Optuna에게 SARIMA 모델의 매개변수 'p'에 대해 0과 2 사이의 정수를 제안하도록 요청한다.
return model_fit.aic는 모델의 Akaike Information Criterion을 반환한다. AIC는 모델의 복잡성을 고려하여 모델의 적합도를 측정한 것이다. Optuna는 시도를 통해 이 값을 최소화 하려고 노력할 것이다.
import logging
optuna.logging.get_logger("optuna").propagate = False