【Python】NumPyを使って「面接時の人事評価」と「仕事の出来」を相関係数で考えてみた
IT技術
Numpy で面接時の人事評価と その後の仕事の出来の関係を見る
仕事ができる人を予測するための「良い指標」とは何でしょか。
考えられる1つの指標が、就職面接時の人事評価です。
就職面接時の人事評価が高ければ、その後の仕事の出来が良いことが予想されます。
実際にはそうはうまくいかない事も
しかし、就職面接時の人事評価と、その後の仕事の出来は相関関係にないことが頻繁にあります。
ときに、この事で「人事評価がうまくいっていない!」と判断する人も多いようです。
面接時の人事評価と、仕事の出来に相関関係がなければ、人事部に文句を言いたくなりますよね…。
相関関係が消失してしまっている可能性
しかし、これには「選抜効果」と呼ばれる、統計的な現象が生じているがゆえに、本来存在したはずの相関関係が消失してしまっている可能性があります。
そこで、今回は「選抜効果とは何か」を説明したいと思います。
さらに「なぜ就職面接時の人事評価とその後の仕事の出来は相関関係にないことが多いのか」も併せて解説します!
選抜効果を相関関係で説明してみる
「選抜効果」とはなんでしょうか?
簡単にいいますと
データをある基準で「選抜」した際に、選抜する前のデータの統計量と、選抜後のデータの統計量が変化してしまうこと
を指します。
相関関係を例に説明してみる
では、今回は、その統計量として「相関係数」を例にとって説明します。
具体的なデータを使って考えていきましょう。
データの準備
まず、今回使用するデータを用意します。
使用するデータは、乱数を用いて作成しました。
1# 使用するパッケージのインポート
2import random
3import pandas as pd
4import numpy as np
5
6# 使用するデータの作成
7random.seed(1111)
8x = []
9y = []
10for i in range(1000):
11 x.append(random.normalvariate(mu = 50, sigma = 10)) # x: 平均50, 標準偏差10の正規分布からの乱数
12 y.append(x[i] + random.normalvariate(mu = 10, sigma = 10)) # y: xに誤差(平均10, 標準偏差10の正規分布からの乱数)を足し合わせてyを作成
13 temp = np.array([x, y])
14 data = pd.DataFrame(temp).T
15 data.columns = ['Ability', 'Performance'] # xを人事評価(Ability), yを仕事の出来(Performance)と解釈
data は、ある会社の就職面接を受けた人のデータとしましょう。
ここには、変数 Ability と Performance があります。
data.head() で中身を確認
data.head() で中身を確認すると下記のようになっています。
Ability は「面接時の人事評価」、Performance は「仕事の出来を表す指標」と解釈しましょう。
この指標が大きければ大きいほど、人事評価および仕事の出来が良いとします。
Ability | Performance | |
0 | 42.610594 | 56.448498 |
1 | 35.594838 | 36.834103 |
2 | 47.143893 | 53.080216 |
3 | 49.441935 | 55.748134 |
4 | 55.599805 | 49.419616 |
選抜前の相関関係
ここでのポイントは、就職面接時の人事評価は、採用者に対しても、不採用者に対しても行っているという点です。
つまり、不採用者の中にも、下記のようにグラデーションがあると考えられます。
- 人事評価は高いが、ぎりぎり採用されなかった人
- 人事評価がとても低くて、採用できなかった人
仮定してみる
仮想的にですが、「面接時の人事評価と仕事の出来の関係を、就職面接を受けた者全員において考えることができる」としましょう。
現実ではあり得ないですが、仮に「不採用者も就職し、その会社で一定の仕事を行った」という仮定を置いています。
そのような情報が、 data には含まれているとします。
その仮定のもとで、 Ability と Performance の相関関係を確認しましょう。
Ability と Performance の相関関係
これは、「面接時の人事評価」と「仕事の出来の関係」を、就職面接を受けた者全員において考えていると解釈できます。
その相関関係は、以下のようになります。
相関係数は「0.722」です。
これをみれば、面接時の人事評価( Ability )が高ければ、仕事の出来( Performance )が良いということが言えそうです。
つまり、人事評価が上手く機能していると言えます。
コード
ここで用いたコードは、下記のとおりです。
1plt.scatter(data.Ability, data.Performance)
2plt.xlabel('Ability')
3plt.ylabel('Performance')
4plt.title('Correlation Before Selection: {:.3f}'.format(np.corrcoef(data.Ability, data.Performance)[0][1]))
選抜後の相関関係
しかし現実は、ある一定の評価基準で採用・不採用が決定されます。
すなわち現実に観測できる関係は、ある基準で「選抜」されたデータにおける関係のみということになります。
先ほどの話は、あくまで仮想的な世界での話でした。
現実世界では「選抜」された採用者のデータしか入手できません。
dataを ある基準 で選抜し相関関係を見る
先ほどの内容を考慮して、data をある基準で「選抜」します。
ここでは、人事評価( Ability )が70以上のデータを「選抜」することにします。
つまり、人事評価( Ability )が70以上の人を採用、それ未満の人を不採用とします。
相関関係
そうすると、その相関関係は以下の通りになります。
赤色のデータが「選抜」されたデータです。
繰り返しになりますが、現実ではこの赤色のデータしか観測できません。
赤色のデータだけで相関係数を計算すると「0.236」となります。
赤色のデータのみを取り出した相関関係
念のため、赤色のデータのみを取り出した相関関係を確認しておきましょう。
これを見ると、面接時の人事評価(Ability )が高ければ、仕事の出来(Performance )が高いとは言えないことは明らかです。
つまり、仮想的な世界で確認された相関関係は現実の「選抜」されたデータでは消失してしまうのです。
コード
ここで用いたコードは、下記の通りです。
1# x >= 70 で選抜
2data_select = data[data.Ability >= 70]
3
4# 選抜後の相関関係1
5plt.scatter(data.Ability, data.Performance)
6plt.scatter(data_select.Ability, data_select.Performance, c = 'red')
7plt.vlines(x = 70, ymin = 0, ymax = max(data.Performance), colors='red')
8plt.xlabel('Ability')
9plt.ylabel('Performance')
10plt.title('Correlation After Selection: {:.3f}'.format(np.corrcoef(data_select.Ability, data_select.Performance)[0][1]))
11
12# 選抜後の相関関係2
13plt.scatter(data_select.Ability, data_select.Performance, c = 'red')
14plt.xlabel('Ability')
15plt.ylabel('Performance')
16plt.title('Correlation After Selection: {:.3f}'.format(np.corrcoef(data_select.Ability, data_select.Performance)[0][1]))
選抜効果のまとめ
以上の簡単な実験から分かるように、あるデータを何らかの基準で「選抜」すると、選抜する前のデータでの統計量と選抜後のデータでの統計量が変化してしまいます。
一般的に、選抜後の相関係数は、選抜前の相関係数よりも低くなることが知られています。
つまり、「採用・不採用」というように、何らかの基準で面接者を「選抜」しているがゆえに、「就職面接時の人事評価」と「その後の仕事の出来」との関係が消失してしまうのです。
人事評価がしっかりと行われているにも関わらずです。
本来「面接時の人事評価」は、その後の仕事の出来を予測する良い指標だったにも関わらず、「選抜」されたデータしか得られないがゆえに、その相関関係が消失してしまうのです。
結果的に、人事評価がうまく機能していないように見えるのです。
さいごに
今回は「相関係数」を例にとって「選抜効果」考えました。
就職面接では、採用者と不採用者を一定の基準で「選抜」しているがゆえに、もともとあった人事評価とその後の仕事の出来との間の相関関係が消失してしまいます。
つまり、現実世界で得られるデータは「選抜」されているがゆえに、本来の事象を見逃してしまう可能性があるのです。
このような現象は、大学入学試験のテストスコアと、大学入学後の成績との関係においても確認できます。
私たちは、仮想的な世界にも思いを馳せながら、現実のデータを読み解く必要があるのではないでしょうか?
こちらの記事もオススメ!
2020.07.30Python 特集実装編※最新記事順Responder + Firestore でモダンかつサーバーレスなブログシステムを作ってみた!P...
2020.07.17ライトコード的「やってみた!」シリーズ「やってみた!」を集めました!(株)ライトコードが今まで作ってきた「やってみた!」記事を集めてみました!※作成日が新し...
ライトコードでは、エンジニアを積極採用中!
ライトコードでは、エンジニアを積極採用しています!社長と一杯しながらお話しする機会もご用意しております。そのほかカジュアル面談等もございますので、くわしくは採用情報をご確認ください。
採用情報へ
「好きを仕事にするエンジニア集団」の(株)ライトコードです! ライトコードは、福岡、東京、大阪、名古屋の4拠点で事業展開するIT企業です。 現在は、国内を代表する大手IT企業を取引先にもち、ITシステムの受託事業が中心。 いずれも直取引で、月間PV数1億を超えるWebサービスのシステム開発・運営、インフラの構築・運用に携わっています。 システム開発依頼・お見積もり大歓迎! また、現在「WEBエンジニア」「モバイルエンジニア」「営業」「WEBデザイナー」を積極採用中です! インターンや新卒採用も行っております。 以下よりご応募をお待ちしております! https://rightcode.co.jp/recruit