中心極限定理を Python で動かす ─ 一様分布が正規になる瞬間
統計学で最も重要な定理『中心極限定理(CLT)』を Python のシミュレーションで体感。一様分布や指数分布の標本平均が、本当に正規分布に収束する様子をヒストグラムで確認します。
中心極限定理(CLT, Central Limit Theorem) は、統計学で最も重要な定理と言っても過言ではありません。この定理があるおかげで、信頼区間や仮説検定が可能になります。本記事では Python で 一様分布から始まって標本平均が正規分布に収束する 様子を実際に動かしてみます。
中心極限定理とは
母集団が どんな分布(平均 μ・分散 が有限) であっても、そこから無作為抽出した 標本平均 の分布 は、 が大きくなるにつれて正規分布 に近づく。
もとの分布の形(一様・指数・二項・カイ二乗 …)を問わず、平均は正規分布に集まります。これが推定 ・ 検定 ・ 信頼区間の理論的根拠。
セットアップ
import numpy as np
import matplotlib.pyplot as plt
from scipy import stats実験 1 ─ 一様分布から始める
まずは形が 真四角 な一様分布から。ここから標本平均をたくさん作って、ヒストグラムを描きます。
np.random.seed(42)
sample_sizes = [1, 2, 5, 30]
num_simulations = 5000
fig, axes = plt.subplots(1, 4, figsize=(16, 4))
for ax, n in zip(axes, sample_sizes):
# 一様分布 U(0, 1) から n 個サンプリング → 平均 を 5000 回
means = np.array([
np.random.uniform(0, 1, n).mean()
for _ in range(num_simulations)
])
ax.hist(means, bins=40, density=True, alpha=0.7, color='steelblue')
# 理論上の正規分布(平均 0.5, 分散 1/(12n))を重ねる
x = np.linspace(0, 1, 200)
sigma = np.sqrt(1 / (12 * n))
ax.plot(x, stats.norm.pdf(x, loc=0.5, scale=sigma), 'r-', lw=2,
label=f'N(0.5, 1/(12·{n}))')
ax.set_title(f'n = {n}')
ax.legend()
plt.tight_layout()
plt.show()実行すると、 では一様分布のまま真四角、 で三角形、 で釣り鐘型、 で完全に正規分布と一致 ─ 教科書通りの絵が描けます。
実験 2 ─ 偏った分布(指数分布)から
次は 左右対称ではない 指数分布。これでも標本平均は正規型になるか?
lambda_param = 1.0 # 平均 = 1, 分散 = 1
fig, axes = plt.subplots(1, 4, figsize=(16, 4))
for ax, n in zip(axes, sample_sizes):
means = np.array([
np.random.exponential(scale=1/lambda_param, size=n).mean()
for _ in range(num_simulations)
])
ax.hist(means, bins=40, density=True, alpha=0.7, color='coral')
# 理論曲線: 平均 1, 分散 1/n
x = np.linspace(0, 3, 200)
sigma = np.sqrt(1 / n)
ax.plot(x, stats.norm.pdf(x, loc=1, scale=sigma), 'b-', lw=2)
ax.set_title(f'n = {n}')
plt.tight_layout()
plt.show()では指数分布の右肩下がりがそのまま、 ではきれいな正規分布に変身。
実験 3 ─ Q-Q プロットで正規性を検証
ヒストグラムだけでなく、Q-Q プロット で正規分布との一致を厳密にチェック:
fig, axes = plt.subplots(1, 4, figsize=(16, 4))
for ax, n in zip(axes, sample_sizes):
means = np.array([
np.random.exponential(1, n).mean()
for _ in range(num_simulations)
])
stats.probplot(means, dist='norm', plot=ax)
ax.set_title(f'n = {n}')
plt.tight_layout()
plt.show()が大きくなるほど点が直線に乗ります = 正規分布に近づいている証拠。
実用例 ─ A/B テストへの応用
中心極限定理のおかげで、サンプルサイズが 30 以上なら、もとの分布を気にせずに正規分布で信頼区間を計算できます。これが A/B テストや品質管理の理論的根拠。
10 万ユーザーの平均 CTR は、もとの分布がどんなに歪んでいても、平均値は正規分布で扱える ─ なので t 検定が使える。
n はどのくらい必要?
- もとの分布が左右対称: で十分
- やや歪んでいる: (教科書での慣習)
- 大きく歪んでいる(指数 ・ ポアソン): 〜
- 極端な歪み(コーシー): そもそも CLT が適用できない(分散が無限)
本サイトでの学習
- [統計検定 3 級 教科書](/textbook/grade-3) ─ 中心極限定理の数式
- [図解で学ぶ統計](/figures) ─ CLT 収束の SVG 図
- [動かして学ぶ統計](/explore) ─ ブラウザ上で対話的に CLT を体験
- [Python 環境構築 完全ガイド](/blog/python-setup-for-stats) ─ 実行環境のセットアップ
まとめ
CLT は『正規分布が至る所に出てくる理由』を説明する魔法の定理。50 行のコードで体感できるので、まず動かしてから式を眺めると理解が桁違いになります。
次は信頼区間や検定の実装に進みましょう ─ それらはすべて CLT の応用です。
関連記事
- 2026-04-29PythonAIエンジニア入門 ─ Python 環境構築 完全ガイド(2026 年版)統計・機械学習を学ぶための Python 環境を、Windows / macOS で迷わず構築。uv ・ Jupyter ・ VS Code ・主要ライブラリを 30 分で揃えます。
- 2026-04-29ロードマップAIエンジニアに必要な統計知識 完全チートシート機械学習を仕事で扱うエンジニアが『最低限おさえるべき統計』を 1 ページに圧縮。実装と直結する 12 トピックを優先度順に整理しました。
- 2026-04-29学習法p 値の誤解 5 選 ─ 仮説検定でやりがちな勘違いを正す「p < 0.05 = 効果あり」と思っていませんか?統計検定や A/B テストで頻発する p 値の 5 つの誤解と、正しい解釈を整理します。