LightGBMとは?XGBoostとの違いと実践的な使い方

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

LightGBMとは?XGBoostとの違いと実践的な使い方

AI初心者

AIを知りたい

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

AIエンジニア

AIエンジニア

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

AI初心者

AIを知りたい

なぜそんなに速いのですか?

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初心者

AIを知りたい

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

AIエンジニア

AIエンジニア

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

AI初心者

AIを知りたい

精度はどちらが上なんですか?

AIエンジニア

AIエンジニア

一概には言えませんが、多くのベンチマークで同等かLightGBMがやや上です。ただし差は小さく、データセットやチューニングによって逆転することもあります。速度の差は明確で、LightGBMの方が数倍〜十数倍速いです。

項目 XGBoost LightGBM
開発元 個人(Tianqi Chen) Microsoft
木の成長方式 Level-wise Leaf-wise
学習速度 速い 非常に速い(10-20倍)
メモリ使用量 多い 少ない
カテゴリ特徴量 エンコーディング必要 ネイティブ対応
過学習リスク 中程度 やや高い
データ数が少ない場合 安定 過学習しやすい

LightGBMの主要パラメータ

AI初心者

AIを知りたい

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

AIエンジニア

AIエンジニア

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

AI初心者

AIを知りたい

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

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初心者

AIを知りたい

結局、XGBoostとLightGBMはどう使い分ければいいですか?

AIエンジニア

AIエンジニア

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

AI初心者

AIを知りたい

CatBoostというのも聞いたことがあるのですが。

AIエンジニア

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の速度優位が顕著になります。