Kaggleで上位常連が愛用し、実務でも定番のLightGBM。XGBoostより高速でメモリ効率が良い秘密は「葉ごとの分割」にあります。両者の違いと実践的な使い方を解説します。
LightGBMとは?XGBoostとの違いと実践的な使い方

AIを知りたい
LightGBMってXGBoostと似ていると聞いたのですが、何が違うのですか?

AIエンジニア
LightGBMもXGBoostと同じく勾配ブースティングベースのアルゴリズムですが、Microsoftが開発した後発の手法で、学習速度が大幅に速いのが最大の特徴です。大規模データセットでもメモリ効率よく高速に学習できるよう設計されています。

AIを知りたい
なぜそんなに速いのですか?

AIエンジニア
主に2つの技術のおかげです。GOSS(Gradient-based One-Side Sampling)で勾配が小さいサンプルを間引いてデータ量を削減。EFB(Exclusive Feature Bundling)で相互排他的な特徴量をまとめて次元を削減。この2つにより計算量を大幅に減らしています。
LightGBM(Light Gradient Boosting Machine)とは、Microsoftが開発した高速・省メモリな勾配ブースティングフレームワークです。
GOSSとEFBという独自技術により、大規模データセットでもXGBoostの10〜20倍の速度で学習できます。Kaggleや実務で広く使われ、表形式データの分類・回帰タスクにおいてトップクラスの性能を発揮します。
XGBoostとの詳細比較

AIを知りたい
XGBoostとLightGBMの具体的な違いを教えてください。

AIエンジニア
最大の違いは木の成長方式です。XGBoostは「Level-wise(層ごと)」に成長させ、同じ深さの全ノードを分割します。LightGBMは「Leaf-wise(葉ごと)」で、最も損失を減らせる葉だけを分割します。Leaf-wiseの方が効率的に精度を上げられます。

AIを知りたい
精度はどちらが上なんですか?

AIエンジニア
一概には言えませんが、多くのベンチマークで同等かLightGBMがやや上です。ただし差は小さく、データセットやチューニングによって逆転することもあります。速度の差は明確で、LightGBMの方が数倍〜十数倍速いです。
| 項目 | XGBoost | LightGBM |
|---|---|---|
| 開発元 | 個人(Tianqi Chen) | Microsoft |
| 木の成長方式 | Level-wise | Leaf-wise |
| 学習速度 | 速い | 非常に速い(10-20倍) |
| メモリ使用量 | 多い | 少ない |
| カテゴリ特徴量 | エンコーディング必要 | ネイティブ対応 |
| 過学習リスク | 中程度 | やや高い |
| データ数が少ない場合 | 安定 | 過学習しやすい |
LightGBMの主要パラメータ

AIを知りたい
LightGBMの重要なパラメータを教えてください。

AIエンジニア
最も重要なのはnum_leaves(葉の最大数)です。Leaf-wise成長なので、max_depthよりnum_leavesで複雑さを制御します。一般的にnum_leaves = 2^max_depth – 1以下に設定します。例えばmax_depth=7なら127以下が目安です。

AIを知りたい
カテゴリ特徴量のネイティブ対応とはどういうことですか?

AIエンジニア
XGBoostではカテゴリ特徴量をOne-Hot Encodingなどで数値に変換する必要がありますが、LightGBMはカテゴリ特徴量をそのまま入力できます。内部で最適な分割を自動的に見つけてくれるので、前処理が楽になり、精度も向上することが多いです。
| パラメータ | 推奨範囲 | 説明 |
|---|---|---|
| num_leaves | 20〜150 | 葉の最大数(複雑さの制御) |
| learning_rate | 0.01〜0.3 | 学習率 |
| n_estimators | 100〜1000 | ブースティング回数 |
| min_child_samples | 5〜100 | 葉の最小サンプル数 |
| subsample | 0.6〜1.0 | 各木で使うデータ割合 |
| colsample_bytree | 0.6〜1.0 | 各木で使う特徴量割合 |
| reg_alpha | 0〜10 | L1正則化 |
実践的な使い分けガイド

AIを知りたい
結局、XGBoostとLightGBMはどう使い分ければいいですか?

AIエンジニア
基本的にはまずLightGBMを試すのがおすすめです。速いのでパラメータチューニングの試行回数を稼げます。ただしデータが少ない場合(1万行以下)はXGBoostの方が安定した結果が出やすいです。Kaggleの上位者は両方試してアンサンブルすることも多いです。

AIを知りたい
CatBoostというのも聞いたことがあるのですが。

AIエンジニア
CatBoostはYandexが開発した勾配ブースティングで、カテゴリ特徴量の処理に特化しています。Ordered Target Statisticsという独自の手法でリーク無くカテゴリをエンコードします。カテゴリ特徴量が多いデータセットでは非常に強力です。3つとも試してベストを選ぶのが理想的です。
まとめ
LightGBMは高速・省メモリな勾配ブースティングフレームワークとして、表形式データの機械学習で最も広く使われているツールの一つです。Leaf-wise成長やGOSS、EFBなどの独自技術でXGBoostを上回る速度を実現しつつ、同等以上の精度を出します。カテゴリ特徴量のネイティブ対応も大きな利点です。まずLightGBMで試して、必要に応じてXGBoostやCatBoostも検討しましょう。
関連記事
LightGBMとXGBoostの速度・精度を実測比較するコード
LightGBMとXGBoostは勾配ブースティングの代表的ライブラリですが、実際にどれほど差があるのか、同一データで比較してみましょう。
import time
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
from lightgbm import LGBMClassifier
from xgboost import XGBClassifier
# 大規模データを生成して比較
X, y = make_classification(n_samples=100000, n_features=50, n_informative=30, random_state=42)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
results = {}
# LightGBM
lgbm = LGBMClassifier(n_estimators=500, learning_rate=0.05, num_leaves=31, random_state=42, verbose=-1)
start = time.time()
lgbm.fit(X_train, y_train)
lgbm_time = time.time() - start
lgbm_acc = accuracy_score(y_test, lgbm.predict(X_test))
results["LightGBM"] = {"time": lgbm_time, "accuracy": lgbm_acc}
# XGBoost
xgb = XGBClassifier(n_estimators=500, learning_rate=0.05, max_depth=6, random_state=42, use_label_encoder=False, eval_metric="logloss")
start = time.time()
xgb.fit(X_train, y_train)
xgb_time = time.time() - start
xgb_acc = accuracy_score(y_test, xgb.predict(X_test))
results["XGBoost"] = {"time": xgb_time, "accuracy": xgb_acc}
for name, r in results.items():
print(f"{name}: accuracy={r['accuracy']:.4f}, training_time={r['time']:.2f}s")
# 一般的にLightGBMはXGBoostより2〜5倍高速で、精度はほぼ同等になることが多い
10万件・50特徴量の分類タスクでは、LightGBMはヒストグラムベースの分割アルゴリズムにより、XGBoostの2〜5倍の速度で学習を完了します。精度はほぼ同等ですが、大規模データや特徴量が多い場面ほどLightGBMの速度優位が顕著になります。
