ランダムフォレスト — 多数の「ちょっとダメな木」が強い予測器を生む
100本の「ちょっとダメな木」が、1本の「完璧な木」より賢くなれる。 その鍵は、あえて木を「バラバラ」にするランダム性にある。
決定木の弱点 — なぜ1本では足りないのか
「完璧な予測をしたい。では、最も賢い決定木を1本作ればよいか?」
実は、決定木には根本的な弱点がある。データを少し変えると、まったく異なる木が生まれるのだ。 これを高分散と呼ぶ。

例えば、100人の患者のデータから糖尿病を予測する木を作ったとする。 そのデータを5人だけ入れ替えると、まったく別の分岐構造が得られることが多い。
一方で、決定木は複雑な非線形パターンや、変数同士の交互作用を捉える能力(低バイアス)を持っている。
だから、決定木には「高分散・低バイアス」という性質がある。これを逆に使うことができないか?
「高分散」=「多様性がある」。ならば、たくさんの木を作って、それらを組み合わせれば、 バイアスは低いまま、分散だけを減らせるはずだ。
これが「アンサンブル学習」の出発点である。
バギング — ブートストラップで木を量産する
分散を減らすための最もシンプルなアイデアがバギング(Bootstrap Aggregating)だ。
やることはシンプルだ:
- 訓練データから復元抽出(同じデータが複数回選ばれることがある抽出方法)で同じサイズのサンプルを作る(ブートストラップサンプル)
- そのサンプルで決定木を1本作る
- これをB回繰り返す(例: B=500本)
- 予測は全木の平均(回帰)または多数決(分類)

数式で書けば:
なぜ分散が減るのか?独立した確率変数の平均は分散が減る。 B個の独立な予測器の分散は $\sigma^2/B$ に。
しかし問題がある。B本の木は本当に独立なのか?
実は違う。全ての木は同じ訓練データから作られている。「強い予測変数」があれば、 どの木も最初の分岐でその変数を使ってしまう。結果として、全木が互いに似通った構造になってしまう(高い相関)。
B個の変数の相関係数がρのとき、それらの平均の分散は:
B→∞にしても、相関項 $\rho\sigma^2$ は残り続ける。 これがバギングの限界だ。
相関が問題だ — バギングの天井
バギングの限界をもう少し深く考えよう。
なぜ木の間に相関が生まれるのか?
10個の予測変数があったとする。そのうち1つが圧倒的に予測力が高い「スター変数」だったとしよう (例えば、がん診断における腫瘍サイズ)。
バギングでは、各スプリット(分岐)で全ての変数から最良のものを選ぶ。 そのため、500本の木すべてが最初の分岐で「腫瘍サイズ」を使う。

- 木同士が似すぎて、ρ(相関)が高くなる
- 上の式の第1項 $\rho\sigma^2$ が支配的になる
- 木をいくら増やしても性能が頭打ちになる
では、意図的に木を「バラバラ」にすることができないか?
ここにランダムフォレストの本質的なアイデアがある:
「各スプリットで、全変数からm個だけランダムに選ぶ」
これだけで木の相関が劇的に下がる。スター変数も、選ばれないスプリットでは使えない。 代わりに他の変数が活躍し、木ごとに異なる構造が生まれる。
m を小さくするほど木の多様性が上がる(相関が下がる)が、各木のバイアスはわずかに増える。
典型的な設定:
- 分類: $m = \lfloor\sqrt{p}\rfloor$
- 回帰: $m = \lfloor p/3 \rfloor$
ランダムフォレストのアルゴリズム
ランダムフォレストのアルゴリズムは驚くほどシンプルだ。

