統計の教科書で標本分散を学ぶと、必ずどこかで引っかかる式があります。データ $x_1, \dots, x_n$ の散らばりを測るのに、なぜか「$n$ で割る」のではなく「$n-1$ で割る」のです。平均を求めるときは $n$ 個のデータを $n$ で割ったのに、分散ではどうして $n-1$ なのか。多くの人がここで「そういうものだ」と暗記して通り過ぎてしまいます。
しかしこの $n-1$ は、ただの慣習でも誤魔化しでもありません。「$n$ で割ると分散を系統的に小さく見積もってしまう」という、れっきとした数学的な事実を補正するための値です。この補正を ベッセル補正(Bessel’s correction) と呼びます。標本平均という「自分で作った中心」のまわりで散らばりを測ると、真の平均のまわりよりも必ず小さくなる——この目減りをちょうど打ち消すのが $n-1$ で割る操作なのです。
この話を理解しておくと、いろいろな場面で迷わなくなります。たとえば、Excel に VAR.S(標本)と VAR.P(母集団)の2つの分散関数があるのはなぜか。numpy の np.var に ddof という引数があるのはなぜか。$t$ 検定や信頼区間の式に $n-1$ がしれっと現れるのはなぜか。これらはすべて、本記事で扱う「不偏推定」という考え方が根っこにあります。さらに、機械学習で最尤推定(MLE)が分散を $n$ で割るのに、統計の標準が $n-1$ で割るという「食い違い」の正体も見えてきます。
本記事の内容
- なぜ標本平均のまわりで測ると過小評価になるのか(直感)
- 偏差平方和の期待値 $E\!\left[\sum (x_i – \bar{x})^2\right] = (n-1)\sigma^2$ の完全な導出
- 「自由度」という言葉の幾何的な意味(標本平均で1次元を使う)
- 不偏推定量の定義と、$s^2 = \frac{1}{n-1}\sum (x_i-\bar{x})^2$ が不偏であることの証明
- $n$ と $n-1$ を比べる数値実験(バイアスが本当に消えるか)
- 「分散が不偏でも標準偏差は不偏でない」というやっかいな事実
- 最尤推定(MLE)はなぜ $n$ で割るのか
- numpy の
ddof引数、信頼区間、$t$ 検定への応用

