確率変数と期待値
確率変数とは
「サイコロを振ったら何が出るか?」——振ってみるまで分かりません。でも「1から6のどれか」は分かっている。このように「結果に応じて数値が決まるが、事前には確定していない変数」を確率変数(random variable)といいます。大文字 で表し、具体的な値を小文字 で表します。
例:
- サイコロを投げたときの目 :
- コインを10回投げたときの表の回数 :
確率分布
確率変数 の各値がどんな確率で起こるかを表にしたものが確率分布です。「どの値が何%の確率で現れるか」を一覧にしたもの——確率変数の「自己紹介書」とも言えます。
サイコロ(公正なサイコロ)の確率分布:
| 1 | 2 | 3 | 4 | 5 | 6 | |
|---|---|---|---|---|---|---|
| 1/6 | 1/6 | 1/6 | 1/6 | 1/6 | 1/6 |
条件:——「どれかは必ず起こる」ので全部の確率を足すと1になります。
期待値 E[X]
「サイコロを100回振ったら、出た目の平均はどのくらいになるか?」——これを事前に計算できるのが期待値です。「確率で重み付けした平均値」という意味で、高い確率で起きる値を重く、低い確率の値を軽く扱います:
サイコロの期待値:
「平均的には 3.5 の目が出る」——ただし 3.5 という目は実際には存在しません。期待値は長期的な平均の予測値です。
サイコロ期待値シミュレーション
クリックするとサイコロが転がります。最初はバラバラな平均値が、回数を重ねるにつれて理論値 3.5 に近づいていく「大数の法則」を体感してください。
var rolls = [];
var runningAvg = [];
var lastRoll = 0;
var animDie = 0;
var rolling = false;
var rollTimer = 0;
document.addEventListener('click', function() {
if (!rolling) {
rolling = true;
rollTimer = 0;
}
});
function doRoll() {
var r = Math.floor(Math.random() * 6) + 1;
rolls.push(r);
var sum = 0;
for (var i = 0; i < rolls.length; i++) sum += rolls[i];
runningAvg.push(sum / rolls.length);
lastRoll = r;
}
function drawDieFace(x, y, size, value) {
ctx.fillStyle = '#f8fafc';
ctx.beginPath();
ctx.roundRect(x - size / 2, y - size / 2, size, size, 8);
ctx.fill();
ctx.strokeStyle = '#334155';
ctx.lineWidth = 2;
ctx.beginPath();
ctx.roundRect(x - size / 2, y - size / 2, size, size, 8);
ctx.stroke();
var dots = {
1: [[0, 0]],
2: [[-0.3, -0.3], [0.3, 0.3]],
3: [[-0.3, -0.3], [0, 0], [0.3, 0.3]],
4: [[-0.3, -0.3], [0.3, -0.3], [-0.3, 0.3], [0.3, 0.3]],
5: [[-0.3, -0.3], [0.3, -0.3], [0, 0], [-0.3, 0.3], [0.3, 0.3]],
6: [[-0.3, -0.35], [0.3, -0.35], [-0.3, 0], [0.3, 0], [-0.3, 0.35], [0.3, 0.35]]
};
var pattern = dots[value] || dots[1];
ctx.fillStyle = '#1e293b';
for (var d = 0; d < pattern.length; d++) {
ctx.beginPath();
ctx.arc(x + pattern[d][0] * size, y + pattern[d][1] * size, size * 0.1, 0, Math.PI * 2);
ctx.fill();
}
}
function loop() {
ctx.clearRect(0, 0, W, H);
rollTimer += 0.016;
if (rolling) {
if (rollTimer < 0.8) {
animDie = Math.floor(Math.random() * 6) + 1;
} else {
doRoll();
rolling = false;
rollTimer = 0;
animDie = lastRoll;
}
}
var showDie = rolling ? animDie : (lastRoll || 1);
drawDieFace(80, 90, 80, showDie);
ctx.fillStyle = '#e2e8f0';
ctx.font = 'bold 14px sans-serif';
ctx.textAlign = 'center';
ctx.fillText('現在の目: ' + (lastRoll || '-'), 80, 160);
var n = rolls.length;
var avg = n > 0 ? runningAvg[n - 1].toFixed(3) : '-';
ctx.fillStyle = '#fbbf24';
ctx.font = 'bold 14px sans-serif';
ctx.fillText('累積平均: ' + avg, 80, 180);
ctx.fillStyle = '#94a3b8';
ctx.font = '12px sans-serif';
ctx.fillText('試行数: ' + n, 80, 198);
var chartX = 170, chartY = 30, chartW = 400, chartH = 220;
ctx.strokeStyle = '#334155';
ctx.lineWidth = 1;
ctx.strokeRect(chartX, chartY, chartW, chartH);
ctx.strokeStyle = '#fbbf24';
ctx.lineWidth = 1.5;
ctx.setLineDash([5, 3]);
var theorY = chartY + chartH - (3.5 / 6) * chartH;
ctx.beginPath();
ctx.moveTo(chartX, theorY);
ctx.lineTo(chartX + chartW, theorY);
ctx.stroke();
ctx.setLineDash([]);
ctx.fillStyle = '#fbbf24';
ctx.font = '11px sans-serif';
ctx.textAlign = 'left';
ctx.fillText('E[X]=3.5', chartX + chartW + 4, theorY + 4);
if (runningAvg.length > 1) {
ctx.strokeStyle = '#3b82f6';
ctx.lineWidth = 2;
ctx.beginPath();
for (var i = 0; i < runningAvg.length; i++) {
var px = chartX + (i / Math.max(runningAvg.length - 1, 1)) * chartW;
var py = chartY + chartH - (runningAvg[i] / 6) * chartH;
if (i === 0) ctx.moveTo(px, py);
else ctx.lineTo(px, py);
}
ctx.stroke();
}
for (var g = 1; g <= 6; g++) {
ctx.strokeStyle = '#1e293b';
ctx.lineWidth = 0.5;
ctx.beginPath();
var gy = chartY + chartH - (g / 6) * chartH;
ctx.moveTo(chartX, gy);
ctx.lineTo(chartX + chartW, gy);
ctx.stroke();
ctx.fillStyle = '#475569';
ctx.font = '10px monospace';
ctx.textAlign = 'right';
ctx.fillText(g, chartX - 3, gy + 4);
}
ctx.fillStyle = '#94a3b8';
ctx.font = '12px sans-serif';
ctx.textAlign = 'center';
ctx.fillText(n === 0 ? 'クリックしてサイコロを転がす' : 'クリックでさらに転がす', W / 2, 300);
ctx.fillStyle = '#e2e8f0';
ctx.font = '13px sans-serif';
ctx.fillText('青線: 累積平均 黄破線: 理論値 E[X]=3.5', W / 2, 320);
requestAnimationFrame(loop);
}
loop(); 期待値の線形性
期待値の最強の性質が「線形性」です——「足し算が期待値の外に出せる」ということです。
「XとYが独立かどうかに関係なく足し算できる」——これは非常に強力な性質です。
例: サイコロを2個投げた目の合計の期待値は?わざわざ36通りの組み合わせを全部計算しなくても:
期待値の応用:ゲームの公平性
「宝くじは買うべきか?」——期待値で答えが出ます。宝くじゲーム:1枚100円で購入。
- 1等(10万円):1/10000 の確率
- 2等(1000円):1/500 の確率
- 外れ(0円):その他
購入費100円に対して期待賞金12円——このゲームの期待値は -88円(不公平なゲーム)。「夢を買う」という意味はあっても、長期的には必ず損をする構造です。
期待値と分散の関係
| 量 | 意味 |
|---|---|
| 分布の「重心」(平均的な値) | |
| 分布の「広がり」(次回学ぶ) |
期待値が「平均的な位置」を教えてくれるなら、分散は「どれくらい散らばっているか」を教えてくれます——二つ合わせて初めて分布の全体像が掴めます。
まとめ
- 確率変数 :試行結果に数値を対応させる変数——「結果が数字になる」
- 期待値 :確率で重み付けした平均——「長期的に何が出るか」
- サイコロの期待値は ——実際には出ない値だが長期平均は に収束
- 線形性:(独立性不要)——「足し算は期待値の外に出せる」
- 期待値を使えば「長期的に得か損か」を判断できる——「賭けの公正さ」の物差し
次回は分散と標準偏差——期待値の周りでどのくらいバラつくかを定量化する指標を学びます。