LightGBM
LightGBMは、特徴量ヒストグラムから決定木を葉優先で成長させ、大規模な表形式データセットを高速に学習する勾配ブースティングフレームワークです。
LightGBM(Light Gradient Boosting Machine)は、大規模データセットでの高速性と低メモリ使用量を重視して構築されたオープンソースの勾配ブースティングフレームワークです。表形式データに対してアンサンブルの決定木をトレーニングします。Microsoftは2016年にリリースし、NeurIPS 2017の論文LightGBM: A Highly Efficient Gradient Boosting Decision Treeでアルゴリズムについて説明しました。2026年3月には、同じメンテナーのもとで公式リポジトリがlightgbm-orgのGitHub組織に移管されました。LightGBMはPython、R、C++、コマンドラインから分類、回帰、ランキングを処理でき、機械学習コンペティションで多くの優勝ソリューションに採用されています。約10,000行の中規模テーブルでは、LightGBMのような木のアンサンブルが依然としてディープラーニングを上回ることがよくあります。
LightGBMの仕組み#
勾配ブースティングでは、木を1本ずつ構築します。新しい木は、現在のアンサンブルの予測に対する損失関数の勾配に適合させます。二乗誤差の場合、これは残差に相当するため、先行する木が残した誤差を修正します。モデルの予測値は、各出力に学習率を乗じたすべての木の出力の合計です。最も計算コストの高い処理は各ノードの最適な分割を見つけることであり、LightGBMは4つの手法でこれを高速化します。
- ヒストグラムベースの分割: トレーニング前に、LightGBMは各連続特徴量を最大255個のビン(
max_bin)に分類します。分割の探索では、ソート済みの各値ではなくビンの境界を調べます。また、分割後は大きい方の子のヒストグラムが親のヒストグラムから小さい方の子のヒストグラムを差し引いたものと等しくなるため、データから構築するのは小さい方の子のヒストグラムだけです。 - 葉優先の成長: LightGBMは、木の葉が
num_leaves個(デフォルトでは31個)になるまで、損失を最も大きく減らす最適な分割を持つ葉を常に分割します。各深さのすべてのノードを分割してから次の深さへ進む方式とは異なります。同じ葉数なら、深さ優先の成長よりも損失を低くできますが、深く偏った木が生成されるため、小規模なデータセットでは過学習する可能性があります。 - 勾配ベースの片側サンプリング (GOSS): 勾配が大きい行は、モデルの予測がまだ不正確な行です。
data_sample_strategy="goss"を使用すると、LightGBMは勾配が最も大きい行の20%を保持し、残りからさらに10%をランダムにサンプリングして、そのサンプルに重みを付け、データ分布が元の分布に近い状態を保ちます。 - 排他的特徴量バンドリング (EFB): ワンホット列のように、同時に非ゼロになることがまれなスパース特徴量を1つの特徴量に統合し、構築するヒストグラムの数を減らします。
各木は、葉の予算を使い切るか、それ以上有効な分割がなくなるまで分割探索を繰り返して成長し、ブースティングでは各ラウンドでこれを繰り返します。
LightGBMは、categorical_featureに指定された整数エンコード済みのカテゴリ特徴量も直接分割します。ワンホットエンコーディングを使わず、分割ごとにカテゴリをグループ化し、欠損値もデフォルトで処理します。トレーニングはCPU、GPU(device_type="gpu"または"cuda")、および分散学習器を使用した複数マシンで実行できます。
LightGBMのトレーニングとチューニング#
scikit-learnスタイルのLGBMClassifier、LGBMRegressor、LGBMRankerクラスで、ほとんどの用途に対応できます。葉優先の木は非常に深く成長することがあるため、過学習を防ぐ主な制御項目はnum_leaves、min_child_samples(葉あたりの行数はデフォルトで20)、max_depthです。これらに学習率と木の数を組み合わせ、ハイパーパラメーターのチューニングや検証セットでの早期停止によって調整します。ヒストグラムと葉優先の成長による効果は、20,000行、40特徴量の合成テーブルで、scikit-learnの従来型の正確な分割を用いる勾配ブースティングと比較すると分かります。
import time
import lightgbm as lgb
from sklearn.datasets import make_classification
from sklearn.ensemble import GradientBoostingClassifier
from sklearn.model_selection import train_test_split
X, y = make_classification(n_samples=20_000, n_features=40, n_informative=15, random_state=0)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)
# 200 trees each: exact split search vs. LightGBM's histograms and leaf-wise growth
for model in (GradientBoostingClassifier(n_estimators=200), lgb.LGBMClassifier(n_estimators=200, verbose=-1)):
start = time.perf_counter()
model.fit(X_train, y_train)
seconds = time.perf_counter() - start
print(f"{type(model).__name__}: {seconds:.1f} s, accuracy {model.score(X_test, y_test):.3f}")Apple M5 Pro CPUでは、LightGBMは最大31葉の木を200本、1秒未満で成長させます。一方、scikit-learnが深さ3の正確な分割による木を200本構築するには約20秒かかります。また、LightGBMの大きな木は、テスト精度が0.956に達し、0.901のscikit-learnを上回ります。トレーニング済みモデルはテキスト形式またはJSON形式で保存でき、onnxmltoolsでONNXに変換すると、Python以外の環境でもサービングできます。
LightGBMと関連手法の比較#
- XGBoost: 2014年に正則化された二次ブースティングを広めた勾配ブースティングライブラリです。デフォルトでは深さを制限した木を成長させ(
max_depth=6)、grow_policy="lossguide"で葉優先の成長を利用できます。バージョン2.0以降はヒストグラムによる分割探索がデフォルトになっており、現在では2つのライブラリで多くの手法が共通しています。 - CatBoost: 2017年にリリースされたYandexのブースティングライブラリです。対称木を構築し、順序付きターゲット統計量でカテゴリ特徴量をエンコードして、ターゲットリークを抑えます。
- ランダムフォレスト: ブートストラップサンプルを使って深い木を独立にトレーニングし、予測値を平均して分散を抑えます。
- HistGradientBoosting: scikit-learnの
HistGradientBoostingClassifierとHistGradientBoostingRegressorはLightGBMに着想を得た実装で、同じように特徴量をヒストグラムに分類します。 - 表形式データ向け基盤モデル: TabPFNなどの事前学習済みTransformerは、データセットごとのトレーニングを行わず、1回のフォワードパスで小規模なテーブルを予測します。
実際のアプリケーション#
- 不正検知と信用リスク: 銀行では、口座履歴、加盟店、金額、タイミングの特徴量から取引やローン申請をスコアリングします。LightGBMの高速な推論は、取引ごとの判定に適しています。
- 需要予測: 小売業者は、過去の売上、価格、プロモーション、カレンダーの特徴量から、商品と店舗ごとの売上を予測します。人流は一般的な入力データです。Ultralytics YOLO26の物体カウントは、店舗映像でラインを横切る人を追跡し、クラスごとの入店数と退店数を報告します。これを時間ごとに集計すると、LightGBMによる人員配置予測の特徴量になります。
- 検索とレコメンデーションのランキング:
LGBMRankerはデフォルトでLambdaRankの目的関数を使ってトレーニングし、クエリグループ内の文書や商品を並べ替えて、正規化割引累積利得 (NDCG) を最適化します。