上の図は、これから解く問題の核心を一枚にまとめたものです。6個のデータ点について、真の平均 $\mu$ のまわりの散らばり(緑)と、標本平均 $\bar{x}$ のまわりの散らばり(紫)を比べています。標本平均まわりの偏差平方和(紫の数値)は、真の平均まわりの偏差平方和(緑の数値)より必ず小さくなります。この「必ず小さい」という性質こそ、$n$ で割ると過小評価になる原因です。なぜ必ず小さいのか、そしてどれだけ小さいのかを、これから順番に明らかにしていきましょう。
前提知識
この記事を読む前に、以下の記事を読んでおくと理解が深まります。
期待値の線形性 $E[aX + bY] = aE[X] + bE[Y]$ と、分散の定義 $\mathrm{Var}(X) = E[(X-\mu)^2] = E[X^2] – \mu^2$ は本記事の導出で繰り返し使います。不安な方は先に上記の記事で確認しておきましょう。
なぜズレるのか — 標本平均という「ずるい中心」
問題設定を整理する
まず、何を推定したいのかをはっきりさせましょう。背後には母集団があり、その平均(母平均)を $\mu$、分散(母分散)を $\sigma^2$ とします。この $\mu$ と $\sigma^2$ は神様だけが知っている真の値で、私たちには見えません。私たちの手元にあるのは、そこから無作為に取り出した $n$ 個の標本 $x_1, x_2, \dots, x_n$ だけです。各 $x_i$ は同じ分布から独立に得られた(i.i.d.)とします。
このデータから母分散 $\sigma^2$ を推定したい。素朴に考えると、分散の定義「平均からの偏差の二乗の平均」をそのまま標本に当てはめればよさそうです。
$$ \hat{\sigma}^2 = \frac{1}{n}\sum_{i=1}^{n}(x_i – \bar{x})^2, \qquad \bar{x} = \frac{1}{n}\sum_{i=1}^{n}x_i $$
ここで $\bar{x}$ は標本平均です。一見すると、これは完璧な推定量に見えます。ところが、この $\hat{\sigma}^2$ には系統的なクセがあります。たくさんの標本セットで計算して平均を取ると、真の $\sigma^2$ より少しだけ小さい値に落ち着くのです。なぜそうなるのか、その理由は「$\mu$ ではなく $\bar{x}$ を使った」という一点に尽きます。
標本平均は偏差平方和を最小にする
ここで決定的に重要な事実があります。データ $x_1, \dots, x_n$ に対して、ある定数 $c$ を中心とした偏差平方和
$$ Q(c) = \sum_{i=1}^{n}(x_i – c)^2 $$
を考えると、これを最小にする $c$ は標本平均 $\bar{x}$ です。確かめてみましょう。$Q(c)$ を $c$ で微分してゼロと置くと、
$$ \frac{dQ}{dc} = \sum_{i=1}^{n} 2(x_i – c)(-1) = -2\sum_{i=1}^{n}(x_i – c) = 0 $$
となります。これを解くと $\sum_i x_i = nc$、すなわち $c = \bar{x}$ です。$Q(c)$ は $c$ の二次関数で下に凸なので、この $c=\bar{x}$ が最小点です。
この事実が意味することは深刻です。私たちが推定に使う $\bar{x}$ は、「手元のデータに対して偏差平方和が最小になるよう、最適にフィットさせた中心」なのです。真の中心 $\mu$ は一般に $\bar{x}$ とは少しずれているので、$\mu$ のまわりで測った偏差平方和 $\sum(x_i-\mu)^2$ は、必ず $\bar{x}$ のまわりの $\sum(x_i-\bar{x})^2$ 以上になります。式で書けば、
$$ \sum_{i=1}^{n}(x_i – \bar{x})^2 \;\leq\; \sum_{i=1}^{n}(x_i – \mu)^2 $$
が常に成り立ちます。つまり、標本平均という「データに合わせて選んだずるい中心」を使うと、散らばりが本来より小さく見えるのです。冒頭の図で紫の数値が緑より小さかったのは、まさにこの不等式の表れでした。
どれだけ小さくなるかが鍵
直感としては「$\bar{x}$ を使うと過小評価になる」とわかりました。しかし推定量として実用にするには、「どれだけ過小評価になるか」を正確に知る必要があります。もしその目減り量がきっちり計算できれば、それを補正して元に戻せるはずです。
実は、この目減り量は平均的にちょうど $\sigma^2$ になります。つまり $\mu$ のまわりの平方和と $\bar{x}$ のまわりの平方和は、期待値で見ると $\sigma^2$ ぴったりの差を持つのです。この「ちょうど $\sigma^2$」という美しい結果を導くのが、次のセクションの期待値計算です。
標本分散の期待値計算 — (n−1)σ² の導出
ゴールを宣言する
これから示したいのは、標本平均まわりの偏差平方和の期待値が
$$ \begin{equation} E\!\left[\sum_{i=1}^{n}(x_i – \bar{x})^2\right] = (n-1)\sigma^2 \end{equation} $$
となることです。$n\sigma^2$ ではなく $(n-1)\sigma^2$ になる——この「$-1$」がベッセル補正の起源です。導出は少し長いですが、一行ずつ丁寧に追えば難しくありません。
偏差を「真の平均からの偏差」に書き換える
直接 $\sum(x_i-\bar{x})^2$ を展開してもよいのですが、見通しのよい方法として、各偏差 $x_i – \bar{x}$ を真の平均 $\mu$ を経由する形に書き換えます。$x_i – \bar{x}$ の中に $\mu$ を足して引くだけです。
$$ x_i – \bar{x} = (x_i – \mu) – (\bar{x} – \mu) $$
これは単に $-\mu + \mu = 0$ を挟んだだけの恒等変形です。両辺を二乗します。
$$ (x_i – \bar{x})^2 = (x_i – \mu)^2 – 2(x_i – \mu)(\bar{x} – \mu) + (\bar{x} – \mu)^2 $$
この式を $i = 1$ から $n$ まで足し合わせます。第2項と第3項では $(\bar{x} – \mu)$ は $i$ によらない定数なので、和の外に出せます。
$$ \sum_{i=1}^{n}(x_i – \bar{x})^2 = \sum_{i=1}^{n}(x_i – \mu)^2 – 2(\bar{x} – \mu)\sum_{i=1}^{n}(x_i – \mu) + n(\bar{x} – \mu)^2 $$
真ん中の項を整理する
ここで真ん中の項に注目します。$\sum_{i=1}^{n}(x_i – \mu)$ を計算すると、
$$ \sum_{i=1}^{n}(x_i – \mu) = \sum_{i=1}^{n}x_i – n\mu = n\bar{x} – n\mu = n(\bar{x} – \mu) $$
です($\sum x_i = n\bar{x}$ を使いました)。これを真ん中の項に代入すると、
$$ -2(\bar{x} – \mu)\cdot n(\bar{x} – \mu) = -2n(\bar{x} – \mu)^2 $$
となります。元の式に戻すと、第2項と第3項がまとまります。
$$ \sum_{i=1}^{n}(x_i – \bar{x})^2 = \sum_{i=1}^{n}(x_i – \mu)^2 – 2n(\bar{x} – \mu)^2 + n(\bar{x} – \mu)^2 $$
最後の2つの項を足すと $-2n + n = -n$ なので、きれいな分解が得られます。
$$ \begin{equation} \sum_{i=1}^{n}(x_i – \bar{x})^2 = \sum_{i=1}^{n}(x_i – \mu)^2 – n(\bar{x} – \mu)^2 \end{equation} $$
これは確率も期待値も使わない、純粋な代数の恒等式です。意味するところは明快で、「標本平均まわりの平方和 = 真の平均まわりの平方和 − 標本平均のずれの分」です。最後の項 $-n(\bar{x}-\mu)^2$ こそ、$\bar{x}$ を使ったことによる目減りを表しています。
両辺の期待値を取る
いよいよ期待値を取ります。まず右辺第1項です。各 $x_i$ について、分散の定義から $E[(x_i – \mu)^2] = \sigma^2$ です。これが $n$ 個あるので、
$$ E\!\left[\sum_{i=1}^{n}(x_i – \mu)^2\right] = \sum_{i=1}^{n}E[(x_i – \mu)^2] = n\sigma^2 $$
となります。次に第2項の $E[(\bar{x} – \mu)^2]$ です。これは標本平均 $\bar{x}$ の分散にほかなりません。$\bar{x}$ は平均 $\mu$ を持つので $E[\bar{x}] = \mu$、したがって $E[(\bar{x}-\mu)^2] = \mathrm{Var}(\bar{x})$ です。独立な確率変数の和の分散の公式から、
$$ \mathrm{Var}(\bar{x}) = \mathrm{Var}\!\left(\frac{1}{n}\sum_{i=1}^{n}x_i\right) = \frac{1}{n^2}\sum_{i=1}^{n}\mathrm{Var}(x_i) = \frac{1}{n^2}\cdot n\sigma^2 = \frac{\sigma^2}{n} $$
が得られます。これは標準誤差の話でおなじみの「標本平均の分散は $\sigma^2/n$」という結果です。以上を式 $(2)$ に代入すると、
$$ \begin{align} E\!\left[\sum_{i=1}^{n}(x_i – \bar{x})^2\right] &= E\!\left[\sum_{i=1}^{n}(x_i – \mu)^2\right] – n\,E[(\bar{x}-\mu)^2] \\ &= n\sigma^2 – n\cdot\frac{\sigma^2}{n} \\ &= n\sigma^2 – \sigma^2 \\ &= (n-1)\sigma^2 \end{align} $$
となり、目標の式 $(1)$ が示せました。目減り量はちょうど $\sigma^2$ ぶん、つまり $\bar{x}$ の分散 $\sigma^2/n$ を $n$ 倍した量だったのです。

