ランダムフォレストの多数決シミュレーター 戻る
機械学習シミュレーター

ランダムフォレストの多数決 — bagging と分散低減

T本の決定木をbootstrap標本と特徴量サブサンプリングで学習し、多数決で予測。単一木との精度差や決定境界の滑らかさを通じて、なぜアンサンブルが分散を下げるのかを直感的に学べます。

パラメータ設定
木の本数 T
各木の最大深さ
クエリ点 x
クエリ点 y

学習データは固定(LCG seed=42、N=80点、2クラス、σ=1.5)。木の構築もseed派生で決定論的です。

計算結果
単一木の訓練精度
アンサンブル訓練精度
クエリの予測クラス
最多クラスの票率
多数決決定境界とクエリ票分布

薄背景=多数決による決定領域(赤=クラス0/青=クラス1)/散布点=学習データ/黒×=クエリ点/右下バー=クエリでの票分布

理論・主要公式

bootstrap標本:N点から重複ありでN点抽出(約63.2%がユニーク)。各木はbootstrap標本で学習:

$$P(\text{選ばれない}) = (1 - 1/N)^N \;\xrightarrow{N\to\infty}\; e^{-1} \approx 0.368$$

2クラスの多数決による予測:

$$\hat{y}(\mathbf{x}) = \mathrm{argmax}_{c \in \{0,1\}} \sum_{t=1}^{T} \mathbb{1}[h_t(\mathbf{x}) = c]$$

独立な弱学習器の分散低減(baggingの効果):

$$\mathrm{Var}(\bar{h}) = \frac{\sigma^2}{T} + \rho\,\sigma^2\,\frac{T-1}{T}$$

ρは木同士の相関。特徴量サブサンプリングはρを下げ、Tを増やしたときの分散低減を効かせる役割を持ちます。

ランダムフォレストの多数決シミュレーターとは

🙋
ランダムフォレストって「決定木をたくさん作って多数決」って聞いたんですけど、それだけで本当に精度上がるんですか?同じデータから作ったら全部同じ木になりませんか?
🎓
いいツッコミだね。そこで効くのが「bootstrap」と「特徴量サブサンプリング」の2つのランダム化なんだ。bootstrapは元のN点から復元抽出でN点を引き直す——同じデータが何度も入ったり、約37%は1度も選ばれなかったりする。これで各木が少し違うデータで学習する。さらに分割の特徴量も毎回ランダムに絞ることで、木同士の相関を下げる。シミュレーターで木の本数Tを1から10、20と増やしてみて——決定境界が階段状からなめらかな曲線に変わるはずだ。
🙋
あ、本当だ!T=1だと境界がガタガタですけど、T=20くらいで滑らかに丸くなりますね。「単一木の訓練精度」と「アンサンブル訓練精度」の差はそんなに大きくない気がしますが…
🎓
訓練精度は単一木でも高く出るんだ——むしろ深い木は訓練データに過学習する。本当に効くのは「テストデータでの精度」と「分散の低減」だよ。式で書くと、T本の独立な弱学習器の平均の分散は σ²/T に下がる。実装上は完全独立じゃないから ρσ²(T-1)/T の項が残るけど、特徴量サブサンプリングがρを下げて分散低減を効かせる。シミュレーターでは描画速度の都合でテストセットを別途用意してないけど、決定境界の形が「クラスの中心同士を結ぶ斜めの直線」に近づくのを見ると、過学習が和らいでいるのが分かるよ。
🙋
クエリ点を(0,0)——ちょうど2クラスの真ん中——に置くと、票がほぼ半々になりました。「最多クラスの票率」が60%とか。これは何を意味するんですか?
🎓
それは「予測の不確実性」を表しているんだ。中心点はどちらのクラスにも所属できる微妙な領域だから、木によって判定が分かれる。逆に(-3,-3)とか(3,3)に動かしてみて——票率が95%とか100%になるはず。実務ではこの「票率」を「予測確率」として使う(predict_proba)。確率が0.5付近のサンプルは判断保留、0.9以上なら自信を持って予測、みたいな運用ができる。クレジットスコアリングや医療診断で重宝するよ。
🙋
最大深さを1にすると精度がガクンと落ちますね。でも5にしたら100%近くになります。深ければいいってことですか?
🎓
いや、それが落とし穴。深い木は訓練データを丸暗記して訓練精度100%を出すけど、テストデータでは過学習で精度が落ちる。ただし——ここがランダムフォレストの面白いところ——個々の木が過学習しても、bootstrapで違うデータを見ているから過学習する場所が木ごとに違う。多数決でその「ノイズ」がキャンセルされる。だからRFでは「深い木 + たくさん」がデフォルト戦略。勾配ブースティングは逆に「浅い木 + 逐次補正」と対照的だよ。

よくある質問

