「間違えた予測を集めたら、正しい答えが出る」──そんな逆説的な考え方が統計学習の力強い武器になります。 このチャプターでは、複数のモデルを組み合わせてより良い予測を得る方法を3つの視点から探求します。
個々のモデルが不安定でも、多くのモデルの知恵を合わせれば安定した予測が得られる── この「アンサンブル学習」の考え方は、現代の機械学習の根幹をなしています。
1906年、フランシス・ゴルトンという統計学者が農業フェアを訪れました。そこでは「この牛の体重を当てた人が賞金をもらえる」というコンテストが行われていました。参加者は全員が間違えました──しかし800人の予測値を平均したところ、実際の体重に驚くほど近い値が出たのです。
これは「群衆の知恵」と呼ばれる現象です。個々の予測にはバラツキがありますが、独立した多くの予測を平均することで、そのバラツキが打ち消し合います。

機械学習の世界でも同じことが起こります。1つのモデルは不安定かもしれない──訓練データが少し変わるだけで、予測が大きく変わります。でも、データを少しずつ変えた多くのモデルの予測を平均したら?
その答えが バギング(Bootstrap Aggregating) です。バギングの「バ」は Bootstrap(ブートストラップ)、「ギング」は Aggregating(集約)の略です。「自分でデータを増やして、多数決を取る」という考え方です。
ここで $\hat{f}^{*b}(x)$ は b 番目のモデルの予測、B はモデルの総数を表します。これはシンプルな平均式ですが、その効果は絶大です。
バギングの核心は ブートストラップサンプリング にあります。「ブートストラップ」とは、手持ちのデータから繰り返し無作為に取り出すことで、擬似的に「別のデータセット」を作る手法のことです。

手元に N 個のデータがあるとします。このデータから 復元抽出 で N 個のサンプルを選びます。復元抽出とは、1度選んだ点を「元に戻してから」また選ぶことができる方法です。だから同じデータ点が2回、3回と選ばれることもあります。
こうして作られた「変形した訓練データ」で1つのモデルを学習します。これを B 回繰り返すと、B 個の微妙に異なるモデルが出来上がります。
なぜこれが役立つのでしょうか?
各モデルの予測には「ばらつき」(分散)があります。でも、B 個のモデルを平均することで、このばらつきを打ち消し合わせることができます。B が大きいほど、平均はより安定します。ただし、モデル同士が似た予測をする(互いに相関している)限り、ばらつきを完全にゼロにはできません──これは「群衆の知恵」でも同じで、全員が同じ情報源に頼っていたら、独立した意見とは言えないからです。
バギングは予測の「ばらつき」を減らしますが、「平均的な外れ方」(バイアス)はほとんど変えません。これが「バイアスは同じなのに、なぜ誤差が減るの?」という問いへの答えです。
バギングがすべてのモデルに等しく有効というわけではありません。
不安定なモデル(訓練データが少し変わるだけで予測が大きく変わるモデル)ほど、バギングから大きな恩恵を受けます。決定木はその代表例です。1本の深い決定木は、訓練データのわずかな変化に非常に敏感で、異なるデータセットでは全く異なる形になりえます。
一方、安定なモデル(リッジ回帰など)では、ブートストラップサンプル間の予測の違いが少なく、平均化してもあまり変わりません。

実際の例を考えましょう。分類問題で元の決定木のテストエラーが約45%あったとします。ブートストラップサンプル数 B を増やしていくと、エラーはどんどん減って35%前後に安定します。
ただし完璧にはなれません──理論的に可能な最小エラー(ベイズ最適)の約20%には届きません。これはモデル同士の「相関(似た予測をする傾向)」が残っているからです。
バギングには代償もあります。100本の木の集合はもはや「1本の木」ではありません。解釈可能性が失われます。「なぜこの予測が出たのか」を説明できなくなります。
バギングは「同じアルゴリズムを異なるデータで繰り返す」手法でした。でも、もっと自然な疑問が生まれます:全く異なる種類のモデルを組み合わせたらどうか?
医者に相談するとき、内科医だけでなく外科医や専門医にも意見を聞くことがあります。それぞれ異なる視点、異なる強みを持つからです。機械学習でも同じ発想が使えます。
例えば、線形回帰、決定木、ニューラルネットワークの3つがあるとします。それぞれ異なる仮定、異なる強み、異なる弱点を持ちます。これらを組み合わせれば、それぞれの弱点を互いに補い合えるのではないか?

