はじめに
Kaggleなどの機械学習コンペでは、決定木ベースのブースティング手法やディープラーニングがよく使われている印象があります。
しかし、私自身は CatBoost や XGBoost をこれまで使ったことがなく、「実際どんな挙動をするのか?」が気になって今回試してみることにしました。巷ではLightGBMの精度が高いといわれているようですが、いつでもLgihtGBMが良いのでしょうか?
そこで三つのモデルの精度を比較してみる事にしました。
なお、コードを書いて予測精度を見るだけでは面白みに欠けるので、今回は一歩踏み込んで、サンプル数を段階的に増やしながら各モデルの精度を可視化することにしました。
以下の3つのモデルで「人工的に生成したFIM風データ」を使って回帰タスクを実行し、結果をまとめて3つのモデルの性能を比較してみました。
- XGBoost
- LightGBM
- CatBoost
なお、ハイパーパラメータは一切チューニングせず、デフォルト設定のままで試しています。
以前の記事では回帰分析とLightGBMで予測モデルを作り、非線形性のあるデータの予測精度を比較しています。線形性を前提としたモデルと非線形性を扱えるモデルの差に興味がある方はこちらもご覧ください。
実験設定
- 入力変数は fim_in, age, mmse, paralysis の4つ
- 目的変数は fim_out(FIMスコアの予測値を想定)
- サンプルサイズは 50 〜 500 の範囲で段階的に評価
- 評価指標は MSE(平均二乗誤差)
- 各サンプルサイズで 10 回の試行を行い、MSEの平均と標準偏差を算出。
すべてのモデルはハイパーパラメータチューニングなし、つまり「素」の状態で評価しています。
結果:予測精度(MSE)の比較
以下のグラフが結果をまとめたものです。横軸がサンプルサイズ、縦軸がMSEの大きさを表しています。三つのモデルがそれぞれ3色で表現されており、実線が各々のモデルのMSEの平均値を、帯状のエリアが標準偏差の範囲を示しています。

CatBoost:最も安定して高精度
CatBoostは全てのサンプルサイズで安定して低いMSEを記録しました。
これはCatBoostの過学習耐性の強さや、デフォルト設定でも堅実に動作する設計思想がうまく現れた結果だと思われます。
LightGBM:小規模データではやや不利?
LightGBMはサンプル数が少ない場面で精度が低下する傾向が見られました。
高速でスケーラブルな点が魅力な一方で、デフォルトパラメータが大規模データを前提としていることもあり、小規模データでは不利に働くことがあるようです。
XGBoost:中庸な安定型
XGBoostは、特筆すべき強みも弱みも見られず、無難で中庸な成績。
デフォルト設定でもある程度のパフォーマンスが期待でき、チューニング次第で伸びしろがありそうです。
どう使い分けるべきか?
状況に応じた使い分けのヒントは以下の通りです:
条件 | おすすめモデル | 理由 |
データが少ない | CatBoost | チューニングなしでも安定した精度。過学習に強い。 |
初めて使う | XGBoost | ドキュメント・記事が豊富で学びやすい。 |
データが大規模(数十万件など) | LightGBM | 学習が非常に高速。 |
まとめ
- チューニングしない・チューニングに自信がないなら、CatBoostが安定して優秀。
- XGBoostは情報も多く、バランスの良い入門向け。
- LightGBMはデータが少ないと過学習しやすいため、真価を発揮するにはデータ量が必要。
回帰タスクで勾配ブースティングを選ぶとき、「なんとなくLightGBM」ではなく、今回のような比較をしておくと、より納得感のある選択ができると思います。
補足:ハイパーパラメータをチューニングすれば…?
今回は意図的に「チューニングなし」で比較を行いましたが、実際のタスクでは Optunaなどによるハイパーパラメータ最適化がよく行われます。LightGBMはkaggleでも良く上位に入っていますが、やはりチューニングなしでは性能を発揮できないようでした。
LightGBMやXGBoostは、パラメータ調整によって一気に性能が向上する可能性があるため、今後は最適化ありの比較記事も書いていきたいと思います。
コメント