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

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

ピープル・アナリティクスケーススタディ:重回帰分析に挑戦!①

 f:id:millebon:20210417100039p:plain

いよいよ?重回帰分析

前回は、人事の課題をPythonで単回帰分析を行い、分析する事例を紹介しました。

 

今回は、いよいよ重回帰分析に挑戦したいと思います。

 

といっても重回帰分析と単回帰分析の大きな違いは説明変数が1つではなく2つ以上であるということのみ。

 

とはいうものの、普通ある出来事を予測する際に一つの変数のみで説明することができないのが当然なので、実際には重回帰分析で行うことが多いのかなと思います。

 

単回帰分析と同様、こちらも線形モデルばかりではないのですが、今回は線形モデルを作りたいと思います。

 

お題は以下の通り。

イノベーションを起こす力を持っている人を予測できるモデルを作ってください。過去の学術研究によると、性別、年齢、勤務年数、社歴、ネットワーキング活動、組織に関係なく人をつなぐ活動、自主性、異動の多さなどが影響があるといわれています。

 

お題及びそれに基づくデータはあくまでも私が受講しているAIHRの”Statistics HR”講座にあった課題の中で与えられたものですので、今回紹介する分析結果をうのみにしないでくださいね😅。

 

人事の事例としてこういう分析方法があるんだという参考になれば幸いです(というより自分の備忘録に近いのですが。。)。

 

重回帰分析の前提条件(の一部)を確認!

重回帰分析での最初のチャレンジは、どの要素を説明変数として取り入れるかということです。

 

今回は素直に、過去の学術研究に従った変数のみでまずは分析を行うことにします。

以下のような形で、全体のデータが入ったdfから被説明変数である”MEANINNOVATION”と今回説明変数として取り上げる6つの要素("CLGENDER", "CLWORKEXP", "CSMnetworking", "CSMmobility", "MEANTI", "MEANPERSONALINIT")に絞って新しいデータフレーム「df_2」を作成します。

>|python|
data_2=df.loc[:,["MEANINNOVATION", "CLGENDER", "CLWORKEXP", "CSMnetworking", "CSMmobility", "MEANTI", "MEANPERSONALINIT",]]
||<

 

講座の解説ビデオによると、確認する前提としては3つ挙げられていました。

 

1.説明変数と被説明変数が線形関係にあること

2.多重共線性がないこと

3.残差にばらつきがないこと

 

3は結果を出してからのみしか調べられないのでまた次回以降に説明します。

 

まず1.説明変数と被説明変数が線形関係にあることは散布図を描いて確かめるのが手っ取り早いです。

Seaboornのpairplotを用いて散布図を取り出します

>|python|
import seaborn as sns
sns.pairplot(data_2)
||<

すると以下のように出てきます。一番左はイノベーション行動のデータの分布ですが、他はイノベーション行動との相関性ですね。

f:id:millebon:20210417102926p:plain

被説明変数と6つの説明変数の相関性

左から2番目は性別なので0か1かに偏っています。ただ、グラフを見る限りU字型になっているような散布図はないので、とりあえず線形モデルで試していいということです。

 

2.多重共感性がないことですが、解説ビデオでは、説明変数同士で0.6以上の強い相関性がある場合は排除をした方がいいという程度の緩い?基準を満たしていればいいしたのでどちらにせよ相関係数を見てみることにしましょう。

>|python|
import pandas as pd
cor_2= data_2.corr()
print(cor_2)
||<

 

被説明変数との相関係数も出ていますが、いずれも±0.6以上の相関性はないので重回帰分析をすすめましょう!

f:id:millebon:20210417103709p:plain

相関係数

Statsmodelでの重回帰分析はとても簡単!

重回帰分析は前回の単回帰分析と同じstatsモデルで行います。

式も"被説明変数  ~ 説明変数(それぞれを +でつなげる)"で簡単に設定することができます。

>|python|
from scipy import stats
from statsmodels.formula.api import ols
formula_2 = "MEANINNOVATION ~ CLGENDER + CLWORKEXP + CSMnetworking + CSMmobility+ MEANTI + MEANPERSONALINIT"
res_2 = ols(formula_2,data = data_2).fit()
res_2.params
||<

 

重回帰分析の式となる係数をparamsで出していますので、結果は以下の通りとなります。

Intercept -0.130093
CLGENDER -0.227898
CLWORKEXP 0.014701
CSMnetworking 0.266372
CSMmobility 0.171613
MEANTI 0.436122
MEANPERSONALINIT 0.160258

 

詳細の分析結果は単回帰分析と同様.summary()で出します。

>|python|
res_2.summary()
||<

結果はこんな感じです

f:id:millebon:20210417104837p:plain

重回帰分析:結果

決定係数は、重回帰解析の場合調整済み決定係数(Addj. R-squared)を見るのがいいそうですので、0.478ということですね。

 

各説明変数のP値を見ると0.1以下は2つ(CSMmobility(異動の多さ)、MEANTI(組織に関係なく人をつなぐ行動))のみですね。。

 

ではここからどう調整するかを次回観ていきたいと思います。