u++の備忘録

「初手LightGBM」をする7つの理由

Kaggleなどのデータ分析コンペでテーブルデータを扱う場合、最近は取りあえずLightGBMを利用する場合が多いです。

本記事では、初手の機械学習アルゴリズムとして「LightGBM」*1を採用する理由を紹介します。あくまで2019年10月末時点での個人の主観なので、ご参考までにご覧いただければと思います。

初手としては、手の混んだ特徴量を作らずに、まずは何かしらの予測結果を生成したい場合も多いです。LightGBMは既存のデータセットを極力加工せずに利用するという観点で、特徴量エンジニアリングの負担を軽減してくれる特徴があります。理由1〜3は、これらの特徴によるものです。

  1. 欠損値をそのまま扱える
  2. カテゴリ変数の指定ができる
  3. 特徴量のスケーリングが不要

1. 欠損値をそのまま扱える

LightGBMは、欠損値を含む特徴量も入力として扱うことが可能です。

線形回帰モデルのロジスティック回帰などを用いる場合は欠損値を補完する処理が必要ですが、LightGBMを採用することでその処理を割愛できることになります。欠損値をどのように補完するかを考える時間を省略できる利点があります。

2. カテゴリ変数の指定ができる

LightGBMは、カテゴリ変数に対して特別な処理を自動的に実行してくれます。

機械学習のカテゴリ変数の一般的な処理としては、「One-Hotエンコーディング」と呼ばれる下図のような手法があります。

f:id:upura:20191029182246p:plain

一方で、One-Hotエンコーディングには、一つのカテゴリ変数が多くの値を取る場合に列数が増え過ぎてしまうデメリットがあります。

LightGBMでは「S、Q、C」を単に「0、1、2」という数値に変換しておき、カテゴリ変数として明示することで、そのまま扱うことが可能です。カテゴリ変数の処理に苦心する時間を省略できる利点があります。

import lightgbm as lgb


categorical_features = ['Embarked']

lgb_train = lgb.Dataset(X_train, y_train,
                        categorical_feature=categorical_features)
lgb_eval = lgb.Dataset(X_valid, y_valid, reference=lgb_train,
                       categorical_feature=categorical_features)

LightGBMが欠損値とカテゴリ変数を処理する内部の仕組みについては「lightgbm カテゴリカル変数と欠損値の扱いについて+α」*2で詳しく解説されています。

3. 特徴量のスケーリングが不要

LightGBMは、「決定木」を基にした機械学習アルゴリズムです。決定木では次の図のように、一つの特徴量に対し一つの閾値を定め、次々と条件分岐していきながら予測値を決定します。

f:id:upura:20191029182355p:plain

学習用データセットからは、どの特徴量で、どういう閾値で、どのように判定するかを学びます。ここで大切なのは閾値なので、ロジスティック回帰のように特徴量を標準化する処理は不要となります。

4. feature importanceが確認できる

LightGBMは、特徴量の重要度を計算する機能があります。特徴量の重要度を見ることで、次なる特徴量エンジニアリングの手を考えることが可能です。

fold_importance_df["importance"] = model.feature_importance(importance_type='gain')

5. 精度が出やすく最終的なモデルとして残る可能性が高い

LightGBMは過去のKaggleでの実績からも分かる通り、テーブルデータを扱う上で優秀な機械学習アルゴリズムです。最初からLightGBMを試しておくことで、手戻りの可能性を減らすことができます。

6. 比較的大きいデータも高速に扱える

LightGBMは、比較的大きなデータも高速に扱える利点があります。開発者の一人である大元さんの「PyData.Tokyo Meetup #21」*3での発表資料には、「LightGBMが特に力を入れる2つ」として次の点が挙げられていました*4

  1. 効率の良い並列化による学習の高速化
  2. 大規模なデータに適用できるメモリパフォーマンス

ひとまずの結果を得るために、学習を高速に終えてくれるのは非常に魅力的です。

7. 過去の経験からハイパーパラメータの勘所がある

こちらは個人的な理由ですが、LightGBMは過去にKaggleなどでの利用経験が多く、ハイパーパラメータの調整もある程度は勘所が付いています。先に紹介した大元さんの資料でも言及がある通り、LightGBMはハイパーパラメータのデフォルト設定があまりイケてないです。むしろ、ハイパーパラメータの知見がないとLightGBMの性能を十分に発揮できないかもしれません。

おわりに

本記事では、データ分析コンペでテーブルデータを扱う場合に初手の機械学習アルゴリズムとしてLightGBMを選択する理由を紹介しました。