この図は、いま導いた分解を棒グラフで表したものです($n=5$、$\sigma^2=1$ の場合)。左の緑が $\mu$ まわりの平方和の期待値 $n\sigma^2 = 5\sigma^2$、真ん中の紫が標本平均のずれ $E[n(\bar{x}-\mu)^2] = \sigma^2$、右の青が標本平均まわりの平方和 $E[\sum(x_i-\bar{x})^2] = (n-1)\sigma^2 = 4\sigma^2$ です。緑から紫の1本ぶん(ちょうど $\sigma^2$)が削られて青になっています。この「平均の自由度1本ぶん」が削られるという見方が、次のセクションの自由度の話につながります。
不偏になるように割り直す
式 $(1)$ がわかれば、補正の方法は自明です。期待値が $(n-1)\sigma^2$ になるのだから、$n$ ではなく $n-1$ で割れば、期待値がちょうど $\sigma^2$ に戻ります。
$$ \begin{equation} s^2 = \frac{1}{n-1}\sum_{i=1}^{n}(x_i – \bar{x})^2, \qquad E[s^2] = \frac{1}{n-1}\cdot(n-1)\sigma^2 = \sigma^2 \end{equation} $$
この $s^2$ を 不偏分散(unbiased sample variance) と呼びます。一方、$n$ で割った $\hat{\sigma}^2$ は期待値が $\frac{n-1}{n}\sigma^2$ となり、真値より $\frac{1}{n}$ ぶん小さくなります。これが「$n$ で割ると過小評価」の正体です。
ここまでで「$n-1$ で割れば期待値が合う」とわかりました。しかし、なぜ $-1$ なのか、$-2$ や $-0.5$ ではいけないのか、という疑問が残るでしょう。それに直感的な答えを与えるのが「自由度」という概念です。
自由度の直感 — 標本平均を使うと1次元失う
自由度とは何か
「自由度(degrees of freedom)」という言葉は統計のあちこちに顔を出しますが、最初は掴みどころがありません。一言でいえば、自由に動ける独立な情報の数です。
具体例で考えましょう。$n$ 個の偏差 $x_1 – \bar{x},\ x_2 – \bar{x},\ \dots,\ x_n – \bar{x}$ を並べたとき、これらは本当に $n$ 個ぶんの独立な情報を持っているでしょうか。実はそうではありません。これらの偏差を全部足すと、
$$ \sum_{i=1}^{n}(x_i – \bar{x}) = \sum_{i=1}^{n}x_i – n\bar{x} = n\bar{x} – n\bar{x} = 0 $$
となり、必ずゼロになります。つまり $n$ 個の偏差には「合計がゼロ」という1本の拘束(制約)がかかっています。$n-1$ 個の偏差を自由に決めれば、残り1個は自動的に決まってしまうのです。自由に動けるのは $n-1$ 個——これが「偏差の自由度は $n-1$」という意味です。
平均を求める段階で、私たちはデータから1つの量($\bar{x}$)を取り出して使いました。その代償として、散らばりを測る側では1つの自由度を失う。だから $n$ ではなく $n-1$ で割る。これが自由度の観点から見たベッセル補正です。
幾何で見る — ベクトルの射影
この話はベクトルの幾何で見ると一段とクリアになります。$n$ 個のデータをまとめて $n$ 次元空間のベクトル $\mathbf{x} = (x_1, \dots, x_n)$ と見なします。すべての成分が 1 のベクトルを $\mathbf{1} = (1,1,\dots,1)$ とすると、標本平均は $\mathbf{x}$ を $\mathbf{1}$ の方向に射影した成分に対応します。
$$ \bar{x}\,\mathbf{1} = \frac{\mathbf{x}\cdot\mathbf{1}}{\mathbf{1}\cdot\mathbf{1}}\,\mathbf{1} $$
実際、$\mathbf{x}\cdot\mathbf{1} = \sum x_i = n\bar{x}$、$\mathbf{1}\cdot\mathbf{1} = n$ なので、射影成分は $\bar{x}\mathbf{1}$ になります。そして偏差ベクトル $\mathbf{x} – \bar{x}\mathbf{1}$ は、この射影を引いた残り(残差)です。

