【確率・統計 完結】正規分布:カオスの中に潜む「神曲(神の曲線)」をPythonで描く

Python

ダンテの『神曲』になぞらえて言えば、『地獄の門をくぐり、確率という名の「偶然の迷宮」を彷徨ってきた』この連載も、ついに最終目的地へと到達します。

前回記事のテーマ「大数の法則」では、バラバラだったサイコロの目が、回数を重ねるごとに整然と平均値 3.5 へ吸い寄せられていく光景を目撃しました。
ここが「第十天 至高天」なのでしょうか?

いいえ、物語にはまだ続きがあります。

無秩序に見える偶然の重なりは、最終的に「ある一つの美しい曲線」へと集約されます。
それは、まるで目に見えない何かが設計したかのような完璧なシルエット。
統計学だけでなく、自然界においても重要とされる正規分布(ガウス分布)です。

今回は、Pythonを使ってこの「カオスから秩序が生まれる瞬間」を可視化し、私たちが手にした知識の集大成を完結させましょう。

第1章:至高の調和「中心極限定理」

「大数の法則」は、試行回数を増やせば標本平均が母平均に近づくことを教えてくれましたが、そこにはまだ「バラつき方」のルールは示されていませんでした。

1.1. どんなカオスも「あの形」に変わる

『神曲』の終盤、ダンテがベアトリーチェに導かれ至高天(エンピレオ)へ至るように、確率・統計の探究者たる私たちを正規分布へと導くのは「中心極限定理」という数学の至宝です。

この定理は、確率・統計の真理を説いています。

元のデータの分布がどんなに歪んでいても、それらを足し合わせ、あるいは平均をとるという操作を繰り返すと、その分布は必ず正規分布という釣鐘型の形に近づいていく

サイコロ1個の出目は、1から6までが等しく出る「一様な分布」で、決して釣鐘型ではありません。
しかし、そのサイコロを「何個も振って合計する」という操作を加えることにより、カオスは秩序へと昇華し始めます。

第2章:神の曲線を設計する「2つの鍵」

ドラマチックに「神の曲線」と表現した正規分布は、次の2つの指標によって姿を現します。

  1. 母平均(\(\mu\))
  2. 標準偏差(\(\sigma\))

それぞれを詳しく見ていきましょう。

2.1. 頂点を決める「母平均(\(\mu\))」

母平均 \(\mu\) は、曲線の最も高い位置、つまり「分布の重心」を決定します。

「大数の法則」を思い出してください。
試行回数を増やすほど、私たちの手元にあるデータの平均値は、ある一つの値へと吸い寄せられていきました。
その吸い寄せられる先が、この正規分布の頂点である \(\mu\) です。

正規分布において、母平均・中央値・最頻値の3つはすべてこの頂点(\(\mu\))で一致します。
つまり、\(\mu\) を知ることは、カオスだったデータ群が最終的にどこに「帰着」するのか、その本拠地を突き止めることを意味します。

この頂点を中心として、曲線は左右対称の美しいシルエットを描き出すのです。

2.2. 広がりを決める「標準偏差(\(\sigma\))」

「標準偏差」は、この曲線において最強の物差しとなります。
正規分布の世界では、以下の「68-95-99.7の法則」が厳格に守られています。

  • 平均 \(\pm 1\sigma\) の範囲:全データの 約68.3% が含まれる
  • 平均 \(\pm 2\sigma\) の範囲:全データの 約95.4% が含まれる
  • 平均 \(\pm 3\sigma\) の範囲:全データの 約99.7% が含まれる

第3章:【実装】Pythonで「神曲」を紡ぎ出す

アインシュタインは、『神はサイコロを振らない』という有名な言葉を残しましたが、我々はこれまでのシリーズを通して何度となく仮想のサイコロを振り、その平均を計算してきました。
しかし今回は、その「作業」の先にある最終的な調和をグラフとして描き出すことがメインテーマです。

10個のサイコロを振るという「カオスな試行」を1万セット積み上げたとき、そこに現れるヒストグラムは、果たして数学が予言する正規分布と一致するのでしょうか。
シミュレーションと理論値を重ね合わせ、その真実を可視化してみましょう。

3.1. 実装コードの提示

新規Pythonファイル divine_curve.py を作成し、以下のプログラムをコーディングします。

divine_curve.py
import numpy as np
import matplotlib.pyplot as plt

# --- 1. シミュレーションの設定 ---
n_dice = 10      # 1セットで振るサイコロの数
n_trials = 10000 # 試行回数(1万セット)

# --- 2. データの生成(合計値の算出) ---
# 各試行で10個のサイコロの合計値を求め、1万個のリストを作成
dice_sums = [np.random.choice(range(1, 7), size=n_dice).sum() for _ in range(n_trials)]

# --- 3. 可視化:実データと理論曲線の融合 ---
plt.figure(figsize=(10, 6))

