SlideShare a Scribd company logo
MIRU 2020 Tutorial
加納龍一
勾配ブースティングの基礎と最新の動向
2
▪ 加納龍一 (かのうりゅういち)
▪ Mobility Technologiesて、交通システムの最適化に従事 (DeNAより出向)
▪ 機械学習システムの社会実装
自己紹介
3
▪ 弱学習器が誤差に対して順次fitしていく学習方法
▪ ひとつの強いモデルを作らず、シンプルな複数のモデルを組み合わせて強力なものにする
Gradient Boosting(勾配ブースティング)とは?
残差
残差
残差
残差
iter=1
iter=2
iter=3
iter=4
iter=5
弱学習器の和で構成される最終出力
Friedman論文:https://statweb.stanford.edu/~jhf/ftp/stobst.pdf
4
▪ 決定木が弱学習器に採用されることが多い (制限はない)
▪ Gradient Boosting Decision Tree: GBDT
▪ XGBoost, LightGBM, CatBoostなどが有名。今日のチュートリアルのメインテーマ
Gradient Boosting(勾配ブースティング)とは?
https://www.kdd.org/kdd2016/papers/files/rfp0697-chenAemb.pdf (KDD2016)
5
GBDTの全体像
行・列のサンプリング
弱学習器の構築
iteration 1
残差の算出
行・列のサンプリング
弱学習器の構築
iteration 2
残差の算出
行・列のサンプリング
弱学習器の構築
iteration n
・・・
決定木の学習
https://algobeans.com/2016/07/27/decision-trees-tutorial/
6
▪ 圧倒的な実績を誇るアルゴリズムである
▪ 高精度、高速、結果の安定性…
▪ 社会実装されているアプリケーションも膨大
▪ 単体モデルとしての活用
▪ システムの要素技術としての活用(NASの1コンポーネントとするなど, https://arxiv.org/abs/2007.04785)
▪ 要素技術には、どんなモダリティにも活用のできる重要な観点が潜んでいる
▪ ニューラルネットワーク全盛期の今だからこそ、少し違う観点から考えるのも良いのでは
▪ 微分可能な決定木モデルへの緩和など、CV分野と直接繋がりのあるトピックも
なぜ勾配ブースティング(GBDT)のチュートリアル?
https://medium.com/syncedreview/tree-boosting-with-xgboost-why-
does-xgboost-win-every-machine-learning-competition-ca8034c0b283
項目
01|GBDTのアルゴリズム概要
02|機能拡張
03|実応用の際に注意する点やテクニック
・ 微分可能なモデルへの緩和
・ 解釈性の付与
・ 不確実性の推定
・ 高速性の追求
・ 決定木に限らない、様々な勾配ブースティング
・ XGBoost, LightGBM, CatBoost
・ なぜ決定木なのか
・ 特徴量エンジニアリング、Target Leakage、評価の汚染
7
8
01 GBDTのアルゴリズム概要
・ XGBoost, LightGBM, CatBoost
・ なぜ決定木なのか
基本的にはXGBoostを基盤として説明
LightGBM, CatBoostに限った機能は吹き出しをつけた
LightGBM CatBoost
9
▪ XGBoostを基準として、
▪ 学習速度を重視したLightGBM
▪ GOSS, EFB…
▪ 推論速度および汎化性能を重視したCatBoost
▪ Symmetric Tree, Ordered-TS, Ordered Boosting…
▪ (あくまで各種ライブラリはアルゴリズムの集合なので、一概には言いにくい)
ざっくりとライブラリを比較すると…
10
GBDTの全体像
行・列のサンプリング
弱学習器の構築
iteration 1
残差の算出
行・列のサンプリング
弱学習器の構築
iteration 2
残差の算出
行・列のサンプリング
弱学習器の構築
iteration n
・・・
決定木の学習
https://algobeans.com/2016/07/27/decision-trees-tutorial/
11
▪ 弱学習器の構築に用いる際は、全データを使わないことが多い
▪ 木単位、分岐単位など、様々な粒度で削減される
▪ サンプルそのものではなく、分岐に使用する特徴量の候補を削減するものもある
行・列のサンプリング
https://medium.com/greyatom/a-trip-to-random-forest-5c30d8250d6a
12
▪ Gradient-based One-Side Sampling (GOSS)
▪ 誤差の小さなサンプルを効率的に省き、学習に使用するレコード数を効率的に削減する
▪ gradientの絶対値のトップa×100%を使い、残りの(1-a)×100%から、ランダムにb×100%を選ぶ
▪ サンプリングされたgradientに(1-a)/bをかけて割り戻す
▪ Minimal Variance Sampling(MVS)という改良版もある (https://arxiv.org/abs/1910.13204, NeurIPS2019)
行・列のサンプリング
LightGBM
CatBoost
13
GBDTの全体像
行・列のサンプリング
弱学習器の構築
iteration 1
残差の算出
行・列のサンプリング
弱学習器の構築
iteration 2
残差の算出
行・列のサンプリング
弱学習器の構築
iteration n
・・・
決定木の学習
https://algobeans.com/2016/07/27/decision-trees-tutorial/
14
弱学習器の構築
① 分岐に使用するルールの探索
② 決定木の構造の決定
③ numericalでないデータをどう扱うか
要素
15
▪ 探索は基本的にはGreedyに行われる
▪ どの特徴量で分岐すれば良いか、どの値を分岐点とすれば良いか…
▪ 分岐前と分岐後の目的関数を比較し、最も効率の良い分岐で枝を作成していく
▪ 葉の中のサンプルのターゲットの平均値や中央値などが予測値となる *誤差関数に依存
分岐に使用するルールの探索
https://lightgbm.readthedocs.io/en/latest/Features.html
16
分岐探索の際に計算している内容の詳細
目的関数を最小化するよう、t番目のモデルを決定したい
i: 学習サンプルのインデックス
j: 決定木の葉のインデックス
T: 決定木の葉の総数
ω: 決定木の葉の予測値
誤差関数 正則化項目的関数
17
分岐探索の際に計算している内容の詳細
誤差関数部を、二次の項まで展開する
(一項目は定数になるので、最適化と関係なくなる)
定数
i: 学習サンプルのインデックス
j: 決定木の葉のインデックス
T: 決定木の葉の総数
ω: 決定木の葉の予測値
誤差関数 正則化項目的関数
ftに関して展開
18
分岐探索の際に計算している内容の詳細
ftに関して展開
定数
ftを、ωを使用して書き換え
i: 学習サンプルのインデックス
j: 決定木の葉のインデックス
T: 決定木の葉の総数
ω: 決定木の葉の予測値
誤差関数 正則化項
Ij (葉jに入った学習サンプルの集合)を用いて、ω(葉に入る予測値)の二次式として定式化
目的関数
19
分岐探索の際に計算している内容の詳細
ω(葉に入る予測値)で目的関数を微分して値がゼロになる場合が、最適な葉に入る予測値
目的関数
葉に入る予測値
https://www.kdd.org/kdd2016/papers/files/rfp0697-chenAemb.pdf
Lossの一階微分: Σ(2*[true-pred]) → 誤差の総和
Loss: Σ(true-pred)2
Lossの二階微分: Σ(-2) → サンプル数
20
分岐探索の際に計算している内容の詳細
Lsplit(分割によって得られるスコア)が最も大きくなるように、分岐を探索していく
分岐前 分岐後 左の葉 右の葉 分岐前
葉に入る予測値を目的関数に代入
分岐によって得られるスコア
分岐後の目的関数葉に入る予測値
21
▪ 先述した通りGradientとHessianが求まれば学習は進められる
▪ それらの両方を自分で実装して渡してやれば、任意の目的関数を用いて学習ができる
▪ Hessianまで必要というのは、ニューラルネットワークとの大きな違いのように思う
分岐探索の際に計算している内容の詳細
こんな感じの関数を学習時に渡す。(学習のコアアルゴリズムはC++で書かれているので、そこは少しいじりにくい)
https://github.com/dmlc/xgboost/blob/master/demo/guide-python/custom_objective.py
22
▪ Exact Greedy Search
▪ 特徴量ごとにデータをソートして、順番に分割点を確認
▪ O(特徴量数×データ数)
▪ Approximate Search
▪ 特徴量ごとにヒストグラムを作成し、bin単位で分割点を確認
▪ O(特徴量数×データ数) + O(特徴量数×bin数)
分岐探索の高速化
ヒストグラム作成 分割点の確認
※ ヒストグラム作成にかかる単体時間は短いので、結果的にこちらのほうが早い
分割点の確認
23
▪ Exclusive Feature Bundling (EFB)
▪ 排他な特徴量をまとめることで、binningする特徴量数を削減
▪ 分割点の探索にはbundlingされていない特徴量を用いるので、原理的に精度は変わらない
▪ Bundleを探す処理が別途必要となるが、最初に一回やるだけなので問題ない
分岐探索の高速化
Binningの計算量オーダー
approx search O(データ数 × 特徴量数)
approx search + EFB O(データ数 × 削減後の特徴量数)
排他
LightGBM
https://papers.nips.cc/paper/6907-lightgbm-a-highly-efficient-gradient-boosting-decision-tree.pdf (NIPS2017)
24
▪ 決定木の形を決定する上での制限がいくつか存在
▪ 木の深さ、葉の数、葉の中に入るデータ数の最小値など
どのような形を持つ決定木へと成長させるか
XGBoostのパラメータ例
https://xgboost.readthedocs.io/en/latest/parameter.html
25
▪ CatBoost: symmetric tree growth (分岐ルールが深さごとに共通)
▪ XGBoost: level-wise tree growth (基準)
▪ LightGBM: leaf-wise tree growth (深さを揃えず、枝ごとにどんどん深く)
どのような形を持つ決定木へと成長させるか
▪ ライブラリごとに、形の制限が異なり特徴的
26
▪ Symmetric Tree
▪ 全データに対して共通の処理を行えるので、並列化効率がとても高い
▪ 表現力が下がるのだが、アンサンブル学習の恩恵で経験的にはある程度うまく行く
どのような形を持つ決定木へと成長させるか
CatBoost
leaf1 leaf2 leaf3 leaf4
Rule@depth1
= True
Rule@depth1
= False
Rule@depth2
= True
leaf1 leaf3
Rule@depth2
= False
leaf2 leaf4
27
どのような形を持つ決定木へと成長させるか
推論時間の比較 (CPU) GPUによる推論の高速化
https://github.com/catboost/catboost/blob/master/slides/2019_icml_expo/2019_icml_expo.pdf
※ライブラリ間の結果の相対関係は経験的には変わらないように感じるが、設定によって程度は変化するので注意
predictiontime(s)
Dataset1 Dataset2
28
▪ NNに関しては、Entity Embedding(One-Hot + FC)が有名
▪ 一方、GBDTはE2Eで学習できないので、単純にこの手法を採用できない
▪ また、決定木はOne-Hotと相性が悪いので、別の方法を考える必要がある
▪ 訓練誤差最小化の観点で好ましい分割は、ラベルの大小で2つのグループに分けるようなもの
▪ カテゴリ数が増えるとOne-Hotではその分だけ木が深くなってしまい、木が勿体無い
モデル内でのカテゴリ特徴量作成
https://github.com/Laurae2/CategoricalAnalysis
29
Target Encoding
30
▪ 分岐ごとにTarget Encodingを行う
▪ Target Encoding: カテゴリごとのTargetの平均値を特徴量として割り当てる手法
▪ 場合によっては深刻なTarget Leakageが発生(右図)
▪ 訓練データそのもののTargetを学習に使用してしまっているため
▪ 実際、カテゴリ変数がかなり分岐に使用されやすくなる (≠汎化)
モデル内でのカテゴリ特徴量作成
https://github.com/Microsoft/LightGBM/issues/1934
https://www.slideshare.net/RyuichiKanoh/lightgbm-124545133
Target Feature
A 1 1.00
B 0 0.00
C 1 1.00
LightGBM
31
▪ ランダムソートを使用し、Target Encodingを改良
▪ Ordered TS (TS: Target Statistics)
▪ 決定木ごとにデータをランダムにソートする
▪ 各サンプルのカテゴリが、順列に沿いながらTarget Encodingされる (自データは含めない)
▪ 弱学習器ごとに順列は再生成されるため、全データを使いながらもLeakの影響が薄い
モデル内でのカテゴリ特徴量作成
カテゴリ y
Target
Encoding
Ordered TS
猫 1 0.5 0
犬 1 2/3 0
鳥 1 1 0
猫 0 0.5 1
犬 0 2/3 1
犬 1 2/3 0.5
https://arxiv.org/abs/1706.09516 (NeurIPS2018)
CatBoost
32
GBDTの全体像
行・列のサンプリング
弱学習器の構築
iteration 1
残差の算出
行・列のサンプリング
弱学習器の構築
iteration 2
残差の算出
行・列のサンプリング
弱学習器の構築
iteration n
・・・
決定木の学習
https://algobeans.com/2016/07/27/decision-trees-tutorial/
33
▪ 弱学習器の出力に学習率をかけたものとの差をとり残差を更新
▪ shrinkageと呼ばれたりもする。ニューラルネットワークの学習率と思想は同じ
▪ 前半に作成したモデルのみが重視されないよう、木を消しながら学習させる手法(DART)もある
残差の算出
34
▪ 先述したカテゴリ変数におけるTarget Leakageと似た現象は、
勾配ブースティングの残差計算にも起こりうるように思える
残差の算出
trainで木を作ったあとtrainで残差を見てるけど、
不当に残差を少なく見積もってしまうのでは?
正解データそのものを使った弱学習器で残差の更新をしてるんだよね? 勾配ブースティングの残差を見積もる意味では、
残差を算出するためのモデルは
推論に使う弱学習器の集合と別管理したいかもね。
35
▪ Ordered Boosting
▪ 残差を更新するためのモデルを、専用で別に学習させる。推論に使用するモデルは別に存在
▪ データの順列を木ごとにランダムに生成し、その順列に沿ってモデルを作成(下図参照)
▪ Ordered-TSと処理は似ている
残差の算出
サンプル7の残差計算に, サンプル7で学習したモデルを使っていない
サンプル6までを使用したモデル
https://arxiv.org/abs/1706.09516 (NeurIPS2018)
CatBoost
36
アルゴリズム比較表
model 成長戦略 高速化処理 カテゴリ変数処理 残差計算 訓練速度
(CPU/GPU)
推論速度
(CPU/GPU)
XGBoost Level-wise 基準
なし
(ユーザーが特徴量作成)
弱学習器により計算 △/◎ ○/◎
LightGBM Leaf-wise GOSS, EFB
分岐ごとに
Target Encoding
弱学習器により計算 ◎/◎ △/○
CatBoost Symmetric
MVS,
Symmetric Tree
弱学習器ごとに
Ordered TS
Ordered Boostingで作成された
残差算出用モデルより別途計算
△/◎ ◎/◎
*設定によって優劣は変化しうるので注意
37
01 GBDTのアルゴリズム概要
・ XGBoost, LightGBM, CatBoost
・ なぜ決定木なのか
38
▪ 特異な帰納的バイアス(inductive bias)を持つ
▪ 欠損値を扱いやすい
▪ 入力のスケーリングが不要
▪ ハイパーパラメータの変化に対して性能がロバストなことが多い
▪ 結果やモデルの解釈、解析の手法が多い
▪ Conditionalな演算の恩恵により、計算量が少ない
GBDTを使用するメリット
39
▪ 特異な帰納的バイアス(inductive bias)を持つ
▪ モデルが置いているデータに対する仮定は、MLPなどとは大きく異なる
▪ それにより、データによっては大きく性能が出ることがある。表形式データなどでは顕著
GBDTを使用するメリット[1]
http://www.mit.edu/~hazimeh/publication/tel/
https://www.cs.auckland.ac.nz/~pat/706_98/ln/node84.html
40
▪ 欠損値を扱いやすい
▪ 分岐を決定する際、欠損値を右に入れるか左に入れるか両方試せる
▪ 良かった方を”default direction”として、欠損値はそちらに流れるようにする
GBDTを使用するメリット[2]
https://www.kdd.org/kdd2016/papers/files/rfp0697-chenAemb.pdf
41
▪ 入力のスケーリングが不要
▪ 決定木が分岐さえできれば良いので、特徴量の大小順さえ合っていれば何でも良い
▪ 一方、線形演算が含まれるモデルでは、スケーリングはかなり重要
▪ 正規化のみでなく、対数スケーリングや、モデルのパラメータのスケールとの兼ね合いなども
GBDTを使用するメリット[3]
https://www.jeremyjordan.me/batch-normalization/
42
▪ ハイパーパラメータの変化に対して性能がロバストなことが多い
GBDTを使用するメリット[4]
XGBoost
MLP
ばらつき ~ 0.008
ばらつき ~ 0.040
43
▪ 結果やモデルの解釈、解析の手法が多い
▪ 学習により得られたモデルの特性の解析
▪ SHAPなど、木構造を生かしたモデル解析もできる
▪ 分岐に使われた回数を数えたりするのも直感的
▪ 複数の木を近似して一本にまとめる
▪ どのような判断根拠に基づいているのかがわかりやすい
GBDTを使用するメリット[5]
https://www.stat.berkeley.edu/~breiman/BAtrees.pdf
http://proceedings.mlr.press/v84/hara18a.html (AISTATS 2018) など
木をパースして、特徴ごとに推論結果をどのように動かしたのか計算
44
▪ Conditionalな演算の恩恵により、計算量が少ない
▪ サンプル単位で推論に要する計算量は、O(depth*n_tree)
▪ モデル全体を使ってひとつのサンプルを推論しているわけではない
GBDTを使用するメリット[6]
45
▪ 微分不可能な処理を含んでいることは、様々な自由度を奪っている
▪ 例えば、E2Eで特徴量を自ら作成するような機構はない
▪ 「探索」がアルゴリズムの根本にはあるため
▪ 画像や波形などに特化したNNと一緒にE2Eシステムへ組み込むことは難しい
▪ モデルの逐次更新なども行いにくい
GBDTを使用するデメリット
http://karpathy.github.io/2014/07/03/feature-learning-escapades/
46
02 機能拡張
・ 微分可能なモデルへの緩和
・ 解釈性の付与
・ 不確実性の推定
・ 高速性の追求
・ 決定木に限らない、様々な勾配ブースティング
47
決定木っぽい微分可能なモデルを作れないか?
(GBDT目線で) 解決したい点
• E2Eシステムとの親和性 (特徴量、ルール作成)
• モデル更新がやりにくい、 global refinementしにくい
(GBDT目線で) 引き継ぎたいもの
• Conditionalな演算
• 少ない計算量
• 階層的なデータ分割による解釈性
• 学習しながらモデルの構造が決まる仕組み
48
[1] 入力にフィルタをかける
[2] フィルタ後の特徴量にバイアスをかけ
[3] Sigmoid的な関数に通し、左右に分配される割合を算出
[4] その割合を葉の値に掛け合わせ足し合わせたものを出力とする
微分可能な決定木の例
Input: x
Leaf
value: rl
Inner Node
filter: w
bias: b
Leaf
value: rr
σ(wx + b)1 - σ(wx + b)
Output
[1 - σ(wx + b)]*rl + [σ(wx + b)]*rr
*学習パラメータ: w, b, r
https://arxiv.org/abs/1711.09784など
49
[1] 入力にフィルタをかける
[2] フィルタ後の特徴量にバイアスをかける
[3] Sigmoid的な関数に通し、左右に分配される割合を算出
[4] その割合を葉の値に掛け合わせ足し合わせたものを出力とする
微分可能な決定木の例
Input: x
Leaf
value: rl
Inner Node
filter: w
bias: b
Leaf
value: rr
σ(wx + b)1 - σ(wx + b)
Output
[1 - σ(wx + b)]*rl + [σ(wx + b)]*rr
*学習パラメータ: w, b, r
特徴選択
https://arxiv.org/abs/1711.09784など
50
[1] 入力にフィルタをかける
[2] フィルタ後の特徴量にバイアスをかける
[3] Sigmoid的な関数に通し、左右に分配される割合を算出
[4] その割合を葉の値に掛け合わせ足し合わせたものを出力とする
微分可能な決定木の例
Input: x
Leaf
value: rl
Inner Node
filter: w
bias: b
Leaf
value: rr
σ(wx + b)1 - σ(wx + b)
Output
[1 - σ(wx + b)]*rl + [σ(wx + b)]*rr
*学習パラメータ: w, b, r
分岐点の探索
https://arxiv.org/abs/1711.09784など
51
[1] 入力にフィルタをかける
[2] フィルタ後の特徴量にバイアスをかける
[3] Sigmoid的な関数に通し、左右に分配される割合を算出
[4] その割合を葉の値に掛け合わせ足し合わせたものを出力とする
微分可能な決定木の例
Input: x
Leaf
value: rl
Inner Node
filter: w
bias: b
Leaf
value: rr
σ(wx + b)1 - σ(wx + b)
Output
[1 - σ(wx + b)]*rl + [σ(wx + b)]*rr
*学習パラメータ: w, b, r
データ分割
https://arxiv.org/abs/1711.09784など
52
[1] 入力にフィルタをかける
[2] フィルタ後の特徴量にバイアスをかける
[3] Sigmoid的な関数に通し、左右に分配される割合を算出
[4] その割合を葉の値に掛け合わせ足し合わせたものを出力とする
微分可能な決定木の例
Input: x
Leaf
value: rl
Inner Node
filter: w
bias: b
Leaf
value: rr
σ(wx + b)1 - σ(wx + b)
Output
[1 - σ(wx + b)]*rl + [σ(wx + b)]*rr
*学習パラメータ: w, b, r
葉に入る予測値の算出
https://arxiv.org/abs/1711.09784など
53
▪ 木の構造そのものを学習させながら決めていってもよい
▪ 特徴量の変換を行うか、分岐を行うか、、など
構造の学習
https://arxiv.org/abs/1807.06699 (ICML2019)
54
学習済みモデルの例
https://icml.cc/media/Slides/icml/2019/grandball(12-16-00)-12-16-20-4490-adaptive_neural.pdf
55
学習済みモデルの例
https://arxiv.org/abs/1711.09784 (CEX2017)
56
▪ 分岐はスパース(どちらかの枝に100%入るよう)にしたい
▪ 左右分配の割合を決める際に使用するsigmoidを0, 1を厳密にとるようなものに修正
▪ 学習が進むにつれ分岐がスパースになっていき、好ましい状況が得られる
処理量の削減 (Conditionalな演算)
0.90.1
0.4 0.60.7 0.3
0.9 0.1 0.5 0.50.2 0.8 0.5 0.5
1.00.0
1.0 0.0
1.0 0.0
https://arxiv.org/abs/2002.07772 (ICML2020)
γ
57
▪ Conditionalな演算は、様々な応用先で重要なコンポーネント
▪ 大きな表現力と処理量とのトレードオフを考える際のアプローチのひとつ
▪ 例えば、最近話題になった6000億パラメータの言語モデルの重要な技術要素
▪ https://arxiv.org/abs/2006.16668 (2020, preprint)
処理量の削減 (Conditionalな演算, 少し余談)
https://arxiv.org/abs/1701.06538 (ICLR2017)
58
▪ 分岐のルールを深さごとに同一のものとする(CatBoostを踏襲)
▪ スパースにせずとも、分岐判定の回数を分岐数(2d)から木の深さ(d)まで落とせる
処理量の削減 (分岐のルールを共通化する)
同じルール
同じルール
https://arxiv.org/abs/1909.06312 (ICLR2020)
59
▪ 特徴を選ぶフィルタ(w)も、スパースな特性を持つ関数に通す
▪ 数個の特徴量のみが分岐に考慮されるようにする (帰納的バイアスとしても働く)
処理量の削減 (分岐判定に使われる特徴量を減らす)
https://arxiv.org/abs/1909.06312 (ICLR2020)
60
▪ 並べて平均をとっても良いし、Skip-connectionを入れても良い
▪ 前段の木の出力を次の木の入力に加えても良い
アンサンブル学習
https://arxiv.org/abs/1909.06312 (ICLR2020)
61
性能
・ 特異な帰納的バイアスを持ち、E2Eの機構に組み込め、オンライン更新も容易なので、幾らか価値はありそう
・ (一概な比較は難しいが)同等の性能をもつDense-layerと比較すると、パラメータ数も減るという報告も
62
▪ 色々なものが使えるようになってきつつある
▪ Tree Ensemble layer
▪ https://github.com/google-research/google-research/tree/master/tf_trees
▪ NODE (Neural Oblivious Decision Ensembles)
▪ https://github.com/Qwicen/node
▪ TabNet
▪ https://github.com/google-research/google-research/tree/master/tabnet
▪ https://github.com/dreamquark-ai/tabnet
▪ など。他にも多数
実装
63
▪ 一度学習させた木モデルの情報を、微分可能なモデルに蒸留
▪ 出力値のみでなく、例えば決定木の構造や使用した特徴量の情報などもうまく伝える
▪ DeepGBM(LightGBMの開発者が発表して一瞬話題になった)と呼ばれる手法はこれに該当
▪ https://dl.acm.org/doi/10.1145/3292500.3330858 (KDD2019)
他のアプローチ
64
02 機能拡張
・ 微分可能なモデルへの緩和
・ 解釈性の付与
・ 不確実性の推定
・ 高速性の追求
・ 決定木に限らない、様々な勾配ブースティング
65
▪ 以下では、決定木の構造を活かした大きく2つのテーマを扱う
▪ 重要な特徴量の提示
▪ 複数の決定木を意味合いの理解しやすい別の形で表現する
解釈性
66
▪ 以下では、決定木の構造を活かした大きく2つのテーマを扱う
▪ 重要な特徴量の提示
▪ 複数の決定木を意味合いの理解しやすい別の形で表現する
解釈性
67
▪ Gain
▪ 分岐による目的関数の減少度合いをモデル全体で特徴ごとに集計する
▪ Split count
▪ 分岐に使用された回数をモデル全体で特徴ごとに数えあげる
▪ Permutation
▪ 対象の特徴量をシャッフルした上で推論し、それらの出力の差を尺度とする
特徴量重要度(モデルごとに定義されるもの)
https://www.kaggle.com/ruruamour
/permutation-importance
68
▪ MSE(モデルなし):
▪ (80-20)2+(0-20)2+(0-20)2+(0-20)2 = 4800
▪ MSE(Feverを使用):
▪ (80-40)2+(0-40)2+(0-0)2+(0-0)2 = 3200
▪ MSE(FeverとCoughを使用):
▪ (80-80)2+(0-0)2+(0-0)2+(0-0)2 = 0
Gainの計算例
データは全ての葉に均等に割り当てられているとする
*左下の0/0の分岐は、小さなターゲットが丸められているとする
Gain(Fever): 4800 - 3200 = 1600
Gain(Cough): 3200 - 0 = 3200
69
▪ MSE(モデルなし):
▪ (90-25)2+(10-25)2+(0-25)2+(0-25)2 = 5700
▪ MSE(Coughを使用):
▪ (90-50)2+(10-50)2+(0-0)2+(0-0)2 = 3200
▪ MSE(FeverとCoughを使用):
▪ (80-80)2+(0-0)2+(0-0)2+(0-0)2 = 0
Gainの計算例
データは全ての葉に均等に割り当てられているとする
*左下の0/0の分岐は、小さなターゲットが丸められているとする
Gain(Fever): 3200 - 0 = 3200
Gain(Cough): 5700 - 3200 = 2500
70
▪ 冷静に木を眺めてみると、通るpathによって重要な特徴は変わるように思う
▪ モデル全体ではなく、サンプル単位で定義可能な重要度の指標を作りたい
GlobalとLocal
71
▪ Saabas
▪ 分岐に使われた特徴ごとに、出力がどのように変わったかを集計
▪ 例えば右図におけるF=Y, C=Yのサンプルに着目すると、
▪ Cにより出力は25から50に変化 (Saabas[C] = 25)
▪ Fにより出力は50から90に変化 (Saabas[F] = 40)
特徴量重要度(サンプルごとに定義されるもの)
72
▪ LIME
▪ 説明したいデータの周辺からデータをサンプリングし、分類機を近似する局所的なモデルを作成
▪ 例えば局所的なモデルを線形モデルとし、その係数より重要度を判断する
特徴量重要度(サンプルごとに定義されるもの)
https://www.kdd.org/kdd2016/papers/files/rfp0573-ribeiroA.pdf (KDD2016)
73
▪ SHAP
▪ 協力ゲーム理論におけるシャープレイ値を特徴量ごとに算出
▪ 決定木の構造と非常に相性が良く、GBDTモデルに対してよく使われる
▪ 次ページより詳細に深掘り
特徴量重要度(サンプルごとに定義されるもの)
https://papers.nips.cc/paper/7062-a-unified-approach-to-interpreting-model-predictions (NIPS2017)
74
▪ 上図のようにA,B,C社が合併した際に、会社ごとの寄与度を計算する方法の一つ
▪ どの会社目線に立つかによって、言い分が変わってしまうことがある
▪ AにBCが上乗せされたのか、はたまたABにCが上乗せされたのか…
そもそもシャープレイ値とは?
現在の各社の利益
A社 5億円
B社 40億円
C社 55億円
2社合併時の利益
AB社 55億円
BC社 100億円
CA社 65億円
3社合併時の利益
ABC社 120億円
75
▪ 取りうる場合を全て列挙し、それらの貢献度の平均をとる
そもそもシャープレイ値とは?
合併順 A社の貢献 B社の貢献 C社の貢献 合計
A→B→C 5億円 50億円 65億円 120億円
A→C→B 5億円 55億円 60億円 120億円
B→A→C 15億円 40億円 65億円 120億円
B→C→A 20億円 40億円 60億円 120億円
C→A→B 10億円 55億円 55億円 120億円
C→B→A 20億円 45億円 55億円 120億円
平均(シャープレイ値) 12.5億円 47.5億円 60億円
シャープレイ値の総和は、ABC社の資産と必ず一致する
76
▪ 先ほどの例において、このように置き換えて考えてみる
▪ 各会社 ↔︎ モデルに入力される特徴量
▪ 合計金額 ↔︎ モデルの出力
▪ これができると、各特徴量が予測値をどう動かしたのかがサンプルごとにわかる
シャープレイ値を機械学習モデルでどのように考えるか
77
▪ 特徴量が2つの場合を考える
具体的な計算方法
Feature Combinations {} {F} {C} {F, C}
Sample (Fever=Yes, Cough=Yes)
78
▪ 全ての特徴量を考慮した場合は、そのまま葉の値が入る
具体的な計算方法
Feature Combinations {} {F} {C} {F, C}
Sample (Fever=Yes, Cough=Yes) 90
79
▪ 特徴量を全て考慮しない場合は、全ての葉の平均値となる
具体的な計算方法
Feature Combinations {} {F} {C} {F, C}
Sample (Fever=Yes, Cough=Yes) 25 90
80
▪ 特徴量が1つの場合も、同様の手順で考えていく
▪ 図はCoughのみ考慮
具体的な計算方法
Feature Combinations {} {F} {C} {F, C}
Sample (Fever=Yes, Cough=Yes) 25 50 90
81
▪ 特徴量が1つの場合も、同様の手順で考えていく
▪ 図はFeverのみ考慮
具体的な計算方法
Feature Combinations {} {F} {C} {F, C}
Sample (Fever=Yes, Cough=Yes) 25 45 50 90
82
具体的な計算方法
Feature Combinations {} {F} {C} {F, C}
Sample (Fever=Yes, Cough=Yes) 25 45 50 90
90 (=f(x))0 25 55
Fの影響 Cの影響
83
▪ 工夫すれば、計算をかなり削減できる
▪ 決定木をなぞっていった途中までの計算結果を保存しておけば、別の計算で応用が可能
▪ 木構造ゆえの恩恵
▪ 愚直にやるとO(T*L*2M)だが、O(T*L*D2)まで落とせる
▪ 指数オーダーだったものが指数オーダーでなくなっているので、かなり大きい
▪ 詳細:https://arxiv.org/abs/1802.03888 (ICML2017-WS)
高速化
T: 木の本数、L: 葉の個数、M: 特徴数 D: 木の深さ
84
▪ SHAPは、学習に使用していないデータに対しても計算できる
▪ 例えば分類問題で、特徴量ごとに正解に近づけるように予測値を動かしたかどうかを確認できる
▪ 逆方向に動かしているのであれば、その特徴量が悪さをしているということがわかる
▪ この情報は、metricのみを監視していても得ることは不可能な貴重なもの
応用: モデルの精度劣化の原因特定
とある特徴量のSHAP-loss
(下に行くほど、性能の向上に貢献)
https://www.nature.com/articles/s42256-019-0138-9 (Nature Machine Intelligence, 2020)
訓練期間
この特徴量のデータの特性が変わったことがわかる
85
▪ 差分を考える特徴量を工夫すれば、相互作用成分のみを抽出できる
相互作用の分解
*)
86
SHAPの実装
▪ https://github.com/slundberg/shapをpipで入れて使うことが多い
▪ 描画のメソッドも多く、使いやすい
▪ XGBoost, LightGBM, CatBoostなど、多くのモデルに対応
▪ これらをラップしたライブラリも多数。(https://github.com/interpretml/interpretなど)
87
▪ Force plot
SHAPの描画例
88
▪ Decision plot
SHAPの描画例
一本の線がひとつの推論対象のサンプル
89
▪ Summary plot
SHAPの描画例
モデル単位の特徴量重要度が小さかったとしても、
出力に大きな影響を大きい場合があることを知れる
90
▪ Summary plot
SHAPの描画例
91
▪ Dependence plot
SHAPの描画例
92
▪ 以下では、決定木の構造を活かした大きく2つのテーマを扱う
▪ 重要な特徴量の提示
▪ 複数の決定木を意味合いの理解しやすい別の形で表現する
解釈性 (再掲)
93
複数の決定木を一本の決定木に変換(近似)
論文:https://arxiv.org/abs/2003.11132 (ICML2020)など
実装:https://github.com/vidalt/BA-Trees
94
決定木を多項式で表現
https://papers.nips.cc/paper/9530-monoforest-framework-for-tree-ensemble-analysis (NeurIPS2019)
95
決定木を多項式で表現
https://papers.nips.cc/paper/9530-monoforest-framework-for-tree-ensemble-analysis (NeurIPS2019)
*CatBoostでは実装されており、すぐ使える
https://github.com/catboost/tutorials/blob/master/
model_analysis/monoforest_tutorial.ipynb
CatBoost
96
02 機能拡張
・ 微分可能なモデルへの緩和
・ 解釈性の付与
・ 不確実性の推定
・ 高速性の追求
・ 決定木に限らない、様々な勾配ブースティング
97
▪ 不確実性まで含めてわかると、実アプリケーションの幅が広がる
不確実性を含んだ回帰予測
https://stanfordmlgroup.github.io/projects/ngboost/
98
▪ 一言に不確実性といっても、様々な意味合いのものがある
▪ Aleatoric uncertainty: データ起因の不確実性
▪ 事象そのものを、入力データがどれだけ説明できるかに紐づく不確実さ
▪ 学習データが増えても改善しない (コイン投げの結果の不確実性をイメージするとわかりやすい)
▪ 有効な特徴量が追加できれば減少しうる
▪ Epistemic uncertainty: モデル起因の不確実性
▪ 訓練データに含まれないデータに対する不確実さ。観測したデータが少ない場合などには顕著
不確実性の分解
99
Segmentationにおける不確実性の分解例
https://arxiv.org/abs/1703.04977 (NeurIPS2017)
学習データにあまりないような例の場合には
Epistemic Uncertaintyが大きい
エッジ付近(そもそもわかりづらい)は
Aleatoric Uncertaintyが大きい
100
▪ Quantile regressionなどで、ある程度見積もることはできる
▪ 連続的な分布を見ることは厳しいが、複数回推論すれば大体の見積もりはできる
▪ 目的関数が変わるだけなので、GBDTライブラリには標準で実装されていることが多い
Aleatoric Uncertainty
https://lightgbm.readthedocs.io/en/latest/Parameters.html
101
▪ データの持つパラメトリックな分布の予測により推定
Aleatoric Uncertainty
https://arxiv.org/abs/1612.01474 (NIPS2017)
102
> データの持つパラメトリックな分布の予測により推定
▪ 同様のことは、勾配ブースティングで行うこともできる
▪ NGBoost(https://arxiv.org/abs/1910.03225, ICML2020)が最近少し話題になった
Aleatoric Uncertainty
103
▪ 分布パラメータを出力する学習は、普通にやってもうまく行かないことがある
▪ 自然勾配法を用いて残差を更新することがクリティカルであることが最近わかってきた
▪ スケールの違いのせいで、いくつかのパラメータのみが過剰に最適化されるような現象が抑制される
▪ 誤差更新幅のline-searchなど、細かい様々なテクニックも同時に導入
Aleatoric Uncertainty
通常の勾配法
自然勾配法
https://arxiv.org/abs/1910.03225, (ICML2020)
104
▪ 分布は必ずしも正規分布である必要はなく、任意に選べる
▪ LSS(location, scale, shape)を考慮したXGBoostLSSというライブラリが別途あったりもする
▪ https://github.com/StatMixedML/XGBoostLSS
Aleatoric Uncertainty
https://github.com/stanfordmlgroup/ngboost/tree/master/ngboost/distns
105
▪ 分散に対してのSHAP(特徴重要度の指標)を見たりするのは、有益なことがある
▪ 「どういったときの予測に自信がなくなるのか」が、ある程度わかる
Aleatoric UncertaintyとSHAP
平均 分散
https://github.com/stanfordmlgroup/ngboost/blob/master/examples/model_interpretation/SHAP_plots.ipynb
106
▪ SHAP(mean) vs SHAP(var)、色は特徴量の値
Aleatoric UncertaintyとSHAP
107
▪ 原理的には、モデルのパラメータの分布を考える必要がある
Epistemic Uncertainty
https://arxiv.org/abs/1505.05424 (ICML2015)
108
> 原理的には、モデルのパラメータの分布を計算する必要がある
▪ 従来の枠組みが使いやすいよう、様々な近似手法がとられる
▪ 例えば、Dropoutを使ったまま複数回推論を行い推論結果をサンプリングするMC-Dropout
Epistemic Uncertainty
https://arxiv.org/abs/1506.02142 (ICML2016)
109
▪ Epistemic Uncertaintyを測るためにサンプリングを行うのはスケールしにくい
▪ 大量にモデルを持ったり何度も推論を行うのは大変
▪ もともと勾配ブースティングはアンサンブル学習なので、弱学習器の出力を賢くサンプリングできるはず
▪ ノイズを残差に加えながら学習させていき、k番目ずつの弱学習器の出力をアンサンブルさせるなど
Boostingの特性の活用
https://arxiv.org/abs/2001.07248 (2020, preprint)
https://arxiv.org/abs/2006.10562 (2020, preprint)regularization
Stochastic Gradient Langevin Boosting (SGLB)
サンプリングを避ける例:
https://arxiv.org/abs/1908.00598 (ICCV2019)
110
▪ ひとつの勾配ブースティングのモデルで、複数の不確実性を分解しながら予測
Boostingの特性の活用
*データ数は中心ほど多く、両端ほど少なくなっていく設定
データの分散が両端ほど大きく
データの分散が両端ほど小さく
(*Aleatoric)
(*Aleatoric) (*Epistemic)
(*Epistemic)
SGLBのk番目ずつの木の出力を用いた不確実性の分解
(最近Yandexのチームが頑張っているので、そのうちCatBoostに入るかも?)
111
02 機能拡張
・ 微分可能なモデルへの緩和
・ 解釈性の付与
・ 不確実性の推定
・ 高速性の追求
・ 決定木に限らない、様々な勾配ブースティング
112
▪ 決定木をTensor演算しやすいような表現に焼き直す
▪ 複数データをバッチ推論する際に並列化の恩恵を受けやすい
▪ モデルはpytorchなどのモデルに変換でき、エッジデバイスに最適化しやすい
モデル変換
https://github.com/microsoft/hummingbird
113
▪ 様々な変換戦略
モデル変換
https://adalabucsd.github.io/papers/TR_2019_Hummingbird.pdf (NeurIPS2019-WS)
114
▪ 様々な変換戦略
モデル変換
https://adalabucsd.github.io/papers/TR_2019_Hummingbird.pdf (NeurIPS2019-WS)
115
▪ 様々な変換戦略
モデル変換
https://adalabucsd.github.io/papers/TR_2019_Hummingbird.pdf (NeurIPS2019-WS)
116
▪ 一般的な木を、symmetric treeの集合に変換
▪ 決定木の多項式表現の応用
Symmetric tree構造へ無理やり焼き直す
https://papers.nips.cc/paper/9530-monoforest-framework-for-tree-ensemble-analysis (NeurIPS2019)
117
▪ データの通る平均的なpathを短くするためのコスト項を追加
▪ 並列処理などは考えられていないが、こちらが嬉しいようなユースケースもある
訓練時に推論速度を考慮した正則化項を追加
https://papers.nips.cc/paper/6753-cost-
efficient-gradient-boosting.pdf (NIPS2017)
LightGBM
*学習時のオプションを指定すれば使える
118
▪ 場合によっては、GBDTのコアより特徴作成処理がボトルネックになることも
▪ GPUで高速に動く様々な処理基盤も開発されてきている
▪ cuDF (https://github.com/rapidsai/cudf)
▪ GPUで高速化されたpandasのようなもの
▪ xfeat (https://github.com/pfnet-research/xfeat)
▪ 典型的な特徴量エンジニアリングをGPUを使いながら高速に行うライブラリ
▪ cuDFなどを内部では使用している
前処理の高速化
119
02 機能拡張
・ 微分可能なモデルへの緩和
・ 解釈性の付与
・ 不確実性の推定
・ 高速性の追求
・ 決定木に限らない、様々な勾配ブースティング
120
▪ 木構造の持つメリットは享受できなくなるが、これが嬉しい場合もある
▪ 例えば、画像を入力としたい場合など
ニューラルネットワークを用いた勾配ブースティング
https://arxiv.org/abs/2002.07971 (2020, preprint)
121
▪ NNのモデル複数持つのはきつくない?
▪ 演算精度とモデル個数のトレードオフを考えると嬉しい場合も
▪ Binary Ensemble Neural Network: More Bits per Network or More Networks per Bit?
ニューラルネットワークを用いた勾配ブースティング
https://arxiv.org/abs/1806.07550 (CVPR2019)
122
▪ 葉に入る予測値を定数でなく線形モデルで決める
▪ piecewise-linear tree
▪ 発想自体は新しくはないが、この仕様に適した高速なアルゴリズムが考えられてきている
▪ 詳細:https://arxiv.org/abs/1802.05640 (IJCAI2019)
▪ 実装:https://github.com/GBDT-PL/GBDT-PL
決定木の葉に入る予測値の拡張
123
▪ Neural NetworkとTreeを一緒に組み合わせる
▪ 決定木に向けた特徴量エンジニアリングをNNが学習中に行うイメージ
複数の弱学習器の組み合わせ
論文:https://www.ijcai.org/Proceedings/2019/493 (IJCAI2019)
実装:https://github.com/ptannor/augboost
124
▪ カーネルリッジ回帰とTreeを一緒に組み合わせる
▪ 特性の異なる弱学習器を両方試して、良い弱学習器を使うようにする
複数の弱学習器の組み合わせ
論文: https://arxiv.org/abs/1902.03999 (2019, preprint)
実装: https://github.com/fabsig/KTBoost
125
▪ 弱学習器の組み合わせかたは色々考えられる
▪ 並列させる
▪ どちらかの予測値をもう片方に入れる…など
複数の弱学習器の組み合わせ
https://dl.acm.org/doi/10.1145/3292500.3330676 (KDD2019)
126
▪ ResNetと勾配ブースティングの関係や類似性に関して、幾つかの研究がある
▪ 予測値ではなく中間表現がアンサンブルされていると言う点には差分があるので注意
ResNetと勾配ブースティング
https://arxiv.org/abs/1605.06431 (NIPS2016)
127
▪ ResNetのアンサンブル学習っぽさ
▪ 学習済みモデルの層を入れ替えたり削除したりしても、性能が大きくは変わらない
▪ 一方、同様の実験をVGGなどで行うと、すぐに性能は崩壊する
ResNetと勾配ブースティング
128
▪ ResBlockを一層学習させてからパラメータをフリーズして新たに層を追加…
▪ 関数空間での勾配法(~=勾配ブースティング)
▪ 何が嬉しいの?
▪ ResNet全層を一気に更新するよりも計算効率が良い
▪ 学習が安定する
▪ 前もってモデルの構造を決める必要がない(学習しながら決まる)
▪ 新しい層を作成する際、構造をある程度任意に選択できる
▪ 例えば複数の構造を試し、最も良いモデルを選んだりもできる
▪ 理論解析 (https://arxiv.org/abs/1706.04964, https://arxiv.org/abs/1802.09031...)
ひとつのモデルの形を変えていく形式での勾配ブースティング
129
03 実応用の際に注意する点やテクニック
・ 特徴量エンジニアリング、Target Leakage、評価の汚染
130
▪ GBDTは、例えば特徴量の間の線形演算をモデルが表現できない
▪ 決定木が弱学習器である故
▪ モデルが抽出しにくい特徴を開発者が作成することは、とても重要
▪ 表形式データを用いたKaggleなどのコンペティションで性能に差がつく要素の大部分はここ
▪ 特徴量を学習する機能はGBDTには無いので尚更
特徴量エンジニアリング
131
▪ その気になれば、幾つでも特徴量は作れてしまう
▪ 四則演算、次元削減、特徴量間の相互作用…
▪ 典型的な特徴量に関しては、自動で大量に作ってくれるようなライブラリも多数
▪ https://github.com/FeatureLabs/featuretoolsなど
▪ 適当に全部突っ込んでしまっては、subsampleされる特徴がゴミばかりにることも
▪ 学習がうまく進まない
▪ 訓練や推論に時間もかかる
特徴量エンジニアリング
適切な特徴量選択は重要
132
▪ 似た特徴量を省く
▪ 例えばGBDTの場合、順位相関が1の特徴量があれば、それらは完全に冗長
▪ 特徴量重要度の小さいものを省く
▪ Gain, SHAP, Permutation importanceなどを指標とする
▪ 注意が必要なのは、「特徴重要度が高い=精度に貢献している」ではないということ
▪ 例えばTarget Leakageを起こしていたりしても、特徴量重要度は高い
▪ あくまで訓練時にどの程度使われたかの情報なので、汎化に貢献している保証はない
いかに特徴量を選択するか?
133
▪ 推論対象のデータと分布が大きく違うものを省く
▪ Adversarial Validationという手法が使われたりすることも
▪ 「訓練データか推論対象データかを予測するモデル」を作り、重要度の高い特徴量を見つける
▪ 実際に訓練時に推論対象のデータが得られていることは少ないが、場合によっては使うこともできる
いかに特徴量を選択するか?
ID F1 F2 F3 F4
a 100 30 15 30
b 30 60 5 50
訓練データ
評価データ
ID F1 F2 F3 F4
c 20 55 30 15
d 40 15 25 65
ID F1 F2 F3 F4 Target
a 100 30 15 30 1
b 30 60 5 50 1
c 20 55 30 15 0
d 40 15 25 65 0
134
▪ 不用意な特徴量エンジニアリングをしてしまうと、
▪ Target Leakageによりモデルの汎化性能が崩壊
▪ 評価が汚染される
▪ などと、致命的な問題を引き起こすことがある
実応用の際に注意する点やテクニック
推論時には本来は得られない情報を学習に使わないよう、強く心がけることが重要
135
Leakの例:カテゴリ変数のTarget Encoding
136
Leakの例:カテゴリ変数のTarget Encoding
137
Leakの例:カテゴリ変数のTarget Encoding
138
Leakの例:カテゴリ変数のTarget Encoding
139
Leakの例:カテゴリ変数のTarget Encoding
140
Leakの例:カテゴリ変数のTarget Encoding
141
Leakの例:カテゴリ変数のTarget Encoding
142
▪ とあるカテゴリに属するレコードが少数しか存在しなかったら?
▪ エンコードされた特徴が、予測値をほぼそのまま出力してしまう
▪ 推論時はTrainデータで得られたエンコーダを用いてカテゴリ変数を変換するので、圧倒的に状況が違う
▪ カテゴリの粒度が細かい場合には、このような状況は容易に起こりうる
Leakの例:カテゴリ変数のTarget Encoding
Target Feature
A 1 1.00
B 0 0.00
C 1 1.00
143
▪ エンコード対象のデータを使用せずに平均を算出
Leave one outにすれば大丈夫・・・?
144
▪ エンコード対象のデータを使用せずに平均を算出
Leave one outにすれば大丈夫・・・?
145
▪ エンコード対象のデータを使用せずに平均を算出
Leave one outにすれば大丈夫・・・?
146
▪ エンコード対象のデータを使用せずに平均を算出
Leave one outにすれば大丈夫・・・?
147
▪ エンコード対象のデータを使用せずに平均を算出
Leave one outにすれば大丈夫・・・?
148
▪ エンコード対象のデータを使用せずに平均を算出
Leave one outにすれば大丈夫・・・?
149
▪ エンコード対象のデータを使用せずに平均を算出
Leave one outにすれば大丈夫・・・?
150
▪ エンコード対象のデータを使用せずに平均を算出
Leave one outにすれば大丈夫・・・?
151
▪ エンコード対象のデータを使用せずに平均を算出
Leave one outにすれば大丈夫・・・?
152
▪ エンコード対象のデータを使用せずに平均を算出
Leave one outにすれば大丈夫・・・?
153
▪ エンコード対象のデータを使用せずに平均を算出
Leave one outにすれば大丈夫・・・?
154
▪ エンコード対象のデータを使用せずに平均を算出
Leave one outにすれば大丈夫・・・?
155
▪ エンコード対象のデータを使用せずに平均を算出
Leave one outにすれば大丈夫・・・?
156
Leave one outにすれば大丈夫・・・?
Target Feature
A 1 0.00
A 0 1.00
B 1 0.00
B 0 0.50
B 0 0.50
C 1 0.50
C 0 1.00
C 1 0.50
▪ とあるカテゴリに属するレコードが少数しか存在しなかったら?
▪ エンコードされた特徴が、予測値を反転させて出力してしまう。これも一種のTarget Leakage
▪ この手の問題を、CatBoostのOrderedTSは木ごとにエンコードされる値をうまく変えることで避けている
157
Ordered-TSと各種Target Encodingの比較
logloss / zero-one loss
素のTarget EncodingがLeakの影響をもろに受けているのもわかる
158
▪ Ordered TSは、訓練データのランダムソートに含む
▪ 例えば、学習データが時系列に沿って生成されるような場合
▪ 未来の学習データで過去を予測したり情報を変換したりするような状況が起こり得てしまう
▪ 現実ではできないこと。まずそう…
▪ 実はCatBoostはソートに関して外部パラメータがあり、そのような状況を避けることもできる
問題提起:Ordered TSは気軽にやっていいのか?
https://catboost.ai/docs/concepts/python-reference_parameters-list.html
159
▪ Target Leakageが訓練に問題を引き起こす様子を見てきた
▪ CatBoostの開発は、この着眼点から大きくインスピレーションを受けている
▪ 一歩引いて考えてみる
▪ Target Leakageに近い現象は、いたるところで起こりうる
▪ 例えば、評価データを見ながらハイパーパラメータを決めるのは、深刻なLeakageと言える
▪ しかし、この手の過ちをしてしまうと評価データでの性能も高く出てしまうので、ミスに気づけない
評価データで測ることのできるミスならば、まだありがたい
前節で述べてきた例のように、失敗が評価データで測ることのできるものは、まだありがたい
怖いのは、場合によっては評価すら汚染される危険があり、気づくこともできないかもしれないということ
160
▪ K-fold Cross Validation
▪ ランダムにデータを分割
様々なデータ分割の戦略
https://scikit-learn.org/stable/modules/cross_validation.html
161
▪ Stratified K-fold Cross Validation
▪ ラベルがfoldごとに偏らないように考慮して分割
様々なデータ分割の戦略
https://scikit-learn.org/stable/modules/cross_validation.html
162
▪ Group K-fold
▪ 同じグループに入れるべきでないデータをきちんと区別する
▪ 例えば、同一人物が訓練データにも評価データにも入らないようにするなど
様々なデータ分割の戦略
https://scikit-learn.org/stable/modules/cross_validation.html
163
▪ Time series split
▪ 評価データよりも未来のデータを用いて訓練させないようにする
様々なデータ分割の戦略
https://scikit-learn.org/stable/modules/cross_validation.html
164
▪ Nested cross validation
▪ パラメータ調整などを行うための評価データと性能を測るための評価データは別にする (重要)
▪ 訓練データの中でさらに分割を行う (=train-valid-test分割)
様々なデータ分割の戦略
https://stats.stackexchange.com/questi
ons/453386/working-with-time-series-
data-splitting-the-dataset-and-putting-
the-model-into
165
▪ 適切なデータを分割をせずに評価してしまっている
▪ 時系列データに対してランダムに分割
▪ 新しい人に対して推論したいようなサービスで、同一人物のデータがtrain/validに分かれている
評価の汚染例 (評価データがきちんとつくれていない)
https://www.slideshare.net/YuriyGuts/target-leakage-in-machine-learning
166
評価の汚染例 (評価データがきちんとつくれていない)
v1 v3
https://twitter.com/andrewyng/status/931026446717296640
167
▪ Stackingにおけるデータ分割の不一致
▪ 入力モデルを学習した際の学習/評価データが揃っていないと、評価が汚染される
▪ Meta-leanerのmetricとしては評価データでも高い性能が出ているように見えてしまう
評価の汚染例 (評価データがきちんとつくれていない)
https://mlfromscratch.com/model-stacking-explained/#/
168
▪ 評価用データまで使用した施策
▪ Train/Valid/Testの分割がされていない
▪ Testデータを見ながらハイパーパラメータを決める (例えばB-Boxを出すための閾値など)
▪ Valid, Testデータまで使用した特徴量作成
評価の汚染例 (訓練データ以外の情報を使ってしまう)
https://arxiv.org/abs/2003.08505 (2020, preprint)
169
▪ しばしば、暗に提案手法が有利な設定で戦ってしまう
▪ 本来は、良いパラメータを見つけた時の性能のみでなく、
良いパラメータを見つけるまでの手間も評価に含めるべき
評価の汚染例 (訓練データ以外の情報を使ってしまう)
https://arxiv.org/abs/1910.11758 (ICML2020)
170
評価の汚染例 (訓練データ以外の情報を使ってしまう)
https://arxiv.org/abs/2003.08505 (2020, preprint)
▪ 色々な評価の土台を揃えると、性能が実際には出ていない?
171
04 まとめ
172
▪ GBDTは、世界で活躍する機械学習モデルのひとつ
▪ 決定木とアンサンブル学習、両者の強みがうまく噛み合っている
▪ 機能拡張も盛ん
▪ 微分可能なモデルへの緩和により、自由度と堅牢性の良いトレードオフが探求されている
▪ 解釈性なども、木構造の特性を生かしやすいところ
▪ 他にも色々
▪ 実応用の際には、Target Leakageや評価の汚染には細心の注意を
▪ この観点は、おそらくどれだけ要素技術が進んでも消えない重要なもの
まとめ
173
EOF

More Related Content

PPTX
強化学習の基礎と深層強化学習(東京大学 松尾研究室 深層強化学習サマースクール講義資料)
PDF
機械学習モデルの判断根拠の説明
PDF
最適化超入門
PDF
ChatGPT 人間のフィードバックから強化学習した対話AI
PDF
PRML輪読#1
PDF
最適輸送入門
PDF
機械学習による統計的実験計画(ベイズ最適化を中心に)
PDF
XGBoostからNGBoostまで
強化学習の基礎と深層強化学習(東京大学 松尾研究室 深層強化学習サマースクール講義資料)
機械学習モデルの判断根拠の説明
最適化超入門
ChatGPT 人間のフィードバックから強化学習した対話AI
PRML輪読#1
最適輸送入門
機械学習による統計的実験計画(ベイズ最適化を中心に)
XGBoostからNGBoostまで

What's hot (20)

PDF
深層学習の不確実性 - Uncertainty in Deep Neural Networks -
PPTX
【論文紹介】How Powerful are Graph Neural Networks?
PPTX
[DL輪読会]ドメイン転移と不変表現に関するサーベイ
PPTX
【DL輪読会】Efficiently Modeling Long Sequences with Structured State Spaces
PDF
合成変量とアンサンブル:回帰森と加法モデルの要点
PDF
最近のKaggleに学ぶテーブルデータの特徴量エンジニアリング
PDF
機械学習で泣かないためのコード設計 2018
PPTX
【DL輪読会】SimCSE: Simple Contrastive Learning of Sentence Embeddings (EMNLP 2021)
PDF
機械学習で泣かないためのコード設計
PDF
POMDP下での強化学習の基礎と応用
PDF
SSII2022 [TS1] Transformerの最前線〜 畳込みニューラルネットワークの先へ 〜
PPTX
【DL輪読会】The Forward-Forward Algorithm: Some Preliminary
PDF
変分推論法(変分ベイズ法)(PRML第10章)
PDF
[DL輪読会]Learning Transferable Visual Models From Natural Language Supervision
PDF
グラフニューラルネットワーク入門
PDF
機械学習と主成分分析
PDF
強化学習その1
PPTX
Curriculum Learning (関東CV勉強会)
PDF
深層生成モデルと世界モデル
PPTX
Transformerを雰囲気で理解する
深層学習の不確実性 - Uncertainty in Deep Neural Networks -
【論文紹介】How Powerful are Graph Neural Networks?
[DL輪読会]ドメイン転移と不変表現に関するサーベイ
【DL輪読会】Efficiently Modeling Long Sequences with Structured State Spaces
合成変量とアンサンブル:回帰森と加法モデルの要点
最近のKaggleに学ぶテーブルデータの特徴量エンジニアリング
機械学習で泣かないためのコード設計 2018
【DL輪読会】SimCSE: Simple Contrastive Learning of Sentence Embeddings (EMNLP 2021)
機械学習で泣かないためのコード設計
POMDP下での強化学習の基礎と応用
SSII2022 [TS1] Transformerの最前線〜 畳込みニューラルネットワークの先へ 〜
【DL輪読会】The Forward-Forward Algorithm: Some Preliminary
変分推論法(変分ベイズ法)(PRML第10章)
[DL輪読会]Learning Transferable Visual Models From Natural Language Supervision
グラフニューラルネットワーク入門
機械学習と主成分分析
強化学習その1
Curriculum Learning (関東CV勉強会)
深層生成モデルと世界モデル
Transformerを雰囲気で理解する
Ad

Similar to 勾配ブースティングの基礎と最新の動向 (MIRU2020 Tutorial) (20)

PPTX
miru2020-200727021915200727021915200727021915200727021915.pptx
PPTX
大規模言語モデル開発を支える分散学習技術 - 東京工業大学横田理央研究室の藤井一喜さん
PPTX
Long-Tailed Classificationの最新動向について
PPTX
DSB2019振り返り会:あのにっくき QWK を閾値調整なしで攻略した(かった)
PDF
【メタサーベイ】基盤モデル / Foundation Models
PDF
TAI_GDEP_Webinar_1a_27Oct2020
PDF
ディープラーニングでラーメン二郎(全店舗)を識別してみた
PPTX
2020/11/19 Global AI on Tour - Toyama プログラマーのための機械学習入門
PDF
Kaggleのテクニック
PPTX
1028 TECH & BRIDGE MEETING
PDF
Active Learning の基礎と最近の研究
PPTX
Batch Reinforcement Learning
PPTX
[DL輪読会]SoftTriple Loss: Deep Metric Learning Without Triplet Sampling (ICCV2019)
PDF
[DL Hacks]Model-Agnostic Meta-Learning for Fast Adaptation of Deep Network
PPTX
[DL輪読会]逆強化学習とGANs
PDF
kaggle tweet コンペの話
PDF
Jubatusの特徴変換と線形分類器の仕組み
PPTX
20190725 taguchi decision_tree_for_pubshare
PDF
MemoryPlus Workshop
PDF
makoto shing (stability ai) - image model fine-tuning - wandb_event_230525.pdf
miru2020-200727021915200727021915200727021915200727021915.pptx
大規模言語モデル開発を支える分散学習技術 - 東京工業大学横田理央研究室の藤井一喜さん
Long-Tailed Classificationの最新動向について
DSB2019振り返り会:あのにっくき QWK を閾値調整なしで攻略した(かった)
【メタサーベイ】基盤モデル / Foundation Models
TAI_GDEP_Webinar_1a_27Oct2020
ディープラーニングでラーメン二郎(全店舗)を識別してみた
2020/11/19 Global AI on Tour - Toyama プログラマーのための機械学習入門
Kaggleのテクニック
1028 TECH & BRIDGE MEETING
Active Learning の基礎と最近の研究
Batch Reinforcement Learning
[DL輪読会]SoftTriple Loss: Deep Metric Learning Without Triplet Sampling (ICCV2019)
[DL Hacks]Model-Agnostic Meta-Learning for Fast Adaptation of Deep Network
[DL輪読会]逆強化学習とGANs
kaggle tweet コンペの話
Jubatusの特徴変換と線形分類器の仕組み
20190725 taguchi decision_tree_for_pubshare
MemoryPlus Workshop
makoto shing (stability ai) - image model fine-tuning - wandb_event_230525.pdf
Ad

Recently uploaded (9)

PDF
液体クラトム抽出物供給側分析:世界の生産能力・販売量・平均価格動向(2025-2031)
PDF
商用ウェブカメラ市場:世界の産業現状、競合分析、シェア、規模、動向2025-2031年の予測
PDF
限外ろ過膜調査レポート:市場規模、シェア、産業分析データ、最新動向2025-2031 YH Research
PDF
XCMSを用いた質量分析データ処理_BioCAsia2021_yamamoto.pdf
PDF
世界半導体用酸化ハフニウム市場のサプライチェーン解析:上流、下流、収益モデル分析2025-2031
PDF
Qlik TECH TALK セミナー:What's New In Qlik ~ 2025年7月リリース最新機能のご紹介
PDF
口腔内スキャナー市場:世界の産業現状、競合分析、シェア、規模、動向2025-2031年の予測
PDF
【QYResearch】人形ロボット産業の市場構造と今後の発展方向に関する分析レポート
PDF
グローバルロープウェイ用スチールワイヤーロープ市場2025:主要企業のシェア、売上動向、競争戦略
液体クラトム抽出物供給側分析:世界の生産能力・販売量・平均価格動向(2025-2031)
商用ウェブカメラ市場:世界の産業現状、競合分析、シェア、規模、動向2025-2031年の予測
限外ろ過膜調査レポート:市場規模、シェア、産業分析データ、最新動向2025-2031 YH Research
XCMSを用いた質量分析データ処理_BioCAsia2021_yamamoto.pdf
世界半導体用酸化ハフニウム市場のサプライチェーン解析:上流、下流、収益モデル分析2025-2031
Qlik TECH TALK セミナー:What's New In Qlik ~ 2025年7月リリース最新機能のご紹介
口腔内スキャナー市場:世界の産業現状、競合分析、シェア、規模、動向2025-2031年の予測
【QYResearch】人形ロボット産業の市場構造と今後の発展方向に関する分析レポート
グローバルロープウェイ用スチールワイヤーロープ市場2025:主要企業のシェア、売上動向、競争戦略

勾配ブースティングの基礎と最新の動向 (MIRU2020 Tutorial)

Editor's Notes

  • #7: NASのコンポーネントとして使われたりだとか、
  • #29: NNの場合にはEntity Embeddingという手法が有名だとは思いますが、GBDTは微分不可能な処理を内部に含みE2Eでの学習ができないため、別の手法をとる必要が出てきます。 FCを抜いたOneHotを直接入力すればいいではないかという考えもあるのですが、その場合には分岐が1対他でしか作れないため、ある程度の大きさを持った2つのグループへの分割を表現するためには、とても深い木が必要になってきたりします。が、これは現実的ではありません。
  • #30: Target Encodingとは、とあるカテゴリ特徴に着目し、そのカテゴリに属しているデータの平均的なTargetの値を用いてエンコードを行うような手法です。 図を見るとわかりやすいと思うのですが、カテゴリごとにTargetの平均値を算出し、その結果作成された列が特徴量として使用されていくわけです。このようにある種カテゴリ変数を数値データに変換してやると、必ずカテゴリがTargetの大小に準じた順番に並ぶため、効率的に分割を行えるというわけです。
  • #31: LightGBMやCatBoostにおいては、先ほど述べたTarget Encodingを基盤としたアルゴリズムが学習中に実行されていきます。 具体的には、LightGBMの場合は、分岐ごとにTarget Encodingを行なっていきます。こうすることで、Globalに見たTargetの大小順よりもさらに効率良い順番にカテゴリ変数が並べられるようになるわけです。 一方、 Target Encodingという手法は、場合によっては深刻なTarget Leakageという現象を誘発します。 具体的には、Target Encodingの対象となるデータが少ない場合には、エンコード後の特徴量がTargetをほぼそのまま出力してしまうという現象が起きるわけです。これは程度問題でもあって、完璧にTargetと一致していなかったとしても、「学習対象のデータのTargetの情報がそのまま特徴量として使われる」ということにより、かなり訓練誤差を下げるのに有利になるような仕組みになっているわけです。 一方、訓練誤差は下がっていくのですが、必ずしもそれが汎化誤差と対応しているとは限りません。多くの場合、真の分布に対してTarget Encodingされた特徴量というのはずれが生じているのですが、それでもなおTarget Encodingされた特徴量は訓練誤差最小化の観点では素晴らしい性能を持っているのでどんどん分岐に使われていく。そのようにして、汎化性能が全く上がっていかないというジレンマに悩まされることになっていくのです。
  • #32: そこでCatBoostは、先程のTarget Leakageの影響を緩和するためのアルゴリズムを使用するようになっています。 具体的には、Ordered TSというアルゴリズムを用います。