Slide 1

Slide 1 text

LightGBMTunerを使ってみた 2019年11月30日 (土) 分析コンペLT会 #1 wakame(@wakame1367)

Slide 2

Slide 2 text

自己紹介 ⚫ wakame(@wakame1367) ⚫ Kaggle Expert ⚫ スマホゲーム用のQA×AIツールの開発 ⚫ 最近はハマってることはVTuberとMTGAです 2

Slide 3

Slide 3 text

発表の流れ 3 1. LightGBMTunerとは 2. パラメータチューニング方法 3. Kaggleコンペでベンチマーク 4. まとめ 5. おまけ

Slide 4

Slide 4 text

4 LightGBMTunerとは

Slide 5

Slide 5 text

5 https://pydatatokyo.connpass.com/event/141272/

Slide 6

Slide 6 text

6 https://pydatatokyo.connpass.com/event/141272/

Slide 7

Slide 7 text

7 https://www.slideshare.net/pfi/pydatatokyo-meetup-21-optuna P1

Slide 8

Slide 8 text

8 https://www.slideshare.net/pfi/pydatatokyo-meetup-21-optuna P60

Slide 9

Slide 9 text

9 https://www.slideshare.net/pfi/pydatatokyo-meetup-21-optuna P62

Slide 10

Slide 10 text

Kaggle Days in Paris CPMP talk 10 ⚫ Don't ovetune your parameters: do it once, maybe twice in a competition, no more. ⚫ For XGBoost / LightGBM ⚫ Start with subsample=0.7, leave other values to default ⚫ Play with min_child_weight: increase it if train/val gap is large ⚫Then tune max_depth or num_of_leaves ⚫Add regularization if LB Score is way below CV https://www.youtube.com/watch?time_continue=1018&v=VC8Jc9_lNoY&feature=emb_title

Slide 11

Slide 11 text

Kaggle Days in Paris CPMP talk 11 ⚫ パラメータ調整のしすぎはダメ: コンペ中にやるとしても1回・2回 ⚫ For XGBoost / LightGBM ⚫ まずはsubsample=0.7で他はデフォルトのまま ⚫ min_child_weightはtrain/valの差が大きいなら増やそう ⚫その後max_depth or num_of_leavesを調整 ⚫もしLBがCVより低いなら正則化(L1/L2)を強めにかける https://www.youtube.com/watch?time_continue=1018&v=VC8Jc9_lNoY&feature=emb_title

Slide 12

Slide 12 text

少しまとめ 12 ⚫ LightGBMTunerって誰向けのツール? ⚫ ハイパラどうチューニングするの?という人向け ⚫ LightGBMTunerって何ができるのか ⚫ チューニング初心者でも経験則的に良いチューニング方 法をお試しできる

Slide 13

Slide 13 text

13 パラメータチューニング方法

Slide 14

Slide 14 text

14 https://www.slideshare.net/pfi/pydatatokyo-meetup-21-optuna P62

Slide 15

Slide 15 text

チューニング対象のパラメータと探索範囲 15 ⚫ feature_fraction ⚫ lambda_l1/lambda_l2 ⚫ num_leaves ⚫ min_child_samples ⚫ bagging_fraction ⚫ bagging_freq https://github.com/optuna/optuna/blob/master/optuna/integration/lightgbm_tuner/optimize.py#L201-L225

Slide 16

Slide 16 text

チューニング対象のパラメータと探索範囲 16 ⚫ feature_fraction: min(trial.suggest_uniform('feature_fraction', 0.4, 1.0 + EPS), 1.0) ⚫ lambda_l1/lambda_l2: trial.suggest_loguniform('lambda_l1', 1e-8, 10.0) ⚫ num_leaves: trial.suggest_loguniform('lambda_l2', 1e-8, 10.0) ⚫ min_child_samples: trial.suggest_int('num_leaves', 2, 2 ** max_depth) ⚫ bagging_fraction: min(trial.suggest_uniform('bagging_fraction', 0.4, 1.0 + EPS), 1.0) ⚫ bagging_freq: trial.suggest_int('bagging_freq', 1, 7) 注) maxdepth = 8, EPS=1e-12 https://github.com/optuna/optuna/blob/master/optuna/integration/lightgbm_tuner/optimize.py#L201-L225

Slide 17

Slide 17 text

17 https://www.slideshare.net/pfi/pydatatokyo-meetup-21-optuna P62

Slide 18

