
238
■
17
章 決定木
この手法の問題点は、異なる多くの値を持つ属性で分割を行った場合に、過学習
によってエントロピーが低い値となる点です。例えば、過去の取引履歴を学習用
データとして、どの顧客が住宅ローンの債務不履行となる可能性が高いかを見極
める銀行向け決定木を作っているとしましょう。データセットには、各顧客の社
会保障番号(
SSN
:
Social Security Number
)が入っているとします。
SSN
を
使って分割を行うと、
1
人ずつの部分集合を作り出し、それぞれのエントロピー
は必然的に
0
となります。
SSN
に頼ったモデルは、学習用データから外れた場合
の汎用性を明らかに持ちません。この理由から、決定木を作る際には多くの値を
持つ属性を避ける(または可能なら値をまとめる)ような作り方を考えなければ
なりません。
17.4
決定木の生成
面接した候補者のデータが人材担当部長より提供されました。名前付きタプルの
形式で各候補者ごとに(指定した通りの仕様で)経験値、得意なプログラミング言語、
Twitter
で積極的にツイートしているか否か、
PhD
を持っているか否か、面接の成否が
構成されています。
from typing import NamedTuple, Optional
class Candidate(NamedTuple):
level: str
lang: str
tweets: bool
phd: bool
did_well: Optional[bool] = None #
値なしを許容する ...