統計ロードマップ
2026-04-29·Python·⏱ 約 7

中心極限定理を Python で動かす ─ 一様分布が正規になる瞬間

統計学で最も重要な定理『中心極限定理(CLT)』を Python のシミュレーションで体感。一様分布や指数分布の標本平均が、本当に正規分布に収束する様子をヒストグラムで確認します。

中心極限定理(CLT, Central Limit Theorem) は、統計学で最も重要な定理と言っても過言ではありません。この定理があるおかげで、信頼区間や仮説検定が可能になります。本記事では Python で 一様分布から始まって標本平均が正規分布に収束する 様子を実際に動かしてみます。

中心極限定理とは

母集団が どんな分布(平均 μ・分散 が有限) であっても、そこから無作為抽出した 標本平均 の分布 は、 が大きくなるにつれて正規分布 に近づく。

💡 ここが凄い

もとの分布の形(一様・指数・二項・カイ二乗 …)を問わず、平均は正規分布に集まります。これが推定 ・ 検定 ・ 信頼区間の理論的根拠。

セットアップ

必要なライブラリ
import numpy as np
import matplotlib.pyplot as plt
from scipy import stats

実験 1 ─ 一様分布から始める

まずは形が 真四角 な一様分布から。ここから標本平均をたくさん作って、ヒストグラムを描きます。

n を変えながら標本平均の分布を可視化
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 プロット で正規分布との一致を厳密にチェック:

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 の応用です。

Related Articles

関連記事