アンサンブル手法:Kaggle機械学習チャンピオン

公開: 2022-03-11

機械学習アンサンブルに関しては、「2つの頭が1つよりも優れている」ということわざが新しい意味を持ちます。 アンサンブル手法は、Kaggleコンテストで最も装飾されたMLファミリーの一部であり、多くの場合、印象的な結果でコンテストに勝ちます。

しかし、統計家のサー・フランシス・ガルトンが集約されたインテリジェンスの効力に気づいたのは、Kaggleの1世紀前のことでした。 彼は、参加者が牛の体重を推測しなければならなかった家畜見本市での競争に遭遇しました。 800人が推測を提出しましたが、スキルレベルはさまざまでした。農家や肉屋は、牛を間近で見たことがない都市住民と一緒に推測したため、ゴルトンは平均的な推測はかなり間違っていると考えました。

群衆の推測の平均は1ポンド未満(<0.1%)ずれていることが判明しました。 しかし、最高の個々の予測でさえ、十分に的外れでした。

どうしてそうなるのでしょうか? 何がそのような予想外の結果を可能にしたのですか?

マシンアンサンブルを非常に効果的にするもの

ゴルトンに彼の信念に疑問を投げかけた出来事は、アンサンブルが非常に強力になる理由も示しています。同じ問題に対してデータのさまざまな部分を使用してトレーニングされた、異なる独立したモデルがある場合、それらは個別よりも一緒に機能します。 理由? 各モデルは、概念の異なる部分を学習します。 したがって、各モデルは、その「知識」に基づいて有効な結果とエラーを生成します。

しかし、最も興味深いのは、各真の部分が他の部分を補完し、エラーが互いに打ち消し合うことです。

8つの異なるモデルの概念を描いた画像。それぞれが、重複する場合と重複しない場合がある異なる一連の事実を学習します。結果は、各モデルが学習したことを組み合わせて、それらのエラーのいくつかを排除します。

データの個別のサブセットに対して分散の大きいモデル(決定木など)をトレーニングする必要があります。 この追加された分散は、各モデルが異なるデータに適合していることを意味しますが、組み合わせると、まるで魔法のように分散が消えます。 これにより、新しい、より堅牢なモデルが作成されます。

ゴルトンの場合と同様に、すべてのソースからのすべてのデータを組み合わせると、結果は孤立したデータポイントよりも「スマート」になります。

Kaggleコンペティションでのアンサンブル学習の詳細

オットーグループの製品分類チャレンジでは、参加者は主要な製品カテゴリを区別できる予測モデルを構築する必要がありました。

ここでは、優勝モデルがどのように構築されたかを確認できます。 これは3つのレイヤーのスタックでした。最初のモデルには33のモデルがあり、2番目のモデルにはさらに3つのモデル(XGBoost、ニューラルネットワーク、およびAdaBoost)が追加され、3番目のレイヤーは前のレイヤー出力の加重平均でした。 それは非常に複雑なモデルであり、アンサンブルでもありました。

Kaggleのもう1つの成功は、Crowdflower SearchResultsRelevanceコンペティションでChenglongChenによって作成されたモデルです。 課題は、検索結果の関連性を測定するために使用できる予測子を作成することでした。 彼の方法の完全な説明を読むことができますが、私たちの関心のあるポイントはアンサンブルであるため、ストーリーの重要な部分は、35のモデルのアンサンブルを使用したことです。その多くはアンサンブルでもあり、メタアンサンブルです。話す。

アンサンブルメソッド

機械学習でアンサンブル手法を実装する方法はたくさんあります。 最も一般的な方法のいくつかを探ります:

  • バギング
    • ランダムフォレスト
  • ブースティング
    • AdaBoost
    • 勾配ブースティングとXGBoost
  • ハイブリッドアンサンブル法
    • 投票
    • スタッキング
    • カスケード

バギング

前述のように、データのさまざまなサブセットに対して多くのモデルをトレーニングする必要があります。 実際には、単一のモデルよりも多くのモデルではるかに多くのデータが必要になるため、これは簡単ではありません。また、高品質のデータセットを取得するのは簡単ではない場合があります。 これは、バギング(ブートストラップ集約)が便利な場合です。これは、ブートストラップによってデータを分割するためです。ランダムなサンプルと置換により、異なるサブセットがオーバーラップします。

アンサンブルモデルをトレーニングしたら、平均、中央値、最頻値など、任意のメトリックを使用して各モデル予測を集計することにより、最終的な予測を作成します。 モデル予測確率を使用して、重み付けされたメトリックを作成することもできます。

バギング手法を使用してブートストラップを介してデータを分割し、さまざまなサブセットからの各モデル予測を集約して最終出力を生成することを示す図。

決定木をモデルとして使用したいが、データに強力な予測属性がほとんどない場合、すべてのツリーは類似しています。 これは、同じ属性がルートノードに存在する傾向があり、ツリーの各ブランチで同様の結果が生成されるためです。

ランダムフォレスト