# 【実データ】ヒストグラムを描画
# 密度の正規化(density=True)を行い、理論曲線と比較可能にする
plt.hist(dice_sums, bins=range(n_dice, n_dice*6 + 2), density=True, 
         color='skyblue', edgecolor='white', alpha=0.7, label='Actual Data (Simulation)')

# 【理論値】正規分布の公式に基づき「神曲」を描画
mu = n_dice * 3.5              # 理論上の重心(母平均)
sigma = np.sqrt(n_dice * 2.917) # 理論上の広がり(母集団の標準偏差)
x = np.linspace(n_dice, n_dice*6, 100)
# 正規分布の確率密度関数(PDF)の計算
y = (1 / (np.sqrt(2 * np.pi) * sigma)) * np.exp(-0.5 * ((x - mu) / sigma)**2)

plt.plot(x, y, color='red', lw=2, label='Normal Distribution (Theory)')

# グラフの装飾
plt.title(f"Divine Curve: Verification of the Normal Distribution")
plt.xlabel("Sum of 10 Dice Faces")
plt.ylabel("Probability Density")
plt.legend()
plt.grid(axis='y', alpha=0.3)
plt.show()

3.2. 実行結果の分析

プログラムの実行結果として描画されたグラフを確認してみましょう。

実行結果
  • Actual Data(水色の棒グラフ:実際に1万回振って得られた合計値の分布データ。
  • Normal Distribution (Theory)(赤線:数式から導き出された理論上の「正規分布」。

注目すべきは、デタラメに振られたサイコロの結果(水色の柱)が、数学が予言した赤色の曲線に見事なまでにシンクロしている点です。

サイコロ1個の段階では、1から6までが等確率で並ぶ絶壁のような形(一様分布)でした。
しかし、たった10個を束ねて合計しただけで、分布の角は取れ、中心に向かって滑らかな曲線を描き始めます。

これが「中心極限定理」の力です。

この曲線を手にしたことで、もはや「運が良かった」で済ませる必要はなくなりました。
「データの95%はこの範囲に収まるはずだ」という、科学的な根拠に基づく予測が可能になったのです。

3.3. コードのポイント解説

今回作成したプログラムでは、単にグラフを描画するだけでなく、「理論(数学)」と「現実(シミュレーション)」を同じ土俵で比較するための工夫を凝らしています。

  • 密度の正規化 (density=True)
    • ヒストグラムを描く際、単なる個数ではなく「割合(確率密度)」に変換しています。これにより、合計値が異なるデータ同士でも、理論上の正規分布曲線と高さを合わせて比較できるようになります。
  • 理論上の標準偏差の算出
    • コード内の sigma = np.sqrt(n_dice * 2.917) に注目してください。第6回記事で学んだサイコロ1個の分散(2.917)を、振った個数分だけ足し合わせ、その平方根をとっています。これまでの学びが、曲線の広がりを決める重要な数値として再登場しています。
  • 正規分布の公式「PDF」(※1) の実装
    • 変数 y を求めている複雑な数式 (※2) は、正規分布の「確率密度関数」そのものです。この一見難解な式が、シミュレーション結果とピタリと重なる瞬間に、数学の持つ予言の力を実感できるはずです。

※1PDFとは、統計学では Probability Density Function の頭文字をとった略称で、日本語では「確率密度関数」と呼ばれます。

※2:この数式を表しているコードは、次の1行です。(divine_curve.py 25行目)

y = (1 / (np.sqrt(2 * np.pi) * sigma)) * np.exp(-0.5 * ((x - mu) / sigma)**2)

このコードを数学の式(公式)として書き起こすと、次のようになります。

\(\displaystyle f(x) = \frac{1}{\sqrt{2\pi\sigma^2}} \exp\left( -\frac{(x – \mu)^2}{2\sigma^2} \right)\)

難解な式で呪文のように見えますが、実はこれまでの連載で学んだパーツが組み合わさっています。

  • \(\mu\)(母平均): 山の頂点がどこに来るかを決めます。
  • \(\sigma\)(標準偏差): 山の広がり(バラつき)を決めます。
  • \(\pi\)(円周率)や \(e\)(ネイピア数): 自然界の調和を司る定数は、統計学にも登場します。

第5章:エピローグ ~ 知の迷宮を抜けた先にあるもの ~

全8回にわたった「確率・統計」の旅も、ここで幕を閉じます。

サイコロ地獄から始まり、バラつきという暗い森を抜け、大数の法則を杖にして、ついに正規分布という至高天へ到達しました。

ここで得た知識 ——「平均」「標準偏差」「標準誤差」「正規分布」—— は、AI開発では機械学習モデルの精度評価や、量子プログラミングならば観測結果の解析など、現代の最新テクノロジーを支える「共通言語」です。

偶然に翻弄されるのではなく、論理のレンズで世界を見る力を手に入れたあなたにとって、次に続く物語はもはや迷宮ではないはずです。

さらなる知の探求へ。
あなたの旅は、ここからまた新しく始まります。

コメント

タイトルとURLをコピーしました