アンサンブル学習の世界へようこそ!
前回の学習では決定木について学びましたね。決定木は直感的で分かりやすい反面、「壊れやすい」という大きな弱点があります。データが少し変わるだけで、全く別の木になってしまうことがあるのです。専門的には、これを高バリアンス(high variance)な状態と言います。
この章では、「アンサンブル学習」を使ってこの問題を解決する方法を学びます。一つの木に頼るのではなく、森全体を作ってしまおうという作戦です!特に、アクチュアリーの予測モデリングツールキットの中でも非常に強力な「バギング(Bagging)」と「ランダムフォレスト(Random Forests)」という2つの手法に焦点を当てます。
1. 基本:バギング(ブートストラップ集約)
名前が難しそうに聞こえても大丈夫ですよ!バギング(Bagging)は、Bootstrap Aggregatingの略称にすぎません。考え方はとてもシンプルで、「一人の専門家の意見よりも、みんなの知恵を集めた方が賢い」というものです。
ブートストラップ法とは?
100個のビー玉が入った袋を想像してください。そこから「新しい」100個の袋を作りたいとします。1つ取り出して色を記録し、袋に戻す。これを100回繰り返します。袋に戻すため、同じビー玉が2回以上選ばれることもあれば、一度も選ばれないビー玉もあります。これを復元抽出(sampling with replacement)と呼びます。
バギングの手順:
1. ブートストラップ:元のデータセットから、たくさんの(通常は数百個の)異なるブートストラップサンプルを作成します。
2. 学習:それぞれのサンプルに対して、深く成長させた決定木を構築します。サンプルが少しずつ異なるため、できあがる木も少しずつ異なります。
3. 集約:最終的な予測を行うために、すべての木の結論を合わせます:
• 回帰(数値を予測):すべての木の予測値の平均をとります。
• 分類(カテゴリを予測):多数決をとります。最も多くの木が選んだカテゴリが最終的な答えになります。
なぜこれを行うのでしょうか?
バギングの主な目的はバリアンスを減らすことです。多くの木の平均をとることで、個々の木が持つ「ノイズ」や誤差を打ち消し、より安定した精度の高い予測が可能になります。100人に象の体重を当ててもらうようなものです。個人の予想は大きく外れるかもしれませんが、平均すればかなり正確な値に近づくはずです!
復習:バギング = ブートストラップ(復元抽出)+ 集約(結果の平均化)。これにより、バイアスを悪化させることなくバリアンスを抑えることができます。
2. Out-of-Bag (OOB) 誤差推定
知っていましたか? バギングを使うとき、実はモデルの性能を測るためにわざわざ別の「検証用データセット」を用意する必要はありません。Out-of-Bag (OOB) 観測値を使えるからです。
ブートストラップサンプルを作成する際、平均してデータの約3分の1(1/3)は選ばれません。選ばれなかったこれらのデータ行は「Out-of-Bag」と呼ばれます。決定木は学習中にこれらのデータを見ていないため、これを「ミニテストセット」として使うことができます。
そのデータ行が学習に使われなかった木だけを使って予測を行います。これによりOOB誤差が算出されます。これは、モデルが未知のデータに対してどの程度機能するかを示す非常に信頼性の高い指標となります。
3. さらに先へ:ランダムフォレスト
ランダムフォレストは、バギングをさらに賢く改善したものです。なぜこれが必要なのかを理解するには、バギングに潜む「木の相関(Tree Correlation)」という厄介な問題を知る必要があります。
問題点:「強力な予測変数」の罠
通常のバギングでは、もし非常に強力な予測変数(例えば、生命保険モデルにおける「年齢」など)が一つあると、ほとんどすべての木が最初の分岐(分割)でそれを使ってしまいます。つまり、すべての木が似たり寄ったりになってしまうのです。木が似ていると、平均をとってもあまり効果がありません。100人に意見を聞いているようでいて、実は全員が同じ新聞記事を読んでから答えているようなものです。
解決策:特徴量のランダム性
ランダムフォレストは、強制的に木を多様化させ(相関を減らし)ます。構築時:
1. 各分岐において、モデルはランダムに選ばれた一部の予測変数の中からしか選択できません。
2. 全体の予測変数の数を \( p \) とすると、各分岐で見ることができる変数は \( m \) 個に制限されます(ここで \( m < p \))。
\( m \) の目安:
• 分類の場合: \( m \approx \sqrt{p} \)
• 回帰の場合: \( m \approx p/3 \)
強力な予測変数を時々無視するように強制することで、モデルは普段なら無視されてしまうような「弱い」変数の中にあるパターンを見つけ出さざるを得なくなります。これにより、森全体がより多様で強力なものになります。
例え:タレントショーを想像してください。バギングは、審査員全員が同じパフォーマンスを見るようなもの。ランダムフォレストは、「あなたには歌声は見せないでダンスだけ見てもらう」「あなたにはダンスを見せないで衣装だけ見てもらう」とルールを決めるようなものです。強制的に異なる視点に注目させることで、最終的な総合評価はよりバランスの取れたものになります。
4. 変数の重要度(Variable Importance)
バギングやランダムフォレストの欠点の一つは、「ブラックボックス」モデルであることです。500本もの木を見て、モデルが正確にどう動いているかを説明するのは困難です。しかし、どの変数が最も重要かは調べることができます。
1. ジニ係数の平均減少量(分類用):特定の変数を使って分割したときに、ノードの「純度」がどれだけ高まったかを測定します。値が高いほど、その変数はデータをクラス分けするのに非常に有用であることを意味します。
2. RSSの平均減少量(回帰用):特定の変数を使って分割したときに、残差平方和(RSS)がどれだけ減ったかを測定します。減少量が大きいほど、その変数は数値を予測する上で重要であることを意味します。
ポイント:一つの決定木のようにモデルの「ロジック」を簡単に目視できなくても、変数の重要度プロットを見れば、どの特徴量が予測の主役を担っているかが分かります。
5. まとめと注意点
よくある間違い:学生は「木を増やしすぎると過学習(オーバーフィッティング)するのでは?」と心配しがちです。実際には、ランダムフォレストは木を増やすだけで過学習することはありません。木を増やすことはバリアンスを安定させるだけです。「木が多すぎる」ことの唯一のデメリットは、コンピュータの計算時間が長くなることだけです!
まとめチェックリスト:
• バギングは、ブートストラップサンプルから育てた多数の木を平均化し、バリアンスを低減する。
• ランダムフォレストは、各分岐でランダムな一部の変数しか使えないようにすることでバギングを強化する(R言語のmtryパラメータ)。
• mtryは調整すべき最も重要なハイパーパラメータ。もし \( m = p \) なら、ランダムフォレストはただのバギングになる。
• OOB誤差を使えば、独立したテストセットがなくてもモデルを検証できる。
• 変数の重要度は、複雑なモデルの中でどの特徴量が実際に効いているかを説明してくれる。
その調子です!このまま頑張りましょう。木ベースのモデルはExam PAの大きな柱であり、ランダムフォレストをマスターすることは合格への大きな一歩です!