この問題に対処する1つの手法は、ランダムフォレストです。 ツリーを使用してバギングアンサンブルを作成しますが、各ノードは可能な属性をランダムなサブセットに制限します。 これにより、モデルが強制的に異なり、前の問題が解決されます。 また、ランダムフォレストは特徴選択の非常に優れたモデルになります。

ランダムフォレストは、分散が少なくトレーニング時間が短い優れたパフォーマンスを提供するため、最も人気のあるMLモデルの1つです。

ブースティング

Boostingはまた、ブートストラップを使用してモデルをトレーニングしますが、主な違いは、モデルの予測エラーに基づいて各インスタンスに重みを追加することです。 バギングは並列プロセスですが、ブースティングは順次プロセスであり、各モデルの確率が高くなります。 これにより、以前のモデル予測のいくつかのインスタンスにアクセスできます。

この変更により、ブーストは、誤って分類されたインスタンスへのフォーカスを増やして、グローバルパフォーマンスを向上させようとします。

バギングとブースティングで使用されるさまざまなアプローチを示した図で、バギングの並列性とブースティングの順次性を示しています。

モデルにも重みが加わります。 トレーニング時のパフォーマンスが優れている予測子は、予測段階での重みが高くなります。

最も人気のあるブースティングモデルのいくつかを詳しく見てみましょう。

AdaBoost

AdaBoostは、ブースティングの最初の実装の1つでした。 これは、一般的なブースティングについて概説したことをほぼ正確に実行し、モデルとして決定木を使用します。 いくつかの疑似コーディングを使用してトレーニングフェーズを説明しましょう。

 For each instance i Assign w[i] (weight, same for all) For each iteration t Generate a subset s[t] by weighted boosting (using the w[i] weights) Train model m[t] using s[t] Store m[t] Calculate e[t] (error rate of m[t]) Assign error rate e[t] to stored m[t] model If (e[t] <= a_threshold) Exit for Update weights using m[t] errors

予測時に、各予測に対して計算されたエラー率e[t]に基づいて各予測に重みを付けます。 エラー率が高い結果は、精度が高い他の結果よりも重みが少なくなります。

勾配ブースティングとXGBoost

非常に多くのモデルをトレーニングして連携させる際の大きな問題の1つは、最適なハイパーパラメータ構成を見つけることです。 単一のモデルに最適な構成を見つけることは困難です。 n個のモデルに最適な構成を見つけると、複雑さが指数関数的に増加します。 分離されたモデルの理想的な構成は、他のモデルと連携する必要のあるモデルの構成と同じではない可能性があります。 そのため、すべてのモデルの構成を同時に検索する必要がありますが、どのようにしたらよいでしょうか。

勾配ブースティングは、この問題にエレガントな解決策をもたらします。 これは、入力としてすべてのモデルのすべてのハイパーパラメーター値を持ち、出力としてアンサンブル全体のエラーを持つ損失関数を作成します。 最急降下法により、関数の最小値(つまり、最小のエラー)が検出され、それによって各モデルに最適なハイパーパラメーター構成が検出されます。

このアプローチでは、スケーリングの問題が発生します。 構造化データの機械学習の王者になりましょう。極端な勾配ブースティング、略してXGBoostです。 これは、並列化されたコンピューティング、組み込みの相互検証機能、過剰適合を回避するための正則化、ハードウェアの最適化などのさまざまな手法のおかげで、勾配ブースティングの非常に効率的な実装です。 XGBoostは卓越したパフォーマンスを提供します。

XGBoostは、その作成者がKaggleチャレンジに使用し、大幅に勝ったときに人気を博しました。 彼は結果を公開し、より多くの人がそれを使用できるようにPythonラッパーを作成しました。 多くの人がその可能性を認識したとき、XGBoostはすぐにMLチャンピオンになりました。

ハイブリッドアンサンブル法

しかし、話はそれだけではありません。 すべて同じ種類のモデルを使用する多くの種類のアンサンブルを見てきました。異なるモデルの組み合わせを試してみませんか? それがうまくいけば、さらに強力なMLメソッドであるハイブリッドアンサンブルを作成できます。

投票

投票は、ハイブリッドアンサンブルを作成するための最も簡単なアプローチの1つです。 多くの異なるモデルアルゴリズムをトレーニングし、予測フェーズでそれらを「投票」します。

サポートベクターマシン、ロジスティック回帰、およびKNNの3つのトレーニング済みモデルへのデータの流れを示す図。前者と後者の出力は1で、ロジスティック回帰の出力は0です。最終結果は1です。

パフォーマンスまたは予測確率に基づいて各モデルに重みを追加し、重み付き投票を生成できます。

スタッキング

スタッキングは、単に平均または過半数を計算するのではなく、基本モデルの上に新しいレイヤーを追加して最終的な予測を行うことにより、投票のアイデアを前進させます。 新しいレイヤーはデータからではなくモデルの予測から学習するため、メタ学習の概念が追加されます。

3つのトレーニング済みベースモデルへのデータの流れを示す図。最終出力を表示する前に、それらの出力をスタックモデルに結合します。

