目次
はじめに
LightGBM(Light Gradient Boosting Machine)は、Microsoftが開発した高速GBDTアルゴリズムで、大規模データでも圧倒的な速度と高精度を実現します。
特に「カテゴリ変数が多いデータ」「10万〜1000万行クラスの大規模データ」「モデル更新頻度が高い案件」で強みを発揮し、実務で採用されることが急増しています。
この記事では、初心者でも理解できるように LightGBMの仕組み・特徴・パラメータ設定の要点 をまとめています。
比較記事(XGBoost vs LightGBM)の内部リンクとしても最適化済みです。
LightGBMとは?(一言でいうと「高速版GBDT」)
LightGBMは、勾配ブースティング決定木(GBDT)を大幅に高速化した手法です。
▼LightGBMの特徴(要点)
- Leaf-wise(葉優先) の木構造で高速かつ深い分岐が可能
- ヒストグラム学習 により計算コスト削減
- カテゴリ変数をそのまま扱える(one-hot不要)
- 大規模データでも爆速
- GPU学習に強い
- メモリ効率が高い
XGBoostと比較して「速度」「スケール」「カテゴリ変数」において優位性があります。
LightGBMの仕組み:高速な理由は?
LightGBMが高速な理由は次の2点に集約されます。
Leaf-wise(葉優先)で木が伸びる
一般的なGBDT(XGBoost含む)は depth-wise(深さ優先) で木を作るが、LightGBMは Leaf-wise を採用。
- Lossが最も改善される葉を優先して深く掘る
- 少ない木の数でも精度が出やすい
- 必要な計算だけに集中するため高速
Leaf-wiseのデメリット
- 深すぎる木ができて 過学習しやすい
→max_depthやnum_leavesを必ず制御する
ヒストグラムベース学習
連続値を ビン分割(ヒストグラム化) し、そのビンごとに最適な分岐を探索する手法。
メリット:
- 計算量が大幅に削減
- メモリ使用量が少ない
- 大規模データでも破綻しにくい
LightGBMの強み(XGBoostと比較して優位な点)
とにかく学習が速い
- XGBoostより数倍速いケースが多い
- 大規模データ(10万〜1000万行)で特に差が出る
カテゴリ変数をそのまま扱える
- one-hotエンコーディング不要
- カテゴリが1000以上あっても高速
→ ECデータ / 広告データ / IDベースデータと相性抜群
メモリ効率が良い
- XGBoostより消費メモリが少ない
- クラスタ環境でのバッチ学習にも向く
LightGBMの弱点(実務で注意すべき点)
過学習しやすい
Leaf-wiseは深く分岐しやすいため、以下の制御が必須。
max_depthnum_leavesmin_data_in_leaf
小規模データだとXGBoostの方が安定することがある
- データが少ないとLeaf-wiseが悪い方向に働く
- XGBoostの正則化の強さが有利になりやすい
LightGBMの主要パラメータ
必ず触るパラメータ
| パラメータ | 内容 | 注意点 |
|---|---|---|
num_leaves | 葉の数 | 過学習に直結。多すぎ注意 |
max_depth | 木の深さ | 過学習制御の最重要 |
learning_rate | 学習率 | 小さくするほど高精度だが遅い |
n_estimators | 木の本数 | 多すぎると遅い&過学習 |
min_data_in_leaf | 葉の最小データ数 | 多いと過学習抑制 |
性能を上げるパラメータ
| パラメータ | 効果 |
|---|---|
feature_fraction | 特徴量のサブサンプリング |
bagging_fraction / bagging_freq | 行方向サブサンプリングで過学習防止 |
lambda_l1, lambda_l2 | 正則化 |
LightGBMの得意・不得意まとめ
◎ 得意
- 大規模データ(10万〜1000万行)
- カテゴリ変数が多い
- GPU学習環境
- 大量特徴量のTabularデータ
- 推論速度も必要(リアルタイム処理)
△ 不得意
- 小規模データ
- カテゴリがほぼ無い&特徴量が少ない
- 過学習が問題になりやすいデータ
LightGBMのコード例
import lightgbm as lgb
model = lgb.LGBMClassifier(
n_estimators=200,
learning_rate=0.1,
num_leaves=31,
max_depth=-1,
feature_fraction=0.8,
bagging_fraction=0.8,
bagging_freq=1
)
model.fit(X_train, y_train)
XGBoostと比較してどんな時に使うべきか?
LightGBMを選ぶべきケース
- データが大規模
- カテゴリ変数が多い
- モデル更新を高速で回したい
- メモリ制約が強い
- ビジネス指標に対して「学習速度」が重要
XGBoostを選ぶべきケース
- 小規模〜中規模データ
- 精度をギリギリまで追う
- 過学習が発生しやすいタスク
まとめ
| 観点 | LightGBM | XGBoost |
|---|---|---|
| 速度 | 圧倒的に速い | 速いがLightGBMに劣る |
| 精度 | 大規模データで強い | 小〜中規模データで安定 |
| カテゴリ変数 | 直接扱える | 前処理が必要 |
| 過学習耐性 | 弱め | 強い |
| メモリ | 少なくて済む | 多め |
| 実務利用 | 急増中 | 依然として多い |