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

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

ピープル・アナリティクスケーススタディ:相関性をPythonで検証!

 f:id:millebon:20210327194603p:plain

今回のお題

前回に引き続きに引き続き、AIHR内の”Statistics in HR”にある人事に関する課題を統計で解決するという課題に取り組みたいと思います。

 

お題は、社員のネットワーキング活動とイノベーション(技術革新力)に関係性はあるかということです。

 

ネットワーキング活動が活発である社員がイノベーションをより生み出しているなら、会社としてはネットワーキング活動を促進していくといいのではという一つの仮説ができます。

 

こういう仮説に対する取り組みも人事としてはぜひしてみたいですよね。

 

データは前回と同様、社員の属性(年齢、所属、在籍年数、性別、年齢、学歴。。)やパフォーマンスなどの人事データとともに、社員同士でネットワーキング活動やイノベーションにつながる活動、などを評価した結果が入っています。

 

今回利用する統計分析手法は”ピアソンの相関係数です。

 

ちなみに相関とは、字のごとく2つの変数(項目)の互いの関係です(統計検定2級教科書より)。

 

相関があるからといって因果関係があるといえるわけではないのですが、少なくとも関係性を統計的に見いだせることから、その2つの関係についてより考察するべきかどうかの判断材料にはなります。

 

相関性を表すのによく使われるのが、ピアソンの相関関数です。2つの変数にたいして共分散という値を出しそれを双方の標準偏差で割ります。

 

ピアソンの相関係数は-1から1の間をとり

 0.1-0.3 弱い相関性、0.3-0.5 中程度の相関性、0.5以上 強い相関性

というのが目安のようです。

 値がマイナスだと同じ基準で負の相関性があるということですね。

 

ちなみに、ピアソンの相関係数を出すのはPythonではとても簡単です。

 

Pandasを使って”データフレーム名.corr”で相関係数が出ます

>|python|
import pandas as pd 
innov_2.corr(method="pearson") ||<

*innov_2はデータからネットワーキングと、イノベーションの指標を取り出したデータフレームです。

*相関係数を出す手法としてmethod="perason"を入れましたが入れなくても結果は同じでした。

 

結果はこんな感じ。まあ中程度の相関性があるというのが最初の結果ですね。

f:id:millebon:20210328085538p:plain

前提に必要な検証を実施

ただ、前回でも同様、そもそもピアソンの相関係数を使っていいのかという前提条件の検証が必要になります。

 

ピアソンの相関係数で必要なのは次の2つだということです。

1.各変数が正規分布に従っているか

2.変数が連続か

 

1については前回 でもみましたが1)各変数でヒストグラムを書く 2)歪度を出す

というような方法があります。

 

 今回はネットワーキングの指標である”CSMnetworking"でのヒストグラムと歪度を出してみましょう。

>|python|
import matplotlib.pyplot as plt
innov_2["CSMnetworking"].hist() ||<

 結果

 f:id:millebon:20210328090633p:plain

 うーん、少しいびつな感じですね。

>|python|
from scipy.stats import skew
innov_skew = skew(innov_2["CSMnetworking"])
print(innov_skew) ||<

上記で出た歪度も‐1.10。解説によると-1から1に入るのが適切だということなので、データを調整した方がいいのではということでした。

 

2については散布図を描いてみるのが一番いいということですね。

>|python|
innov_2.plot.scatter(x='CSMnetworking',y='MEANINNOVATION', alpha=0.5)
||<

f:id:millebon:20210328091159p:plain

こんな感じなので、まあ連続的といえます。

 

実際、相関関数は”目で確かめる”のが直感的に手っ取り早いです。散布図を描いて相関性がありそうかをつかんだうえで実際の統計手法を駆使するのがよさそうですね。

 

外れ値を外して相関係数を出しなおす

このように変数の正規分布に「?」がある場合、一つの手法として外れ値を外すという考え方があるそうです。

 

まず外れ値があるかということを確認するために箱ひげ図を描いてみましょう

>|python|
Networking=innov_2["CSMnetworking"]
plt.figure(figsize = (12,8))
plt.boxplot(Networking)
plt.show()
||<

 

f:id:millebon:20210328091747p:plain

こんな感じになりました。

ここでは箱ひげ図の詳細の説明は省略しますが、箱の上辺(第3四分位数)+1.5*四分位範囲(箱の範囲)、下辺(第1四分位数)+1.5*四分位範囲から出たグラフ上の「○」を通常「外れ値」として取り扱います。

 

これをまず取り除いてそのあとイノベーションの評価を表す項目と再度相関係数を出すことにします。

 

>|python|
q1 = Networking.quantile(0.25)
q3 = Networking.quantile(0.75)
iqr = (q3 - q1)*1.5
limit=q1-iqr
||<

上記の内容を図で書くとこんな感じです。やはり図式化すると分かりやすいですね。

f:id:millebon:20210328093739p:plain

もともとネットワーキングとイノベーションの2変数を"innov_2"というデータフレームに入れていたので、ネットワーキングの変数である”CSMnetworking"から外れ値を除いたもので再度相関係数を出します。

>|python|
innov_2_woutliner=innov_2[innov_2["CSMnetworking"]>limit]
innov_2_woutliner.corr()
||<

結果は、ん??相関性が下がった??

f:id:millebon:20210328094232p:plain

勝手に相関性が上がると思い込んでいた私は「何かまずかっただろうか」と検証しましたが、答え合わせのビデオも同じ結果でした。。

 

いずれにせよデータを丁寧に取り扱うことは大事ですね。