目次
はじめに
XGBoostとLightGBMは、機械学習の構造化データにおいて最も使用される勾配ブースティング系アルゴリズムです。本記事では、両者の速度・精度・特徴・使いどころを、実務目線で明確に比較します。
「どっちを使うべきか」を最短で判断できる構成に整理しています。
結論(最初に要点だけ)
- 速度:LightGBMのほうが圧倒的に速く、メモリ効率も高い
- 精度:ケースバイケース。カテゴリ変数に強いLightGBMが有利な場面が多い
- 大規模データ:LightGBM
- 小規模データ:XGBoost(過学習耐性がやや高い)
- 特徴量の複雑さ:XGBoost
- カテゴリ多いデータ:LightGBM(自動的に扱える)
1. XGBoostとLightGBMの基本的な違い
XGBoostの特徴
- 勾配ブースティング決定木の高速・高精度版
- 欠損値処理が強い(自動で最適方向へ送る)
- 木の生成が「深さ優先」
- ハイパーパラメータが多く、細かくチューニング可能
- 小〜中規模データで安定した精度が出る
LightGBMの特徴
- Microsoftが開発した高速GBDT
- Leaf-wise(葉優先)成長で圧倒的に速度が速い
- カテゴリ変数をそのまま使える
- 大規模データでも学習が重くならない
- GPU学習との相性も良い
2. 学習速度の違い【LightGBMが圧倒的に速い】
LightGBMが速い理由
- Leaf-wise の木の伸ばし方により、重要な特徴量を優先して深掘りできる
- ヒストグラムベース の学習方式で計算が軽い
- カテゴリ変数を事前エンコーディングせずに学習可能(=前処理が少ない)
XGBoostの速度
- 過去バージョンではLightGBMより遅かった
- 現在は
histアルゴリズムによりかなり改善 - とはいえ大規模データになるほどLightGBMの優位性が出る
速度で迷ったらほぼLightGBM一択。
3. 精度の違い【ケースバイケース】
XGBoostが精度で勝ちやすいケース
- データが小〜中規模
- 特徴量の関係が複雑(カテゴリの組み合わせなど)
- 過学習を強めに抑えたい(正則化が強力)
LightGBMが精度で勝つケース
- 大規模データ(10万行〜)
- カテゴリ変数が多い
- 大量の特徴量がある
- GPUで高速学習したい場合
実務ではLightGBMが優勢になる場面が増えている。
4. 過学習への強さの違い
- XGBoost:L1/L2正則化が強力で、過学習に比較的強い
- LightGBM:Leaf-wise成長は高精度だが過学習しやすい
- →
max_depthを設定することで改善可能
- →
5. 特徴量処理・カテゴリ変数の扱い
XGBoost
- one-hot or label encoding が必要
- カテゴリが多いと次元が増えて重くなる
LightGBM
- カテゴリをそのまま学習可能
- 膨大なカテゴリでも高速
- そのため「ECデータ」「広告データ」「ログデータ」などで強みを発揮
6. メモリ使用量の違い
- LightGBM:メモリ効率が良い
- XGBoost:行列処理が重くなると一気にメモリ消費が増える
→ 大規模データではLightGBMが安定
7. どちらを使うべきか?ケース別の最適解
小規模データ(〜数万行)
→ XGBoost
理由:過学習に強く、安定的に精度が出る。
中〜大規模データ(10万〜1000万行)
→ LightGBM
理由:速度とメモリ効率が圧倒的。
カテゴリ変数が多いデータ
→ LightGBM
理由:カテゴリ直接学習が強力。
モデル精度を追求したい場面
→ 両方試すのが最適
(Kaggleでも常識)
8. コード比較(最小構成)
XGBoost(分類)
from xgboost import XGBClassifier
model = XGBClassifier(
n_estimators=200,
max_depth=6,
learning_rate=0.1,
subsample=0.8,
colsample_bytree=0.8
)
model.fit(X_train, y_train)
LightGBM(分類)
import lightgbm as lgb
model = lgb.LGBMClassifier(
n_estimators=200,
max_depth=-1,
learning_rate=0.1,
num_leaves=31
)
model.fit(X_train, y_train)
9. ハイパーパラメータの要点
XGBoost
max_depthmin_child_weightgammasubsamplecolsample_bytree
→ 木を浅くして正則化を強めると過学習に強い
LightGBM
num_leavesmax_depthmin_data_in_leaffeature_fractionbagging_fraction
→ num_leavesが大きすぎるとすぐ過学習
10. まとめ
| 観点 | XGBoost | LightGBM |
|---|---|---|
| 学習速度 | 普通 | 圧倒的に速い |
| 精度 | 小規模で安定 | 大規模で強い |
| カテゴリ変数 | 弱い(前処理必要) | 強い(そのまま可) |
| メモリ使用量 | 多め | 少なめ |
| 過学習耐性 | 強い | 調整が必要 |
| 実務利用の多さ | 多い | 急増中 |
▼使い分けの最適解
- まずLightGBMで試す
- 精度に不満があればXGBoostも試す
- 小規模データなら最初からXGBoost
関連記事(内部リンク用)
- 【初心者向け】XGBoostとは?特徴と仕組みをやさしく解説
- XGBoost・LightGBM・CatBoostの違いを比較|3つの使い分け完全ガイド
- LightGBMとは?仕組み・特徴・パラメータを分かりやすく解説