この図は $n$ 次元のうち2次元ぶんを取り出して描いた模式図です。データベクトル $\mathbf{x}$(黒)を、「全成分が等しい線」である $\mathbf{1}$ 方向に射影すると平均成分 $\bar{x}\mathbf{1}$(紫)が得られ、その残りが偏差ベクトル $\mathbf{x}-\bar{x}\mathbf{1}$(青)です。重要なのは、偏差ベクトルが $\mathbf{1}$ 方向と直交していることです。
直交する理由は、偏差ベクトルと $\mathbf{1}$ の内積を取ればわかります。
$$ (\mathbf{x} – \bar{x}\mathbf{1})\cdot\mathbf{1} = \sum_{i=1}^{n}(x_i – \bar{x}) = 0 $$
これは先ほどの「偏差の合計はゼロ」と同じ式です。偏差ベクトルは $\mathbf{1}$ に垂直な $(n-1)$ 次元の部分空間(超平面)の中にしか存在できません。$n$ 次元のうち $\mathbf{1}$ 方向の1次元を平均が使い切ってしまい、散らばりは残りの $n-1$ 次元に押し込められる。だから偏差平方和 $\|\mathbf{x}-\bar{x}\mathbf{1}\|^2$ は、$n$ 個ではなく $n-1$ 個の独立な自由度しか持たないのです。
自由度が σ² 何個ぶんかを数える
直交分解からは、期待値の結果も自然に再現できます。ピタゴラスの定理から、
$$ \|\mathbf{x} – \mu\mathbf{1}\|^2 = \|\mathbf{x} – \bar{x}\mathbf{1}\|^2 + \|\bar{x}\mathbf{1} – \mu\mathbf{1}\|^2 $$
が成り立ちます(これは式 $(2)$ の幾何版です)。左辺は $\mu$ まわりの平方和で、$n$ 個の独立な $\sigma^2$ の和なので期待値 $n\sigma^2$。右辺第2項は平均方向の1次元ぶんで期待値 $\sigma^2$。差し引いて右辺第1項(偏差平方和)の期待値は $(n-1)\sigma^2$。「$n$ 次元から平均方向の1次元を引いた $n-1$ 次元」が、そのまま「$(n-1)\sigma^2$」に対応しているのです。自由度の数 $=$ $\sigma^2$ の係数、という見方が腑に落ちると思います。
自由度の直感が掴めたところで、もう一度きちんと「不偏推定量」という言葉を定義し、$s^2$ がその条件を満たすことを証明としてまとめておきましょう。
不偏性の証明
不偏推定量の定義
推定量 $\hat{\theta}$ が母数 $\theta$ の 不偏推定量(unbiased estimator) であるとは、その期待値が真の値に一致すること、すなわち
$$ E[\hat{\theta}] = \theta $$
が成り立つことをいいます。期待値というのは「同じ条件で標本を取り直す実験を無限に繰り返したときの平均」です。不偏性は「平均的には的の中心を射抜く」という性質で、個々の推定が当たることを保証するものではありません。しかし系統的なズレ(バイアス)がないという点で、推定量の基本的な望ましさの一つです。バイアスは
$$ \mathrm{Bias}(\hat{\theta}) = E[\hat{\theta}] – \theta $$
で定義され、不偏推定量とはバイアスがゼロの推定量のことです。
s² の不偏性
不偏分散 $s^2$ が母分散 $\sigma^2$ の不偏推定量であること、すなわち $E[s^2] = \sigma^2$ を示します。これは式 $(1)$ をすでに導いてあるので、ほとんど一行で終わります。
$$ \begin{align} E[s^2] &= E\!\left[\frac{1}{n-1}\sum_{i=1}^{n}(x_i – \bar{x})^2\right] \\ &= \frac{1}{n-1}\,E\!\left[\sum_{i=1}^{n}(x_i – \bar{x})^2\right] \\ &= \frac{1}{n-1}\cdot(n-1)\sigma^2 \\ &= \sigma^2 \end{align} $$
1行目から2行目では期待値の線形性(定数 $\frac{1}{n-1}$ を外に出す)を使い、2行目から3行目で式 $(1)$ を代入しました。これで $s^2$ は $\sigma^2$ の不偏推定量だと証明できました。
一方、$n$ で割った $\hat{\sigma}^2$ のバイアスを計算しておきましょう。
$$ E[\hat{\sigma}^2] = \frac{1}{n}\cdot(n-1)\sigma^2 = \frac{n-1}{n}\sigma^2 = \sigma^2 – \frac{\sigma^2}{n} $$
なので、バイアスは
$$ \mathrm{Bias}(\hat{\sigma}^2) = E[\hat{\sigma}^2] – \sigma^2 = -\frac{\sigma^2}{n} $$
です。マイナスの符号は「真値より小さく見積もる」ことを表します。$n$ が大きくなればバイアスは $0$ に近づくので、大標本では $n$ で割っても $n-1$ で割っても実質的な差はありません。差が問題になるのは $n$ が小さいときです。
ここまでは理論だけで進めてきました。「平均的には $\sigma^2$ に一致する」というのは本当でしょうか。実際に乱数で確かめるのが一番納得できます。次のセクションで、$n$ と $n-1$ を並べて数値実験してみましょう。
n vs n−1 の数値実験
バイアスが本当に消えるか
理論で導いた「$n$ で割ると $\frac{n-1}{n}\sigma^2$、$n-1$ で割ると $\sigma^2$」を、シミュレーションで確かめます。真の分散がわかっている正規分布から標本を大量に取り、両方の推定量の平均がどこに落ち着くかを見ます。
import numpy as np
rng = np.random.default_rng(0)
sigma2 = 4.0 # 真の分散
ns = [2, 3, 5, 10, 30, 100] # 標本サイズをいくつか試す
trials = 200000 # 各サイズで20万回の標本取得
print(f"{'n':>4} | {'÷n (MLE)':>12} | {'÷(n-1) 不偏':>14} | {'理論 (n-1)/n·σ²':>16}")
print("-" * 56)
for n in ns:
# (trials, n) の正規乱数: 各行が1つの標本セット
samp = rng.normal(0.0, np.sqrt(sigma2), size=(trials, n))
xbar = samp.mean(axis=1, keepdims=True)
ss = np.sum((samp - xbar) ** 2, axis=1) # 偏差平方和
mean_biased = np.mean(ss / n) # n で割る
mean_unbias = np.mean(ss / (n - 1)) # n-1 で割る
theory = (n - 1) / n * sigma2
print(f"{n:>4} | {mean_biased:>12.4f} | {mean_unbias:>14.4f} | {theory:>16.4f}")
このコードを実行すると、おおむね次のような表が得られます。÷n の列は理論値 $\frac{n-1}{n}\sigma^2$ にぴったり一致し、$n=2$ では $2.0$($\sigma^2$ の半分!)、$n=100$ では $3.96$ と、$n$ が小さいほど真値 $4.0$ から大きく下に外れます。一方 ÷(n-1) の列はどの $n$ でも $4.0$ 前後に張り付いています。理論で示したとおり、$n-1$ で割ると標本サイズによらず真値に一致し、$n$ で割ると系統的に過小評価することが数値でも確認できました。
バイアスの収束を可視化する
表だけでなくグラフでも見てみましょう。標本サイズ $n$ を横軸に、推定量の期待値(多数回平均)を縦軸に取ります。
import numpy as np
import matplotlib.pyplot as plt
rng = np.random.default_rng(0)
sigma2 = 4.0
ns = np.arange(2, 31)
trials = 40000
mean_biased, mean_unbias = [], []
for n in ns:
samp = rng.normal(0.0, np.sqrt(sigma2), size=(trials, n))
xbar = samp.mean(axis=1, keepdims=True)
ss = np.sum((samp - xbar) ** 2, axis=1)
mean_biased.append(np.mean(ss / n)) # MLE
mean_unbias.append(np.mean(ss / (n - 1))) # 不偏
plt.figure(figsize=(10, 5.6))
plt.axhline(sigma2, color="green", ls="--", lw=2, label="真の分散 σ²=4")
plt.plot(ns, mean_biased, "o-", color="crimson", label="÷n(過小評価)")
plt.plot(ns, mean_unbias, "s-", color="royalblue", label="÷(n-1)(不偏)")
plt.plot(ns, (ns - 1) / ns * sigma2, ":", color="crimson", label="理論 (n-1)/n·σ²")
plt.xlabel("標本サイズ n")
plt.ylabel("推定量の期待値(4万回平均)")
plt.legend()
plt.grid(True, alpha=0.3)
plt.tight_layout()
plt.show()

