ランダムフォレストの詳細と分析 — OOB・変数重要度・分散の謎

木の数を増やせば増やすほど良いのか?どの変数が予測を支えているのか? そして、なぜランダム化が分散を劇的に下げるのか—— ランダムフォレストの「なぜ」を数学とアニメーションで解き明かします。

OOBサンプル — 「使われなかったデータ」の活用

ランダムフォレストでは、各木を異なるデータの部分集合で学習します。 このとき使うのがブートストラップサンプリングという技法です。 やり方はシンプルで、N個のデータから「重複を許しながら」N個をランダムに選び直します。 サイコロを振るように、同じデータが何度も選ばれる一方で、一度も選ばれないデータも出てきます。

ブートストラップサンプリングでOOBデータが生まれるプロセスの視覚化
約37%のデータ点はブートストラップサンプルに一度も選ばれない — これがOOBサンプルになる

確率の計算から、このとき平均して約37%のデータ点は一度も選ばれないことがわかります。 この学習に参加できなかったデータのことをOOB(Out-of-Bag)サンプルと呼びます。

実はこのOOBサンプルが、とても賢い使われ方をします。 ある観測データ $z_i = (x_i, y_i)$ について考えてみましょう。

$z_i$ が含まれていないブートストラップサンプルで学習した木だけ」を使って、$z_i$ の予測を行う。

この手続きを全ての観測データに対して行えば、 クロスバリデーションと同等の精度推定が、追加の計算なしで得られます。

$$\hat{f}_{\text{oob}}(x_i) = \frac{1}{|B_i|} \sum_{b \in B_i} T(x_i; \Theta_b)$$

ここで $B_i$ は観測 $z_i$ が含まれなかった木の集合です。 この $\hat{f}_{\text{oob}}$ を全データに適用した誤差が OOBエラーです。

通常のモデル評価にはクロスバリデーションが必要で計算コストが高くつきます。 しかしランダムフォレストは、木を順番に成長させていく過程でOOBエラーを並行して計算できます。 OOBエラーが安定したら学習を止める判断も自動化できます。 実験では2500本の木を使ってもOOBエラーが約200本で収束することが示されており、 必要な木の数を効率的に見極められます。

変数重要度 — どの変数が予測を支えているか

「どの変数が予測に最も効いているか」を知りたいとき、ランダムフォレストは2つの方法で測ることができます。

方法1: 分割基準による重要度(Gini重要度)

各木の各分岐点で、どの変数がどれだけ予測精度を改善したかを累積します。 ランダムフォレストでは全ての木にわたってこれを合計し、変数ごとの重要度スコアとします。 勾配ブースティングと同じ方法ですが、ランダムフォレストでは候補変数がランダムに絞られるため、 「全く使われない変数」が生まれにくいという特徴があります。

方法2: OOBランダム化による重要度

変数をシャッフルして重要度を測るOOBランダム化の仕組み
列をランダムにシャッフルすることで、その変数の予測への貢献度を測る

こちらはより興味深い方法です。各木 $b$ を成長させた後、 OOBサンプルを木に通して予測精度を記録します。 次に、評価したい変数 $j$ の値をOOBサンプルの中でランダムにシャッフルします。 シャッフル後に再度予測して、精度がどれだけ落ちたかを測ります。 この精度低下量を全ての木で平均したものが、変数 $j$ の重要度です。

直感的に言えば、「ある変数の値をバラバラにしても予測精度が落ちなければ、 その変数は重要でない」という発想です。 これは変数の値をゼロに設定することに似ており(係数をゼロにするのと類似)、 変数を除外した場合とは異なる評価になります (除外した場合は他の変数が代替できるため)。

2つの方法を比較すると:Gini重要度は少数の重要変数に集中しがちですが、OOBランダム化法はより均一な重要度分布を示す傾向があります。

近接プロット — 「フォレストの目」でデータを見る

OOBサンプルと変数重要度は「予測精度」に関する指標でした。 実はランダムフォレストには、もう一つの出力があります。 「このデータとあのデータ、どのくらい似ている?」という類似度(近接度)の測定です。 これが近接プロット(Proximity Plot)です。

N×N近接行列が形成されて2Dプロットに圧縮されるアニメーション
木の成長とともに近接行列が構築され、次元削減で2Dに投影される

仕組みはこうです:ランダムフォレストを成長させるとき、N×N の近接行列を同時に構築します。 各木において、2つのOOB観測データが同じ終端ノード(葉)に落ちたとき、 その2点の近接度を1増やします。 全ての木でこれを繰り返した後、木の総数で正規化して近接行列を得ます。

この近接行列を多次元尺度法(MDS)で2次元に縮約したものが近接プロットです。

近接プロットには興味深い性質があります。 同じクラスに属するデータ点は「腕」のような形(スター形状)を形成します。 境界付近のデータ点は星の中心に近く、 クラスの典型的な点(純粋な領域)は腕の先端に位置します。

なぜこうなるかというと、純粋な領域のデータ点は終端ノードが純粋(1クラスのみ)になるため、 同じクラスとよく同じノードに落ちます。 一方、境界付近のデータ点は異なるクラスと同じノードに落ちやすく、 クロスクラスの近接度が高くなります。

