値の集まり方を形で見る
分布は、データの値がどのあたりに多く、どのあたりに少ないかを表した形です。二項分布と正規分布を読めれば、「どれくらい起こりうるか」という多くの問いに答えられます。
貸し自転車の店は、1週間に忙しい日が何日あるか、1日の貸出台数がどのあたりに集まるかを知りたいのです。
このレッスンのゴール
メモ
二項分布と正規分布を使って、ある結果が起こる確率を言うことができる。
キーワード
| ことば | いみ | れい |
|---|---|---|
| 分布 | 値ごとの、起こりやすさの並び | |
| 二項分布 | 成功か失敗かの試行をくり返したときの、成功の回数の分布 | |
| 組み合わせの数 | n回の中からk回を選ぶ、選び方の数 | 5日から2日で10通り |
| 正規分布 | 平均を中心とした、左右対称の釣り鐘形の分布 | |
| 経験則 | 平均から標準偏差1つ分以内に約68%、2つ分以内に約95% | |
| z得点 | 平均から標準偏差いくつ分離れているかを表す数 |
学生が入力するセルは、このプレビューでは空白です。
回数を数えると二項分布になる
毎回、成功か失敗かだけで、成功の確率が同じ試行を、n回くり返します。成功の回数がしたがう分布が二項分布です。
忙しい日の確率を、計算しやすいように0.4とします。3日のうち忙しい日が何日になるかを、場合分けして数えます。
例: 3日のうち忙しい日の数
| 忙しい日数 | 選び方 | 1通りの確率 | 確率 |
|---|---|---|---|
| 0 | 1 | 0.6 × 0.6 × 0.6 = 0.216 | 0.216 |
| 1 | 3 | 0.4 × 0.6 × 0.6 = 0.144 | 0.432 |
| 2 | 3 | 0.4 × 0.4 × 0.6 = 0.096 | 0.288 |
| 3 | 1 | 0.4 × 0.4 × 0.4 = 0.064 | 0.064 |
| 合計 | 8 | 1 |
学生が入力するセルは、このプレビューでは空白です。
選び方の数は掛けて割れば出る
n日からk日を選ぶ選び方の数を、組み合わせの数と言います。5日から2日なら、5 × 4 ÷ (2 × 1) で10通りです。
ちょうどk日の確率は、選び方の数に、0.4をk回かけたものと、0.6を残りの回数かけたものをかけて求めます。5日のうち2日なら、10 × 0.16 × 0.216 で0.3456です。
5日の確率を全部出す
docker exec jupyter python3 -c "import math; print([round(math.comb(5, k) * 0.4 ** k * 0.6 ** (5 - k), 4) for k in range(6)])"ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
二項分布を関数で出す
# 5日のうち、ちょうど k 日が忙しい確率です。
def choose(n, k):
ways = 1
for i in range(k):
ways = ways * (n - i) // (i + 1)
return ways
def exactly(n, k, p):
return choose(n, k) * p ** k * (1 - p) ** (n - k)
for k in range(6):
print(k, "日:", round(exactly(5, k, 0.4), 4))
# p を 0.4 から 0.5 に変えて、もう一度実行してください。
# いちばん高い確率はどの日数に動きますか。
釣り鐘形が正規分布
身長やテストの点のように、平均のまわりに多く集まり、左右にほぼ対称に減っていく分布を正規分布と呼びます。形は平均と標準偏差だけで決まります。
平均から標準偏差1つ分以内に約68%、2つ分以内に約95%が入ります。これが経験則です。
経験則の目安
| 範囲 | 入る割合の目安 |
|---|---|
| 平均 ± 標準偏差 1つ分 | 約68% |
| 平均 ± 標準偏差 2つ分 | 約95% |
| 平均 ± 標準偏差 3つ分 | 約99.7% |
学生が入力するセルは、このプレビューでは空白です。
貸出の日数が経験則に合うか
docker exec jupyter python3 -c "import csv, statistics as s; h = [int(r['hires']) for r in csv.DictReader(open('hires.csv'))]; m = s.mean(h); d = s.pstdev(h); print(sum(1 for x in h if abs(x - m) <= d), sum(1 for x in h if abs(x - m) <= 2 * d), len(h))"ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
z得点は標準偏差の個数
平均からの差を、標準偏差の個数で表した数がz得点です。値から平均を引き、標準偏差で割って求めます。
平均を270台、標準偏差を80台とします。350台の日は平均より80台多く、ちょうど標準偏差1つ分なので、z得点は1です。
例: 貸出台数とz得点
| 貸出台数 | 平均との差 | z得点 |
|---|---|---|
| 190 | -80 | -1 |
| 270 | 0 | 0 |
| 350 | 80 | 1 |
| 430 | 160 | 2 |
学生が入力するセルは、このプレビューでは空白です。
週ごとの忙しい日数を数える
docker exec jupyter python3 -c "import csv; rows = list(csv.DictReader(open('hires.csv'))); b = [int(r['hires']) >= 300 for r in rows]; weeks = [sum(b[i:i + 7]) for i in range(0, 364, 7)]; print([weeks.count(k) for k in range(8)])"ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
週ごとの忙しい日数と予想
| 忙しい日数 | 実際の週 | 二項分布の予想 |
|---|---|---|
| 0 | 11 | 2.3 |
| 1 | 12 | 9.1 |
| 2 | 6 | 15.2 |
| 3 | 6 | 14.2 |
| 4 | 6 | 8.0 |
| 5 | 3 | 2.7 |
| 6 | 6 | 0.5 |
| 7 | 2 | 0.0 |
学生が入力するセルは、このプレビューでは空白です。
よくある間違い
注意
多くの人は、二項分布がどんな回数にも当てはまると考えます。成功の確率が毎回同じで、毎回が独立のときだけです。寒い週は忙しい日が少なく、暑い週は多いので、表のように実際は両端に偏ります。
さらに挑戦: 週末だけで経験則
ノートブックで、土日の日だけを取り出してください。平均から標準偏差1つ分以内と、2つ分以内に入る日の割合を求めます。
経験則の68%と95%に近いでしょうか。近い、または遠いと言える理由を、一文で書きましょう。