このグラフから2つのことがはっきり読み取れます。第一に、$n$ で割った推定量(赤)は理論曲線 $\frac{n-1}{n}\sigma^2$(赤の点線)の上にぴったり乗り、$n$ が小さいほど真値 $\sigma^2=4$(緑の破線)から大きく下に外れています。$n=2$ では $2.0$ しかなく、真値の半分です。第二に、$n-1$ で割った推定量(青)は標本サイズによらず $4.0$ の水平線上に張り付いています。シミュレーションが理論の不偏性をきれいに裏付けています。
推定値の分布を見る
推定量は確率変数なので、1回ごとの値は真値のまわりにばらつきます。「平均が合う(不偏)」ことと「1回の値が当たる」ことは別問題です。$n=5$ の小標本で、$n$ で割った場合と $n-1$ で割った場合の推定値のヒストグラムを比べてみましょう。
import numpy as np
import matplotlib.pyplot as plt
rng = np.random.default_rng(11)
sigma2, n, trials = 4.0, 5, 60000
samp = rng.normal(0, np.sqrt(sigma2), size=(trials, n))
xbar = samp.mean(axis=1, keepdims=True)
ss = np.sum((samp - xbar) ** 2, axis=1)
biased = ss / n
unbias = ss / (n - 1)
plt.figure(figsize=(10, 5.6))
bins = np.linspace(0, 16, 80)
plt.hist(biased, bins=bins, color="crimson", alpha=0.45, density=True,
label=f"÷n 平均={biased.mean():.2f}")
plt.hist(unbias, bins=bins, color="royalblue", alpha=0.45, density=True,
label=f"÷(n-1) 平均={unbias.mean():.2f}")
plt.axvline(sigma2, color="green", ls="--", lw=2, label="真値 σ²=4")
plt.xlabel("分散推定値")
plt.ylabel("確率密度")
plt.legend()
plt.grid(True, alpha=0.3)
plt.tight_layout()
plt.show()

ヒストグラムから、両方の分布とも右に長い裾を引いた非対称な形(カイ二乗型)であることがわかります。$n$ で割った分布(赤)の平均は約 $3.2$ で真値 $4$ より左に寄っており、$n-1$ で割った分布(青)の平均は約 $4.0$ で真値に重なります。どちらの分布も幅広く、1回の推定値は真値から大きく外れることもあります。不偏性が保証するのは「平均的に中心が合う」ことだけで、個々の推定の正確さではない、という点が視覚的に理解できます。

