8.3 バギング・モデル平均化・バンピング

「間違えた予測を集めたら、正しい答えが出る」──そんな逆説的な考え方が統計学習の力強い武器になります。 このチャプターでは、複数のモデルを組み合わせてより良い予測を得る方法を3つの視点から探求します。

個々のモデルが不安定でも、多くのモデルの知恵を合わせれば安定した予測が得られる── この「アンサンブル学習」の考え方は、現代の機械学習の根幹をなしています。

群衆の知恵 — なぜ平均は個人を超えるのか

1906年、フランシス・ゴルトンという統計学者が農業フェアを訪れました。そこでは「この牛の体重を当てた人が賞金をもらえる」というコンテストが行われていました。参加者は全員が間違えました──しかし800人の予測値を平均したところ、実際の体重に驚くほど近い値が出たのです。

これは「群衆の知恵」と呼ばれる現象です。個々の予測にはバラツキがありますが、独立した多くの予測を平均することで、そのバラツキが打ち消し合います。

複数の予測曲線が1本の安定した平均曲線に収束するアニメーション
薄い青い曲線(個別モデルの予測)が重なるにつれ、黄色の太い曲線(平均)が際立つ

機械学習の世界でも同じことが起こります。1つのモデルは不安定かもしれない──訓練データが少し変わるだけで、予測が大きく変わります。でも、データを少しずつ変えた多くのモデルの予測を平均したら?

その答えが バギング(Bootstrap Aggregating) です。バギングの「バ」は Bootstrap(ブートストラップ)、「ギング」は Aggregating(集約)の略です。「自分でデータを増やして、多数決を取る」という考え方です。

$$\hat{f}_{\text{bag}}(x) = \frac{1}{B} \sum_{b=1}^{B} \hat{f}^{*b}(x)$$

ここで $\hat{f}^{*b}(x)$ は b 番目のモデルの予測、B はモデルの総数を表します。これはシンプルな平均式ですが、その効果は絶大です。

ブートストラップでデータを「増やす」

バギングの核心は ブートストラップサンプリング にあります。「ブートストラップ」とは、手持ちのデータから繰り返し無作為に取り出すことで、擬似的に「別のデータセット」を作る手法のことです。

元のデータセットから複数のブートストラップサンプルが抽出されるアニメーション
同じ色の点が同じデータ点を示す。一部のデータ点は複数回選ばれ(復元抽出)、別の点は選ばれないことがある

手元に N 個のデータがあるとします。このデータから 復元抽出 で N 個のサンプルを選びます。復元抽出とは、1度選んだ点を「元に戻してから」また選ぶことができる方法です。だから同じデータ点が2回、3回と選ばれることもあります。

こうして作られた「変形した訓練データ」で1つのモデルを学習します。これを B 回繰り返すと、B 個の微妙に異なるモデルが出来上がります。

なぜこれが役立つのでしょうか?

各モデルの予測には「ばらつき」(分散)があります。でも、B 個のモデルを平均することで、このばらつきを打ち消し合わせることができます。B が大きいほど、平均はより安定します。ただし、モデル同士が似た予測をする(互いに相関している)限り、ばらつきを完全にゼロにはできません──これは「群衆の知恵」でも同じで、全員が同じ情報源に頼っていたら、独立した意見とは言えないからです。

バギングは予測の「ばらつき」を減らしますが、「平均的な外れ方」(バイアス)はほとんど変えません。これが「バイアスは同じなのに、なぜ誤差が減るの?」という問いへの答えです。

バギングが効く理由 — 不安定なモデルほど恩恵が大きい

バギングがすべてのモデルに等しく有効というわけではありません。

不安定なモデル(訓練データが少し変わるだけで予測が大きく変わるモデル)ほど、バギングから大きな恩恵を受けます。決定木はその代表例です。1本の深い決定木は、訓練データのわずかな変化に非常に敏感で、異なるデータセットでは全く異なる形になりえます。

