満足度や業績評価、月収等のすでに数値化された順序尺度の回帰分析に性別等のカテゴリカルデータを説明変数に加えて的中率(hit ratio)の影響を調べます。モデルに修正を加えて的中率(hit ratio)をアップする手順を解説します。

「ロジスティック回帰分析_その1」 では、各社員の退職の予想を二項ロジスティック回帰分析し、86%の的中率(hit ratio)でした。

使うデータは、Kaggle よりHRデータ ダウンロードできます。


チートシート

やりたいこと 方法
カテゴリカル・データを説明変数に加える  df_cat = pd.get_dummies(cat, prefix='cat')
df_test1 = pd.concat([df_test, df_cat], axis = 1)

'cat' : カテゴリカル・データ変数の列名


今回使うデータのポイント

  1. 1,470名の社員の退職状況(attrition)に関する人事データ「ロジスティック回帰分析_その1」 と同じデータ
  2. JooRole(職務),Gender(性別), BusinessTravel (出張の有無)のカテゴリカル・データを別々に追加して的中率(hit ratio)で評価します

サンプルデータセットについての記事で紹介しているHRデータです。

df.shape

サンプルオペレーション

それぞれのカテゴリカル・データに対して、以前の記事で紹介したOne_Hop_Encoding もしくは、Lavel_Encoder でダミー変数化したデータフレームを作成します。 それをテストデータのデータフレームに左結合させます。 左結合についてもデータフレーム同士の左結合に方法を説明していますので、必要に応じて参照しください。

まず、JobRole(職務)からダミー変数化します。

1
2
3
4
5
6
# カテゴリカル・データのJobRoleをダミー変数化する
JobRole = df['JobRole'] # series 
df_JobRole = pd.get_dummies(JobRole, prefix='jr')

#サイズをみる
print('df_JobRole', df_JobRole.shape)
(1470, 9)

ダミー変数化したdf_JobRoleデータフレームの先頭5行を確認する

df_head

df_testdf_JobRoleを左結合してこのテストデータをdf_test1とし、二項ロジスティック回帰分析をします。

1
2
3
4
5
6
7
8
df_test1 = pd.concat([df_test, df_JobRole], axis = 1)X_train, X_test, y_train, y_test = train_test_split(df_test1,
                                                   target_df['attrition_yes'], test_size=0.2,
                                                   random_state=200)

LogReg = LogisticRegression(solver='liblinear')
LogReg.fit(X_train, y_train)
y_pred = LogReg.predict(X_test)
accuracy_score(y_test, y_pred)

モデルの性能評価をします。 残念ながら、0.1ポイントダウンでJobRoleはAttritionに関係なさそうです。

0.8571428571428571

同様に、df_test2 にはGenderを追加したデータフレームでの二項ロジスティック分析を、df_test3ではBusiness_Travelで同様の分析をしました。 それぞれのカテゴリカル・データの影響度を図るため、一度にすべてを投入するのではなく、個々に投入してその影響度を確認します。

また、テストデータのトレーニング用と検証用に分割する際も以下のことに気をつけて、できるだけ他の要因を排除して、カテゴリカル・データ投入の影響をみるようにします。

  1. 分割比を変えない(今回は8:2)
  2. ランダムサンプリングのSeed値を変えない(同じ乱数を発生させる)

検証結果

カテゴリカル・データ  的中率(hit ratio)
何も投入しない  0.8605442176870748
JobRole(職務)  0.8571428571428571
Gender(性別)  0.8605442176870748
Business Travel (出張)  0.8639455782312925

出張は職務より、性別より社員の退職を予想制度を若干上げる結果となりました。  モデルを確定するにあたり、Business Travel の影響を考慮する必要がありそうです。 ここまで検討をすると、現在投入したそれぞれの説明変数の予想精度に対する寄与度を見たくなると思います。 次回からはその辺の検討方法について解説します。

参照 sklearn.linear_model.LogisticRegression


ひとこと

二項ロジスティック回帰分析のモデルの生成について説明しました。現在、的中率86.4% です。90%を超えたいと思う一方、分析の本旨は何かを今一度、考えてみましょう。精度の高いモデルの構築はデータ分析屋としては追求したいですが、クライアントは数ある説明変数のうち、どれを管理すれば退職率が低下できるのかといった、管理面に関心があることが多いです。なんのためのデータ分析なのか、一呼吸入れて考えることも大事ですね。