0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

統計検定2級 標準化得点

Posted at

はじめに

今回は統計検定2級の範囲の標準化得点について学んでいきます。標準化得点は学校のテストでも利用しているので、馴染みがありますね!!そもそも標準化得点って何?、なんで必要なの?って事を明らかにしていこうと思います!!

📊 標準化得点(zスコア)とは?

標準化得点(zスコア)とは、あるデータが平均からどれだけ離れているかを「標準偏差を基準に」示す指標です。


✅ 数式と意味

標準化得点は、次の式で定義されます:

$$
z = \frac{x - \mu}{\sigma}
$$

  • $x$:個々のデータ
  • $\mu$:平均(mean)
  • $\sigma$:標準偏差(standard deviation)
  • $z$:標準化得点(zスコア)

🧠 直感的な理解

  • $z = 0$:平均と同じ
  • $z > 0$:平均より大きい
  • $z < 0$:平均より小さい
  • $z = 1$:平均より1標準偏差上
  • $z = -2$:平均より2標準偏差下

🎯 なぜ使うの?

1. 単位やスケールが異なるデータの比較に使える

たとえば:

  • テストA:100点満点、平均70点、あなたの点数80点
  • テストB:50点満点、平均30点、あなたの点数35点

どちらも $z = 1.0$(=平均より1標準偏差上)
どちらも相対的には同じくらい良い成績!


2. 分布内での相対的位置がわかる

正規分布を前提にすると、zスコアから「全体の中でどれくらいの位置にいるか」がわかります:

zスコア 下位%(累積確率) 上位%
$-2.0$ 2.28% 97.72%
$-1.0$ 15.87% 84.13%
$0.0$ 50.00% 50.00%
$1.0$ 84.13% 15.87%
$2.0$ 97.72% 2.28%

3. 統計解析・機械学習の前処理に役立つ

特徴量のスケールを揃えることで、回帰・分類・クラスタリングなどの精度や収束性が向上します。


🧮 計算例

平均 $\mu = 70$、標準偏差 $\sigma = 10$ のテストで、得点 $x = 85$ の場合:

$$
z = \frac{85 - 70}{10} = 1.5
$$

→ あなたのスコアは平均より 1.5標準偏差分上
→ 正規分布なら 上位約6.68% に入ります。


🎓 偏差値との関係

偏差値は、zスコアを使ってスケール変換したものです:

$$
偏差値 = 10z + 50
$$

たとえば、zスコアが $1.0$ なら:

$$
偏差値 = 10 \times 1 + 50 = 60
$$

→ 偏差値60は、上位約16% に該当します。

実践

# 📌 日本語フォントインストール(Google Colab専用)
!apt-get -y install fonts-ipafont-gothic > /dev/null

# 📦 ライブラリ
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from matplotlib.font_manager import FontProperties
from scipy.stats import norm

# 🎌 日本語フォント設定(Colab用)
jp_font = FontProperties(fname="/usr/share/fonts/opentype/ipafont-gothic/ipag.ttf")
plt.rcParams['font.family'] = jp_font.get_name()

# ⚙️ 平均と標準偏差を設定
mu = 70
sigma = 10

# 🎲 スコアを正規分布からランダムに生成
np.random.seed(42)
scores = np.random.normal(loc=mu, scale=sigma, size=20).round(1)

# 🧮 zスコア・パーセンタイル計算
z_scores = (scores - mu) / sigma
lower_percentiles = norm.cdf(z_scores) * 100
upper_percentiles = 100 - lower_percentiles

# 📋 データフレームにまとめる
df = pd.DataFrame({
    'スコア': scores,
    'zスコア': z_scores,
    '上位%': upper_percentiles
}).sort_values('スコア').reset_index(drop=True)

# 📈 正規分布の曲線データを作成
x = np.linspace(mu - 4*sigma, mu + 4*sigma, 400)
y = norm.pdf(x, mu, sigma)

# 🎨 グラフ描画
plt.figure(figsize=(12, 6))
plt.plot(x, y, label='正規分布', color='steelblue')
plt.fill_between(x, 0, y, alpha=0.1, color='steelblue')

# 📍 各スコアに点とzスコア・上位%のラベルを表示(重なり回避)
for i, row in df.iterrows():
    score = row['スコア']
    z = row['zスコア']
    upper_pct = row['上位%']
    pdf_y = norm.pdf(score, mu, sigma)
    offset = 0.004 if i % 2 == 0 else -0.006  # ラベルを交互に上下に
    va_align = 'bottom' if offset > 0 else 'top'

    # 点と垂直線
    plt.plot(score, pdf_y, 'o', color='crimson')
    plt.vlines(score, 0, pdf_y, colors='crimson', linestyles='dotted')

    # ラベル表示(スコア・zスコア・上位%)
    plt.text(score, pdf_y + offset,
             f"{score:.1f}\nz={z:.2f}\n上位{upper_pct:.1f}%",
             ha='center', va=va_align,
             fontproperties=jp_font, fontsize=9)

