【Python】変動性の指標:標準偏差(Standard Deviation)と分散(Variance)
今日は統計の世界でスーパーヒーローのような存在、「標準偏差」と「分散」について学んでいきましょう。
1. そもそも変動性って何?🤔
「平均」という言葉を聞いたことがあると思います。
例えば、あるクラスのテスト平均点が75点だったとしましょう。
でも、平均点だけでは実はクラスの様子が十分にわかりません。
例えば次の2つのクラスを考えてみましょう:
- クラスA:全員が74点〜76点
- クラスB:半分の人が100点、半分の人が50点
両方のクラスの平均点は75点ですが、点数のばらつき具合はまったく違いますよね!
このような「データのばらつき具合」を数値で表すのが「分散」と「標準偏差」です。
2. 分散(Variance)とは?🎯
分散は、「データの値が平均からどれくらい離れているか」を表す指標。
計算方法はシンプル!
- まず平均を計算します
- 各データから平均を引きます(これを「偏差」と呼びます)
- その偏差を二乗します(マイナスをプラスにするため)
- 二乗した偏差の平均を取ります
これで分散の完成です!
数式で書くと少し難しく見えますが、やっていることはこれだけです。
3. 標準偏差(Standard Deviation)とは?📏
標準偏差は、分散の平方根(ルート)です。
なぜ平方根を取るのかというと、分散の単位は元のデータの単位の二乗になっているため、元の単位に戻すためです。
例えばテストの点数の分散は「点²」という変な単位になってしまいますが、標準偏差なら「点」という元の単位になります。
4. Pythonで実際に計算してみよう!💻
さあ、実際にPythonで計算してみましょう!
import numpy as np
# 2つのクラスのテスト結果
class_A = [74, 75, 75, 76, 76, 74, 75, 75, 76, 74]
class_B = [50, 50, 50, 100, 100, 50, 100, 50, 100, 100]
# 平均を計算
mean_A = np.mean(class_A)
mean_B = np.mean(class_B)
print(f"クラスAの平均点: {mean_A}")
print(f"クラスBの平均点: {mean_B}")
# 分散を計算
variance_A = np.var(class_A)
variance_B = np.var(class_B)
print(f"クラスAの分散: {variance_A}")
print(f"クラスBの分散: {variance_B}")
# 標準偏差を計算
standard_deviation_A = np.std(class_A)
standard_deviation_B = np.std(class_B)
print(f"クラスAの標準偏差: {standard_deviation_A}")
print(f"クラスBの標準偏差: {standard_deviation_B}")
実行結果はこんな感じになります:
クラスAの平均点: 75.0
クラスBの平均点: 75.0
クラスAの分散: 0.6
クラスBの分散: 625.0
クラスAの標準偏差: 0.7745966692414834
クラスBの標準偏差: 25.0
同じ平均点なのに、分散と標準偏差がこんなに違うんですね!
クラスBの方がデータのばらつきが大きいことが数値でハッキリわかります。
5. 手作業で計算してみよう!✍️
NumPyを使わずに、自分で計算するとどうなるでしょうか?
以下のコードで試してみましょう:
# 分散と標準偏差を計算
def calculate_variance_manually(data):
# 平均を計算
mean = sum(data) / len(data)
# 偏差の二乗の合計を計算
sum_of_squared_deviations = 0
for value in data:
deviation = value - mean
sum_of_squared_deviations += deviation ** 2
# 分散を計算(偏差の二乗の平均)
variance = sum_of_squared_deviations / len(data)
# 標準偏差を計算(分散の平方根)
standard_deviation = variance ** 0.5
return variance, standard_deviation
class_A = [74, 75, 75, 76, 76, 74, 75, 75, 76, 74]
class_B = [50, 50, 50, 100, 100, 50, 100, 50, 100, 100]
variance_A_manual, standard_deviation_A_manual = calculate_variance_manually(class_A)
variance_B_manual, standard_deviation_B_manual = calculate_variance_manually(class_B)
print(f"手作業で計算したクラスAの分散: {variance_A_manual}")
print(f"手作業で計算したクラスBの分散: {variance_B_manual}")
print(f"手作業で計算したクラスAの標準偏差: {standard_deviation_A_manual}")
print(f"手作業で計算したクラスBの標準偏差: {standard_deviation_B_manual}")
実行結果:
手作業で計算したクラスAの分散: 0.6
手作業で計算したクラスBの分散: 625.0
手作業で計算したクラスAの標準偏差: 0.7745966692414834
手作業で計算したクラスBの標準偏差: 25.0
6. 母集団と標本の違い 🔍
じつは統計には「母集団の分散・標準偏差」と「標本の分散・標準偏差」という2種類があります。
- 母集団:データ全体
- 標本:データの一部(サンプル)
標本から計算するときは、分母を n
ではなく n-1
にします。
これを、不偏分散(Unbiased Variance、または、Sample Variance)といいます。
import numpy as np
class_A = [74, 75, 75, 76, 76, 74, 75, 75, 76, 74]
class_B = [50, 50, 50, 100, 100, 50, 100, 50, 100, 100]
# NumPyでの不偏分散(ddof=1 を指定)
unbiased_variance_A = np.var(class_A, ddof=1)
unbiased_variance_B = np.var(class_B, ddof=1)
sample_standard_deviation_A = np.std(class_A, ddof=1)
sample_standard_deviation_B = np.std(class_B, ddof=1)
print(f"クラスAの不偏分散: {unbiased_variance_A}")
print(f"クラスBの不偏分散: {unbiased_variance_B}")
print(f"クラスAの標本標準偏差: {sample_standard_deviation_A}")
print(f"クラスBの標本標準偏差: {sample_standard_deviation_B}")
結果:
クラスAの不偏分散: 0.6666666666666666
クラスBの不偏分散: 694.4444444444445
クラスAの標本標準偏差: 0.816496580927726
クラスBの標本標準偏差: 26.352313834736496
7. 分散と標準偏差の活用例 🚀
分散と標準偏差は様々な場面で使われています:
分野 | 活用例 |
---|---|
教育 | テスト結果のばらつきを評価する |
金融 | 株価の変動リスクを測定する |
製造業 | 製品の品質のばらつきを管理する |
気象学 | 気温や降水量の変動を分析する |
スポーツ | 選手のパフォーマンスの安定性を評価する |
8. まとめ 🎉
今日は分散と標準偏差について学びました!
- 分散:データの値が平均からどれくらい離れているかを示す指標
- 標準偏差:分散の平方根で、元のデータと同じ単位で表される
これらの指標は、データのばらつき具合を数値化するのに役立ちます。
平均だけではわからない「データの性質」を理解するのに必須のツールです!
Discussion