ランダムフォレストとは?意味・仕組みと木のモデルを扱った論文(2026年11月時点)

ランダムフォレスト

Random forest / ランダムフォレスト法

ランダムフォレストとは、学ぶ例の組と節ごとに試す特徴量をランダムに変えて多数の決定木を作り、その予測を多数決や平均でまとめて分類や数値の予測をする機械学習の手法のこと。

要するに

  • 例を重ねて選んでよい抜き出し方(バギング)と特徴量の抜き出しで、互いに違う木を作る
  • Google の講座は、木を足しても過学習せず、OOB 評価で検証用のデータを省けるとする
  • 勾配ブースティングは木を順に直していき、ランダムフォレストは独立な木を並べて作る

最終確認

白い面に並べた高さの違う木の形の置物5本(白3本、黒1本、すりガラス1本)と、幹の間を縫う紫のリボン
目次8

ひとことで言うと

ランダムフォレストはたくさんの決定木を作り、それらの予測をまとめて答えを出す機械学習の手法だ。Google の講座「Decision Forests」は、木ごとに決まったランダムなノイズを入れて学ばせた決定木の集まり(アンサンブル)と説明し、木を組み合わせる方法のなかで最も広く使われているとしている。分類にも回帰(数値の予測)にも使える。scikit-learn(Python の機械学習のライブラリ)は元の論文として、Breiman の「Random Forests」(Machine Learning 誌、2001年)を挙げている。

講座の表には、6件の学習用の例を3本の木に配る例がある。1本目の木は例4を2回使い、例3は使わない。2本目の木は例1を3回使う。木ごとに学ぶ例の組が違う。

仕組み

ランダムフォレストは次の流れで作られ、使われる。

  1. 学習用のデータから、元と同じ件数の例を、同じ例を重ねて選んでよい方法(ブートストラップ)で抜き出す。Google の講座によると、1本の木が学ぶのは元の例のうちふつう約67%で、残りの枠は重ねて選ばれた例で埋まる。
  2. その組で決定木を1本育てる。各節では、特徴量のうちランダムに選んだ一部だけを試して条件を決める。試す特徴量は節ごとに選び直す。
  3. 講座の説明では、木は剪定せずに育てる。1本ずつは複雑すぎて予測の質が低いが、木ごとに抑える代わりに、組み合わせて全体の予測を良くする。
  4. 1〜3を木の本数だけくり返す。木どうしは独立しているので、並べて同時に学習できる。
  5. 予測するときは、各木の予測をまとめる。元の論文の分類では木が1つのクラスに票を入れ、scikit-learn は各木が出す確率の予測を平均する。

1のように例を抜き出して木を作り、予測をまとめる方法をバギング(bootstrap aggregating)と呼ぶ。scikit-learn によると、バギングはもとのモデルのばらつき(分散)を減らす方法で、深く育てた決定木のような強く複雑なモデルと組み合わせると最もよく働く。ランダムフォレストは、これに2の特徴量の抜き出しを加えたものだ。scikit-learn では、すべての特徴量を試す設定(max_features=1.0)が、バギングした木と同じになる。

scikit-learn は、2つのランダムさは分散を減らすためのものだとしている。その代わり、偏り(バイアス)がわずかに増えることがある。Google の講座によると、木の深さを強く制限すると、1本の木の予測は良くなるが、ランダムフォレストの予測は悪くなることが多い。

講座によると、1本の木はふつう約33%の例を学ばず、その例を成績の見積もりに使える。これを OOB 評価(out-of-bag。袋の外の例による評価)と呼ぶ。例ごとに、その例を学ばなかった木だけで予測させる。講座は、ランダムフォレストには検証用のデータが要らないとし、とくに小さなデータでは、手元のデータをすべて学習に使うべきだとしている。scikit-learn では oob_score=True で使える(RandomForestClassifier の既定は False)。

表で見る最新の状況

