反復試行と二項定理
反復試行とは
「コインを10回投げたら、何回表が出るだろう?」——必ず5回ではありませんよね。3回のこともあれば7回のこともある。では「ちょうど5回出る確率」「3回以上出る確率」はどうやって計算するのでしょう。
この「同じ試行を何度も独立に繰り返す」ことを反復試行といいます。「前回の結果が次回に影響しない(独立)」のが大前提です。
典型例:
- コインを n 回投げる
- サイコロを n 回振る
- 製品を n 個抜き取り検査する
二項分布の導出
「成功確率が の試行を 回繰り返したとき、ちょうど 回成功する確率」を求めます。
Step 1:特定パターンの確率を計算する
たとえば5回中「成功・成功・失敗・成功・失敗(SSFSS)」という特定の順番で起きる確率は?各回は独立なので、単純に掛け算します——成功確率 をk回、失敗確率 を残り回数分だけ掛けるだけです:
Step 2:そのパターンが何通りあるかを数える
「5回のうちどの3回が成功か」——順番は関係なく「成功する回を選ぶ組み合わせ」は 通りあります。
この2つを掛け合わせると:
これを二項分布の確率質量関数(PMF)といいます。 と書きます。
確率の総和が1になる確認
「全部の確率を足したら1になる」——当然そうなるはずですが、計算で確認できます。ここで登場するのが二項定理です。
、 と置いてみると:
これが「二項定理」 そのものです!——「二項分布と二項定理は同じ構造をしている」ことが、名前の由来です。
二項分布バーチャートデモ
マウスを左右に動かして を変えながら、分布の形の変化を観察してください。p=0.5のとき山が真ん中に来て左右対称になり、pが小さいと山が左に、大きいと山が右に偏る様子を確認できます。
function fact(n) {
var f = 1;
for (var i = 2; i <= n; i++) f *= i;
return f;
}
function C(n, r) {
if (r < 0 || r > n) return 0;
return fact(n) / (fact(r) * fact(n - r));
}
function loop() {
ctx.clearRect(0, 0, W, H);
var n = 10;
var p = 0.05 + (mx / W) * 0.9;
p = Math.max(0.05, Math.min(0.95, p));
var probs = [];
var maxP = 0;
for (var k = 0; k <= n; k++) {
var pk = C(n, k) * Math.pow(p, k) * Math.pow(1 - p, n - k);
probs.push(pk);
if (pk > maxP) maxP = pk;
}
var barW = 40;
var gap = (W - (n + 1) * barW) / (n + 2);
var barAreaY = 50;
var barAreaH = 220;
var modeK = 0;
for (var k = 0; k <= n; k++) {
if (probs[k] > probs[modeK]) modeK = k;
}
for (var k = 0; k <= n; k++) {
var bx = gap + k * (barW + gap);
var bh = (probs[k] / maxP) * barAreaH;
var by = barAreaY + barAreaH - bh;
var hue = 220 - k * 20;
ctx.fillStyle = k === modeK ? '#f59e0b' : '#3b82f6';
ctx.fillRect(bx, by, barW, bh);
ctx.fillStyle = '#e2e8f0';
ctx.font = '11px monospace';
ctx.textAlign = 'center';
ctx.fillText('k=' + k, bx + barW / 2, barAreaY + barAreaH + 16);
ctx.fillStyle = '#94a3b8';
ctx.font = '10px monospace';
ctx.fillText((probs[k] * 100).toFixed(1), bx + barW / 2, barAreaY + barAreaH + 30);
}
var mean = n * p;
var stddev = Math.sqrt(n * p * (1 - p));
ctx.fillStyle = '#e2e8f0';
ctx.font = 'bold 14px sans-serif';
ctx.textAlign = 'left';
ctx.fillText('B(n=10, p=' + p.toFixed(2) + ')', 20, 28);
ctx.fillStyle = '#94a3b8';
ctx.font = '13px monospace';
ctx.fillText('平均 np = ' + mean.toFixed(2), 20, 298);
ctx.fillText('標準偏差 = ' + stddev.toFixed(2), 220, 298);
requestAnimationFrame(loop);
}
loop(); 数値例
例題: コインを10回投げて表が5回出る確率は?()
「ちょうど5回」という一つのパターンに固執しているので、実は思ったよりも確率は高くありません:
約 24.6%——「半分くらい出てほしいのに4回に1回しかちょうど5回にならない」のが現実です。 の近くに確率が分散しているのです。
例題: 打率 0.3 の打者が4打数のとき、ちょうど2本ヒットになる確率は?
「4打席のうちどの2打席がヒットか」の組み合わせ 通り × 各パターンの確率:
二項分布の平均と分散
「n回やって成功確率pなら、平均何回成功するか?」——直感と一致する答えが出ます:
のとき、
例: なら 、
「100回やって平均30回成功、実際には25〜35回くらいの範囲に収まることが多い」——この が「ばらつきの目安」になります。
累積二項分布
「k 回以下の成功」の確率(CDF)——「ちょうどk回」ではなく「k回以下」を知りたいときは足し算します:
実用例: 打率 0.3 の打者が10打数で3本以上ヒットを打つ確率は?
「3本以上」を直接計算するより、「2本以下」を計算して1から引く余事象の戦略が楽です:
打率3割の打者でも、10打数で3安打以上打てる確率は約62%——「打率」という数字が実際の打席でどう現れるかの現実感が掴めます。
まとめ
- 二項分布 :n回の独立な試行でk回成功する確率——「掛け算 × 組み合わせ数」の構造
- (二項定理と同じ構造)
- 平均 、分散 ——「np回成功するのが平均」という直感と一致
- のとき左右対称、 なら右に歪む、 なら左に歪む——「成功しにくいほど少ない回数側に山ができる」
次回は確率変数と期待値——確率の「重み付き平均」という概念を深く掘り下げます。