LightGBMとは?勾配ブースティングの仕組みと特徴・XGBoostとの違いを実装例つきで解説
LightGBM(Light Gradient Boosting Machine)は、Microsoftが開発した勾配ブースティング決定木(GBDT)のオープンソースフレームワークです。XGBoostと並んでKaggleなどのデータ分析コンペで定番となっており、大規模な表形式データを高速に学習できる点が支持されています。本記事では、勾配ブースティングの基本原理から、LightGBMを高速化している4つの技術、主要ハイパーパラメータ、XGBoostやCatBoostとの違い、そしてPythonでの実装までを整理します。
まとめ:LightGBMの要点
- 正体:Microsoft製の勾配ブースティング決定木(GBDT)フレームワーク。MITライセンスのOSSで無料。
- 速い理由:Leaf-wise(葉単位)の木成長、ヒストグラムベースの分岐、GOSS、EFBという4つの工夫で、XGBoostより学習が速くメモリ消費も小さい。
- 得意:数万行以上の表形式データ。数値・カテゴリが混在する予測(分類・回帰・ランキング)。
- 苦手:数百行程度の小さいデータや、画像・自然言語などの非構造データ。過学習しやすいので
num_leavesの設定に注意が要る。 - 使い分け:速度重視ならLightGBM、安定性・過学習耐性を優先するならXGBoost、カテゴリ変数が多いならCatBoostが候補。
以下、仕組みと設定のポイントを順に見ていきます。
LightGBMの位置づけ:勾配ブースティング決定木を土台にした高速フレームワーク
LightGBMは2016年にMicrosoft Researchが公開したライブラリで、「light(軽量・高速)」の名のとおり学習速度とメモリ効率に重点を置いた設計になっています。読み方は「ライトジービーエム」。PythonやR、コマンドラインから利用でき、2025年時点の安定版は4系(4.7.0)です。バージョンは更新されるため、最新は公式(PyPI)で確認してください。
土台となる勾配ブースティング決定木は、浅い決定木を1本ずつ順番に追加し、前の木が間違えた分(残差)を次の木が埋めるように学習する手法です。1本の木で答えを出すランダムフォレスト系の並列的な発想とは異なり、誤差を段階的に縮めていく直列的な学習である点がブースティングの核心です。勾配ブースティングそのものの理論を深掘りしたい場合は、XGBoostやCatBoostを含めて整理したCatBoostとは?特徴・XGBoost・LightGBMとの違いとPython実装を解説も参考になります。
LightGBMを高速化する4つの技術
LightGBMが「速い・軽い」といわれる理由は、決定木の作り方に4つの独自の工夫が入っているためです。それぞれが別々の役割を担っています。
Leaf-wise Tree Growth(葉単位の木の成長)
従来のGBDTは木を階層ごとに広げる「level-wise(レベルワイズ)」でしたが、LightGBMは損失が最も減る葉を1つだけ選んで深くする「leaf-wise」を採用します。無駄な分岐を作らないため同じ木の本数でも精度が上がりやすい一方、木が偏って深くなり過学習しやすいという裏返しがあります。そのためnum_leavesやmax_depthでの制御が前提になります。
ヒストグラムベースの分岐
特徴量の連続値をそのまま扱わず、あらかじめ離散的なビン(既定で最大255個、max_bin)にまとめてから分岐点を探します。候補となる分割点が大幅に減るため、計算量とメモリ使用量の両方を抑えられます。これがLightGBMのメモリ効率の土台です。
GOSS(Gradient-based One-Side Sampling)
勾配(誤差)が大きいデータは学習にとって重要なので全件残し、勾配が小さい(すでにうまく予測できている)データだけを間引くサンプリング手法です。勾配の大きい上位データは全件保持し、残りの小さいデータから無作為に一部だけを抽出する2段構えで、重要なサンプルを捨てずにデータ量を圧縮します。全データを使わずに済むため学習が速くなり、精度の低下も抑えられます。
EFB(Exclusive Feature Bundling)
One-Hotエンコーディング後のような、同時にはほとんど非ゼロにならない排他的な疎特徴量を1つの束にまとめる手法です。実質的な特徴量の数を減らせるため、高次元データでも計算を軽くできます。GOSSがデータ行を、EFBが特徴量列を圧縮する、という役割分担になっています。
LightGBMのインストールとPythonでの実装例
インストールはpipで完結します。scikit-learn互換のAPI(LGBMClassifier/LGBMRegressor)が用意されているため、既存の機械学習コードにそのまま組み込めます。
pip install lightgbm
二値分類の最小例です。LightGBM 4系では、早期終了(early stopping)はfitの引数ではなくcallbacksで指定する方式に変わっている点に注意してください。
import lightgbm as lgb
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split
X, y = load_breast_cancer(return_X_y=True)
X_train, X_valid, y_train, y_valid = train_test_split(
X, y, test_size=0.2, random_state=42
)
model = lgb.LGBMClassifier(
num_leaves=31,
learning_rate=0.05,
n_estimators=500,
)
model.fit(
X_train, y_train,
eval_set=[(X_valid, y_valid)],
eval_metric="binary_logloss",
callbacks=[lgb.early_stopping(stopping_rounds=20)],
)
検証データの損失が20ラウンド改善しなければ学習を打ち切るため、n_estimatorsを大きめに設定しても過学習前に止まります。実務ではn_estimatorsを上限として置き、実際の木の本数はearly stoppingに任せる使い方が定番です。
主要ハイパーパラメータと設定の勘所
LightGBMのチューニングは、まず精度と過学習のバランスを握るnum_leavesから入るのが定石です。既定値と役割を押さえておきます。
| パラメータ | 既定値 | 役割 |
|---|---|---|
| num_leaves | 31 | 1本の木の葉の最大数。精度と過学習を最も左右する |
| max_depth | -1(無制限) | 木の深さの上限。過学習時にまず制限する |
| learning_rate | 0.1 | 1本ごとの寄与度。小さくして本数を増やすと精度が安定 |
| n_estimators | 100 | 木の本数。early stoppingと併用するのが前提 |
| min_data_in_leaf | 20 | 1葉あたりの最小データ数。増やすと過学習を抑制 |
leaf-wiseの性質上、num_leavesを2^max_depthより小さく保つのが過学習回避の基本ルールです。学習率を下げるほど精度は安定しますが本数(=学習時間)が増えるため、learning_rateを0.01〜0.05に下げ、n_estimatorsを数百〜数千に増やし、early stoppingで打ち切る、という組み合わせが実務での落としどころになります。
XGBoost・CatBoost・ランダムフォレストとの違い
同じ決定木ベースでも、木の作り方と得意分野が異なります。用途に応じて選び分けます。
| 手法 | 木の学習 | 成長方式 | 強み |
|---|---|---|---|
| LightGBM | ブースティング(直列) | leaf-wise | 学習が速く省メモリ・大規模データ |
| XGBoost | ブースティング(直列) | level-wise | 安定性・過学習耐性・実績 |
| CatBoost | ブースティング(直列) | 対称木 | カテゴリ変数の自動処理 |
| ランダムフォレスト | バギング(並列) | 各木を独立に構築 | シンプル・過学習に強い |
XGBoostとの違いは成長方式にあります。LightGBMのleaf-wiseは同条件なら学習が速く精度も出やすい半面、XGBoostのlevel-wiseは木が均等に育つぶん過学習しにくく挙動が読みやすい。データが大きく試行回数を稼ぎたいならLightGBM、堅牢性を優先するならXGBoostが向きます。
CatBoostとの違いはカテゴリ変数の扱いです。LightGBMもカテゴリ列を指定できますが、CatBoostは順序付きブースティングでカテゴリを自動処理し、前処理を減らせます。カテゴリ変数が多いデータではCatBoostが有利な場面があります(詳細はCatBoostの解説記事)。
ランダムフォレストとの違いは学習の方向性です。ランダムフォレストは多数の木を独立に作って多数決するバギングで、過学習に強く扱いやすい一方、精度の上限はブースティングに一歩譲る傾向があります。精度を追い込みたい表形式データではLightGBMが選ばれます。
LightGBMを避けたほうがよいケース
LightGBMは万能ではありません。数百行程度の小さいデータでは、leaf-wiseの表現力が過学習に直結しやすく、ロジスティック回帰やランダムフォレストのほうが安定することがあります。また、画像・音声・自然言語のような非構造データは、そもそも勾配ブースティングの土俵ではなくディープラーニングの領域です。カテゴリ変数が支配的でエンコーディングの手間を避けたい場合はCatBoost、モデルの挙動を厳密に読みたい規制業務ではより単純なモデルが適することもあります。「まず試す第一候補」ではあっても、行数が数千行に満たないか、入力が画像・テキストなどの非構造データかをまず確認し、当てはまるなら別のモデルを検討するのが安全です。
よくある質問
LightGBMは無料で使えますか?
はい。LightGBMはMITライセンスのオープンソースソフトウェアで、商用利用を含めて無料です。ライセンス費用はかからず、pipやcondaで導入できます。
LightGBMとXGBoostはどちらを使うべきですか?
大規模データで学習速度を重視するならLightGBM、過学習耐性や挙動の安定性を優先するならXGBoostが目安です。まずLightGBMで試し、過学習が気になる場合にXGBoostと比較する進め方が実務的です。
LightGBMとランダムフォレストの違いは何ですか?
ランダムフォレストは木を独立に作って多数決するバギング、LightGBMは誤差を順番に縮めるブースティングです。扱いやすさはランダムフォレスト、精度の追い込みやすさはLightGBMに分があります。
LightGBMは初心者でも使えますか?
scikit-learn互換のAPIがあるため、fitとpredictの基本操作は数行で書けます。まず既定値で動かし、精度が頭打ちになったらnum_leavesとlearning_rateから調整するとよいでしょう。
LightGBMはどんな予測に向いていますか?
需要予測や与信スコアリング、離脱予測など、数値・カテゴリが混在する表形式データの分類・回帰に広く使えます。ランキング学習にも対応しており、着順予測のような順位付けタスクにも応用できます(実装例は競馬予想AIの特徴量一覧とLightGBM(ランキング学習)による着順予測の実装を参照)。