こちらは標本サイズ $n$ を変えながら、両推定量の分布を箱ひげ図で並べたものです。$n=3$ では2つの箱(赤=$\div n$、青=$\div(n-1)$)の中央値がはっきりずれていますが、$n=100$ ではほぼ重なります。また $n$ が小さいほど箱(推定値のばらつき)自体も大きいことが読み取れます。小標本ではベッセル補正の有無が無視できず、大標本では誤差に埋もれて差がなくなる——実務での判断材料になる図です。
数値実験で「分散については $n-1$ で割れば不偏」と確信できました。ところが、分散の平方根である標準偏差に話を移すと、思わぬ落とし穴が待っています。
標準偏差は不偏でない
平方根が不偏性を壊す
不偏分散 $s^2$ の平方根 $s = \sqrt{s^2}$ を「標本標準偏差」としてよく使います。$s^2$ が $\sigma^2$ の不偏推定量なら、$s$ も $\sigma$ の不偏推定量になりそうに思えます。ところが、これは成り立ちません。一般に
$$ E[s] = E[\sqrt{s^2}] \neq \sqrt{E[s^2]} = \sqrt{\sigma^2} = \sigma $$
です。むしろ $E[s] < \sigma$ となり、標準偏差は真値より小さく見積もられます。なぜこんなことが起きるのか、原因は平方根という関数の形にあります。
凹関数とイェンセンの不等式
平方根 $f(t) = \sqrt{t}$ は上に凸(凹)な関数です。凹関数に対しては イェンセンの不等式(Jensen’s inequality) が成り立ち、
$$ E[f(X)] \leq f(E[X]) $$
となります(等号は $X$ が定数のときのみ)。$X = s^2$、$f = \sqrt{\cdot}$ を当てはめると、
$$ E[\sqrt{s^2}] \leq \sqrt{E[s^2]} = \sqrt{\sigma^2} = \sigma $$
が得られます。$s^2$ は標本ごとにばらつく確率変数なので、等号は成立せず厳密に $E[s] < \sigma$ です。直感的には、平方根が「上に凸」なせいで、$s^2$ が大きいときの $s$ の伸びより、小さいときの $s$ の縮みのほうが効いてしまい、平均すると下にずれるのです。

左の図は平方根関数 $f(s^2)=\sqrt{s^2}$(青)とその $\sigma^2$ における接線(灰の破線)です。凹関数は接線より下にあるため、$s^2$ がばらつくと $\sqrt{\cdot}$ の平均が真値 $\sigma$ より下に引き下げられる様子がわかります。右の図は、正規母集団のもとで $E[s]/\sigma$ がちょうどいくつになるかを表す補正係数 $c_4(n)$ をプロットしたものです。$n$ が小さいほど 1 を大きく下回り($n=2$ では約 $0.80$)、$n$ が増えると 1 に近づきます。不偏分散の平方根でさえ、小標本では系統的に $\sigma$ を過小評価することがはっきり見て取れます。
正規分布での補正係数
母集団が正規分布のときは、$E[s]$ を厳密に計算できます。結果だけ示すと、
$$ E[s] = c_4(n)\,\sigma, \qquad c_4(n) = \sqrt{\frac{2}{n-1}}\,\frac{\Gamma(n/2)}{\Gamma((n-1)/2)} $$
となります($\Gamma$ はガンマ関数)。この $c_4(n)$ は常に $1$ より小さく、$n\to\infty$ で $1$ に近づきます。したがって $s / c_4(n)$ とすれば $\sigma$ の不偏推定量が作れます。ただし $c_4$ は母集団分布に依存するので、実務で標準偏差の不偏補正までやることは稀です。「分散は $n-1$ で不偏にできるが、標準偏差は平方根のせいで厳密には不偏にならない」という事実を知っておくことが大切です。
ここまで一貫して「不偏になるように $n-1$ で割る」と説明してきました。しかし機械学習や最尤推定の文脈では、堂々と $n$ で割ります。これは矛盾ではなく、推定の哲学が違うからです。次に、その違いを見ていきましょう。
MLE(n で割る)との違い
最尤推定は n で割る
母集団が正規分布 $N(\mu, \sigma^2)$ だと仮定し、パラメータ $\mu, \sigma^2$ を 最尤推定(MLE) で求めると、分散の推定量は $n$ で割る形になります。対数尤度
$$ \ell(\mu, \sigma^2) = -\frac{n}{2}\ln(2\pi\sigma^2) – \frac{1}{2\sigma^2}\sum_{i=1}^{n}(x_i – \mu)^2 $$
を $\mu$ と $\sigma^2$ で偏微分してゼロと置きます。$\mu$ については $\hat{\mu} = \bar{x}$ が出ます。$\sigma^2$ については、
$$ \frac{\partial \ell}{\partial \sigma^2} = -\frac{n}{2\sigma^2} + \frac{1}{2\sigma^4}\sum_{i=1}^{n}(x_i – \mu)^2 = 0 $$
を解くと、$\mu$ に $\hat{\mu}=\bar{x}$ を代入して
$$ \hat{\sigma}^2_{\mathrm{MLE}} = \frac{1}{n}\sum_{i=1}^{n}(x_i – \bar{x})^2 $$
となります。これは $n$ で割る推定量、つまりバイアスのある $\hat{\sigma}^2$ です。最尤推定は「観測データを最も尤もらしくするパラメータ」を選ぶ原理で、不偏性をそもそも要求していません。だから補正なしの $n$ が出てくるのです。
バイアスと一致性は別物
MLE が不偏でないことは、MLE の欠陥ではありません。MLE は 一致性(consistency) という別の良い性質を持ちます。一致性とは、標本サイズ $n$ を無限に増やせば推定量が真値に確率収束することです。$\hat{\sigma}^2_{\mathrm{MLE}}$ のバイアスは $-\sigma^2/n$ で $n\to\infty$ で消えるので、一致推定量です。
ここに推定量を選ぶときの設計思想の違いが現れます。
- 不偏推定($n-1$) — 平均的なズレ(バイアス)をゼロにしたい。小標本でも系統誤差を出したくない場面、信頼区間や仮説検定の理論を組み立てる場面で重視される。
- 最尤推定($n$) — 尤度最大化という統一原理に従う。多少のバイアスがあっても、大標本での効率や漸近的な性質を重視する。機械学習の多くのモデルがこちら。
どちらが「正しい」というものではなく、何を最適化したいかの違いです。実は、平均二乗誤差(MSE = バイアス² + 分散)という総合的な基準で見ると、正規分布では $n+1$ で割る推定量が最小になることも知られています。「不偏が常に最良」というわけではないのです。