一方、安定なモデル(リッジ回帰など)では、ブートストラップサンプル間の予測の違いが少なく、平均化してもあまり変わりません。

ブートストラップ数Bが増えるにつれてテストエラーが下降するグラフ
黄色の点線(元の1本の木のエラー=45%)から橙色の曲線が急降下し、薄青の点線(理論下限=20%)の上35%付近で安定する

実際の例を考えましょう。分類問題で元の決定木のテストエラーが約45%あったとします。ブートストラップサンプル数 B を増やしていくと、エラーはどんどん減って35%前後に安定します。

ただし完璧にはなれません──理論的に可能な最小エラー(ベイズ最適)の約20%には届きません。これはモデル同士の「相関(似た予測をする傾向)」が残っているからです。

バギングには代償もあります。100本の木の集合はもはや「1本の木」ではありません。解釈可能性が失われます。「なぜこの予測が出たのか」を説明できなくなります。

モデル平均化 — 異なる専門家に相談する

バギングは「同じアルゴリズムを異なるデータで繰り返す」手法でした。でも、もっと自然な疑問が生まれます:全く異なる種類のモデルを組み合わせたらどうか?

医者に相談するとき、内科医だけでなく外科医や専門医にも意見を聞くことがあります。それぞれ異なる視点、異なる強みを持つからです。機械学習でも同じ発想が使えます。

例えば、線形回帰、決定木、ニューラルネットワークの3つがあるとします。それぞれ異なる仮定、異なる強み、異なる弱点を持ちます。これらを組み合わせれば、それぞれの弱点を互いに補い合えるのではないか?

3種類の異なるモデルが等しい重みで統合されるアニメーション
直線・S字曲線・折れ線という3つの異なるモデルが、等しい太さの矢印を通じて1つの黄色の統合曲線になる

最もシンプルな方法は全モデルの単純平均です:

$$\hat{f}_{\text{avg}}(x) = \frac{1}{M} \sum_{m=1}^{M} \hat{f}_m(x)$$

すべてのモデルに等しい重みを与えます。「どのモデルも同じくらい信頼できる」と仮定するわけです。

しかし現実には、あるデータには線形回帰が向いていて、別のデータには決定木の方が優れていることがあります。「全員に同じ発言権」ではなく、「より優れたモデルにより大きな重みを」付けたい。

その考えを突き詰めたのが次のセクションのスタッキングです。

スタッキング — データから重みを自動的に学ぶ

「単純平均ではなく、より良いモデルに高い重みを与えたい」──このアイデアを実装したのが スタッキング(Stacked Generalization) です。

しかし問題があります:どのモデルが「より良い」かを、どうやって公正に評価するのか?

もし訓練データをそのまま使って評価すれば、訓練データを暗記しすぎているモデル(過学習したモデル)が不当に高く評価されてしまいます。

解決策は 交差検証 を使うことです。交差検証とは、「学習に使っていないデータで評価する」方法です。具体的には、あるデータ点 i を学習から除外したモデルを作り、そのモデルが「見たことのない」データ点 i をどれだけ正確に予測できるかを評価します。

太さの異なる矢印で3つのモデルが重み付きで統合されるアニメーション
太い矢印(重み=0.6)・中程度の矢印(重み=0.3)・細い矢印(重み=0.1)が、重みの大小を直感的に示す

このようにして得た各モデルの「公正な評価値」を使って、最適な重みを求めます:

$$\hat{\mathbf{w}} = \arg\min_{\mathbf{w}} \sum_{i=1}^{N} \left[y_i - \sum_{m=1}^{M} w_m \tilde{f}^{-i}_m(x_i)\right]^2$$

ここで $\tilde{f}^{-i}_m(x_i)$$-i$ は「データ点 i を除外して学習したモデルが x_i を予測した値」を意味します。