最もシンプルな方法は全モデルの単純平均です:
すべてのモデルに等しい重みを与えます。「どのモデルも同じくらい信頼できる」と仮定するわけです。
しかし現実には、あるデータには線形回帰が向いていて、別のデータには決定木の方が優れていることがあります。「全員に同じ発言権」ではなく、「より優れたモデルにより大きな重みを」付けたい。
その考えを突き詰めたのが次のセクションのスタッキングです。
「単純平均ではなく、より良いモデルに高い重みを与えたい」──このアイデアを実装したのが スタッキング(Stacked Generalization) です。
しかし問題があります:どのモデルが「より良い」かを、どうやって公正に評価するのか?
もし訓練データをそのまま使って評価すれば、訓練データを暗記しすぎているモデル(過学習したモデル)が不当に高く評価されてしまいます。
解決策は 交差検証 を使うことです。交差検証とは、「学習に使っていないデータで評価する」方法です。具体的には、あるデータ点 i を学習から除外したモデルを作り、そのモデルが「見たことのない」データ点 i をどれだけ正確に予測できるかを評価します。

このようにして得た各モデルの「公正な評価値」を使って、最適な重みを求めます:
ここで $\tilde{f}^{-i}_m(x_i)$ の $-i$ は「データ点 i を除外して学習したモデルが x_i を予測した値」を意味します。
スタッキングは単純平均より洗練されています。各モデルがこのデータセットでどれだけ信頼できるかをデータ自身から学び、最適な重みを自動的に決定します。
今まで見てきた手法はすべて「多くのモデルを組み合わせる」アイデアでした。しかし バンピング(Bumping) は全く異なる目標を持ちます:1つの、でもより良いモデルを見つける。
多くの学習アルゴリズムは 局所最小値 の問題を抱えています。決定木の貪欲な成長アルゴリズムを例に取ります。最初の分割で間違った選択をしてしまうと、その後の選択もすべてその影響を受けて、大域的には最適ではない木ができあがります。
視覚的に考えましょう。山がたくさんある複雑な地形で、谷(最小値)を探したいとします。ボールを1箇所に置いて転がしたら、最も近い谷に落ちて止まります──しかしそれが最も深い谷(大域最適解)とは限りません。

バンピングのアイデアは「ボールを複数の場所から同時に転がす」ことです:
バギングとの決定的な違い:バギングはすべてのモデルを平均化しますが、バンピングは最良の1つを選択します。
なぜブートストラップが役立つのでしょうか?ブートストラップサンプルでは、一部のデータ点が偶然除外されます。もしその点が「グリーディなアルゴリズムを悪い局所最適に引き込む問題点」であれば、その点を含まないサンプルでは、より良い解を見つけられます。
バンピングにはバギングにない大きなメリットがあります:解釈可能性の維持です。バンピングで選ばれたモデルは「1つの決定木」のままなので、「なぜこの予測か」を説明できます。
バギング、スタッキング、バンピング──この3つは表面上似ていますが、根本的な目標が異なります。

バギングは、不安定なモデル(決定木など)を安定させるために使います。多くのブートストラップモデルを平均化することで予測のばらつきを減らします。解釈可能性は失われますが、予測精度は向上します。
スタッキングは、すでに異なる種類の良いモデルを持っている場合に使います。それらの強みを最大限に活かすための最適な重みをデータから学びます。「どのモデルが最も信頼できるか」をデータに語らせます。
バンピングは、局所最小値が問題になる場面で使います。1つの解釈可能なモデルが必要で、かつそのモデルが局所最適に陥りやすいときに有効です。
| 手法 | 目標 | 出力 | 解釈可能性 | 最適な用途 |
|---|---|---|---|---|
| バギング | 分散を減らす | 平均した予測 | 失われる | 不安定なモデル(決定木) |
| スタッキング | 重みを最適化 | 重み付き平均 | 部分的 | 異種モデルの組み合わせ |
| バンピング | 局所最適を回避 | 最良の1つ | 維持される | 局所最小値の多いモデル |
これらは競合するものではなく、互いに補完的です。
アンサンブル学習の旅はここから始まります。次の章では、バギングをさらに発展させた ランダムフォレスト と、弱学習器を順次積み上げる ブースティング を学びます。これらはすべて、今回学んだ「多くのモデルの知恵を借りる」という考え方の発展形です。