>開発>python>[Pythonで数学]偏差値

偏差値

学生の時によく耳にした偏差値。試験の平均点だけを考えると、試験の度に平均点は変わるので、自分の試験結果だけを見てもクラスの中で良い方なのか悪い方なのかが、はっきりしない。しかし、偏差値だと自分の点数が全体のどのくらいにいるのかがわかる。

Z値

平均50、標準偏差10となるように変換した値のことです。機械学習で特徴のスケールを揃える際に使うことがある。

\(\displaystyle z =  \frac{x – \mu}{\sigma} \)

偏差値

\(\displaystyle \sum\)の部分は、\(\displaystyle {x} \)の\(\displaystyle {i} \)が\(\displaystyle {1} \)から\(\displaystyle {n} \)まであり、括弧内のでは標本の値(\(\displaystyle x_i \))と相加平均(\(\displaystyle \mu \))との差の2乗を求め、その総和を求めている。そこに、\(\displaystyle \frac{1}{n} \)を掛ける、つまり\(\displaystyle {n} \)で除算する。

\(\displaystyle 偏差値 =  \frac{10(x – \mu)}{\sigma} + 50 = 10z + 50 \)

偏差値

import numpy as np

# 標本
x = [95, 56, 74, 80, 67, 66, 59, 89, 75, 48]

# 相加平均
avg = np.array(x).mean()
print(avg)

# 標準偏差
s = np.std(x)

# 求めたい偏差値
i = 80

# 偏差値
d = (10 * (i - avg)) / s + 50

print(d)

今回は平均70.9点のテストで80点の偏差値を求めた。

56.52518387304902

SciPyのzsocre関数を使うとz値を算出することができ、各点数の偏差値も求めることができる。

import numpy as np
from scipy.stats import zscore

# 標本
x = [95, 56, 74, 80, 67, 66, 59, 89, 75, 48]

# 偏差値
s = 10 * zscore(x) + 50

print(pd.DataFrame(s, index=list(range(1, len(s) + 1)), columns=["偏差値"]))

数値が大きくなるほど偏差値が高くなり、数値が小さいほど偏差値は低くなる。テストのように点数が高いと偏差値も大きくなるが、一桁のデータが揃っているような場合は、偏差値が低くなり、正しい偏差値にならない。そういった場合は下記のように\(\displaystyle \mu – x \)と逆転させる必要がある。

\(\displaystyle 偏差値 =  \frac{10(\mu – x)}{\sigma} + 50 = 10z + 50 \)

数学

記事を読んでいただきありがとうございました。

Page Top