上の論文の欄は、TRAIL が解説した論文から、木のモデルと表のデータにかかわる2本を古い順に並べたものだ。確認日は2026年11月6日。どちらもランダムフォレストそのものを扱った論文ではない。

2017年6月の CatBoost は、比べる相手になる勾配ブースティングの側の論文だ。TRAIL の解説によると、カテゴリの値を目的変数の統計に変えるときに、その行の正解が紛れ込む問題を扱った。データセット Epsilon での実行時間の比較では、提案した順序付きのモードは、通常のモードや LightGBM より約1.7倍遅かった。

2025年11月の TabPFN-2.5 は、表のデータ用の基盤モデルだ。比較の相手には、XGBoost や CatBoost などの木のモデルが入っている。TRAIL の解説によると、著者らは最大5万行・2千特徴量を設計上の目安としているが、5万行を超えると使えないという境界ではない。

ランダムフォレストと勾配ブースティングの違い

ランダムフォレスト 勾配ブースティング
木の並べ方 木を互いに独立に作り、予測をまとめる 木を順に1本ずつ作り、前の木までの誤りを次の木が直す
1本の木 ふつうは深く、1本ずつは過学習する 浅く、1本ずつは学び足りない
学習の速さ 木を並べて同時に学習できる 順に作るので遅くなりうる。木が小さい分、いくらか補われる
木を足すと 誤りはほぼ必ず減り、ある所で改善が止まる 過学習しうるので、検証用のデータで早めに止める
検証用のデータ OOB 評価で代えられる 早めに止めるには要る
設定の調整 既定値で良い結果が出ることが多く、調整の効き目は小さいことが多い 既定値でも良い結果が多いが、調整で大きく良くなりうる
モデルの大きさ 100万節を超えることも珍しくない 一般に小さく、予測も速い

表の多くは Google の講座による。scikit-learn は、勾配ブースティングが比較的少ない木で成績を上げられるのに対し、多数決で予測するランダムフォレストは同じ精度に多くの木を要することがあるとしている。また scikit-learn のランダムフォレストは、値を区間にまとめる工夫(ビニング)を使わず、正確な分け目を探すので、計算が重くなりうる。

仕事でどう関係するか

表のデータで最初の基準のモデルを作るとき

Google の講座は、ランダムフォレストには良い結果が出ることの多い既定値があり、調整しても効き目は小さいことが多いとしている。講座によると、決定木と同じく数値とカテゴリの特徴量をそのまま扱え、前処理が要らないことが多い。ただし決定木のページで触れたとおり、scikit-learn の決定木は1.9.1の説明の時点ではカテゴリの値をそのまま扱えない。前処理が要るかは使うライブラリで確かめる。

外部にモデルの開発を頼むときは、評価の方法を最初に伝えておくとよい。

プロンプト
顧客データで解約を予測するランダムフォレストを作ってください。
- まず既定値で学習し、OOB 評価の成績を記録する
- 学習用のデータでの正解率ではなく、OOB 評価かテスト用のデータの成績で比べる
- 同じデータで勾配ブースティングも試し、成績と学習時間を表にまとめる

木の数・深さ・特徴量の数を決めるとき

主なハイパーパラメータ(学習の前に人が決める設定)は次の3つだ。

  • 木の数(scikit-learn の n_estimators):1.9.1 の RandomForestClassifier の既定は100本。多いほど良いが、計算に時間がかかり、ある本数を超えると大きくは良くならない。
  • 節ごとに試す特徴量の数(max_features):少ないほど分散は減るが、偏りは増える。scikit-learn は経験的に良い値として、分類では特徴量の数の平方根、回帰ではすべての特徴量を挙げている。1.9.1 の RandomForestClassifier の既定は平方根("sqrt")だ。
  • 木の深さ(max_depth):1.9.1 の RandomForestClassifier の既定は None(制限なし)だ。Google の講座によると、実際には深さと葉の例の数を制限すると良く、多くの実装は深さ16ほど、葉の最小の例の数5ほどを既定にしている。

