ランダムフォレスト — 多数の「ちょっとダメな木」が強い予測器を生む

100本の「ちょっとダメな木」が、1本の「完璧な木」より賢くなれる。 その鍵は、あえて木を「バラバラ」にするランダム性にある。

決定木の弱点 — なぜ1本では足りないのか

「完璧な予測をしたい。では、最も賢い決定木を1本作ればよいか?」

実は、決定木には根本的な弱点がある。データを少し変えると、まったく異なる木が生まれるのだ。 これを高分散と呼ぶ。

データが少し変わると決定木の構造が大きく変わることを示すアニメーション
同じ問題でも、データを5点だけ入れ替えると境界線がガラリと変わる。これが決定木の「高分散」の正体だ

例えば、100人の患者のデータから糖尿病を予測する木を作ったとする。 そのデータを5人だけ入れ替えると、まったく別の分岐構造が得られることが多い。

一方で、決定木は複雑な非線形パターンや、変数同士の交互作用を捉える能力(低バイアス)を持っている。

だから、決定木には「高分散・低バイアス」という性質がある。これを逆に使うことができないか?

「高分散」=「多様性がある」。ならば、たくさんの木を作って、それらを組み合わせれば、 バイアスは低いまま、分散だけを減らせるはずだ。

これが「アンサンブル学習」の出発点である。

バギング — ブートストラップで木を量産する

分散を減らすための最もシンプルなアイデアがバギング(Bootstrap Aggregating)だ。

