def config_fn(trial):
candidate_lags = [
[1],
[13],
[1, 13],
range(1, 33),
]
lag_idx = trial.suggest_categorical('lag_idx', range(len(candidate_lags)))
candidate_lag_tfms = [
{
1: [RollingMean(window_size=13)]
},
{
1: [RollingMean(window_size=13)],
13: [RollingMean(window_size=13)],
},
{
13: [RollingMean(window_size=13)],
},
{
4: [ExpandingMean(), RollingMean(window_size=4)],
8: [ExpandingMean(), RollingMean(window_size=4)],
}
]
lag_tfms_idx = trial.suggest_categorical('lag_tfms_idx', range(len(candidate_lag_tfms)))
candidate_targ_tfms = [
[Differences([1])],
[LocalBoxCox()],
[LocalStandardScaler()],
[LocalBoxCox(), Differences([1])],
[LocalBoxCox(), LocalStandardScaler()],
[LocalBoxCox(), Differences([1]), LocalStandardScaler()],
]
targ_tfms_idx = trial.suggest_categorical('targ_tfms_idx', range(len(candidate_targ_tfms)))
return {
'model_params': {
'learning_rate': 0.05,
'objective': 'l1',
'bagging_freq': 1,
'num_threads': 2,
'verbose': -1,
'force_col_wise': True,
'n_estimators': trial.suggest_int('n_estimators', 10, 1000, log=True),
'num_leaves': trial.suggest_int('num_leaves', 31, 1024, log=True),
'lambda_l1': trial.suggest_float('lambda_l1', 0.01, 10, log=True),
'lambda_l2': trial.suggest_float('lambda_l2', 0.01, 10, log=True),
'bagging_fraction': trial.suggest_float('bagging_fraction', 0.75, 1.0),
'feature_fraction': trial.suggest_float('feature_fraction', 0.75, 1.0),
},
'mlf_init_params': {
'lags': candidate_lags[lag_idx],
'lag_transforms': candidate_lag_tfms[lag_tfms_idx],
'target_transforms': candidate_targ_tfms[targ_tfms_idx],
},
'mlf_fit_params': {
'static_features': ['unique_id'],
}
}
def loss(df, train_df):
return smape(df, models=['model'])['model'].mean()