意思決定のために使用される決定木分析
Scikit-learnでの決定木にはCART(指標:giniまたはentropy)他が採用されています。
CARTは下記の2点を含め、さまざまな理由から使われていません。
- 2分岐のみのため単純すぎる
- 過学習させるアルゴリズムのため、小さすぎる区分が出現するので扱いにくい
コードは以下の通り非常に簡単です。
from sklearn import tree clf = tree.DecisionTreeClassifier(max_depth=3)
(参考:scikit-learn で決定木分析 (CART 法))
実務では各種BIでのCHAID(指標:カイ二乗値)が使われています。
利点としては、以下の2点が大きいです。
- 多分岐
- 過学習する前に学習を止める
Pythonには決定木(CHAID)の一般的なライブラリがないので、今回はライブラリCHAIDを紹介します。
概要
下記のツイートにまとめています。
まずはREADMEを読んでCHAIDをインストールしてください。
GraphvizとOrcaのインストールは項目Exporting the treeをご覧ください。
決定木(CHAID)で簡単な可視化をしてみた
コードでは「説明変数"てすとA"が何か」によって多分岐し、日本語での可視化が可能使用にはCHAID本体およびgraphviz、orcaのインストールが必要(CHAIDとgraphvizはpip、orcaはconda)
README:https://t.co/NMPBcBHD33
コード:https://t.co/5nksTIHEVF pic.twitter.com/bV3ftkzgC7— R(あいれい/おいす) (@R_farms) January 18, 2020
Graphvizインストールできない問題の対策
Windows10の場合、pipではなくcondaで入れるとうまく行きました。
conda install graphviz conda install python-graphviz
Graphvizのbinとdot.exeまでの環境パスは通しました。
CHAIDテストコードにCSVを読み込ませる方法
下記コードで対応可能です。
df = pd.read_csv('sample.csv') col_answer = 'flag_keizoku' ndarr = df.drop(columns=col_answer).values arr = df[col_answer].values
検証
CHAIDとBIツール(今回はSPSS)との差分を検証しました。
検証方法
実データから決定木を出力してみる。
説明変数
ある2週間(1-14日)にログインしたユーザーの総ログイン日数
*開始日を1日目としてカウント
*値=1~14
目的変数
ユーザーごとの15-28日目の継続有無
*ログインしたかどうかで判別
*値=0 or 1
結果概要
SPSSだとある程度グループ化されるのでしきい値の判断はしやすいが、CHAIDはグループ化されず数値が前後してしまうため解釈が難しい。
解釈のために使っているのに、解釈が難しいとは・・・使えないやんって話です。
結果詳細
SPSS
グループは7個できました。
[1], [2], [3-5], [6-8], [9-11], [12, 13], [14]
CHAID
グループは11個できました。
[1], [2], [3], [4], [5, 7], [6, 8], [9, 10], [11], [12], [13], [14]
*個体数nが描写されない問題。コードでの確認は可能ですが、可視化したグラフとしては使いにくい。
結果解釈
前の2週間のログイン日数が多いほど、次の2週間でいずれかの日にログインしている可能性が高い。
うん、そうだね・・・(当たり前)としか言えないのですが、どれくらいの日数ログインしていないと継続しにくいか?を知るには良い結果となります。
14日ログインしている人のうち、3.8%がログインしてないってまずくない?という感じで解釈していきます。
その他には、時系列で比較することで、継続率の効果検証を行うことができます。
仮説:継続を構成するユーザーのうち、どの層のユーザーの継続率が上がったのか?
→ 全体的に上がったのか?
→ 特定のユーザー層にのみ効果があったのか?
のように細かく調査することができます。
このCHAIDの何が問題か
決定木分析はあくまで、いい感じで区分を作り、その結果を解釈して施策に繋げるために行っているので、グループ化があまりに細かく、理解しにくいモノだと使えません。
SPSSに比べ、CHAIDのカイ二乗値は高いですが、適切なグループ化をしていないので、人が使うためには、このCHAIDはめちゃくちゃわかりにくい。
結局、意思決定のために分析をしているのに、読み取れない…のようなことが起こりえます。
そういった懸念点があっても、このCHAIDは無料ですので、コスト面を考えると使う価値はありますね。SPSSはライセンス料がかなーり高いので、個人で要因分析する分にはCHAIDで問題ないでしょう。
[…] 参考記事:https://webmaking.rei-farms.jp/webmaking/python/5615/ […]
[…] そういえば分析記事(決定木分析)を書いてた→決定木分析(Python CHAID)を解釈する […]