日々学び、感謝し、成長する

データとハートを活かす人事を目指した成長奮闘記(?)です

ピープルアナリティクス・ケーススタディ:決定木分析で離職リスク分析に挑戦!

f:id:millebon:20210814092409p:plain

 

決定木分析を利用するメリット

前回までロジスティック回帰で離職リスク分析を行いましたが、今回は同じデータを決定木分析を使って実施したいと思います。

 

決定木分析は、ツリー構造の条件分岐でデータを説明するモデルです。機械学習の代表的な手法であり、モデル内容が理解しやすいため、実務でも多用されているということです。

 

また、決定木分析の場合、実行前に独立変数の分布の偏りなどの調整をする必要がないといった点もメリットだそうです。この退職者分析はRを用いて実施したケーススタディを基にPythonで再実施しているのですが、ロジスティック回帰を行う前に年齢分布をより正規分布に近づけるために指数化を行っています。

 

こういうことを決定木分析ではしなくてもいいということです。

 

ちなみに、何度か紹介していますが、元のケーススタディはこちらから見ることができます。日本語でこのようなケースがWebで紹介されるとより知識は深まるのですが。。

www.hranalytics101.com

 

データを分割するルールをつ決定木分析を実行!

Pythonで決定木を実行するには、scikit-learnにあるtree モジュールのDecisioTreeClassifierクラスを利用します。決定木の深さはこちらで指定しないといけませんが、今回は2(max_depth=2) で指定しています。

 

 from sklearn.tree import DecisionTreeClassifier
 tree=DecisionTreeClassifier(max_depth=2)
 tree.fit(x_train,y_train)

 

次は可視化をmatplotlibとscikit-learnにあるtree モジュールのplot_treeで行います。注意点としては①max_depth=の数は、上記の決定木より少ないとすべてが表示されない(例えば上記で3と指定しなおして、そのまま可視化のmax_depthを2のままにしておくと、3番目の要素が表示されません)、②proportion=TrueをFalseにすると比率でなく観測値の絶対値が表示されます。

 

 import matplotlib.pyplot as plt
 from sklearn.tree import plot_tree

 plt.figure(figsize=(20,20))
 plot_tree(
 tree,
 max_depth=2,
 proportion=True,
 filled=True,
 rotate=False,
 precision=2,
 fontsize=12,
 feature_names=x_train.columns
)

 

あと、決定木の中で独立変数名をどうやったら表示されるのか最初はわからなかったのですが、"feature_names= x_train.columns)で表示されました。

 

結果はこんな感じです。

f:id:millebon:20210814095048p:plain

決定木の結果

 この図の解釈ですが、上から見ていきましょう。最初はSales(営業)かどうかで別れます。Salesが0.5以下の場合(この場合Salesだと1のフラグがたつのでSales以外の職種ということですね)は左側(オレンジ)、Salesの場合は右側(青)の場合分けになります。

 

2行目にあるEntropy(エントロピー)というのは不純度の指標です。決定木で分岐をする基準は「不純度を減らしていく」という考え方に基づいているからです。

サンプル数は最初ですので100%になっています。そして全体としては0である(=辞めずに在籍している)人が62%、1である(=退職した人)が38%ということになります。

f:id:millebon:20210814131302p:plain

次の階層を見ていきましょう。

営業以外の場合の次の分岐はDfrommedian(給与の中央値)からの差が‐19.56より小さければ右、大きければ左に行きます。給与がやめる原因ということですね。それに対し営業では男性か女性かが次の分岐点で、女性(値は0)であれば左、男性(値は1)であれば右に行きます。

この2の段階で見ると、離職率は、営業以外が30%(Value値の右側)であるのに対し、営業だと56%と営業が高いことがわかります。

 

 

f:id:millebon:20210814132029p:plain

 

3回目の階層です。

営業以外の人は中央値からの給与が‐19.56より小さい(すなわち‐19.56よりさらに低い)場合の離職率は42%とそうでない人(18%)に比べて格段に高くなります。

 

一方営業職は女性だと66%が離職するという衝撃的な事実です。営業はただでさえ離職率が高いのに女性は男性(45%)よりはるかに高く何らかの対策が必要と考えられます。

 

f:id:millebon:20210814132945p:plain

決定木分析のメリットと注意点

ロジスティック回帰の結果を見ても、Salesが有意でプラスになっていること、一方性別や給与はマイナスになっていることを考えると同様の傾向が出ています。ただし、営業での離職要因が性別が強く、営業以外だと給与だというような分類はロジスティック回帰ではできないですね。

 

なにより、決定木での分析結果はわかりやすいというメリットがあると思います。わかりやすいというのは説明がしやすいということにつながるので、ロジスティック回帰の数値を見せるよりこの決定木の結果を見せた方が、マネジメント層の説得がしやすいのではないでしょうか?

 

実際、ロジスティック回帰は係数の数値が影響度を直接表しているわけではない(ロジスティック回帰の傾きが一定でないため)ため、どの要素が退職に関わっていますよと説明できてもそれ以上の説明が難しいということが言えます。

 

ちなみに、このモデルの精度をテストデータを使って前回と同様①分類精度と②予測確率の正確さ(ROC曲線、AUC)を出してみましょう。(方法は前回ロジスティック回帰で行った方法と全く同じです)

 

全体の正解率は68%、退職に限った適合率は67%とそんなに悪くはないですね。

 

 

f:id:millebon:20210814135019p:plain

決定木の分類精度

 

f:id:millebon:20210814135702p:plain

ただし、予測確率の正確さ(ROC曲線、AUC)はロジスティック回帰に比べてかなり悪いです。これは決定木のモデルでの分類要因が少ないことを考えると当然の帰結なのかもしれませんが。。説明のしやすさと予測モデルの正確性の両立はなかなか難しいのかもしれません。(ちなみに決定木の階層を2から4にしたところ、AUCは0.63まではアップしました)。