「データは正規分布に従う」——そう信じて品質管理してませんか?
実は、製造現場で測った寸法データの 約30%は正規分布に従わない という研究結果があります。でも大丈夫。正規分布を正しく理解していれば、「いつ使えて、いつ使えないか」が判断できるようになるんです。
今日は、ブラウザひとつで動く正規分布計算機を使って、数式・実装・実務応用まで一気に深掘りします。「なんとなく」で終わらせない、コードと手計算で裏付けした本格解説です。
まずは直感を掴もう——釣鐘型の正体
正規分布を一言で表すと:
「平均値の周りにデータが集まり、平均から離れるほど出現確率が指数関数的に減る」分布
つまり、こんなイメージです:
- 平均 μ:山のてっぺんの位置。これを動かすと山全体が左右にスライド
- 標準偏差 σ:山の「ふくらみ」の幅。σが小さいと細く尖った山、大きいと平べったい山
この2つのパラメータだけで、自然界のあらゆる「ばらつき」をモデル化できる——それが正規分布のすごいところです。
数式で理解する——たった1行の式からすべてが始まる
正規分布の確率密度関数(PDF)は次の式で定義されます:
f(x)=\frac{1}{\sigma\sqrt{2\pi}}e^{-\frac{(x-\mu)^2}{2\sigma^2}}
この式、一見複雑に見えますが、構成要素はたった3つです:
- $\frac{1}{\sigma\sqrt{2\pi}}$:規格化定数。この値で全体の面積(確率の総和)を必ず1にする
- $e^{-\frac{(x-\mu)^2}{2\sigma^2}}$:指数関数部分。$x$が$\mu$から離れるほど急激に小さくなる
- $(x-\mu)^2$:平均からの距離の2乗。これにより左右対称な釣鐘型が生まれる
特に重要なのは指数関数の中身です。$x=\mu$のとき指数部分は$e^0=1$となり、$f(\mu)=\frac{1}{\sigma\sqrt{2\pi}}$が最大値になります。$\sigma=1$のとき、$f(0)=0.3989$と計算できるんです。
累積分布関数(CDF)——確率を求める
「ある値以下になる確率」を求めるには、PDFを積分する必要があります:
\Phi(x)=\tfrac12[1+\operatorname{erf}((x-\mu)/(\sigma\sqrt2))]
ここで$\operatorname{erf}$は誤差関数。残念ながら高校数学では扱わない特殊関数ですが、コンピュータなら簡単に計算できます。
Zスコア——異なる分布を比較する魔法の変換
Z=(x-\mu)/\sigma
この変換で、どんな正規分布も「平均0、標準偏差1」の標準正規分布に変換できます。これにより:
- 異なる単位のデータを同じ基準で比較できる
- 標準正規分布表(統計の教科書の巻末にある表)が使える
- 「偏差値」の計算ができる
コードで実装する——シミュレーターの心臓部を再現
ここからが本番です。実際にブラウザで動くJavaScriptコードで、正規分布計算機のコアロジックを実装してみましょう。
/**
* 正規分布計算機 コア関数群
* ブラウザのコンソールでそのまま実行可能
*/
// 1. 確率密度関数(PDF)
function normalPDF(x, mu, sigma) {
// 引数チェック
if (sigma <= 0) throw new Error('標準偏差は正の値が必要です');
const exponent = -((x - mu) ** 2) / (2 * sigma ** 2);
const coefficient = 1 / (sigma * Math.sqrt(2 * Math.PI));
return coefficient * Math.exp(exponent);
}
// 2. 誤差関数(CDF計算に必要)
function erf(x) {
// Abramowitz and Stegun の近似式(精度:±1.5×10^-7)
const a1 = 0.254829592;
const a2 = -0.284496736;
const a3 = 1.421413741;
const a4 = -1.453152027;
const a5 = 1.061405429;
const p = 0.3275911;
const sign = x >= 0 ? 1 : -1;
x = Math.abs(x);
const t = 1.0 / (1.0 + p * x);
const y = 1.0 - (((((a5 * t + a4) * t) + a3) * t + a2) * t + a1) * t * Math.exp(-x * x);
return sign * y;
}
// 3. 累積分布関数(CDF)
function normalCDF(x, mu, sigma) {
if (sigma <= 0) throw new Error('標準偏差は正の値が必要です');
return 0.5 * (1 + erf((x - mu) / (sigma * Math.sqrt(2))));
}
// 4. Zスコア計算
function zScore(x, mu, sigma) {
if (sigma <= 0) throw new Error('標準偏差は正の値が必要です');
return (x - mu) / sigma;
}
// 5. 区間確率計算(P(a < X < b))
function intervalProbability(a, b, mu, sigma) {
if (a >= b) throw new Error('aはbより小さい値にしてください');
return normalCDF(b, mu, sigma) - normalCDF(a, mu, sigma);
}
// 使用例:標準正規分布で検証
const mu = 0, sigma = 1;
console.log('=== 標準正規分布の検証 ===');
console.log(`f(0) = ${normalPDF(0, mu, sigma).toFixed(4)}`); // 0.3989
console.log(`Φ(1) = ${normalCDF(1, mu, sigma).toFixed(4)}`); // 0.8413
console.log(`P(-1 < X < 1) = ${intervalProbability(-1, 1, mu, sigma).toFixed(4)}`); // 0.6827
// 実務例:部品の長さ(μ=100mm, σ=1mm)で105mm以上の確率
const muLen = 100, sigmaLen = 1;
const probOver105 = 1 - normalCDF(105, muLen, sigmaLen);
console.log(`\n=== 品質管理の例 ===`);
console.log(`105mm以上の部品が発生する確率: ${(probOver105 * 100).toFixed(2)}%`); // 約0.003%
console.log(`Zスコア: ${zScore(105, muLen, sigmaLen).toFixed(2)}`); // 5.00
このコード、実はシミュレーター本体と同じ計算ロジックです。誤差関数の近似式には「Abramowitz and Stegunの公式」という信頼性の高い手法を使っています。精度は±1.5×10⁻⁷と、実用上十分な水準です。
数値例で確かめる——手計算とコードの一致を確認
実際の値を使って、コードの出力を検証してみましょう。
問題設定:ある工場で製造するボルトの直径は、平均μ=10.0mm、標準偏差σ=0.2mmの正規分布に従うとします。直径が9.5mm未満のボルトは不良品として廃棄されます。不良品の発生確率は?
ステップ1:Zスコアを求める
Z = \frac{9.5 - 10.0}{0.2} = \frac{-0.5}{0.2} = -2.5
ステップ2:標準正規分布のCDFを計算
先ほどのコードで計算:
normalCDF(-2.5, 0, 1) // 結果:0.0062...
つまり、約0.62% のボルトが不良品になります。1000本に6本程度ですね。
ステップ3:コードで直接計算
const muBolt = 10.0, sigmaBolt = 0.2;
const defectRate = normalCDF(9.5, muBolt, sigmaBolt);
console.log(`不良率: ${(defectRate * 100).toFixed(2)}%`); // 0.62%
手計算とコードの結果が完全に一致しました。これで実装の正しさが確認できましたね。
シミュレーターで遊ぶ——パラメータを動かして理解を深める
それでは、実際に 正規分布計算機 を開いて、3つの実験をしてみましょう。
実験1:σを変えると何が起きる?
- 設定:μ=0固定、σを0.5→1.0→2.0と変化させる
-
観察:
- σ=0.5:山の高さが約0.8、幅が狭い
- σ=1.0:高さ約0.4、標準的な釣鐘型
- σ=2.0:高さ約0.2、平べったく広がる
なぜ? 規格化定数$1/(\sigma\sqrt{2\pi})$の部分で、σが大きいほど山が低くなります。でも面積(総確率)は常に1——これが確率密度関数の性質です。
実験2:68-95-99.7則を確認
- 設定:μ=50, σ=10
- 操作:a=40, b=60(μ±1σ)を入力
- 結果:確率約68.3%と表示される
続けてa=30, b=70(μ±2σ)→約95.4%、a=20, b=80(μ±3σ)→約99.7%を確認。
実務での使い方:品質管理で「3σ管理」と言われるのは、平均±3σの範囲に99.7%のデータが入るから。つまり、1000個に3個程度の不良は「許容範囲」と考えるわけです。
実験3:Zスコアで「異常値」を判定
- 設定:μ=100, σ=15(IQテストの標準的な設定)
- 操作:Zスコア計算欄にx=130を入力
- 結果:Z=2.00、累積確率約97.7%
つまり、IQ130以上の人は全体の約2.3%(約44人に1人)。Zスコアが2を超えると「かなり珍しい」と言えます。
現場でハマるポイント——正規分布の落とし穴
ここからが本当に重要なところです。シミュレーターで遊んで「便利だな」で終わらせてはいけません。
落とし穴1:正規分布は「裾が薄い」
正規分布の確率は、平均から離れると指数関数的に減衰します。つまり、極端な値(外れ値)の発生確率を過小評価する傾向があります。
実例:2008年の金融危機では、多くのリスクモデルが「3σ以上の株価変動は起こりえない」と仮定していました。実際には、リーマンショック級の変動は正規分布で予測するより1000倍以上の頻度で発生することが分かっています。
落とし穴2:「データが正規分布に従う」は仮定であって事実ではない
シミュレーターで美しいベル型曲線が描けるからといって、あなたのデータもそうとは限りません。
チェックすべきポイント:
- データが左右対称か?(右に裾が長い→対数正規分布の可能性)
- 外れ値が多すぎないか?(正規分布なら3σ外は0.3%未満)
- データの範囲が理論上の範囲(-∞〜+∞)と整合するか?(身長や寿命など、負の値がありえないデータは対数正規分布の方が適切なことも)
落とし穴3:中心極限定理の誤解
「サンプルサイズが大きければ正規分布に従う」——これは標本平均の分布の話であって、個々のデータの分布の話ではありません。
例えば、指数分布(めちゃくちゃ右に歪んだ分布)からサンプリングしても、サンプルサイズ30以上あれば標本平均はほぼ正規分布になります。でも元のデータは指数分布のままです。
まとめ——今日から使える3つのポイント
-
正規分布は「平均±σの何倍」で確率が決まる
- 68-95-99.7則は暗記レベルで使えるように
- Zスコア変換で異なるデータの比較が一瞬でできる
-
実装は誤差関数さえ押さえればOK
- 今回のJavaScriptコードはそのままコピペで使える
- 誤差関数の近似式は「Abramowitz and Stegun」が定番
-
適用前に「本当に正規分布か?」を必ずチェック
- 外れ値の多いデータには使わない
- 「正規分布に従う」は仮定であって、検証が必要
最後に、今回使ったシミュレーターをもう一度紹介します:
▶ 正規分布 計算機 — ブラウザで即動作、登録不要
平均や標準偏差をスライダーで動かしながら、確率密度や累積確率がリアルタイムに変化する様子を体感してください。数式とコードで理解した知識が、視覚的に定着すること間違いなしです。
NovaSolverでは1,600以上の工学シミュレーターを無料公開中 👉 一覧はこちら
「正規分布は統計学の基礎」——でも、基礎をちゃんと理解している人は意外と少ない。今日の記事で、あなたはその「ちゃんと理解した側」に一歩近づきました。