- 多数の決定木をランダムに構築してその予測結果を多数決(分類)または平均(回帰)で統合することで単一の決定木より高精度・過学習に強い予測を実現する機械学習のアンサンブル学習手法のこと
- 1995年にTin Kam Hoが提唱してLeo Breimanが2001年に発展させた手法で「多様な意見を集めた多数決は個人の判断より正確」という集合知の原理を機械学習に応用した手法だ
- 実装が比較的容易・ハイパーパラメータの調整が少ない・特徴量の重要度を可視化できるという実用的な特性から、データサイエンティストに最もよく使われる機械学習手法の一つだ
【深掘り】これだけ知ってればOK!
ランダムフォレストのメリットとデメリットを整理しよう。メリット:高精度・過学習に強い・外れ値に頑健・特徴量の重要度(Feature Importance)を出力できる・ハイパーパラメータの調整が少ない・欠損値にある程度対応できる。デメリット:モデルの解釈が難しい(個々の決定木と比べて)・計算コストが高い・特徴量が多い場合に次元の呪いの影響を受けやすい。
ランダムフォレストとXGBoostの比較を理解しよう。ランダムフォレスト(Bagging):独立した決定木を並列に構築して集約する。実装が簡単で安定した精度が出る。XGBoost・LightGBM・CatBoost(Gradient Boosting):前の決定木の誤りを次の決定木が補正する逐次的な手法。Kaggleコンペでよく上位に入る手法。ただしランダムフォレストより調整が難しい。
Pythonでのランダムフォレストの実装は非常に簡単だ。scikit-learnの`from sklearn.ensemble import RandomForestClassifier`を使えば数行のコードでランダムフォレストを構築できる。`n_estimators`(決定木の数)・`max_depth`(木の深さの上限)・`max_features`(各ノードで使う特徴量の数)が主要なハイパーパラメータだ。
よくある誤解
ランダムフォレストはランダムなのでモデルが毎回変わると思っている
「ランダム」なのはブートストラップサンプリングと特徴量の選択のランダム化であり、`random_state`パラメータで乱数シードを固定することで再現性のある結果を得られる。実験・論文発表では必ず`random_state=42`などを設定する。
決定木が多ければ多いほど精度が上がり続けると思っている
決定木の数(n_estimators)を増やすと一定数まで精度が向上するが、ある程度を超えると精度改善が頭打ちになる一方で計算コストだけが増え続ける。一般的に100〜500程度の決定木で十分なケースが多く、計算コストとのトレードオフを考慮することが重要だ。
会話での使われ方

顧客の離脱予測モデルにランダムフォレストを使いました。Feature Importanceを見たら「最終購入からの日数」が最も重要な特徴量でした。マーケティング施策の優先順位付けに活用できます。
データサイエンティストがランダムフォレストのFeature Importanceをビジネス洞察に活用している場面。




Kaggleのコンペ、まずランダムフォレストでベースラインを出してからXGBoostで精度を上げる流れで進めましょう。
データサイエンティストが機械学習モデルの開発順序を説明している場面。




scikit-learnのRandomForestClassifierを使えば3行で実装できます。まず動くモデルを作ってからチューニングする順序で進めましょう。
機械学習エンジニアが初学者にランダムフォレストの実装の簡単さを教えている場面。
【まとめ】3つのポイント
- 多数の決定木の多数決・平均で高精度かつ過学習に強い予測を実現するアンサンブル手法:ランダムサンプリングと特徴量のランダム選択で多様な決定木を構築して集約することで単一の決定木より安定して高精度な予測が得られる
- Feature Importanceで特徴量の貢献度を可視化してビジネス洞察を得る:どの特徴量が予測に最も貢献しているかを数値で可視化できるランダムフォレストのFeature Importanceはモデルの解釈とビジネス意思決定の優先順位付けに実用的な洞察を提供する
- scikit-learnで数行から実装できる実用性の高いベースライン手法:ハイパーパラメータの調整が少なく実装が簡単でかつ安定した精度が出るランダムフォレストは機械学習プロジェクトのベースラインモデルとして最適でGradient Boostingへの発展的な比較対象にもなる
よくある質問
-
QランダムフォレストとXGBoostはどちらが精度が高いですか?
-
A
一般的にXGBoostの方が高精度になることが多いですが調整が必要です。ランダムフォレストはパラメータ調整が少なく安定した精度が出るため、まずランダムフォレストでベースラインを作ってからXGBoostで精度向上を目指すアプローチが実用的です。
-
QPythonでランダムフォレストを実装するには何のライブラリが必要ですか?
-
A
scikit-learn(sklearn)が最も一般的です。`from sklearn.ensemble import RandomForestClassifier`でインポートして使えます。
-
Q決定木(Decision Tree)とランダムフォレストはどう違いますか?
-
A
決定木は1本のツリー構造でデータを分類・回帰します。ランダムフォレストは多数の決定木を組み合わせたアンサンブル手法です。決定木は解釈しやすいがランダムフォレストより精度が低く過学習しやすい傾向があります。
-
Qn_estimators(決定木の数)はどのくらいが適切ですか?
-
A
一般的に100〜500程度で十分なケースが多いです。数を増やしても精度改善が頭打ちになる点を計算コストと比較しながら決めます。
【出典】参考URL
https://scikit-learn.org/stable/modules/ensemble.html#forest :scikit-learnのRandomForestのドキュメント
https://www.jmlr.org/papers/volume3/breiman01a/breiman01a.pdf :Leo BreimanのRandom Forests原著論文




コメント