スタッキングは単純平均より洗練されています。各モデルがこのデータセットでどれだけ信頼できるかをデータ自身から学び、最適な重みを自動的に決定します。

バンピング — 局所最小値の罠を避ける

今まで見てきた手法はすべて「多くのモデルを組み合わせる」アイデアでした。しかし バンピング(Bumping) は全く異なる目標を持ちます:1つの、でもより良いモデルを見つける

多くの学習アルゴリズムは 局所最小値 の問題を抱えています。決定木の貪欲な成長アルゴリズムを例に取ります。最初の分割で間違った選択をしてしまうと、その後の選択もすべてその影響を受けて、大域的には最適ではない木ができあがります。

視覚的に考えましょう。山がたくさんある複雑な地形で、谷(最小値)を探したいとします。ボールを1箇所に置いて転がしたら、最も近い谷に落ちて止まります──しかしそれが最も深い谷(大域最適解)とは限りません。

複数のボールが凹凸のある地形を転がり、最も深い谷を見つけるアニメーション
赤いボールが異なる場所から転がり始め、それぞれの谷に落ちる。最も深い谷に落ちたボールが黄色に変わり、他は薄くなる

バンピングのアイデアは「ボールを複数の場所から同時に転がす」ことです:

  1. B 個のブートストラップサンプルを作成(各々「少し異なるデータ」)
  2. 各サンプルでモデルを独立に学習(各々「少し異なる出発点から転がす」)
  3. 元の訓練データで各モデルの誤差を評価(どの谷が最も深いかを確認)
  4. 最も誤差が小さいモデルを採用:
$$\hat{b} = \arg\min_b \sum_{i=1}^{N} \left[y_i - \hat{f}^{*b}(x_i)\right]^2$$

バギングとの決定的な違い:バギングはすべてのモデルを平均化しますが、バンピングは最良の1つを選択します。

なぜブートストラップが役立つのでしょうか?ブートストラップサンプルでは、一部のデータ点が偶然除外されます。もしその点が「グリーディなアルゴリズムを悪い局所最適に引き込む問題点」であれば、その点を含まないサンプルでは、より良い解を見つけられます。

バンピングにはバギングにない大きなメリットがあります:解釈可能性の維持です。バンピングで選ばれたモデルは「1つの決定木」のままなので、「なぜこの予測か」を説明できます。

3手法の比較 — どれをいつ使うべきか

バギング、スタッキング、バンピング──この3つは表面上似ていますが、根本的な目標が異なります。

バギング・スタッキング・バンピングの3手法を横並びで対比するアニメーション
左(バギング)は複数曲線を1本に平均化、中央(スタッキング)は重みの異なる矢印で統合、右(バンピング)は最良の1本を選択して残りを消す

バギングは、不安定なモデル(決定木など)を安定させるために使います。多くのブートストラップモデルを平均化することで予測のばらつきを減らします。解釈可能性は失われますが、予測精度は向上します。

スタッキングは、すでに異なる種類の良いモデルを持っている場合に使います。それらの強みを最大限に活かすための最適な重みをデータから学びます。「どのモデルが最も信頼できるか」をデータに語らせます。

バンピングは、局所最小値が問題になる場面で使います。1つの解釈可能なモデルが必要で、かつそのモデルが局所最適に陥りやすいときに有効です。

手法目標出力解釈可能性最適な用途
バギング分散を減らす平均した予測失われる不安定なモデル(決定木)
スタッキング重みを最適化重み付き平均部分的異種モデルの組み合わせ
バンピング局所最適を回避最良の1つ維持される局所最小値の多いモデル

これらは競合するものではなく、互いに補完的です。

アンサンブル学習の旅はここから始まります。次の章では、バギングをさらに発展させた ランダムフォレスト と、弱学習器を順次積み上げる ブースティング を学びます。これらはすべて、今回学んだ「多くのモデルの知恵を借りる」という考え方の発展形です。