やることはシンプルだ:

  1. 訓練データから復元抽出(同じデータが複数回選ばれることがある抽出方法)で同じサイズのサンプルを作る(ブートストラップサンプル
  2. そのサンプルで決定木を1本作る
  3. これをB回繰り返す(例: B=500本)
  4. 予測は全木の平均(回帰)または多数決(分類)
バギングのプロセスを示すアニメーション。元データからブートストラップサンプルを作り、複数の木を作って平均する
元データから複数のブートストラップサンプルを作り、それぞれで木を育て、最後に平均をとる

数式で書けば:

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

なぜ分散が減るのか?独立した確率変数の平均は分散が減る。 B個の独立な予測器の分散は $\sigma^2/B$ に。

しかし問題がある。B本の木は本当に独立なのか?

実は違う。全ての木は同じ訓練データから作られている。「強い予測変数」があれば、 どの木も最初の分岐でその変数を使ってしまう。結果として、全木が互いに似通った構造になってしまう(高い相関)。

B個の変数の相関係数がρのとき、それらの平均の分散は:

$$\rho\sigma^2 + \frac{1-\rho}{B}\sigma^2$$

B→∞にしても、相関項 $\rho\sigma^2$ は残り続ける。 これがバギングの限界だ。

相関が問題だ — バギングの天井

バギングの限界をもう少し深く考えよう。

なぜ木の間に相関が生まれるのか?

10個の予測変数があったとする。そのうち1つが圧倒的に予測力が高い「スター変数」だったとしよう (例えば、がん診断における腫瘍サイズ)。

バギングでは、各スプリット(分岐)で全ての変数から最良のものを選ぶ。 そのため、500本の木すべてが最初の分岐で「腫瘍サイズ」を使う。

バギングとランダムフォレストの木の多様性の対比。バギングでは全木が同じ変数で分岐し、ランダムフォレストでは木ごとに異なる変数が選ばれる
左(バギング): 全木が同じ変数で始まり似た構造に。右(ランダムフォレスト): 木ごとに異なる変数が選ばれ多様な構造に

では、意図的に木を「バラバラ」にすることができないか?

ここにランダムフォレストの本質的なアイデアがある:

「各スプリットで、全変数からm個だけランダムに選ぶ

これだけで木の相関が劇的に下がる。スター変数も、選ばれないスプリットでは使えない。 代わりに他の変数が活躍し、木ごとに異なる構造が生まれる。

m を小さくするほど木の多様性が上がる(相関が下がる)が、各木のバイアスはわずかに増える。

典型的な設定:

ランダムフォレストのアルゴリズム

ランダムフォレストのアルゴリズムは驚くほどシンプルだ。

ランダムフォレストのアルゴリズム。m個の変数をランダムに選んで分岐点を決める過程を示す
各分岐点でサイコロを振り、m個の変数をランダムに選ぶ。その中から最良の変数で分岐する

Algorithm: ランダムフォレスト

各 b = 1, 2, ..., B について:

  1. 訓練データからブートストラップサンプル $\mathcal{Z}^*$ を作る(サイズN、復元抽出)
  2. 以下を繰り返し、木 $T_b$ を成長させる:
    • m 個の変数をランダムに選ぶ(p個の全変数から)
    • その m 個の中で最良の分割を見つける
    • ノードを2つの子ノードに分割する
    • 最小ノードサイズ $n_{\min}$ になるまで繰り返す

予測:

バギングとの違いはたった1行: 「全変数からm個を選ぶ」。しかしこの1行が大きな差を生む。

実用的なデフォルト値:

木の本数Bは、多ければ多いほど精度が上がる(ただし頭打ちになる)。 実際には200〜500本で十分なことが多い。

ここで $\Theta_b$ は b 番目の木のランダム化パラメータ (どの変数を選んだか、ブートストラップサンプルなど)だ。

Out-of-Bag 誤差 — 無料の交差検証

ランダムフォレストには、もう一つの驚くべき特性がある。モデルの汎化性能を追加コストなしで推定できる

これがOut-of-Bag(OOB)誤差だ。

仕組みを理解しよう

N個のデータからサイズNの復元抽出をすると、あるデータ点が選ばれない確率は:

$$\left(1 - \frac{1}{N}\right)^N \xrightarrow{N \to \infty} e^{-1} \approx 0.368$$

つまり、各ブートストラップサンプルには約63.2%のデータが含まれ、36.8%は含まれない(これがOOBサンプル)。

OOBサンプルの概念。各データ点がどの木のOOBになるかを示し、OOB予測が平均される
○印(青)= OOBサンプル(その木に含まれていないデータ)。各データ点についてOOBだった木だけで予測し、平均する

OOB予測の手順:

各訓練データ点 $x_i$ について:

  1. $x_i$ を含まなかった(= OOBだった)全ての木を集める
  2. その木だけで $x_i$ の予測を行い、平均(または多数決)をとる
$$\hat{f}_{\text{OOB}}(x_i) = \frac{1}{B_i} \sum_{b: i \notin \mathcal{Z}_b} T_b(x_i)$$

ここで $\mathcal{Z}_b$ はb番目のブートストラップサンプル、$B_i$$x_i$ を含まなかった(OOBだった)木の本数。

これを全 i に対して行えば、N個全ての予測を一度に得られる。 これはN分割交差検証とほぼ等価な推定量だ。 しかも、追加の計算なしに、フォレストを1回学習するだけで得られる。

$$\text{OOB誤差} = \frac{1}{N}\sum_{i=1}^{N} L\left(y_i, \hat{f}_{\text{OOB}}(x_i)\right)$$

OOB誤差は、木の本数Bを決める指針としても使える: OOB誤差が安定化したら、それで十分な木の数だ。

変数重要度 — どの変数が予測に効いているか

ランダムフォレストの大きな利点の一つが、変数重要度の計算だ。 「このモデルにとって、どの入力変数が最も重要か?」を定量化できる。

2つの方法がある:

方法1: Gini重要度(分割による不純度の改善量)

決定木の各スプリット(分岐)では、「この変数でデータを分けると、クラスが混じりにくくなるか?」を 数値化したGini不純度(0=完全に純粋、1=完全に混在)が使われる。

各スプリットで計算されるGini不純度の改善量を、全ての木・全てのスプリットで累積する:

$$\text{VI}_j^{\text{Gini}} = \sum_{b=1}^B \sum_{\text{変数}j\text{のスプリット}} \Delta\text{Gini}$$

方法2: OOBランダム化重要度(推奨)

OOBサンプルを使った巧妙な手法:

OOBランダム化重要度の計算プロセス。変数をシャッフルすると精度が落ちることを視覚化
変数の値をシャッフルして精度がどれだけ落ちるかを測る。多く落ちれば重要な変数、落ちなければ重要でない変数
  1. 通常のOOBデータで精度を記録: $\text{Acc}_b$
  2. 変数 $j$ の値だけをランダムにシャッフル
  3. シャッフル後の精度を記録: $\tilde{\text{Acc}}_b$
  4. 精度の低下 = $\text{Acc}_b - \tilde{\text{Acc}}_b$ が変数 $j$ の重要度
$$\text{VI}_j^{\text{OOB}} = \frac{1}{B}\sum_{b=1}^{B} \left(\text{Acc}_b - \tilde{\text{Acc}}_b\right)$$

直感: 変数 j を壊す(シャッフルする)と精度が大きく落ちる → その変数は重要。 壊しても変わらない → 重要でない。

2つの方法の違い:

例えば2つの変数が高度に相関している場合、Gini法では先に選ばれた方だけが高く評価される。 OOB法では両方が重要と認識される(どちらを壊しても精度が落ちるため)。

分散削減の理論 — なぜランダムフォレストは機能するのか

ここまでの直感を、数学でより正確に見てみよう。

ランダムフォレストの極限

B → ∞ のとき、ランダムフォレストは:

$$f_{\text{rf}}(x) = \lim_{B \to \infty} \hat{f}_{\text{rf}}^B(x) = \mathbb{E}_\Theta T(x; \Theta)$$

$\Theta$ は木のランダム化パラメータ(ブートストラップサンプルと変数選択)。 B を増やすほど、この期待値に近づく。

分散の分解

任意の点 $x$ に対するランダムフォレストの予測の分散は:

$$\text{Var}_{\text{rf}}(x) = \rho(x) \cdot \sigma^2(x)$$
mの値を変えたときの分散・バイアス・合計誤差の変化を示すグラフ
m が小さい(左)ほど分散が低く多様性が高い。m が大きい(右)ほどバギングに近い。最適なm は合計誤差(白)が最小の点

m が分散に与える効果:

m を小さくするとm を大きくすると
木の多様性 ↑木の多様性 ↓
ρ ↓(バギングに近づかない)ρ ↑(バギングに近づく)
アンサンブル分散 ↓アンサンブル分散 ↑
各木のバイアス ↑各木のバイアス ↓

m = 1 が「最も多様な木」、m = p が「バギング(相関最大)」。

理論的な限界

たとえ全ての木が独立(ρ = 0)になったとしても、分散はゼロにはならない ($\sigma^2(x) > 0$ のため)。 しかし、相関を下げることで実用上大きな改善が得られる。

ランダムフォレストのバイアスは:

$$\text{Bias}(x) = \mu(x) - \mathbb{E}_\Theta \mathbb{E}_{\mathcal{Z}} T(x; \Theta)$$

これはバギングのバイアスと同じか、わずかに大きい(m < p なので情報が制限される)。 しかし実用上、この差は小さく、分散削減の恩恵の方が圧倒的に大きいことが多い。

過学習しない理由と実際の使い方

「決定木は過学習しやすい。それを何百本も組み合わせたら、もっと過学習するのでは?」

これは自然な疑問だが、答えは「ノー」だ。

ランダムフォレストは過学習が起きにくい。

なぜなら、B→∞の極限が確定した関数$f_{\text{rf}}(x) = \mathbb{E}_\Theta T(x;\Theta)$に収束するからだ。木を増やし続けても、この期待値に近づくだけで、 訓練データを「記憶」しすぎることはない。

木の本数Bを増やしてもテスト誤差が上昇しない学習曲線
訓練誤差(緑)とテスト誤差(青)はともに安定化し、木を増やしても誤差が上昇しない。灰色の点線は単一の決定木の誤差

木を増やし続けても、この極限値に収束するだけで、過学習は起きない:

$$f_{\text{rf}}(x) = \lim_{B \to \infty} \hat{f}_{\text{rf}}^B(x) = \mathbb{E}_\Theta T(x; \Theta(\mathcal{Z}))$$

実用上の推奨:

  1. B(木の本数): OOB誤差が安定化するまで増やす。通常200〜500本。
  2. m(変数選択数): デフォルト値から始め、OOBでチューニング。
  3. 木の深さ: 通常はデフォルト(フル成長)で十分。

ランダムフォレストは「チューニングがほとんど不要で高精度」という、 実用上非常に使いやすいアルゴリズムだ。 特に、初めて試す手法として最適である。

まとめ — ランダムフォレストの力と限界

ランダムフォレストが広く使われる理由が理解できただろうか。以下に整理しよう。

単一木→バギング→ランダムフォレストの予測分布の変化。点が正解の周りに集まっていく様子
左(単一木): 予測がバラバラ。中央(バギング): 少し集まる。右(ランダムフォレスト): 正解の周りに密集

強みのまとめ

  1. 高精度: バギングより相関が低いため、分散が大幅に削減される
  2. 過学習しにくい: 木を増やしても精度が落ちない
  3. チューニングが少ない: mとBだけが主要パラメータ。デフォルト値が多くの場合うまく機能する
  4. OOB誤差: 追加のデータなしに汎化性能を推定できる
  5. 変数重要度: どの特徴が重要かを自然に推定できる
  6. スケーラブル: 木の構築は並列化が容易
  7. ノイズ変数に強い: 多くのノイズ変数があっても精度がほぼ保たれる

弱みと限界

  1. 解釈性: 単一の決定木より解釈が難しい(ブラックボックス的)
  2. メモリ: B本の木を全て保持する必要がある
  3. 予測速度: 訓練後の予測にB本の木を通す必要がある(ただし並列化可能)
  4. 時系列・構造データ: 独立同分布の仮定が強い。時系列データには追加の工夫が必要

手法の比較

手法バイアス分散過学習リスク解釈性
単一決定木
バギング
ランダムフォレスト低〜中
ブースティング中→低中→低

ランダムフォレストは、シンプルさと高性能のバランスが取れた、実用上最も信頼できる手法の一つだ。 初めてデータ分析に取り組む際の「デフォルトの選択肢」として多くの実務家が用いる。