9  データのばらつき

代表値はデータの中心的傾向を示すが、データの散らばりの度合を表す指標として、分散標準偏差がある。

9.1 分散

9.1.1 標本分散

\(n\) 個のデータ \(x_1, x_2, \ldots, x_n\) があるとする。このとき、標本分散(biased sample variance) \(s_n^2\) は以下の式で計算される。

\[ s_n^2 = \frac{(x_1 - \bar{x})^2 + (x_2 - \bar{x})^2 + \cdots + (x_n - \bar{x})^2}{n} = \frac{1}{n} \sum_{i=1}^{n} (x_i - \bar{x})^2 \]

標本分散の計算式を見ると、各データ \(x_i\) から平均値 \(\bar{x}\) を引いた値の二乗を計算し、その平均を取っていることがわかる。つまり、各データと平均値の差の絶対値 \(|x_i - \bar{x}|\) が大きいほど、分散も大きくなる。標本分散はデータのばらつきの度合いを表す指標である。

9.1.2 不偏分散

データから得られた標本を使って母集団の分散を推定する場合、標本分散は母集団分散をより系統的に小さくなると知られている。そのため、不偏分散(unbiased sample variance)で母分散の推定を行うことが一般的である。不偏分散 \(s^2\) は以下の式で計算される。

\[ s^2 = \frac{(x_1 - \bar{x})^2 + (x_2 - \bar{x})^2 + \cdots + (x_n - \bar{x})^2}{n-1} = \frac{1}{n-1} \sum_{i=1}^{n} (x_i - \bar{x})^2 \]

Proof. 不偏分散の分母が \(n-1\) にする手法はベッセルの補正(Bessel’s correction)と呼ばれる。ここでは、\(\mathbb{E}[s^2] = \sigma^2\) となることを示す。読者は飛ばしてもよい。

\[\begin{align} \mathbb{E}[s^2] &= \mathbb{E}\left[\frac{1}{n-1} \sum_{i=1}^{n} (X_i - \bar{X})^2\right] \\ &= \frac{1}{n-1} \mathbb{E}\left[\sum_{i=1}^{n} ((X_i - \mu) - (\bar{X} - \mu))^2\right] \\ &= \frac{1}{n-1} \mathbb{E}\left[\sum_{i=1}^{n} ((X_i - \mu)^2 - 2(X_i - \mu)(\bar{X} - \mu) + (\bar{X} - \mu)^2)\right] \\ &= \frac{1}{n-1} \left( \sum_{i=1}^{n} \mathbb{E}[(X_i - \mu)^2] - 2 \sum_{i=1}^{n} \mathbb{E}[(X_i - \mu)(\bar{X} - \mu)] + \sum_{i=1}^{n} \mathbb{E}[(\bar{X} - \mu)^2] \right) \\ &= \frac{1}{n-1} \left( n\sigma^2 - 2n \cdot \frac{\sigma^2}{n} + n \cdot \frac{\sigma^2}{n} \right) \\ &= \frac{1}{n-1} (n\sigma^2 - \sigma^2) \\ &= \sigma^2 \end{align}\]

9.2 標準偏差

分散はデータと平均値の差の二乗を使って計算されるため、元のデータと単位が異なり、理解しづらい。そこで、分散の平方根を取ったものを標準偏差といい、元のデータと同じ単位になる。

9.2.1 標本標準偏差

標本分散の平方根を取ったものを標本標準偏差(sample standard deviation)といい、\(s_n\) で表される。

\[ s_n = \sqrt{s_n^2} = \sqrt{\frac{1}{n} \sum_{i=1}^{n} (x_i - \bar{x})^2} \]

9.2.2 不偏標準偏差

不偏標準偏差(unbiased standard deviation)は不偏分散の平方根を取ったもので、\(s\) で表される。

\[ s = \sqrt{s^2} = \sqrt{\frac{1}{n-1} \sum_{i=1}^{n} (x_i - \bar{x})^2} \]

Example 9.1 アンケート調査で、A商品とB商品の満足度を5段階で評価したとする。1が最も不満、5が最も満足を表す。下の表は、4人の回答者の評価を示している。

回答者 A商品 B商品
1 1 3
2 1 3
3 5 3
4 5 3

このとき、A商品とB商品の平均値はどちらも3である。

A商品の標本分散は

\[ \frac{(1-3)^2 + (1-3)^2 + (5-3)^2 + (5-3)^2}{4} = 4 \]

となり、B商品の標本分散は

\[ \frac{(3-3)^2 + (3-3)^2 + (3-3)^2 + (3-3)^2}{4} = 0 \]

となる。

A商品の標本標準偏差は \(s_A = \sqrt{4} = 2\)、B商品の標本標準偏差は \(s_B = \sqrt{0} = 0\) である。

Python で計算する場合、np.var() 関数と np.std() 関数を使うと分散と標準偏差を計算できる。

これら関数では ddof=1 とすると分母が \(n-1\) となり不偏分散・不偏標準偏差を計算し、ddof=0 とすると分母が \(n\) となり標本分散・標本標準偏差を計算する。

import numpy as np

a_ratings = np.array([1, 1, 5, 5])
b_ratings = np.array([3, 3, 3, 3])

a_variance = np.var(a_ratings, ddof=0)  # 標本分散
b_variance = np.var(b_ratings, ddof=0)  # 標本分散
a_std = np.std(a_ratings, ddof=0)  # 標本標準偏差
b_std = np.std(b_ratings, ddof=0)  # 標本標準偏差
print("A商品の標本分散:", a_variance)
print("B商品の標本分散:", b_variance)
print("A商品の標本標準偏差:", a_std)
print("B商品の標本標準偏差:", b_std)
A商品の標本分散: 4.0
B商品の標本分散: 0.0
A商品の標本標準偏差: 2.0
B商品の標本標準偏差: 0.0

この例では、A商品とB商品の平均値は同じであるが、データのばらつきは異なる。A商品の評価は1と5に分かれており、好き嫌いがはっきりしている。一方、B商品の評価は全て3であり、満足度にばらつきがないことがわかる。

Tip

ddof は “delta degrees of freedom” の略であり、分散や標準偏差の計算において、分母から引く値を指定するための引数である。ddof=1 とすると分母は \(n-1\) となり、ddof=0 とすると分母は \(n\) となる。

9.3 演習問題

Exercise 9.1 学生10人のテストの点数が以下のように与えられたとする。このデータの不偏分散を python で計算せよ。

import numpy as np

scores = np.array([70, 80, 90, 100, 60, 75, 85, 95, 65, 55])
# ここにコードを書け

Exercise 9.2 my_variance() という関数を定義し、dataというリストを引数として受け取り、そのデータの標本分散を計算して返すようにせよ。

def my_variance(data):
    # ここにコードを書く
    return variance


data = [1, 2, 3, 4, 5]
variance = my_variance(data)
print("分散:", variance)
print("確認:", np.var(data, ddof=0))