この図は、numpy で割り方(自由度の引き方)を変えたときに推定量の平均がどう動くかを示しています(詳細は次節)。$\div n$(ddof=0、MLE)は真値より下、$\div(n-1)$(ddof=1、不偏)はちょうど真値、$\div(n-2)$(ddof=2)は逆に過大評価になります。割る数を1つ変えるごとに期待値が系統的にずれることが、MLE と不偏推定の違いを定量的に表しています。
理論と哲学が出揃いました。最後に、これらを実際のコードでどう使い分けるか、numpy の ddof 引数と統計的応用を見ていきましょう。
Pythonでの実装 — numpy の ddof 引数
ddof で割り方を制御する
numpy の np.var と np.std には ddof(delta degrees of freedom、自由度の差分)という引数があります。これは「割る数を $n – \mathtt{ddof}$ にする」という指定です。
$$ \texttt{np.var(x, ddof=d)} = \frac{1}{n-d}\sum_{i=1}^{n}(x_i – \bar{x})^2 $$
デフォルトは ddof=0($n$ で割る、MLE/母分散の形)です。不偏分散が欲しいときは ddof=1($n-1$ で割る)を指定します。ここが初学者がよくつまずくポイントで、numpy のデフォルトは統計の教科書の標準(不偏)とは逆なのです。
import numpy as np
rng = np.random.default_rng(2)
sigma2, n, trials = 4.0, 6, 50000
samp = rng.normal(0, np.sqrt(sigma2), size=(trials, n))
for d in [0, 1, 2]:
v = samp.var(axis=1, ddof=d) # 各標本セットの分散を計算
print(f"ddof={d} (÷{n-d}): 推定値の平均 = {v.mean():.4f}")
print(f"\n真の分散 σ² = {sigma2}")
print(f"理論 ddof=0: {(n-1)/n*sigma2:.4f} (過小)")
print(f"理論 ddof=1: {sigma2:.4f} (不偏)")
print(f"理論 ddof=2: {(n-1)/(n-2)*sigma2:.4f} (過大)")
このコードの出力では、ddof=0 の平均が約 $3.33$(理論値 $\frac{5}{6}\cdot4 = 3.333$)、ddof=1 が約 $4.00$、ddof=2 が約 $5.00$(理論値 $\frac{5}{4}\cdot4 = 5.0$)となります。$\div(n-1)$ つまり ddof=1 のときだけ真値 $4.0$ に一致することが確認できます。割る数を $n-1$ より小さくする(ddof を 2 にする)と今度は過大評価になり、$n-1$ が「ちょうど」の値であることがわかります。

棒グラフで見ると、3本の棒(ddof=0, 1, 2)のうち真ん中の ddof=1 だけが真値 $\sigma^2=4$ の破線に届いています。ddof=0 は届かず(過小)、ddof=2 は突き抜けています(過大)。numpy で標本データから母分散を推定したいときは ddof=1 を付ける、と覚えておきましょう。pandas の Series.var() はデフォルトが ddof=1(不偏)なので、numpy とは逆である点も要注意です。
自前実装で中身を確認する
ddof がやっていることをスクラッチで書いてみると、ブラックボックス感が消えます。
import numpy as np
def my_var(x, ddof=0):
"""numpy の np.var(x, ddof=ddof) の自前実装"""
x = np.asarray(x, dtype=float)
n = len(x)
xbar = x.sum() / n # 標本平均
ss = np.sum((x - xbar) ** 2) # 偏差平方和
return ss / (n - ddof) # n - ddof で割る
rng = np.random.default_rng(7)
x = rng.normal(10, 3, size=8)
for d in [0, 1]:
mine = my_var(x, ddof=d)
ref = np.var(x, ddof=d)
print(f"ddof={d}: 自前={mine:.6f}, numpy={ref:.6f}, 一致={np.isclose(mine, ref)}")
この出力では、ddof=0 でも ddof=1 でも自前実装と numpy の結果が完全に一致し、一致=True と表示されます。np.var は内部で「偏差平方和を $n – \mathtt{ddof}$ で割る」だけのシンプルな処理をしている、という確認です。中身を一度自分で書いておくと、ddof の指定を間違えにくくなります。
理論も実装も押さえました。最後に、この $n-1$ が統計の実務でどこに効いてくるのか、信頼区間と $t$ 検定の例で締めくくります。
応用 — 信頼区間と t 検定
信頼区間に現れる n−1
母平均 $\mu$ の信頼区間を作るとき、母分散 $\sigma^2$ がわからないので不偏分散 $s^2$ で代用します。このとき、標本平均を標準化した統計量
$$ T = \frac{\bar{x} – \mu}{s/\sqrt{n}} $$
は標準正規分布ではなく、自由度 $n-1$ の $t$ 分布に従います。ここでも自由度として $n-1$ が登場します。これは「$\sigma$ の代わりに $s$ という推定値を使った不確かさ」を反映したもので、$t$ 分布は正規分布より裾が重く、小標本ほどその差が大きくなります。95% 信頼区間は
$$ \bar{x} \pm t_{0.975,\,n-1}\cdot\frac{s}{\sqrt{n}} $$
で与えられます。$t_{0.975, n-1}$ は自由度 $n-1$ の $t$ 分布の上側 2.5% 点です。
被覆率で確かめる
信頼区間が本当に「95%」を実現するには、(1) 不偏分散 $s$ を使い、(2) $t$ 分布の臨界値を使う、という両方が必要です。小標本でこれを怠るとどうなるかをシミュレーションで見ます。「被覆率」とは、作った区間が真の $\mu$ を含む割合のことです。
import numpy as np
from scipy import stats
rng = np.random.default_rng(8)
mu, sigma, n, trials = 0.0, 2.0, 5, 20000
samp = rng.normal(mu, sigma, size=(trials, n))
xbar = samp.mean(axis=1)
s = samp.std(axis=1, ddof=1) # 不偏分散の平方根
s_mle = samp.std(axis=1, ddof=0) # n で割る
t_crit = stats.t.ppf(0.975, df=n - 1) # t 分布の臨界値
z_crit = stats.norm.ppf(0.975) # 正規分布の臨界値
# (A) n で割る s + 正規近似(誤り)
cover_A = np.mean(np.abs(xbar - mu) <= z_crit * s_mle / np.sqrt(n))
# (B) n-1 で割る s + 正規近似(まだ不十分)
cover_B = np.mean(np.abs(xbar - mu) <= z_crit * s / np.sqrt(n))
# (C) n-1 で割る s + t 分布(正しい)
cover_C = np.mean(np.abs(xbar - mu) <= t_crit * s / np.sqrt(n))
print(f"(A) ÷n の s + 正規近似 : 被覆率 = {cover_A*100:.1f}%")
print(f"(B) ÷(n-1) の s + 正規 : 被覆率 = {cover_B*100:.1f}%")
print(f"(C) ÷(n-1) の s + t分布: 被覆率 = {cover_C*100:.1f}% ← 目標95%")
出力を見ると、(A) は約 $84\%$、(B) は約 $88\%$ と目標の $95\%$ に届きません。(C) で初めて約 $95\%$ に達します。$n$ で割った標準偏差を使うと分散を過小評価し、区間が狭くなりすぎて真値を取りこぼします。さらに正規近似では小標本の不確かさを表現しきれず、$t$ 分布を使って初めて正しい被覆率になります。ベッセル補正と $t$ 分布の両方が、小標本の正しい推測に不可欠だとわかります。

