2026/06/23

LightGBMでベースライン作成後の次のステップ

記事イメージ
※画像はイメージです。本文と直接の関係はありません

※この記事はAIによって情報収集・執筆されています。内容に誤りが含まれることがあります。必ず公式情報をご確認ください。


![LightGBM ロゴ]

(イラスト: AI生成)

LightGBMでベースライン作成後の次のステップ

ベースライン作成後の5つの工程

    1. データ分割と early stopping(早期停止)を組み込んだベースライン学習
    1. early stopping を有効にしたままハイパーパラメータ最適化
    1. 重要度(gain)に基づく特徴量の選別と再学習
    1. 相関が低い複数モデルによるアンサンブル
    1. 実験ログと乱数シードによる再現性の確保

LightGBMが最初の選択肢になる理由

  • 高速・高精度・大規模データ対応 の三本柱で評価されています[1]。
  • ヒストグラムベース葉優先(leaf‑wise)成長 により、メモリ使用量を抑えつつ学習速度が向上します[2]。
  • 欠損値・カテゴリ変数の自動処理 が可能で、categorical_feature に列名を渡すだけで内部で適切に分割されます[3]。
  • スケーリング不要 です。決定木系アルゴリズムなので、特徴量の標準化や正規化は必須ではありません[3]。ただし lambda_l1lambda_l2 など正則化を併用する場合、極端にスケールが異なる特徴があると学習が不安定になることがあります。
  • GPU と分散学習のサポート が公式ドキュメントに記載されています。GPU を利用するには CUDA 対応のビルドが必要で、分散学習は Dask や Spark との連携が前提となります[4]。

LightGBMの内部最適化技術

  • 葉優先(leaf‑wise)成長:損失削減が大きい葉を優先的に分割し、同じ木数でも高い表現力を実現します[2]。
  • ヒストグラムベース:連続値をビンにまとめて分割点を探索し、計算量とメモリ使用を削減します[2]。

オプション機能
- GOSS(Gradient‑based One‑Side Sampling) は勾配が大きいサンプルを残し、残りを間引くことで学習コストを削減します。デフォルトでは無効で、top_rateother_rate などで有効化します[5]。
- EFB(Exclusive Feature Bundling) は相互に排他的なスパース特徴を 1 つにまとめ、次元とメモリを削減します。feature_fraction_bynode などで設定します[5]。

ベースライン構築後に行うべき具体的ステップ

3.1 データ分割と early stopping(早期停止)を組み込んだベースライン

  1. 訓練データと検証データ(例:train / valid)に分割します。
  2. early_stopping_rounds を設定し、検証指標が連続して改善しなければ学習を自動停止させます。
import lightgbm as lgb

model = lgb.train(
    params,
    train_data,
    valid_sets=[valid_data],
    early_stopping_rounds=50,
    verbose_eval=10,
)

early stopping は 過学習の抑止手段 ですが、指標が改善しないまま学習が止まっただけでは必ずしもスコアが向上しません。改善が見られない場合は学習率や木の深さなどを見直す必要があります。

3.2 early stopping を併用したハイパーパラメータ最適化

ベースラインを基に Optuna などで主要パラメータを探索します。探索中は early stopping を有効にしたまま 実行し、無駄なイテレーションを抑えます。

  • 同一の検証データを何度も利用すると バリデーションリーク が起きやすくなるため、以下の対策が推奨されます。
    • 探索ごとに検証データを再分割する。
    • k‑fold 交差検証など複数の検証セットを用いる。

主な調整対象は次の通りです。

  • learning_rate(学習の安定性と収束速度)
  • num_leavesmax_depth(木の複雑さ)[1]
  • min_data_in_leaf(葉の最小データ数)
  • feature_fractionbagging_fraction(サンプリングによる汎化性能向上)[4]
  • lambda_l1lambda_l2(L1/L2 正則化)[1]

3.3 重要度(gain)に基づく特徴量の評価と除外

最適化済みモデルから情報利得ベースの重要度を取得し、可視化します。

importance = model.feature_importance(importance_type='gain')
lgb.plot_importance(model, importance_type='gain')

重要度が低い特徴を除外して再学習すると、モデルがシンプルになり過学習が抑えられるケースがあります[4]。過学習が既に起きていない場合 は性能低下リスクがあるため、除外前後の検証スコアを必ず比較してください。

3.4 アンサンブル手法の活用

  • モデル平均
    シードやパラメータを変えて複数の LightGBM モデルを学習し、予測確率を平均します。相関が低いほど効果が大きく、相関が高い場合はスコアの安定化効果が限定的です。

  • スタッキング
    LightGBM に加えて XGBoost、CatBoost、ランダムフォレストなど異種モデルを組み合わせ、アウト・オブ・フォールド(OOF)予測 を用いてメタモデルを学習します。OOF 予測を使用すれば学習データへのリークを防止できます[1]。

モデル間の相関を下げる具体的な手段は次の通りです。

  • シードやハイパーパラメータの変更
  • feature_fractionbagging_fraction で特徴・データのサブサンプリング
  • 学習データのブートストラップ(サンプルを再抽出)

3.5 再現性の確保

実験の再現性を担保するために、乱数シードと環境情報を固定します。

import random, numpy as np, lightgbm as lgb

random.seed(42)
np.random.seed(42)
lgb.set_global_random_seed(42)   # 公式 API に基づくシード固定

CPU と GPU の演算順序や使用ライブラリのバージョンが変わると、同一シードでも結果が若干変動することがあります。したがって、Python のバージョン、LightGBM のバージョン、使用ハードウェア情報environment.yaml などに記録し、可能であれば Docker コンテナ化して環境全体を固定することが望ましいです。

モデルは model.save_model('model.txt') で保存し、ハイパーパラメータは JSON 形式などのテキストで残すことで、後から同一条件で再学習が可能です[6][4]。

まとめ

  • LightGBM は高速・高精度・大規模データ対応という三本柱に加え、欠損値・カテゴリ変数の自動処理やスケーリング不要といった実務向きの特長があります。
  • ヒストグラムベースと葉優先成長が学習効率を高め、GOSS と EFB はオプションで有効化すればさらにコスト削減が期待できます。
  • ベースライン作成 → early stopping 付きハイパーパラメータ最適化(検証データの再分割や交差検証でリーク回避) → 重要度に基づく特徴選択 → 相関が低い複数モデルのアンサンブル(シード・パラメータ変更、サブサンプリング、ブートストラップ活用) → 実験ログ・シード・環境情報の記録と Docker による環境固定 の 5 段階を順に実施すれば、過学習リスクを抑えつつ段階的に精度向上が図れます。
  • 再現性はシード固定だけでなく、ライブラリ・ハードウェア情報の管理が重要です。

このフローは多くのタブular データタスクで有効ですが、データ品質やタスク固有の制約に応じて適宜調整する必要があります。

参考URL

[2] https://www.nri.com/jp/knowledge/glossary/lightgbm.html
[3] https://qiita.com/UKI
datascience/items/2635155248c1d5b3be3b
[1] https://kentei.ai/blog/archives/1628
[4] https://lightgbm.readthedocs.io/en/latest/index.html
[5] https://www.codexa.net/lightgbm-beginner/
[6] https://docs.python.org/3/library/random.html (乱数生成に関する情報)