二項分布
二項分布のおさらい
第7回で学んだ二項分布の復習です。「コインを10回投げてk回表が出る確率」のように、「成功確率 の試行を 回繰り返してちょうどk回成功する確率」の公式でした:
今回はその性質——「平均的に何回成功するか」「どのくらいバラつくか」をより深く掘り下げます。
平均と分散
のとき:
「10回やって成功確率30%なら、平均3回成功する」——当たり前に思える式ですが、これが数学的に証明できます。
証明のアイデア: (各回の成功を1、失敗を0とする確率変数の和)として考える。
「1回の試行」を表す各 は 、 のベルヌーイ分布——「成功か失敗かの2択」です。
前回学んだ期待値・分散の足し算の性質を使えば:
(独立な確率変数の和の分散は各分散の和)
ガルトンボード(プリンコ)シミュレーション
ガルトンボードは、ボールが釘に当たるたびに左右どちらかに落ちる装置です。「パチンコ台を縦にしたようなもの」——テレビゲームやバラエティ番組で見たことがあるかもしれません。これは二項分布の物理的な実演です。
- ボールが釘に当たるたびに確率 1/2 で左または右に進む
- n 段の釘を通過すると、最終的な位置の分布が に従う
ボールが積み重なるにつれて、真ん中が高く両端が低い「山型」の分布が現れてきます。
var ROWS = 8;
var balls = [];
var bins = [];
var maxBin = 0;
var spawnTimer = 0;
for (var b = 0; b <= ROWS; b++) bins.push(0);
var pegX = [];
var pegY = [];
for (var row = 0; row < ROWS; row++) {
for (var col = 0; col <= row; col++) {
pegX.push(W / 2 + (col - row / 2) * 44);
pegY.push(50 + row * 28);
}
}
function spawnBall() {
balls.push({
x: W / 2 + (Math.random() - 0.5) * 4,
y: 18,
vx: 0,
vy: 0,
row: 0,
col: 0,
done: false,
color: 'hsl(' + Math.floor(Math.random() * 360) + ',70%,60%)'
});
}
function loop() {
ctx.clearRect(0, 0, W, H);
spawnTimer += 0.016;
if (spawnTimer > 0.18 && balls.length < 60) {
spawnBall();
spawnTimer = 0;
}
for (var r = 0; r < ROWS; r++) {
for (var c = 0; c <= r; c++) {
var px = W / 2 + (c - r / 2) * 44;
var py = 50 + r * 28;
ctx.fillStyle = '#475569';
ctx.beginPath();
ctx.arc(px, py, 4, 0, Math.PI * 2);
ctx.fill();
}
}
for (var i = balls.length - 1; i >= 0; i--) {
var ball = balls[i];
if (ball.done) continue;
ball.vy += 0.25;
ball.y += ball.vy;
ball.x += ball.vx;
var nextRowY = 50 + ball.row * 28;
if (ball.y >= nextRowY && ball.row < ROWS) {
var go = Math.random() < 0.5 ? -1 : 1;
ball.col += (go === 1) ? 1 : 0;
ball.vx = go * 1.5;
ball.vy = 1;
ball.row++;
ball.y = nextRowY;
}
var floorY = 50 + ROWS * 28 + 10;
if (ball.y >= floorY) {
var binIdx = ball.col;
bins[binIdx]++;
if (bins[binIdx] > maxBin) maxBin = bins[binIdx];
balls.splice(i, 1);
continue;
}
ctx.fillStyle = ball.color;
ctx.beginPath();
ctx.arc(ball.x, ball.y, 6, 0, Math.PI * 2);
ctx.fill();
}
var binFloor = 50 + ROWS * 28 + 14;
var binW = 38;
for (var j = 0; j <= ROWS; j++) {
var bx = W / 2 + (j - ROWS / 2) * 44;
var bh = maxBin > 0 ? (bins[j] / maxBin) * 100 : 0;
ctx.fillStyle = '#3b82f6';
ctx.fillRect(bx - binW / 2, binFloor, binW, bh);
ctx.strokeStyle = '#1e2940';
ctx.lineWidth = 1;
ctx.strokeRect(bx - binW / 2, binFloor, binW, bh);
ctx.fillStyle = '#94a3b8';
ctx.font = '10px monospace';
ctx.textAlign = 'center';
ctx.fillText(j, bx, binFloor + bh + 14);
if (bins[j] > 0) {
ctx.fillStyle = '#e2e8f0';
ctx.font = '9px monospace';
ctx.fillText(bins[j], bx, binFloor + bh - 3);
}
}
var total = 0;
for (var b2 = 0; b2 <= ROWS; b2++) total += bins[b2];
ctx.fillStyle = '#e2e8f0';
ctx.font = 'bold 13px sans-serif';
ctx.textAlign = 'center';
ctx.fillText('ガルトンボード n=8段 p=0.5', W / 2, 16);
ctx.fillStyle = '#94a3b8';
ctx.font = '12px sans-serif';
ctx.fillText('総ボール数: ' + total + ' → 分布は B(8, 0.5) に近づく', W / 2, 388);
requestAnimationFrame(loop);
}
loop(); 二項分布の形
p の値によって分布の形が変わります——「成功しにくいほど左に山ができ、成功しやすいほど右に山ができる」という直感と一致します:
| 形状 | |
|---|---|
| 左右対称 | |
| 右に歪む(低いkに集中) | |
| 左に歪む(高いkに集中) | |
| が大きい | 正規分布に近づく(中心極限定理) |
二項分布の正規近似
が大きく が 0 でも 1 でもないとき、二項分布は正規分布で近似できます(第11回で詳しく学ぶ)。「10回の試行」では離散的なバーチャートでも、「1000回の試行」では滑らかな山型になってくる——これが正規近似の直感です:
目安: かつ が満たされるとき良い近似になります。
実用例
例1: 製品の不良率が 3%。100個生産して、ちょうど 3 個が不良品になる確率は?
例2: 打率 0.25 の打者が5打席。0本安打(ノーヒット)の確率は?
「1本もヒットが出ない = 5打席全部失敗」——5回連続で失敗する確率:
4打席に1回ヒットを打つ打者でも、5打数ノーヒットになる確率は約24%——「スランプ」のように見えても偶然の範囲内であることが多いのです。
まとめ
- 二項分布 :n回の独立ベルヌーイ試行の成功回数——「n回中何回成功するか」
- 平均 、分散 ——「np回成功が平均」という直感と一致
- ガルトンボードは二項分布の物理的モデル——「左右ランダムが積み重なって山型に」
- n が大きいとき正規分布で近似可能(, )——「大数の力で滑らかな山型に」
次回はいよいよ確率・統計の主役、正規分布(ガウス分布)を学びます。