bootstrapサンプリングでは元データのおよそ63%が学習に選ばれ、残り37%は「袋の外(Out-Of-Bag)」になります。各サンプルについて、そのサンプルを学習に使わなかった木だけで予測し、それを集約した誤分類率がOOBエラーです。実質的にホールドアウト検証なしで汎化性能を推定でき、ランダムフォレストでは交差検証の代用として広く使われます。scikit-learnでは oob_score=True で取得できます。
代表的な方法は2つです。1つ目はMDI(Mean Decrease in Impurity)で、各特徴量を分割に使ったときのGini不純度の減少量を全木で平均します。高速ですが、カテゴリ数や連続値の解像度が高い特徴量に偏るバイアスがあります。2つ目はpermutation importance(置換重要度)で、ある特徴量の値をランダムに入れ替えたときのOOB精度の低下量を測ります。計算コストは高いものの、より公平な評価とされています。
ランダムフォレストは独立な木を並列学習し(bagging)、多数決または平均で集約します。各木の分散を下げることが目的で、過学習に強くチューニングが容易です。勾配ブースティング(XGBoost・LightGBM・CatBoost等)は前の木の残差を次の木が補正する直列学習(boosting)で、バイアスを下げて精度を高めます。一般にboostingの方が精度上限は高いですが、学習率や木の数の調整が繊細で、過学習しやすい性質があります。
理論的にはTを増やしてもOOBエラーは単調に下がり過学習しません(Breimanの大数の法則)。実用的にはT=100〜500で精度が頭打ちになることが多いです。Tを大きくすると学習・推論コストが線形に増えるため、OOBエラーカーブを見て頭打ちになる手前で止めるのが定石です。本シミュレーターでは描画速度のためT≦50に制限していますが、振舞いの本質は同じで、T=20を超えると決定境界の変化はわずかになります。

実世界での応用

クレジットスコアリングと与信判断:金融機関では、年収・勤続年数・延滞履歴・取引パターンなどから債務不履行確率を推定するモデルとして、ランダムフォレストや勾配ブースティング木が標準的に使われます。多数決の票率を「リスクスコア」として直接活用でき、解釈性も比較的高い(特徴量重要度を提示できる)ため規制当局への説明にも適します。

医療診断・遺伝子発現解析:遺伝子発現データのような「特徴量数 >> サンプル数」の高次元データでも、ランダムフォレストは過学習に強く実用的です。特徴量サブサンプリングが効くため、ノイズの多い数千〜数万次元の特徴空間からでも、疾患関連遺伝子の重要度ランキングを安定して算出できます。バイオインフォマティクス分野で広く使われています。

製造業の不良品判定・予知保全:センサーデータから不良品や故障兆候を検出するシステムで、ランダムフォレストは現場展開しやすい選択肢です。学習が並列化でき、推論も高速で、外れ値に頑健です。多数決の票率を閾値処理することで「確信度の高いものだけ自動判定し、グレーゾーンは人間に回す」という実用的な運用が容易です。

レコメンドシステム・需要予測:EC・小売業では、ユーザー属性や購買履歴から購入確率や需要量を予測するためにランダムフォレストが使われます。とくに特徴量エンジニアリング前のベースラインモデルとして優秀で、線形モデルよりも交互作用を自動的に捉えられます。深層学習が普及した今でも、表形式データではしばしば最強クラスの性能を発揮します。

よくある誤解と注意点

最も多い誤解は、「木をたくさん作れば必ず精度が上がる」と思い込むことです。確かにOOBエラーはTに対して単調に下がりますが、ある本数(多くは100〜500)で精度が頭打ちになり、それ以上増やしても改善はわずかです。代わりに学習・推論コストが線形に増え、メモリも消費します。シミュレーターで木の本数を1→10→30→50と動かしてみてください。T=10とT=30の決定境界の差は明確ですが、T=30とT=50の差はほとんど見えないはずです。実務では「OOBエラーがプラトーになる手前」で止めるのが正解です。

次に多いのが、特徴量重要度(MDI)を絶対視してしまうことです。MDIはカテゴリ数の多い特徴量や連続値の解像度が高い特徴量に対して過大評価する既知のバイアスを持ちます。例えば「顧客ID」のような無意味だがユニークな特徴量を入れると、最上位に来てしまうことがあります。重要度の解釈には permutation importance や SHAP値を併用するのが安全です。また、相関の高い特徴量同士で重要度が分散することにも注意が必要です。

最後に、ランダムフォレストが万能だと考えてしまう点に注意してください。表形式データでは確かに強力ですが、画像・音声・テキストのような構造化データでは深層学習に大きく劣ります。また、外挿能力が極めて弱く、訓練データの範囲を超えた入力に対しては予測が破綻します。さらに、極端なクラス不均衡データでは多数決が常に多数派クラスを返してしまうため、class_weight や閾値調整、SMOTE などの対策が必須です。本シミュレーターでも、クエリ点を(±5, ±5)の隅に動かすと票率が極端になるのが分かります——これは外挿の不安定さの一端です。