この棒グラフは3つの方法の実際の被覆率を比べたものです。左2本($n$ で割る、または正規近似)は目標の $95\%$(緑の破線)に届かず、右の「$n-1$ で割る $s$ + $t$ 分布」だけが $95\%$ に達しています。$n-1$ で割ることは、単に分散の見積もりを正しくするだけでなく、検定や区間推定の信頼性そのものを支えている——応用面での重要性がよくわかる結果です。
t 検定との関係
$t$ 検定は、いま見た信頼区間と表裏一体です。1標本 $t$ 検定では帰無仮説 $\mu = \mu_0$ のもとで統計量 $T = (\bar{x}-\mu_0)/(s/\sqrt{n})$ を計算し、自由度 $n-1$ の $t$ 分布と照らして $p$ 値を求めます。ここで使う $s$ は不偏分散の平方根であり、自由度は $n-1$。つまり $t$ 検定の妥当性は、ベッセル補正の上に成り立っています。標本分散を $n$ で割ってしまうと、$t$ 検定の理論的な分布が崩れ、誤った結論を導きかねません。$n-1$ という小さな補正が、統計的推測の根幹を支えているのです。

最後の表は、本記事の内容を「$n$ で割る vs $n-1$ で割る」の対比でまとめたものです。定義式、期待値、バイアスの有無、自由度の解釈、numpy での書き方、主な用途が一目で比較できます。迷ったときの早見表として活用してください。
まとめ
本記事では、標本分散をなぜ $n-1$ で割るのか——ベッセル補正と不偏推定——を、直感・導出・実験・応用のすべての角度から解説しました。
- 過小評価の原因: 標本平均 $\bar{x}$ は手元のデータに対して偏差平方和を最小化する「ずるい中心」なので、$\bar{x}$ まわりの散らばりは真の平均 $\mu$ まわりより必ず小さい。だから $n$ で割ると分散を系統的に小さく見積もる。
- 核心の期待値計算: 恒等式 $\sum(x_i-\bar{x})^2 = \sum(x_i-\mu)^2 – n(\bar{x}-\mu)^2$ の期待値を取ると、$n\sigma^2 – \sigma^2 = (n-1)\sigma^2$。目減り量はちょうど標本平均の分散 $\sigma^2/n$ の $n$ 倍、すなわち $\sigma^2$ ぶん。
- 自由度の直感: 偏差には $\sum(x_i-\bar{x})=0$ という1本の拘束があり、自由に動けるのは $n-1$ 個。幾何的には、データベクトルを $\mathbf{1}$ 方向に射影して1次元を平均が使い、偏差は残り $n-1$ 次元に収まる。
- 不偏性: $s^2 = \frac{1}{n-1}\sum(x_i-\bar{x})^2$ は $E[s^2]=\sigma^2$ を満たす不偏推定量。$n$ で割った推定量のバイアスは $-\sigma^2/n$ で、$n$ が大きいと消える。
- 標準偏差は不偏でない: 平方根が凹関数なので、イェンセン不等式により $E[s] < \sigma$。$s^2$ を不偏にしても $s$ は厳密には不偏にならない。
- MLE との違い: 最尤推定は $n$ で割る。不偏性ではなく尤度最大化を原理にするため。一致性は両方が持つ。何を最適化したいかで割る数が変わる。
- 実装と応用: numpy は
np.var(x, ddof=1)で不偏分散(デフォルトのddof=0は $n$ で割るので注意)。信頼区間や $t$ 検定では自由度 $n-1$ が現れ、不偏分散と $t$ 分布の両方を使って初めて正しい被覆率が得られる。
$n-1$ という一見不可解な値は、「標本平均を使った代償として失う1自由度」を補う、極めて合理的な補正でした。この理解は、標準誤差・$t$ 検定・分散分析・回帰分析(残差の自由度 $n-p$)など、統計のあらゆる場面で効いてきます。
次のステップとして、以下の記事も参考にしてください。