発展:勾配ブースティング木の実務(XGBoost・LightGBM)
アンサンブル学習のレッスンの続きとして、表形式のデータで今も広く使われる勾配ブースティング木を掘り下げます。前までの木が残した誤り(残差)を次の木が埋めていくしくみ、それを実務の道具に仕上げた XGBoost と LightGBM、そして列ごとに単位がばらばらな表形式のデータが大小の判定だけで進む決定木とかみ合い、正規化を必要とし局所性を手がかりにするディープラーニングの強みが活きない理由までを実装のコードは扱わず、なぜ効くのかに絞って説明します。
ねらい
このレッスンは、アンサンブル学習のレッスンの続きにあたる発展(はってん)の記事です。行と列で並んだ表形式のデータを扱う実務では、いまも勾配ブースティング木(こうばいブースティングき)が主役です。この記事の軸は、なぜ決定木を束ねた手法が、表形式のデータでディープラーニングより強いことが多いのか、という問いです。答えの鍵は、表形式のデータそのものの性質にあります。
この記事は、ある程度の知識のある人に向けた深掘りです。決定木のレッスンとアンサンブル学習のレッスンで、決定木の枝分かれのしくみと、バギングやブースティングの考え方に触れていることを前提にします。実装のコードは扱いません。
1. 残った誤りを次の木が埋めていく勾配ブースティング
土台になるのは、アンサンブル学習のレッスンで学んだ勾配ブースティングです。そのしくみをもう一度はっきりさせます。
勾配ブースティングは、決定木を一度にたくさん作りません。1本ずつ、順に足していきます。
まず1本目の木が、大づかみに予測します。当然、誤りが残ります。前までの木の予測と正解との差、つまりまだ埋められていない誤りの残りは、残差(ざんさ)と呼ばれます。2本目の木は、この残差を埋めることに集中して作られます。3本目は、2本目まででなお残った残差を埋めます。木を足すたびに、残る誤りが少しずつ削られていきます。
ここが、バギングとの違いです。バギング、たとえばランダムフォレストは、たくさんの木をたがいに独立に育てて、多数決や平均をとります。勾配ブースティングはそうではありません。前の木の結果を受け取ってから、次の木が作られます。木どうしが、残差を引き継ぐリレーのようにつながっているのです。この積み重ねが高い精度を生む一方で、前の木が終わるまで次の木を作れないため、学習は本質的に順番の処理になります。
理解の確認
勾配ブースティングは、決定木を1本ずつ足し、前までの木が残した残差を次の木が埋めていく進め方です。木を独立に育てて多数決するバギングと違い、木どうしが残差を引き継ぐリレーのようにつながっています。
2. 勾配ブースティングを実務の道具に仕上げた XGBoost と LightGBM
この勾配ブースティングを実務で使える道具に仕上げたのが、XGBoost(エックスジーブースト)と LightGBM(ライトジービーエム)です。XGBoost は eXtreme Gradient Boosting の略です。LightGBM はマイクロソフトの研究チームが公開した実装で、名前の Light は軽さを表します。考え方そのものは勾配ブースティングのままで、効かせ方に2つの工夫が加わっています。
1つ目は、過学習を抑える工夫です。木を足しすぎたり、1本の木を複雑にしすぎたりすると、学習したデータの細かな癖にまで予測を合わせてしまいます。学習したデータでは当たるのに、新しいデータでは外れる。この状態は過学習と呼ばれます。XGBoost は、葉の数や葉の値の大きさといった木の複雑さに罰を与える項を学習の目標に組み込んでいます。複雑にするだけの値打ちがある枝分かれしか採用されないので、木が育ちすぎません。
2つ目は、速さの工夫です。決定木を育てる計算で時間がかかるのは、どの列のどの値で枝分かれするかを探す部分です。LightGBM は、数値を細かい区間にまとめてから候補を探すなど、この探し方を軽くして、大きなデータでも学習をすばやく終えます。
この2つの工夫のおかげで、勾配ブースティング木は、大きな表形式のデータにも現実的な時間で高い精度を出せるようになりました。実務やコンテストで、まず試される定番になっている理由です。
ポイント
XGBoost と LightGBM は、勾配ブースティングの考え方はそのままに、木の複雑さに罰を与えて過学習を抑える工夫と、枝分かれの探し方を軽くして速く学習する工夫を加えた実務版です。
3. 単位がばらばらな列と大小の判定だけで進む決定木の相性
表形式のデータをあらためて見ると、列ごとに単位も性質もばらばらです。年齢の列は歳、金額の列は円、区分の列は数値ですらない種類の名前です。列と列のあいだに、共通の物差しはありません。
決定木は、この形のデータに最初から向いています。枝分かれの判定は、1つの列を選んで「この値より大きいか小さいか」を比べるだけだからです。大小の順番は、単位を変えても崩れません。金額の列を円から千円単位に書き換えても、並び順は同じなので、できあがる木も同じです。数値の大きさをそろえる下ごしらえが、そもそも要らないのです。
一方、ディープラーニングは、入力のすべての数値に重みを掛けて足し合わせる計算を土台にしています。単位のばらばらな数値が、同じ足し算の土俵に乗ります。金額のように桁の大きい列があると、計算がその列に引きずられて、学習がうまく進みません。だから、入力の数値の範囲を事前にそろえる下ごしらえが必須になります。この下ごしらえは正規化(せいきか)と呼ばれます。
つまり、列ごとにばらばらという表形式のデータの性質は、決定木にとっては素通りできる前提です。ディープラーニングにとっては、正規化という手間をかけてようやく乗り越えられる壁になります。
理解の確認
決定木の枝分かれは列ごとの大小の判定だけなので、単位がばらばらでも数値の大きさをそろえる必要がありません。ディープラーニングは重みの掛け算と足し合わせを土台にするため、事前の正規化が必須になります。
4. 画像にあって表形式に無い隣どうしのつながり
表形式のデータには、画像とのもう1つの決定的な違いがあります。隣どうしのつながりです。
画像は、色を表す数値が格子状に並んだデータです。1つひとつの点は画素(がそ)と呼ばれ、ピクセルとも呼ばれます。隣どうしのピクセルは強くつながっています。空を写した部分の隣はたいてい空ですし、輪郭や模様は、近くのピクセルのまとまりとして現れます。この、近くの値どうしが強く関係し合う性質は局所性(きょくしょせい)と呼ばれます。画像で力を発揮するディープラーニングのモデルは、近くのまとまりから特徴を拾い上げる作りになっていて、局所性のあるデータでこそ強みが出ます。
表形式のデータには、この局所性がありません。年齢の列の隣に金額の列が並んでいるのは、たまたまの並び順です。列を入れ替えても、表の意味はまったく変わりません。隣であることに、何の情報も無いのです。
つながりの無い場所では、近くのまとまりから特徴を拾うという強みが空回りします。ディープラーニングに表形式のデータを学ばせること自体はできますが、手がかりの無いところにつながりを探す計算はむだになり、多くのデータと調整をつぎ込んでも精度が伸びにくいのです。
XGBoost や LightGBM の手堅さは、ここまでの性質のかみ合わせから説明できます。土台の決定木が、単位のばらばらな列を大小の判定でそのまま扱います。残差を埋める積み重ねが、精度を高めます。木の複雑さへの罰が、過学習を抑えます。データの性質と手法のしくみがかみ合っているから、表形式のデータなら、それほど大量でないデータでも手堅く高い精度が出るのです。
理解の確認
画像には、近くのピクセルどうしが強く関係し合う局所性があり、ディープラーニングはそこで力を発揮します。表形式のデータには局所性が無いため、この強みが活きず、大小の判定を積み重ねる勾配ブースティング木が優位になります。
5. データの性質で決める使い分けの見当
最後に、使い分けの見当です。どちらが上という話ではなく、データの性質で選びます。
行と列に並んだ表形式のデータ、たとえば売上や顧客や検査値のようなデータなら、まず勾配ブースティング木を試すのが手堅い選択です。列ごとにばらばらで局所性の無いデータの性質に、しくみが合っているからです。一方、画像や音声や文章のような、近くの値どうしがつながり合うデータなら、ディープラーニングが力を発揮します。
現実のデータ分析では、この2つを場面に応じて使い分けたり、組み合わせたりします。生成AIの華やかさの陰で目立ちませんが、表形式のデータを手堅く当てる勾配ブースティング木は、いまも実務を静かに支える主力です。名前だけでなく、なぜ効くのかまで説明できれば、手法を選ぶ判断にも自信が持てます。
理解度の確認
説明できる項目にチェックを入れましょう。すべて確認できたら、完了ボタンで記録します。
分からなかった点・気になった点
読み込み中です。