回帰で節ごとに試す特徴量の割合は、資料によって目安が違う。Google の講座は、多くの実装が回帰では特徴量の3分の1、分類では平方根を既定にしているとする。scikit-learn は回帰ではすべての特徴量を経験的に良い値とし、文献では0.3がよく使われる既定値だとも書いている。そのうえで、良い値は必ず交差検証で選ぶよう勧めている。

どの項目が効いたかを報告するとき

Google の講座は、特徴量の重要度を解釈の手がかりの1つとしている。講座には国勢調査のデータ(Census。Adult とも呼ばれる)で学ばせたランダムフォレストの、14の特徴量の重要度の表がある。木の構造から計算する sum score では relationship が1位だが、特徴量を並べ替えたときの正解率の下がり方では capital_gain が1位になる。講座は、重要度の定義によって尺度が違い、順位も変わりうるとしている。

ランダムフォレストでは並べ替えによる重要度(順列重要度)を、検証用のデータの代わりに OOB 評価で計算できる。scikit-learn の feature_importances_ は不純度の減り方による重要度(MDI)で、合計が1.0になる。MDI には偏りがあり、その注意は特徴量のページにまとめている。講座によると、1件ずつの予測を説明する SHAP は、ふつうは計算が重いが、木を組み合わせたモデルでは大きく速くできる。

注意点と限界

ランダムフォレストは、1本の決定木より解釈が難しい。Google の講座は、木がランダムなノイズを入れて学ばれているので、木の形から判断しにくいとしている。講座は、単純なデータで全体の傾向をつかむ方法として、同じデータで1本の決定木を学ばせて読むことを挙げている。

学習用のデータでの正解率は、テスト用のデータより大きく高くなるのがふつうで、100%になることもある。講座によると、これは過学習を示すものではない。成績は OOB 評価かテスト用のデータで見る。

剪定しない木を多数持つので、モデルが大きくなる。講座によると、100万節を超えるモデルは珍しくなく、大きさと予測の速さが問題になることがある。scikit-learn も、木を最後まで育てる設定(max_depth=None と min_samples_split=2。RandomForestClassifier の既定と同じ)は多くのメモリを使いうるとし、葉の数や深さの上限などでモデルを小さくできるとしている。

講座によると、ランダムフォレストはデータの中のパターンを内部の表現として学んで使い回せない。木ごと、枝ごとにパターンを学び直す必要があり、画像や文章のような表でないデータでは、ほかの方法より成績が悪くなることがある。

よくある質問

ランダムフォレストとは簡単に言うと何か

たくさんの決定木の予測をまとめて答えを出す手法だ。木ごとに、学ぶ例の組と、節ごとに試す特徴量をランダムに変える。

木の数は多いほど良いか

成績の面では、多くしても悪くなりにくい。Google の講座によると、木を足すと誤りはほぼ必ず減り、木を足しても過学習しない。ただし、ある本数で改善は止まり、計算の時間は増える。

バギングとランダムフォレストはどう違うか

バギングは例を抜き出した組でモデルを作り、予測をまとめる方法の総称だ。ランダムフォレストは、決定木のバギングに、節ごとに試す特徴量を抜き出す工夫を加えたものだ。scikit-learn では、すべての特徴量を試す設定にすると、バギングした木と同じになる。

検証用のデータは要るか

Google の講座は要らないとしている。1本の木が学ばなかった例で成績を見積もる OOB 評価があるからだ。講座は、とくに小さなデータでは、すべてのデータを学習に使うべきだとしている。

勾配ブースティングとどちらから試すべきか

scikit-learn は、どちらの計算の費用が大きいかはデータと課題によるとし、両方を試して比べるよう勧めている。Google の講座によると、ランダムフォレストは既定値のままで良い結果が出ることが多く、勾配ブースティングは調整で大きく良くなりうる。

関連する用語

出典

公開
執筆
TRAIL編集部(編集方針)