Slide 18 text

チューニング方法 18 1. feature_fraction 2. num_leaves 3. bagging_freq/bagging_fraction 4. feature_fraction 5. lambda_l1/lambda_l2 6. min_child_samples

Slide 19

Slide 19 text

19 https://www.slideshare.net/pfi/pydatatokyo-meetup-21-optuna P23

Slide 20

Slide 20 text

チューニング方法 20 1. feature_fraction: _GridSamplerUniform1D 2. num_leaves: TPESampler 3. bagging_freq/bagging_fraction: TPESampler 4. feature_fraction: _GridSamplerUniform1D 5. lambda_l1/lambda_l2: TPESampler 6. min_child_samples: _GridSamplerUniform1D

Slide 21

Slide 21 text

21 https://github.com/optuna/optuna/blob/master/optuna/integration/lightgbm_tuner/optimize.py#L36-L64

Slide 22

Slide 22 text

疑問点 22 ⚫ パラメータや探索範囲はどうやって決めているのか?

Slide 23

Slide 23 text

optunaのissueを覗く 23 https://github.com/optuna/optuna/issues/new?assignees=&labels=question&template=questions-help-support.md&title=

Slide 24

Slide 24 text

optunaのissueを覗く 24 https://github.com/optuna/optuna/issues/new?assignees=&labels=question&template=questions-help-support.md&title=

Slide 25

Slide 25 text

開発者様の回答 25 ⚫ パラメータの探索範囲については経験則から決定してい るため、参考文献などはないです。ベンチマークを行い 具体的な根拠を示したり、あるいはユーザーが探索範囲を 指摘できるよう改修することで更に改良できれば良いと 考えています。参考までに AutoML 5 での上位チームの パラメータ探索範囲を紹介します。 https://github.com/pfnet-research/KDD-Cup-AutoML-5/blob/master/optable_submission/optable_packa ge/optable/learning/optuna_hyper_params_searcher.py#L108 https://github.com/DeepBlueAI/AutoSmart/blob/master/auto_smart/auto_smart/automl/auto_lgb.py#L290

Slide 26

Slide 26 text

26 Kaggleコンペでベンチマーク

Slide 27

Slide 27 text

ベンチマーク結果 27 ⚫ Kaggleの過去コンペを対象 ⚫ テーブルデータのみ ⚫ 公開カーネルの結果とチューンした結果を比較 ⚫ Private/Publicスコアをベンチマーク対象

Slide 28

Slide 28 text

28 https://www.slideshare.net/pfi/pydatatokyo-meetup-21-optuna P63

Slide 29

Slide 29 text

ベンチマーク結果 29 ⚫ Kaggle: Elo Merchant Category Recommendation ⚫ Metric: Root Mean Squared Error (RMSE) ⚫ オリジナルスコア(https://www.kaggle.com/konradb/lgb-fe-lb-3-707?scriptVersionId=8086782) ⚫ Private: 3.63111 ⚫ Public: 3.70799 ⚫ Tunedスコア(https://www.kaggle.com/wakamezake/lgb-fe-lb-3-707-with-lightgbmtuner) ⚫ Private: 3.62932(0.00179 down) ⚫ Public: 3.71041(0.00242 up)

Slide 30

Slide 30 text

ベンチマーク結果 30 ⚫ Kaggle: Recruit Restaurant Visitor Forecasting ⚫ Metric: Root Mean Squared Logarithmic Error(RMSLE) ⚫ オリジナルスコア(https://www.kaggle.com/meli19/py-single-light-gbm-lb-0-521) ⚫ Private: 0.54098 ⚫ Public: 0.52193 ⚫ Tunedスコア(https://www.kaggle.com/wakamezake/single-lightgbmtuner) ⚫ Private: 0.53430(0.00668 down) ⚫ Public: 0.51146(0.01047 down)

Slide 31

Slide 31 text

31 まとめ

Slide 32

Slide 32 text

まとめ 32 ⚫ LightGBMTunerはチューニング初心者向けのツール ⚫ 現在のLightGBMTunerのチューニング方法は開発者の 経験則によるもの ⚫ ベンチマーク結果を見るとKaggleコンペでも使えそう?

Slide 33

Slide 33 text

33 おまけ

Slide 34

Slide 34 text

34 https://twitter.com/Y_oHr_N/status/1179926110588399616?s=20

Slide 35

Slide 35 text

ご清聴ありがとうございました 35