決定木:質問を繰り返して答えを導き出す
マーキー: ドクターAI!前回はサポートベクターマシンについて教えてもらったけど、今日は「決定木」について教えてほしいな。木って何?コンピュータの中に木が生えるの?
ドクターAI: やぁマーキー!面白い質問だね。コンピュータの中に実際の木が生えるわけじゃないよ。「決定木」という名前は、このアルゴリズムの構造が木の形に似ているからなんだ。根っこから始まって、枝分かれしながら葉っぱに至る、そんなイメージだよ。
マーキー: へぇ〜、でも具体的にはどんなアルゴリズムなの?
ドクターAI: 決定木は、一連の質問に基づいて予測や分類を行うアルゴリズムなんだ。例えば「今日は傘を持っていくべきか?」という問題を考えてみよう。決定木なら「雨は降っている?」「風は強い?」「外出する予定は?」といった質問を順番に行って、最終的な答えを導き出すんだ。
マーキー: なるほど!それって人間が普段やっている意思決定みたいだね。
ドクターAI: その通り!決定木は人間の意思決定プロセスに似ているから、とても直感的で理解しやすいアルゴリズムなんだ。実際、フローチャートのような見た目をしているよ。
決定木の学習方法:最適な質問を見つける
マーキー: 決定木はどうやって学習するの?どんな質問をすればいいか、どうやって決めるの?
ドクターAI: 素晴らしい質問だね!決定木の学習は、データを最もよく分割できる質問(特徴量)を順番に選んでいくプロセスなんだ。この「最もよく分割できる」というのを測るために、「不純度」という概念を使うよ。
マーキー: 不純度?なんだか難しそう…
ドクターAI: 心配しないで!例えで説明するね。リンゴとオレンジが混ざったフルーツバスケットがあるとしよう。このバスケットを「純粋なリンゴだけ」と「純粋なオレンジだけ」に分けたいんだ。
ドクターAI: 例えば「色は赤いですか?」という質問をすると、「はい」の側にはほとんどリンゴが、「いいえ」の側にはほとんどオレンジが集まるよね。これは良い質問だ!一方、「重さは150g以上ですか?」という質問だと、両方の答えにリンゴとオレンジが混ざってしまうかもしれない。これは不純度が高い、つまり良くない質問ということになるんだ。
マーキー: なるほど!じゃあ、決定木は不純度を下げる質問を順番に選んでいくんだね。
ドクターAI: その通り!具体的には「情報利得」や「ジニ不純度」、「エントロピー」といった指標を使って、どの質問(特徴量)が最も不純度を下げるかを計算するんだ。そして、最も効果的な質問から順番に木を成長させていくよ。
【図解:決定木の分割基準】
分割基準 | 説明 | 特徴 |
---|---|---|
ジニ不純度 | ランダムに選んだデータが誤分類される確率 | 計算が速い CART(分類回帰木)で使用 |
情報利得 (エントロピー) |
分割前後での情報量(不確実性)の減少 | 多クラス分類に強い ID3, C4.5アルゴリズムで使用 |
分散削減 | 分割前後での分散の減少 | 回帰問題で使用 |
決定木の実際の応用例
マーキー: 決定木は実際にどんな場面で使われているの?
ドクターAI: 決定木は様々な分野で活用されているよ!いくつか例を挙げてみるね。
ドクターAI: まず、医療診断の分野では、患者の症状や検査結果から病気を診断するのに使われているんだ。例えば「熱はありますか?」「咳は出ますか?」「喉は痛いですか?」といった質問を順番に行って、最終的な診断結果を導き出すんだよ。
マーキー: へぇ〜、他にはどんな例があるの?
ドクターAI: 金融分野では、ローンの審査や不正検出に使われることが多いよ。例えば「年収はいくらですか?」「過去に延滞はありましたか?」「勤続年数は?」といった質問を基に、ローンの承認・拒否を判断するんだ。
ドクターAI: また、マーケティングの分野では、顧客セグメンテーションや購買行動の予測にも使われているよ。「年齢は?」「性別は?」「過去の購入履歴は?」といった質問から、特定の商品を購入する可能性が高い顧客を特定するんだ。
【図解:決定木の応用例】
分野 | 応用例 | 使用される質問(特徴量)例 |
---|---|---|
医療 | ・疾病診断 ・治療効果予測 ・リスク評価 |
・症状の有無 ・検査結果の値 ・患者の基本情報 |
金融 | ・信用スコアリング ・不正検出 ・株価予測 |
・収入 ・返済履歴 ・取引パターン |
マーケティング | ・顧客セグメンテーション ・購買予測 ・レコメンデーション |
・人口統計情報 ・過去の購買履歴 ・ウェブサイト行動 |
決定木の長所と短所
マーキー: 決定木って便利そうだね!何か弱点はあるの?
ドクターAI: もちろん、どんなアルゴリズムにも長所と短所があるよ。まず長所から説明するね。
ドクターAI: 決定木の大きな長所は、解釈のしやすさだね。なぜその予測結果になったのかを、木の構造を辿るだけで簡単に説明できるんだ。また、データの前処理(正規化やスケーリング)があまり必要なく、欠損値にも比較的強いという特徴もあるよ。
マーキー: なるほど!じゃあ短所は?
ドクターAI: 短所としては、過学習(オーバーフィッティング)しやすいことが挙げられるね。特に、制限なく成長させると、訓練データに対しては完璧に適合するけど、新しいデータに対する予測精度が低くなってしまうんだ。
マーキー: 過学習を防ぐ方法はあるの?
ドクターAI: いい質問だね!過学習を防ぐ方法はいくつかあるよ。例えば、木の深さに制限を設ける「剪定(せんてい)」という方法や、一つのノードで分割するために必要な最小データ数を設定する方法などがあるんだ。また、後で説明する「ランダムフォレスト」のように、複数の決定木を組み合わせることで過学習を軽減する手法もあるよ。
マーキー: 他にも短所はある?
ドクターAI: そうだね、決定木は小さな変化に敏感で不安定なことがあるんだ。訓練データが少し変わるだけで、木の構造が大きく変わってしまうことがあるよ。また、最適な木を見つけるのは計算量的に難しい問題で、多くの場合は貪欲法という近似アルゴリズムを使っているんだ。
【図解:決定木の長所と短所】
長所 | 短所 |
---|---|
・解釈しやすい ・データ前処理が少なくて済む ・欠損値に強い ・数値・カテゴリ両方の特徴に対応 |
・過学習しやすい ・不安定(データの小さな変化で構造が変わる) ・最適な木を見つけるのが難しい ・バイアスのあるデータに弱い |
決定木の発展形:アンサンブル学習
マーキー: 決定木の短所を克服する方法はあるの?
ドクターAI: その質問を待っていたよ!決定木の短所を克服するために、「アンサンブル学習」という手法が開発されたんだ。これは複数の決定木を組み合わせて使う方法だよ。
マーキー: アンサンブル?音楽のアンサンブルみたいに複数の木が協力するってこと?
ドクターAI: その例えはピッタリだね!音楽のアンサンブルと同じように、複数の決定木が協力して予測を行うんだ。代表的なアンサンブル手法には「ランダムフォレスト」「勾配ブースティング決定木(GBDTやXGBoost)」「AdaBoost」などがあるよ。
マーキー: ランダムフォレストって、森みたいに木がたくさんあるってこと?
ドクターAI: その通り!ランダムフォレストは、文字通り「ランダムな森」のように多数の決定木を作って、それらの予測を組み合わせる手法なんだ。各木はデータの一部(ブートストラップサンプル)と特徴量の一部を使って学習するから、それぞれ少しずつ異なる予測をするんだよ。そして最終的には、多数決や平均を取ることで予測を行うんだ。
マーキー: なるほど!みんなで相談して答えを出すみたいだね。
ドクターAI: その例えもピッタリだね!「三人寄れば文殊の知恵」ということわざがあるけど、アンサンブル学習はまさにそんな感じなんだ。一人(一つの決定木)では間違えることもあるけど、みんなで相談すれば正しい答えに近づきやすくなるんだよ。
【図解:決定木のアンサンブル手法】
手法 | 特徴 | メリット |
---|---|---|
ランダムフォレスト | ・データと特徴のランダムサンプリング ・並列に学習可能 ・多数決または平均で予測 |
・過学習しにくい ・高い予測精度 ・特徴量の重要度を評価可能 |
勾配ブースティング (XGBoost, LightGBM) |
・逐次的に木を追加 ・前の木の誤差を修正 ・損失関数の勾配を使用 |
・高い予測精度 ・少ないデータでも効果的 ・様々な損失関数に対応 |
AdaBoost | ・誤分類されたデータの重みを増加 ・弱い学習器を組み合わせる ・重み付き多数決で予測 |
・シンプルな実装 ・過学習に比較的強い ・特徴選択の効果がある |
マーキー: ドクターAI、今日は決定木について詳しく教えてくれてありがとう!フローチャートみたいな構造で予測するなんて、すごく直感的で面白いね。
ドクターAI: どういたしまして、マーキー!決定木は機械学習の中でも特に理解しやすいアルゴリズムだけど、アンサンブル学習と組み合わせることで非常に強力になるんだ。次回は「ランダムフォレスト」についてもっと詳しく話そうか。決定木の森がどれだけパワフルなのか、きっと驚くと思うよ!
マーキー: 楽しみにしてるよ!ヘビー!
さらに詳しく知りたい方へ
参考資料・外部リンク
- scikit-learn – 決定木 – Pythonでの決定木実装に関する公式ドキュメント
- Cornell University – 決定木の講義ノート – 決定木の理論的背景を学べる資料