LASSIC Media らしくメディア
ランダムフォレストとは?決定木との違いと業務での使いどころ
監修・編集責任者:牛尾 昭昌(株式会社LASSIC 執行役員)
この記事の結論
- ランダムフォレストは、少しずつ違うデータで育てた多数の決定木の予測を、多数決や平均でまとめる機械学習の手法です。
- 表形式のデータで分類や数値の予測をしたいとき、最初に試す基準のモデルとして扱いやすく、学習に使わなかったデータで誤差も見積もれます。
- つまずきやすいのは特徴量の重要度の読み方と、学習データの範囲外への予測で、並べ替えによる重要度と外れた入力の監視を先に用意します。
※ 本記事は2026年10月時点の公式情報(省庁・公的機関、および製品やサービスを提供する事業者が公開している資料)に基づきます。
ランダムフォレストは、たくさんの決定木を育て、その予測を多数決や平均でまとめる機械学習の手法です。売上や需要の予測、不正な取引の検知、設備の故障の予兆の判定など、表形式のデータを扱う業務で広く使われています。一方で、決定木1本との違いや、特徴量の重要度をそのまま信じてよいのかは、使い始めてから迷いやすい点です。
本記事では、システム開発やデータ活用に携わる方に向けて、提案者Breimanの原論文とPythonのライブラリscikit-learnの公式ドキュメントをもとに、仕組み、決定木との違い、短いコード例、業務での使いどころと落とし穴、外部に頼むときの確認点を整理します。
目次
ランダムフォレストとは
ランダムフォレストは、統計学者のLeo Breimanが2001年の論文「Random Forests」で体系立てた手法です。論文は、木の形をした分類器の集まりで、それぞれの木が互いに独立で同じ分布に従う乱数をもとに作られ、入力に対して各木が最も多い分類に1票ずつ投じるもの、と定義しています。*1 木ごとに少しずつ違う形になり、その違いを多数決でならして安定した予測を得ます。
名前の「フォレスト(森)」は木がたくさん集まっていること、「ランダム」は木ごとに乱数で違いを持たせることを表しています。分類(「解約する・しない」のようにカテゴリーを当てる)にも回帰(売上のように数値を当てる)にも使え、回帰では多数決の代わりに各木の予測の平均をとります。
複数のモデルを組み合わせて1つの予測を出す手法をアンサンブル学習と呼び、ランダムフォレストはその代表格です。scikit-learnではRandomForestClassifier(分類)とRandomForestRegressor(回帰)として用意されています。
木を束ねる仕組み
木ごとの違いは、2つの無作為さから生まれます。1つ目はデータの選び方です。元の学習データから、重複を許して同じ件数を抜き出した標本(ブートストラップ標本)を木ごとに作り、その標本で木を育てます。2つ目は分岐の選び方です。木の各分岐で、すべての特徴量の中から最良の分け方を探すのではなく、無作為に選んだ一部の特徴量だけを候補にします。原論文の手順では、木の深さを制限せずに育て、枝の刈り込み(剪定)はしません。*1
原論文は、森全体の誤差が、1本ごとの木の強さ(当てる力)と、木どうしの相関の2つで決まることを示しました。*1 似た木ばかりでは同じ間違いを重ねてしまうため、強さを保ちながら相関を下げることが精度の鍵になります。分岐の候補を絞るのは、この相関を下げるための工夫です。
scikit-learnの説明も同じ考え方です。決定木は1本だとばらつき(分散)が大きく過学習しやすいが、無作為さを入れて誤りの傾向が少しずつ違う木を作り、その平均をとると誤りが打ち消し合って分散が下がる、としています。代わりに偏り(バイアス)がわずかに増えることがあるものの、実際には分散の低下が大きく、全体として良いモデルになることが多いという説明です。*2
ブートストラップ標本には入らないデータも出ます。各標本から外れるのはおよそ3分の1のデータで、これをOOB(out-of-bag)と呼びます。あるデータに対して、そのデータを学習に使わなかった木だけで予測させれば、別に検証用のデータを取り分けなくても誤差を見積もれます。原論文は、このOOBによる見積もりが、学習データと同じ大きさの検証データを使った場合と同程度に正確だという実証を引いています。*1
決定木との違い
部品である決定木は、「購入回数が3回以上か」のような条件でデータを順に分けていく手法です。scikit-learnのドキュメントは、決定木の長所として、理解しやすく図にもできること、データの前処理がほとんど要らないことを挙げています。反対に短所として、学習データに合わせすぎて新しいデータに当てはまらない木を作りやすいこと、データの小さな違いでまったく別の木ができる不安定さがあることを挙げ、後者はアンサンブルで和らげられるとしています。*4
| 観点 | 決定木1本 | ランダムフォレスト |
|---|---|---|
| 予測の出し方 | 1本の木の葉の値 | 多数の木の多数決または平均 |
| データの小さな変化 | 木の形が大きく変わりやすい | 多数の木でならされ、影響が小さい |
| 過学習 | 深さの制限や剪定で抑える | 木は深く育て、束ねることで抑える |
| 説明のしやすさ | 分岐の条件をそのまま読める | 木が多く、条件を読んで説明するのは難しい |
| 学習と予測の負荷 | 軽い | 木の本数に応じて重くなる |
違いが最も表れるのは説明のしやすさです。原論文自身が、木の森は仕組みを単純に解釈しようとしても中が見通せないと書き、変数の重要度を測る方法をその手がかりとして示しています。*1 判断の理由を一件ずつ説明する必要がある業務では、この点を先に考えておきます。予測の根拠を示す技術は「説明可能AI(XAI)とは」で扱っています。
具体例:scikit-learnの短いコード
scikit-learnで分類のモデルを作り、OOBによる正解率と、並べ替えによる特徴量の重要度を出す例です。10個の特徴量のうち、先頭の3つ(特徴量0〜2)だけが答えに関係するように作った練習用のデータを使います。
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
from sklearn.inspection import permutation_importance
# 10列のうち、先頭の3列(特徴量0〜2)だけが答えに関係するデータを作る
X, y = make_classification(n_samples=2000, n_features=10, n_informative=3,
n_redundant=0, shuffle=False, random_state=0)
X_tr, X_te, y_tr, y_te = train_test_split(X, y, random_state=0)
rf = RandomForestClassifier(n_estimators=300, oob_score=True,
n_jobs=-1, random_state=0)
rf.fit(X_tr, y_tr)
print("OOBの正解率:", round(rf.oob_score_, 3))
print("テストの正解率:", round(rf.score(X_te, y_te), 3))
imp = permutation_importance(rf, X_te, y_te, n_repeats=10, random_state=0)
for i in imp.importances_mean.argsort()[::-1][:5]:
print(f"特徴量{i}: {imp.importances_mean[i]:.3f}")
oob_score=Trueを指定すると、学習後にoob_score_でOOBによる正解率を確かめられます。scikit-learn 1.9.1で実行したところ、OOBの正解率は0.909、取り分けたテストデータでの正解率は0.91と近い値になりました。並べ替えによる重要度は、特徴量0〜2の3つが上位に並び、残りはほぼ0でした。
決定木1本と比べるには、続けて5分割の交差検証を回します。同じ環境では、正解率の平均は決定木1本が0.854、ランダムフォレストが0.893でした。
from sklearn.model_selection import cross_val_score
from sklearn.tree import DecisionTreeClassifier
for name, model in [("決定木1本", DecisionTreeClassifier(random_state=0)),
("ランダムフォレスト", RandomForestClassifier(random_state=0))]:
s = cross_val_score(model, X, y, cv=5)
print(name, "平均", round(s.mean(), 3), "ばらつき", round(s.std(), 3))
主な設定は木の本数(n_estimators)と、分岐で候補にする特徴量の数(max_features)の2つです。既定値は、木の本数が100、分類での候補の数が特徴量の数の平方根です。*3 公式ドキュメントは、木は多いほど良いが計算に時間がかかり、ある本数を超えると大きくは良くならないとしています。回帰では、すべての特徴量を候補にする1.0が経験的に良い既定値とされています。*2
業務での使いどころ
ランダムフォレストが力を発揮するのは、行と列からなる表形式のデータで、分類や数値の予測をしたい場面です。解約しそうな顧客の判定、販売数の見込み、センサーの値からの異常の兆しの発見などが当てはまります。需要の予測をシステムに組み込む進め方は「需要予測システムの開発を外注する進め方」でも紹介しています。
実務で重宝されるのは、最初に試す基準のモデルとしての扱いやすさです。決定木を部品にしているため特徴量の単位をそろえる前処理がほとんど要らず、既定値からも始めやすい手法です。まずランダムフォレストで基準の精度を測り、それを上回るかどうかで、より手間のかかるモデルを採るかを判断する、という進め方がとれます。
有力な比較相手は、同じく決定木を束ねる勾配ブースティングです。scikit-learnのドキュメントは、ランダムフォレストが深い木を並行して育てるのに対し、勾配ブースティングは浅い木を1本ずつ、前の木の誤りを直すように順に育てると説明し、どちらが合うかはデータと課題によるので両方を試して比べるよう勧めています。*2 画像や音声、文章が主役の課題では、深層学習が第一候補になります。教師あり学習の全体像は「教師あり学習と教師なし学習の違い」をご覧ください。
つまずきやすい点
最も誤解が多いのは、特徴量の重要度です。学習済みのモデルが持つfeature_importances_は、分岐で不純度(分けた後の混ざり具合)がどれだけ下がったかをもとにした値です。scikit-learnは、この値には2つの欠点があり誤った結論を招きうると警告しています。1つは学習データから計算されるため、新しいデータでの予測に役立つ特徴量を示すとは限らないこと。もう1つは、IDや細かい数値のように取りうる値の種類が多い特徴量を高く評価しがちなことです。*2
代わりに、検証データで1つの列だけを並べ替えたときに精度がどれだけ落ちるかを測る「並べ替えによる重要度」を使います。原論文が示した重要度も、この考え方です。
並べ替えによる重要度にも注意点があります。強く相関する2つの特徴量があると、片方を並べ替えてもモデルはもう片方から情報を得られるため、両方とも重要度が低く出ることがあります。*5 また、重要度はその特徴量が答えとどれだけ関係するかではなく、そのモデルにとってどれだけ役立っているかを表すものです。精度の低いモデルで読んでも意味が薄いので、先に検証データで精度を確かめます。
学習データの範囲の外への予測にも弱い手法です。決定木の予測は滑らかにつながらない階段状の近似で、範囲外への外挿が得意ではありません。*4 回帰の予測は葉に入った学習データの値の平均なので、学習データに無かった高い値や低い値は出てきません。これまでにない水準の需要など、学習データの範囲を超える予測が要る課題では、別の手法を組み合わせるか、入力が学習時の範囲を外れたら知らせる仕組みを用意します。
ほかに、不正の検知のように目的のクラスがごく少ない課題では、class_weightで重みを調整したり、正解率以外の指標で評価したりします。木を深く育てる設定ではモデルが大きくなり、メモリーを多く使う点にも気を配ります。
外部に委託するときに確認しておきたい点
ランダムフォレストを使った予測の仕組みを外部に頼むときは、まず比べる相手を確かめます。いまの業務のルールや単純な集計で届く精度を先に測り、それを上回るかで採否を決める進め方を提案してくれるかを見ます。
次に、評価の方法です。OOBや交差検証の結果に加えて、時間の流れがあるデータなら、過去で学習して未来で評価する分け方になっているかを確かめます。評価の指標が、業務で困る間違い(見逃しと誤検知のどちらが重いか)に合っているかも確認しておきたい点です。
三つ目は、重要度の説明の仕方です。報告で示される重要度が不純度にもとづく値か、検証データで測った並べ替えによる値かを尋ねます。前者だけで「この項目が重要だ」と説明されている場合は、並べ替えによる値でも確かめてもらいます。
最後に、本番に入れた後の運用です。入力データの傾向が学習時から変わっていないかの監視、再学習の頻度と手順、モデルの版の管理、予測の処理時間の目安を、提案の段階で確かめておきます。
まとめ:ランダムフォレストで確かめておきたい3つの点
ランダムフォレストを業務に使ううえで、確かめておきたい点は3つに整理できます。第一に、データを少しずつ変えて育てた多数の決定木を束ね、木どうしの相関を下げることで精度を上げる仕組みだと理解しておくこと。第二に、表形式のデータの分類や予測で最初に試す基準のモデルとして使い、OOBや交差検証で精度を測ったうえで、勾配ブースティングなどと比べること。第三に、重要度は検証データでの並べ替えによる値で読み、学習データの範囲を超える予測には向かないことを踏まえて、入力の監視を用意することです。この3点を押さえておけば、精度の数字だけで導入して後から説明や運用で困る事態を避けやすくなります。
よくある質問
木の本数は、どのくらいにすればよいですか
scikit-learnの既定値は100本です。木を増やしても過学習にはつながりにくく、原論文も木の本数を増やすと誤差がある値に落ち着くことを示していますが、計算時間とメモリーは増えます。OOBの正解率がほぼ変わらなくなる本数を目安にすると、無駄な計算を避けられます。
欠損値があるデータでも使えますか
scikit-learnのRandomForestClassifierは、欠損値(NaN)をそのまま扱えます。学習時に、欠損した行を分岐の左右どちらへ送ると良いかを学びます。*3 ただし、欠損が起きる理由が業務上の意味を持つ場合もあるため、欠損の有無を表す列を別に作るかどうかも含めて検討します。
ランダムフォレストでも過学習は起きますか
木の本数を増やすことによる過学習は起きにくい手法ですが、どんな場合でも過学習しないわけではありません。学習データでは高い精度が出るのに検証データで下がる場合は、木の深さや葉に入る最小の件数を制限して、1本ごとの木を単純にすることを試します。
ランダムフォレストを使った予測モデルのご相談
元請(プライムベンダー)として、予測モデルの検証から業務システムへの組み込み、保守・運用までご提案します。
Remoguとリラシクなら、機械学習モデルの開発や運用に加わるITエンジニアも探せます。
Remoguは、リモート前提で全国から即戦力のITプロ人材を調達するサービスです。リラシクは、扱う求人がすべてリモートワークのITエンジニア専門転職エージェントです。どちらもLASSICが運営しています。
出典
- *1 参考:Leo Breiman「Random Forests」(Machine Learning, 45(1), 5-32, 2001年。著者公開版)(https://www.stat.berkeley.edu/~breiman/randomforest2001.pdf)。出典:定義1.1(ランダムフォレストの定義)、第2章(木の強さと相関による誤差の上限・木の本数に対する収束)、第3.1節(ブートストラップ標本・剪定しない木・OOBの見積もりと約3分の1のデータ)、第4章(分岐ごとに無作為に選ぶ特徴量)、第10章(並べ替えによる変数の重要度・解釈の難しさ)を参照(2026年10月確認)
- *2 参考:scikit-learn「1.11. Ensembles: Gradient boosting, random forests, bagging, voting, stacking」(ユーザーガイド、1.9.1)(https://scikit-learn.org/stable/modules/ensemble.html)。出典:1.11.2.1(2つの無作為さと分散の低下・確率の平均による予測・勾配ブースティングとの比較)、1.11.2.3(n_estimatorsとmax_featuresの目安・メモリー)、1.11.2.5(不純度にもとづく重要度の2つの欠点)を参照(2026年10月確認)
- *3 参考:scikit-learn「RandomForestClassifier」(APIリファレンス、1.9.1)(https://scikit-learn.org/stable/modules/generated/sklearn.ensemble.RandomForestClassifier.html)。出典:n_estimators・max_features・bootstrap・oob_score・class_weightの既定値と説明、欠損値の扱い、oob_score_属性を参照(2026年10月確認)
- *4 参考:scikit-learn「1.10. Decision Trees」(ユーザーガイド、1.9.1)(https://scikit-learn.org/stable/modules/tree.html)。出典:決定木の長所(解釈しやすさ・前処理の少なさ)と短所(過学習・不安定さ・外挿の弱さ・クラスの偏り)を参照(2026年10月確認)
- *5 参考:scikit-learn「5.2. Permutation feature importance」(ユーザーガイド、1.9.1)(https://scikit-learn.org/stable/modules/permutation_importance.html)。出典:並べ替えによる重要度の考え方、検証データで先に精度を確かめる注意、強く相関する特徴量で重要度が低く出る注意を参照(2026年10月確認)