ただし、近接プロットはどのデータでもほぼ同じようなスター形状になることが知られており、 その有用性については疑問もあります。

過学習しない? — ランダムフォレストの収束性

「木の数Bを増やすほど過学習が起きる」と心配する人がいますが、ランダムフォレストでは木の数を増やしても過学習しません。 なぜでしょうか?

木の数が増えるにつれてエラーが収束するグラフ(過学習しない様子)
木を増やすとエラーは下がり続けるが、ある点で安定する — 上昇することはない

数学的には、B→∞ の極限でランダムフォレストの推定量は次の期待値に収束します:

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

これはランダムな木 $\Theta$ に対する期待値です。 B本の木を平均していくことで、この期待値に近づいていきますが、 決して「それ以上」には行きません。バギングと同様に、 木を増やすことは統計的な安定性(分散の削減)をもたらすのであって、 モデルの複雑さを増加させるわけではありません。

ただし注意点があります: この「収束先」自体がデータに過剰適合している可能性はあります。 つまり、各木を完全成長させると不必要な分散が残る場合があります。 木の深さを制御する(最小ノードサイズを大きくする)ことで、 収束先の過学習を抑えることができますが、 実験的にはフル成長の木でも大きな問題は起きにくいことが知られています。

実際の実験(スパムデータ)では、200本程度でOOBエラーが安定し、 それ以上の木を加えても誤差は変化しません。 これは「学習を自動停止できる」という実用的なメリットにもなります。

分散の謎を解く — なぜランダム化が効くのか

ランダムフォレストが単純なバギングより優れている理由を、 数学的に理解しましょう。

ここで重要な問いがあります:「木が互いに似ていると、平均を取っても意味が薄れませんか?」

そうなのです。全く同じ木を100本平均しても、木を1本使うのと変わりません。 「異なる予測をする木をたくさん平均すること」に意味があります。 これを数式で表しましょう。 B本の相関した変数の平均の分散は次の式で与えられます:

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

第1項 ρσ² は「木が似ていること(相関 ρ)による消えない分散」、 第2項は「木の数Bで分散が下がる成分」です。 B→∞ でも第1項は消えません。

ρ(相関)とσ²(単一木分散)の積として分散が決まり、mを変化させた時の影響
mを小さくするとρ(木間の相関)が下がり、アンサンブルの分散も下がる

B→∞ の極限では:

$$\text{Var}[\hat{f}_{\text{rf}}(x)] = \rho(x) \cdot \sigma^2(x)$$

ここで:

つまり、ランダムフォレストの分散は相関 ρ と単一木の分散 σ² の積に支配されます。

ランダム化の役割: 各分岐でランダムにm個の変数しか候補にしないことで、 木が「使う変数が似てくる」ことを防ぎます。 これにより、木同士の相関 ρ が下がります。 m を小さくするほど ρ が下がり、アンサンブルの分散が下がります。

ただし、m を小さくしすぎると個々の木の精度(σ²)が上がります。 これがランダムフォレストにおけるバイアス-バリアンスのトレードオフです。

バイアスとアダプティブ最近傍法

ランダムフォレストは分散を劇的に下げる一方で、バイアスはどうでしょうか?

バギングと同様に、 ランダムフォレストのバイアスは個々の木のバイアスと同じです:

$$\text{Bias}(x) = \mu(x) - \mathrm{E}_{\mathbf{Z}} \hat{f}_{\text{rf}}(x) = \mu(x) - \mathrm{E}_{\mathbf{Z}} \mathrm{E}_{\Theta|\mathbf{Z}} T(x; \Theta(\mathbf{Z}))$$

ランダム化と縮小されたサンプル空間の制約により、このバイアスは完全成長の木(剪定なし)のバイアスよりも大きくなります。 つまり、ランダムフォレストによる改善は純粋に分散の削減によるものです。

mを小さくするとバイアスが増える理由: 候補変数が少ないと、最も情報量の多い変数を使えない確率が高まります。 これにより個々の木の予測精度が下がり、バイアスが増加します。

mを変化させたときのバイアス²・分散・MSEの変化
mが小さいと分散は下がるがバイアスは上がる — MSEはU字型になり最適なmが存在する

実験(シミュレーションモデル)では、mを減らすにつれて:

全体的な予測誤差(平均二乗誤差)はこれらのバランスで決まります。

ランダムフォレストと最近傍法の類似性

実は、ランダムフォレスト分類器はk-最近傍法(k-NN)の加重版と見なすことができます。 各木はデータ点から最も良い予測経路を選び、アンサンブルの多数決はターゲット点に「近い」訓練データ点に高い重みを与えます。 ランダムフォレストの決定領域は軸平行の特性を持ち、k-NNよりも軸に沿った形状を示します。

まとめ:ランダムフォレストが強力な理由

  • OOBサンプル:追加コストなしにクロスバリデーション相当のエラー推定
  • 変数重要度:OOBのランダム化で各変数の貢献度を直接測定
  • 過学習しない:木を増やすのは「統計的安定化」であり複雑度増加ではない
  • 分散削減:ランダムな変数選択が木間の相関 ρ を下げ、分散を ρ·σ² に抑える
  • バイアスとのトレードオフ:mを小さくすると分散は下がるがバイアスは上がる