プロジェクトマネジメント モデル評価とチューニング

XGBoostとLightGBMの違い|速度・精度・特徴を徹底比較【実務向け】

はじめに

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_depth
  • min_child_weight
  • gamma
  • subsample
  • colsample_bytree

木を浅くして正則化を強めると過学習に強い

LightGBM

  • num_leaves
  • max_depth
  • min_data_in_leaf
  • feature_fraction
  • bagging_fraction

num_leavesが大きすぎるとすぐ過学習


10. まとめ

観点XGBoostLightGBM
学習速度普通圧倒的に速い
精度小規模で安定大規模で強い
カテゴリ変数弱い(前処理必要)強い(そのまま可)
メモリ使用量多め少なめ
過学習耐性強い調整が必要
実務利用の多さ多い急増中

▼使い分けの最適解

  • まずLightGBMで試す
  • 精度に不満があればXGBoostも試す
  • 小規模データなら最初からXGBoost

関連記事(内部リンク用)

-プロジェクトマネジメント, モデル評価とチューニング
-,