概要
統計学やデータ分析において、Zスコア(標準得点)は非常に便利な指標です。Zスコアを使うことで、個々のデータ点がどれだけ平均から離れているかを標準偏差を基準にして評価できます。このブログでは、Zスコアの意味やその計算方法、さらにPythonを用いた具体的な実装方法について解説します。文章はGPT4oで作成しています。
Zスコアとは?
Zスコアは、以下の式で計算されます:
Z= \frac{x−μ}{σ}
- x はデータ点
- μ はデータの平均値
- σ はデータの標準偏差
Zスコアは、データ点が平均からどれだけ標準偏差分だけ離れているかを示します。Zスコアが0の場合、そのデータ点は平均値と一致しています。Zスコアが正の値であれば平均よりも大きい、負の値であれば平均よりも小さいということです。
Zスコアのメリット
-
スケールの異なるデータの比較
例えば、異なるテストの点数を比較する場合に、テストごとの平均点や標準偏差が異なると、単純な点数の比較では不十分です。Zスコアを使えば、標準偏差でスケールを統一できるため、異なる条件下のデータでも相対的な位置関係を正確に比較できます。 -
異常値検出
Zスコアを使うことで、平均から極端に外れたデータ点(いわゆる「異常値」)を簡単に見つけることができます。一般的に、Zスコアが±3を超えるデータは異常値とみなされることが多いです。
Pythonのコード全文
import numpy as np
# 仮のデータセット(テスト点数のようなもの)
data = [50, 55, 60, 65, 70, 75, 80, 85, 90, 95, 100, 105, 110, 115, 120, 125, 130, 135, 140, 145]
# 平均と標準偏差を計算
mean = np.mean(data)
std_dev = np.std(data)
print(f"平均: {mean}")
print(f"標準偏差: {std_dev}")
# Zスコアの計算
z_scores = [(x - mean) / std_dev for x in data]
# Zスコアの結果を表示
for i, z in enumerate(z_scores):
print(f"データ点 {data[i]} のZスコア: {z}")
# 異常値の検出(Zスコアが±3を超えるデータ点)
threshold = 3
outliers = [data[i] for i in range(len(data)) if abs(z_scores[i]) > threshold]
print(f"異常値: {outliers}")
結果
平均: 97.5
標準偏差: 27.95084971874737
データ点 50 のZスコア: -1.6987918990758243
データ点 55 のZスコア: -1.537788505324101
データ点 60 のZスコア: -1.3767851115723777
データ点 65 のZスコア: -1.2157817178206546
データ点 70 のZスコア: -1.0547783240689313
データ点 75 のZスコア: -0.893774930317208
データ点 80 のZスコア: -0.7327715365654847
データ点 85 のZスコア: -0.5717681428137614
データ点 90 のZスコア: -0.4107647490620381
データ点 95 のZスコア: -0.24976135531031482
データ点 100 のZスコア: -0.0887579615585915
データ点 105 のZスコア: 0.07224543219313184
データ点 110 のZスコア: 0.23324882594485516
データ点 115 のZスコア: 0.3942522196965785
データ点 120 のZスコア: 0.5552556134483019
データ点 125 のZスコア: 0.7162590072000252
データ点 130 のZスコア: 0.8772624009517485
データ点 135 のZスコア: 1.0382657947034718
データ点 140 のZスコア: 1.199269188455195
データ点 145 のZスコア: 1.3602725822069184
結果の解釈
例えば、データ点「50」のZスコアは「-1.7」で、これは平均値(97.5)から約1.7標準偏差下に位置していることを意味します。一方、データ点「140」のZスコアは「1.2」であり、平均値から約1.2標準偏差上に位置しています。
応用例:異常の検知
次に、Zスコアを使って異常値(外れ値)を検出します。一般に、Zスコアが±3を超えるデータ点は異常値と見なされることが多いです。これをPythonで実装してみましょう。
# 異常値の検出
threshold = 3
outliers = [data[i] for i in range(len(data)) if abs(z_scores[i]) > threshold]
print(f"異常値: {outliers}")
まとめ
Zスコアは、データの中で個々の値がどれだけ中心(平均)から離れているかを相対的に評価するための強力な指標です。異なるデータセット間の比較や異常値の検出など、さまざまな用途に活用できます。Pythonを使えば、簡単にZスコアを計算でき、データ分析に役立つこと間違いなしです。