Algorithm: ランダムフォレスト
各 b = 1, 2, ..., B について:
- 訓練データからブートストラップサンプル $\mathcal{Z}^*$ を作る(サイズN、復元抽出)
- 以下を繰り返し、木 $T_b$ を成長させる:
- m 個の変数をランダムに選ぶ(p個の全変数から)
- その m 個の中で最良の分割を見つける
- ノードを2つの子ノードに分割する
- 最小ノードサイズ $n_{\min}$ になるまで繰り返す
予測:
- 回帰: $$\hat{f}_{\text{rf}}^B(x) = \frac{1}{B}\sum_{b=1}^B T_b(x)$$(全木の平均)
- 分類: 多数決 $$\hat{C}_{\text{rf}}^B(x) = \text{majority vote}\{C_b(x)\}_{b=1}^B$$
バギングとの違いはたった1行: 「全変数からm個を選ぶ」。しかしこの1行が大きな差を生む。
実用的なデフォルト値:
- 分類: $m = \lfloor\sqrt{p}\rfloor$, $n_{\min} = 1$(フル成長)
- 回帰: $m = \lfloor p/3 \rfloor$, $n_{\min} = 5$
木の本数Bは、多ければ多いほど精度が上がる(ただし頭打ちになる)。 実際には200〜500本で十分なことが多い。
ここで $\Theta_b$ は b 番目の木のランダム化パラメータ (どの変数を選んだか、ブートストラップサンプルなど)だ。
Out-of-Bag 誤差 — 無料の交差検証
ランダムフォレストには、もう一つの驚くべき特性がある。モデルの汎化性能を追加コストなしで推定できる。
これがOut-of-Bag(OOB)誤差だ。
仕組みを理解しよう
N個のデータからサイズNの復元抽出をすると、あるデータ点が選ばれない確率は:
つまり、各ブートストラップサンプルには約63.2%のデータが含まれ、36.8%は含まれない(これがOOBサンプル)。

OOB予測の手順:
各訓練データ点 $x_i$ について:
- $x_i$ を含まなかった(= OOBだった)全ての木を集める
- その木だけで $x_i$ の予測を行い、平均(または多数決)をとる
ここで $\mathcal{Z}_b$ はb番目のブートストラップサンプル、$B_i$ は $x_i$ を含まなかった(OOBだった)木の本数。
これを全 i に対して行えば、N個全ての予測を一度に得られる。 これはN分割交差検証とほぼ等価な推定量だ。 しかも、追加の計算なしに、フォレストを1回学習するだけで得られる。
OOB誤差は、木の本数Bを決める指針としても使える: OOB誤差が安定化したら、それで十分な木の数だ。
変数重要度 — どの変数が予測に効いているか
ランダムフォレストの大きな利点の一つが、変数重要度の計算だ。 「このモデルにとって、どの入力変数が最も重要か?」を定量化できる。
2つの方法がある:
方法1: Gini重要度(分割による不純度の改善量)
決定木の各スプリット(分岐)では、「この変数でデータを分けると、クラスが混じりにくくなるか?」を 数値化したGini不純度(0=完全に純粋、1=完全に混在)が使われる。
各スプリットで計算されるGini不純度の改善量を、全ての木・全てのスプリットで累積する:
方法2: OOBランダム化重要度(推奨)
OOBサンプルを使った巧妙な手法:

- 通常のOOBデータで精度を記録: $\text{Acc}_b$
- 変数 $j$ の値だけをランダムにシャッフル
- シャッフル後の精度を記録: $\tilde{\text{Acc}}_b$
- 精度の低下 = $\text{Acc}_b - \tilde{\text{Acc}}_b$ が変数 $j$ の重要度
直感: 変数 j を壊す(シャッフルする)と精度が大きく落ちる → その変数は重要。 壊しても変わらない → 重要でない。
2つの方法の違い:
- Gini法は計算が速いが、相関した変数があると偏りが出やすい
- OOB法は計算コストがわずかに高いが、より信頼できる
例えば2つの変数が高度に相関している場合、Gini法では先に選ばれた方だけが高く評価される。 OOB法では両方が重要と認識される(どちらを壊しても精度が落ちるため)。
分散削減の理論 — なぜランダムフォレストは機能するのか
ここまでの直感を、数学でより正確に見てみよう。
ランダムフォレストの極限
B → ∞ のとき、ランダムフォレストは:
$\Theta$ は木のランダム化パラメータ(ブートストラップサンプルと変数選択)。 B を増やすほど、この期待値に近づく。
分散の分解
任意の点 $x$ に対するランダムフォレストの予測の分散は:
- $\rho(x)$ = 任意の2本の木の間の相関係数
- $\sigma^2(x)$ = 1本の木の分散

