決定木の学習の仕組み まとめ

1. 決定木とは

データを木構造で分岐させながら分類・予測を行うアルゴリズム。 質問に「はい/いいえ」で答えながら枝分かれしていく、フローチャートのようなイメージ。

2. 学習の基本ステップ

  1. 根(ルート)からスタート:全データが混ざった状態
  2. 最良の分岐を探す:全ての特徴量・全ての閾値の組み合わせを試し、「不純度が最も下がる条件」を選ぶ
  3. データを分割:選んだ条件で左右(またはそれ以上)のノードに分ける
  4. 再帰的に繰り返す:各子ノードに対して同じ処理を行う
  5. 停止条件で打ち切る:最大深さ、最小サンプル数、これ以上改善しない等
  6. 葉(リーフ)で予測値を確定:多数派クラス(分類)や平均値(回帰)

➡ 各分岐は貪欲法(その場で最良のものを選ぶ、後戻りしない)で決まる。  → 全体最適ではなく局所最適の積み重ねなので、過学習しやすい(→ランダムフォレストで補う)。

3. 「混ざり具合(不純度)」を測る指標

ジニ不純度

\(Gini = 1 - \sum_i p_i^2\)

  • ランダムに2つデータを取り出したとき、クラスが違う確率のイメージ
  • 0 = 完全に純粋、大きいほど混ざっている

エントロピー(2クラスの場合)

\(H(p) = -p\log_2(p) - (1-p)\log_2(1-p)\)

  • 情報理論由来。Giniとほぼ同じ挙動だが計算コストがやや高い
  • scikit-learnのデフォルトはGini

4. 分岐の選び方(情報利得)

分岐の良さは「親ノードの不純度」と「分割後の子ノードの不純度」ので評価する。

\[情報利得 = 不純度(親) - \left(\frac{n_{左}}{n}\cdot不純度(左) + \frac{n_{右}}{n}\cdot不純度(右)\right)\]
  • 子ノードの不純度はサンプル数で加重平均する(単純平均ではない)
    • 理由:少人数のノードだけを都合よく綺麗に分離しても、全体としては意味が薄いため
  • この情報利得(または不純度の減少量)が最大になる特徴量と閾値を、その時点での最良の分岐として選ぶ

5. pの変化について

  • 親ノードの承認割合 $p$ と、分岐後の子ノードの $p_{左}$、$p_{右}$ は基本的に異なる
  • 決定木は「特定の目標pになるように」選んでいるのではなく、 「$p_{左}$、$p_{右}$ ができるだけ0か1に近づく(=不純度が下がる)ような特徴量と閾値」を探している
  • 結果として、良い分岐ほど $p_{左}$、$p_{右}$ は両極端な値になる傾向がある

6. 全体像(与信審査の例)

根:承認/却下が混在(不純度 高)
 │
 ├─ 年収400万以上? ─ はい → 勤続3年以上? ─ はい → 承認 ✅
 │                                    └ いいえ → 借入額は年収30%以下? …
 └─ いいえ → 延滞歴あり? ─ あり → 却下 ❌
                        └ なし → 借入額は年収20%以下? …

木を降りるごとに、承認寄り・却下寄りのグループへと徐々に純粋化していく。