# 🖋 グラフ装飾
plt.title("正規分布上にスコアを可視化(zスコアと上位%)", fontproperties=jp_font)
plt.xlabel("スコア", fontproperties=jp_font)
plt.ylabel("確率密度", fontproperties=jp_font)
plt.grid(True)
plt.legend(prop=jp_font)
plt.tight_layout()
plt.show()

image.png

# 📌 日本語フォントインストール(Google Colab専用)
!apt-get -y install fonts-ipafont-gothic > /dev/null

# 📦 ライブラリ
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from matplotlib.font_manager import FontProperties
from scipy.stats import norm

# 🎌 日本語フォント設定(Colab用)
jp_font = FontProperties(fname="/usr/share/fonts/opentype/ipafont-gothic/ipag.ttf")
plt.rcParams['font.family'] = jp_font.get_name()

# ⚙️ 平均と標準偏差を設定
mu = 70
sigma = 10

# 🎲 スコアを正規分布からランダムに生成
np.random.seed(42)
scores = np.random.normal(loc=mu, scale=sigma, size=20).round(1)

# 🧮 zスコア・パーセンタイル計算
z_scores = (scores - mu) / sigma
lower_percentiles = norm.cdf(z_scores) * 100
upper_percentiles = 100 - lower_percentiles

# 📋 データフレームにまとめる
df = pd.DataFrame({
    'スコア': scores,
    'zスコア': z_scores,
    '上位%': upper_percentiles
}).sort_values('スコア').reset_index(drop=True)

# 📈 正規分布の曲線データを作成
x = np.linspace(mu - 4*sigma, mu + 4*sigma, 400)
y = norm.pdf(x, mu, sigma)

# 🎨 グラフ描画
plt.figure(figsize=(12, 6))

# ⛅ ±2σ の塗り(全体95.4%)
plt.fill_between(x, 0, y, where=((x >= mu - 2*sigma) & (x <= mu + 2*sigma)),
                 color='orange', alpha=0.1, label='±2σの範囲')

# ⛅ ±1σ の塗り(全体68.3%)
plt.fill_between(x, 0, y, where=((x >= mu - sigma) & (x <= mu + sigma)),
                 color='yellow', alpha=0.3, label='±1σの範囲')

# 正規分布の曲線
plt.plot(x, y, label='正規分布', color='steelblue')

# スコアごとの点とラベル
for i, row in df.iterrows():
    score = row['スコア']
    z = row['zスコア']
    upper_pct = row['上位%']
    pdf_y = norm.pdf(score, mu, sigma)
    offset = 0.004 if i % 2 == 0 else -0.006
    va_align = 'bottom' if offset > 0 else 'top'

    # 点と線
    plt.plot(score, pdf_y, 'o', color='crimson')
    plt.vlines(score, 0, pdf_y, colors='crimson', linestyles='dotted')

    # ラベル表示
    plt.text(score, pdf_y + offset,
             f"{score:.1f}\nz={z:.2f}\n上位{upper_pct:.1f}%",
             ha='center', va=va_align,
             fontproperties=jp_font, fontsize=9)

# 🖋 ラベルなど装飾
plt.title("正規分布と標準化得点:±1σ, ±2σの範囲と上位%", fontproperties=jp_font)
plt.xlabel("スコア", fontproperties=jp_font)
plt.ylabel("確率密度", fontproperties=jp_font)
plt.grid(True)
plt.legend(prop=jp_font)
plt.tight_layout()
plt.show()

📊 標準化得点(zスコア)とパーセンタイル範囲

zスコアの範囲 含まれる割合(%) パーセンタイル範囲(下位〜上位) 意味・解釈
±1σ(-1.0〜+1.0) 約68.3% 16.0%〜84.1% 平均的な値(よくある範囲)
±2σ(-2.0〜+2.0) 約95.4% 2.3%〜97.7% ほとんどの値(異常ではない)
±3σ(-3.0〜+3.0) 約99.7% 0.15%〜99.85% ほぼすべて(例外を除く)
z < -2.0 約2.3% ~2.3% 非常に低い値(まれ・要注意)
z > +2.0 約2.3% 97.7%~ 非常に高い値(優秀・外れ値の可能性)

✅ パーセンタイルの意味:

  • 50%:中央値(z=0)
  • 16%:z = -1(平均−1σ)
  • 84%:z = +1(平均+1σ)
  • 2.3% / 97.7%:z = ±2
  • 0.15% / 99.85%:z = ±3

上の表を持っておくと、標準化得点で上位何%なのかというのが判定できていいですね!
意思決定の指標になると思います!

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?