必要なすべてのメタレイヤーをスタックして、多くのレベルのモデルを作成できます。 スタックモデルの場合、決定木、SVM、またはパーセプトロンを使用することをお勧めします。 基本モデルの場合、別のアンサンブルを含め、任意の方法を使用して、アンサンブルのアンサンブルを作成できます。 スタッキングは、値の予測だけでなく、それが正しい確率も生成する決定木のような基本モデルでさらにうまく機能します。

スタックは、スタックされたモデルが学習しているものを解釈するのが難しく、バリアントの数がはるかに多いため、バギングやブースティングよりも人気がありません。モデルアルゴリズム、ハイパーパラメータ構成、およびスタックレイヤーの多くの組み合わせで遊ぶことができます。 ただし、モデルの適切な組み合わせにより、スタッキングはブースティングやバギングよりもさらに強力になる可能性があります。

カスケード

カスケードは、予測をかなり確実にしたい場合に使用されます。 スタッキングアプローチを使用しますが、各レイヤーにモデルが1つだけあります。 各レベルで、モデルは目的のクラスではないと見なしたインスタンスを破棄します。

カスケードを使用すると、単純なモデルは複雑なモデルよりも先にデータを評価します。 予測ステップで、最初のモデルがデータを受け取ります。 確実性がxより大きくない場合(値は高くなければならず、0.9より大きいものでなければなりません)、インスタンスは次のモデルに渡されます。 それ以外の場合、カスケードはそのモデルの予測出力を返します。 目的のクラスを高い確実性で予測できるレイヤーがない場合、アンサンブルは負のクラスを返します。

このモデルの典型的な使用例は、トランザクションが不正である可能性が高い時期を予測することです。 システムが1日あたり数百万のトランザクションを計算し、それらのそれぞれを手動で制御することは不可能であると仮定しましょう。 カスケードアンサンブルを使用すると、不正ではないトランザクションを非常に高い確率で破棄でき、手動でチェックするトランザクションのサブセットはごくわずかになります。

不正なトランザクションを検出するためのカスケードの使用を示す図。 2つのモデルは、0.9より高い確実性で不正の可能性を却下しますが、後続のモデルの1つは、より低い確実性を検出し、手動チェックを促します。

これらのモデルは、優れたリコールメトリックが必要な場合に適したオプションです。

投票やスタッキングとは異なり、カスケードアンサンブルはマルチエキスパートアプローチではなくマルチステートアプローチを使用します。 非常に深いカスケードは過剰適合を引き起こす可能性があるため、注意することが重要です。

アンサンブルメソッドの価値

多くのモデルを組み合わせると、人間が一緒に作業するときに発生するように、より優れた、より強力な予測子を作成できます。 アンサンブルの3つのファミリー(バギング、ブースティング、ハイブリッド)の概要を説明し、それらがどのようにトレーニングおよび予測するかを確認しました。

決定木は非常に弱く不安定なモデル(分散が大きい)である可能性がありますが、さまざまなツリーの群集(ランダムフォレスト)は非常に正確で安定した予測子になる可能性があります。 アンサンブルの主な利点の1つは、機械学習における最大のトレードオフの1つである、分散とバイアスが低いモデルを構築することです。 ほとんどの場合、それらは他の方法よりも優れており、深層学習よりも優れている場合もあります。 非構造化データを操作する場合にのみ、ディープニューラルネットワークよりも弱くなる傾向があります。

ディープニューラルネットワークとの比較を続けると、トレーニングとテストの段階でアンサンブルがより軽く、より速くなる傾向があるとも言えます。 また、強力なディスクリートGPUなど、実行に高価なハードウェアを必要としません。

数十または数百のモデルが同時に動作すると、巨大で複雑なツールが作成されるため、アンサンブルには人間が直感的に理解できる可能性がないのは事実です。 ありがたいことに、いくつかの手法では、これらの方法がどのように決定を下すかを理解できます。 最も人気のあるものの1つはLIMEです。これは、任意の機械学習モデルで特定のインスタンスの解釈可能な説明を作成する方法です。

Kaggleコンテストは、開発者が楽しんだり、新しいスキルを習得したり、賞品を獲得したりできるようにするためだけに存在するわけではありません。 究極の目標は、強力なモデルを作成して公開し、実際のシナリオで魔法を実行できるようにすることです。 これらの種類のモデルは、重大な問題を処理する組織によって使用されます。 たとえば、不正の検出は、銀行や旅行などの業界で一般的な使用例であり、1回のトランザクションで大量のお金が移動することを処理します。

アンサンブルは、他のモデルよりも分散とバイアスが低く、より良い予測を生成します。 ただし、彼らが学んでいることを解釈することは困難であり、それは一部の機密性の高いアプリケーションでは非常に重要になる可能性があります。 この一例は、個人ローン業界です。MLモデルは、個人がローンの対象であるかどうかを判断できます。 ただし、クライアントが金融機関がローンを拒否した理由を尋ねた場合は、「MLモデルがそう言ったため」だけでなく、詳細な説明が必要です。

最終的には、エンタープライズアプリケーション、大銀行、中小企業向けの強力なMLモデルを作成する場合でも、コンテストに参加して専門家としての評判を高める場合でも、アンサンブルを選択する必要があります。