3秒でわかる
はい・いいえの質問を枝分かれで重ねて予測する機械学習モデル。判断の根拠がそのまま図で読めるため、理由を説明したい場面で選ばれます。
30秒図解
もう少し詳しく
どういうものか
決定木は、データを条件で二つに分けることを繰り返して予測するモデルです。根から始めて「年齢は 30 未満か」「購入回数は 5 回以上か」といった質問で枝分かれし、たどり着いた葉に答えが入っています。分類に使えば分類木、数値の予測に使えば回帰木と呼びます。
分岐の条件は人が決めるのではなく、分けたあとの不純さが最も小さくなる列としきい値を総当たりで探して自動的に決まります。指標にはジニ不純度やエントロピーが使われます。
なぜ必要か
理由を言葉で説明できるからです。線形モデルの係数やニューラルネットの重みと違い、決定木は「購入回数が 5 回未満で、最終来店から 60 日超だから離反と判定した」と経路をそのまま読めます。審査や医療のように根拠の提示が求められる場面で重宝されます。
前処理の軽さも利点です。数値の大小関係しか見ないので、標準化も対数変換も要りません。単位の違う列が混ざっていてもそのまま投入できます。
具体例
from sklearn.<a href="/glossary/tree" class="text-primary font-medium underline underline-offset-2 hover:text-primary-dark">tree</a> import DecisionTreeClassifier, export_text
from sklearn.datasets import load_iris
X, y = load_iris(return_X_y=True)
model = DecisionTreeClassifier(max_depth=3, random_state=0)
model.fit(X, y)
print(export_text(model, feature_names=load_iris().feature_names))
print(model.predict([[5.1, 3.5, 1.4, 0.2]]))export_text を通すと、学習した分岐条件が文字の木として出てきます。モデルが何を見ているかを最初に確かめる習慣が付くので、精度を測る前に一度出しておくと安全です。
つまずきやすいところ
深さを制限しないと、葉が一件ずつになるまで育って訓練データを丸暗記します。学習データでの正解率が 100 パーセントに近いのに新しいデータで大きく外すときは、たいてい過学習です。max_depth や min_samples_leaf で枝を止め、交差検証で確かめます。
もう一つ、決定木は分割の境界が軸に平行な段々になるため、斜めの境界を素直に表せません。データを少し入れ替えただけで木の形が大きく変わる不安定さもあり、実務では木を多数束ねるランダムフォレストや勾配ブースティングに置き換えることが多くなります。
覚え方
診断チャートをそのまま学習で作らせたもの、と考えると位置づけが掴めます。読める代わりに、一本だけでは脆いモデルです。