Ch.07
XGBoost, LightGBM, CatBoost — 表形式データの最強格
スプレッドシートのような表形式(構造化)データでは、ときに深層学習を上回る存在が勾配ブースティングです。弱い学習器を順番に重ね、前段の誤差(残差)を次が埋めていく—そんな協調的な学習器の列が、実務とKaggleの現場を支えています。
本章では XGBoost / LightGBM / CatBoost の違いを整理し、自分のデータにどれを選ぶかの基準をはっきりさせます。
チャプター別 機械学習図
チャプターを選ぶと、下の図がそのチャプターの内容に切り替わります。機械学習の流れを一覧で確認できます。
ライブラリごとに木の伸ばし方が違います。レベルワイズ/リーフワイズ/対称(オブリビアス)成長を順にアニメーションで見比べます。
CH07 ブースティング三本柱 — 残差を木で埋める技法
1. ブースティングの核: 間違いノートのリレー
概念: 決定木を順番に足していき、これまでのアンサンブルの残差を次の木が学習します。
直感: 模試の間違いノートだけを次のメンバーが徹底し、また残った弱点をその次が埋める—勉強会がラウンドを重ねるほどチーム全体の正答率が上がります。
更新式:
- : 段階 までの予測
- : 直前までの予測
- : 残り誤差を減らすために追加する新しい木
- : 学習率(新しい木の意見をどれだけ混ぜるか。小さいほど慎重だが、木の本数が必要になりがち)
実務: 与信デフォルト、離反、CTR など表データでは、依然として最強クラスのベースラインのひとつです。
2. XGBoost: 正則化込みの安定枠
概念: 近代的ブースティング普及の中心。損失に加え複雑さペナルティを明示的に入れた設計で、挙動が読みやすく安定しやすい場面が多いです。
直感: 「進度」も大事だが、丸暗記(過学習)には厳しくペナルティを課す先生のイメージです。
3. LightGBM: 大規模データのスピード枠
概念: 数百万行を超えると学習が重い問題への回答。ヒストグラム(ビン)で計算を圧縮し、木は多くの場合リーフワイズ—損失が最も減る葉から分割を深掘りします。
直感: 既にわかっている章は飛ばし、試験に出そうな章だけ徹底する効率特化の勉強スタイル。ただし小規模データでは掘りすぎて過学習しやすいです。
注意: `max_depth` や `min_data_in_leaf` などで深掘りを制御しましょう。
4. CatBoost: カテゴリ変数の扱いに強い
概念: Yandex 由来で、名前は Category + Boost。高カーディナリティのカテゴリ(職種、地域コードなど)を上手に扱うことに強みがあります。
直感: 検証すべきは過去情報だけなのに、うっかり未来情報が混ざるとリークでスコアが水増しされます。Ordered statistics などの設計は、そのリスクを抑える助けになります。デフォルトだけでも強いことがあります。
5. 数式をやさしく読むコツ(記号の意味 + ミニ計算)
Boosting/XGBoost で頻出の3式です。各式は (a) 記号の意味 → (b) 小さな数値例 の順で読むと理解しやすくなります。
(1) 予測を足し合わせて更新
- : 新しい木を入れる前の予測
- : 新しく追加した木の補正量
- : 学習率(補正をどの強さで反映するか)
解釈: 以前の予測に補正を少しずつ足して、段階的に誤差を減らします。
数値例: 以前の予測が10、新しい木の出力が+4、なら
です。
(2) 目的関数 = 当てはまり + 複雑さペナルティ
- : サンプル全体の予測誤差
- : モデルが複雑になりすぎるのを抑える正則化項
解釈: 精度だけでなく、過学習を防ぐため複雑さにも罰則を与えます。
数値例: 当てはまり誤差が18、正則化が3なら
です。
(3) 分割利得に使う導関数
,
- : 1階微分(勾配)— どちら向きにどれだけ直すと誤差が減るか
- : 2階微分(曲率)— 変化の急さ。更新の安定化に効く
解釈: XGBoost系は と を一緒に使い、分割利得をより安定して計算します。
直感ポイント:
- が大きいほど、そのサンプルはまだ外している可能性が高い
- は更新を急にしすぎないための緩衝材として働きます。
🔵 共通パラメータ: ボリュームノブと拡大鏡
① `learning_rate`(学習率): 新しい木の補正をどれだけ強く反映するかを決めるノブです。小さくすると安定しますが、通常は反復回数(`n_estimators`)を増やす必要があります。大きすぎると速い一方で不安定・過学習になりやすくなります。
② `n_estimators` / `iterations`: 補正ラウンド(木)を何回積むか。
③ `max_depth` / `depth`: 木の掘り下げ深さ。深いほど細かなパターンを拾えますが、ノイズまで覚えやすくなります。初期値は `learning_rate=0.03~0.1`、深さ `4~8` が無難です。
🟣 XGBoost: 精度と保守性のバランス調整
① `subsample`: 各木で使う行データを一部にして過学習を抑える。
② `colsample_bytree`: 各木で使う特徴量を一部にして、特定列への依存を下げる。
③ `min_child_weight`: 根拠の弱い細かい分割を防ぐ安全弁。
④ `reg_lambda` / `reg_alpha`: モデル複雑度を抑える正則化ブレーキ。
🟢 LightGBM: Leaf-wise を葉で制御する
① `num_leaves`: 葉の最大数。大きいほど表現力は上がりますが過学習リスクも増えます(一般に より小さく)。
② `min_data_in_leaf`: 葉あたりの最小サンプル数。小さすぎる不安定な葉を防ぎます。
③ `feature_fraction` / `bagging_fraction`: XGBoost の `colsample_bytree` / `subsample` と同系統。過学習時は 1.0 未満に下げるのが有効です。
🟠 CatBoost: カテゴリ特徴を正しく伝えるモデル
① `cat_features`: 最重要。どの列がカテゴリかを明示すると CatBoost の強みが活きます。
② `depth` と `iterations`: 基本は他モデルと同じですが、対称木のため深さにやや敏感です。
③ `l2_leaf_reg`: 予測が極端に振れすぎるのを抑える正則化。
実務表データの「安定受け」
画像・生テキストではないDBテーブル/CSVでは、深層学習よりブースティングの方が速くて十分当たることがよくあります。巨大モデルを設計する前の第一ベースラインに選ばれます。
データの性格に合わせて選ぶ
- 安定性と中規模なら XGBoost
- 規模と速度・メモリが最重なら LightGBM
- カテゴリ列が多く前処理を減らしたいなら CatBoost
ハイパラはハンドル
`learning_rate`、深さ/葉、`n_estimators`、early stopping は、性能とコストのバランスを決めます。関係を押さえると当てずっぽうが減ります。
① パイプラインの型
欠損・カテゴリ処理 学習/検証分割 学習 SHAP 等で説明 デプロイと監視。
② アーリーストッピング
木を増やし続けると暗記に寄ります。検証損失が頭打ち/悪化したらそこで止めるのが実務の常識です。
③ ビジネス指標に合わせる
- 分類: 精度だけでなく AUC や F1 も。
- 回帰: RMSE / MAE を金額・件数の感覚で追う。