m が分散に与える効果:
| m を小さくすると | m を大きくすると |
|---|---|
| 木の多様性 ↑ | 木の多様性 ↓ |
| ρ ↓(バギングに近づかない) | ρ ↑(バギングに近づく) |
| アンサンブル分散 ↓ | アンサンブル分散 ↑ |
| 各木のバイアス ↑ | 各木のバイアス ↓ |
m = 1 が「最も多様な木」、m = p が「バギング(相関最大)」。
理論的な限界
たとえ全ての木が独立(ρ = 0)になったとしても、分散はゼロにはならない ($\sigma^2(x) > 0$ のため)。 しかし、相関を下げることで実用上大きな改善が得られる。
ランダムフォレストのバイアスは:
これはバギングのバイアスと同じか、わずかに大きい(m < p なので情報が制限される)。 しかし実用上、この差は小さく、分散削減の恩恵の方が圧倒的に大きいことが多い。
過学習しない理由と実際の使い方
「決定木は過学習しやすい。それを何百本も組み合わせたら、もっと過学習するのでは?」
これは自然な疑問だが、答えは「ノー」だ。
ランダムフォレストは過学習が起きにくい。
なぜなら、B→∞の極限が確定した関数$f_{\text{rf}}(x) = \mathbb{E}_\Theta T(x;\Theta)$に収束するからだ。木を増やし続けても、この期待値に近づくだけで、 訓練データを「記憶」しすぎることはない。

木を増やし続けても、この極限値に収束するだけで、過学習は起きない:
実用上の推奨:
- B(木の本数): OOB誤差が安定化するまで増やす。通常200〜500本。
- m(変数選択数): デフォルト値から始め、OOBでチューニング。
- 木の深さ: 通常はデフォルト(フル成長)で十分。
ランダムフォレストは「チューニングがほとんど不要で高精度」という、 実用上非常に使いやすいアルゴリズムだ。 特に、初めて試す手法として最適である。
まとめ — ランダムフォレストの力と限界
ランダムフォレストが広く使われる理由が理解できただろうか。以下に整理しよう。

強みのまとめ
- 高精度: バギングより相関が低いため、分散が大幅に削減される
- 過学習しにくい: 木を増やしても精度が落ちない
- チューニングが少ない: mとBだけが主要パラメータ。デフォルト値が多くの場合うまく機能する
- OOB誤差: 追加のデータなしに汎化性能を推定できる
- 変数重要度: どの特徴が重要かを自然に推定できる
- スケーラブル: 木の構築は並列化が容易
- ノイズ変数に強い: 多くのノイズ変数があっても精度がほぼ保たれる
弱みと限界
- 解釈性: 単一の決定木より解釈が難しい(ブラックボックス的)
- メモリ: B本の木を全て保持する必要がある
- 予測速度: 訓練後の予測にB本の木を通す必要がある(ただし並列化可能)
- 時系列・構造データ: 独立同分布の仮定が強い。時系列データには追加の工夫が必要
手法の比較
| 手法 | バイアス | 分散 | 過学習リスク | 解釈性 |
|---|---|---|---|---|
| 単一決定木 | 低 | 高 | 高 | 高 |
| バギング | 低 | 中 | 低 | 低 |
| ランダムフォレスト | 低〜中 | 低 | 低 | 低 |
| ブースティング | 中→低 | 中→低 | 中 | 低 |
ランダムフォレストは、シンプルさと高性能のバランスが取れた、実用上最も信頼できる手法の一つだ。 初めてデータ分析に取り組む際の「デフォルトの選択肢」として多くの実務家が用いる。