回 4-3 分野 4 場合の数と確率
条件付き確率 P(A|B) は、B が起きたと分かったうえで A が起きる確率で、P(A|B) = P(A かつ B) ÷ P(B) で出します。かかっている人が 1% の病気を、感度 99%、特異度 99% の検査で調べると、陽性の人のうち本当にかかっている人は 50% です。1 万人で数えると、陽性は本当の 99 人と、誤りの 99 人だからです。
条件付き確率とベイズの定理を、1 万人の表を Python で数えた数と、式で出した数の両方で確かめます。
文 ゆめさくコード編集部公開 2026年10月30日更新 2026年10月30日出典を確かめた日 2026年10月30日
99% 当たる検査で陽性なら、本当にかかっているのか
かかっている人が 1% の病気を、99% 当たる検査で調べたとします。陽性と出た人のうち、本当にかかっている人は 50% です。99% ではありません。
この食い違いを解くのが、条件付き確率です。「陽性と分かったうえで、かかっている確率」は、「かかっているうえで、陽性と出る確率」と別の数です。2 つを取り違えると、判断が大きく外れます。
迷惑メールの判定、不正な利用の検知、監視の警報も、同じ形をしています。この回では、1 万人の表を Python で数え、式で出した数と同じになるかを確かめます。ここでの病気と検査の数は、計算のための作り話です。
条件付き確率とベイズの定理
B が起きたと分かったうえで A が起きる確率を、条件付き確率と呼び、P(A|B) と書きます。縦の線の右が「分かっていること」、左が「知りたいこと」です。
P(A|B) = P(A かつ B) ÷ P(B)
全部の場合から、B が起きた場合だけに絞り、その中で A も起きている割合を出す、という意味です。どの場合も同じくらい起こるなら、(A かつ B の数) ÷ (B の数) と数でも出せます。P(B) が 0 のときは、絞った先に何も無いので決まりません。
サイコロで、偶数が出たと分かったうえで 4 以上の確率は、偶数の 2、4、6 のうち 4 以上が 4 と 6 なので 2/3 です。
どんな問題で条件付き確率を使うか
問題文に次の言い方があれば、条件付き確率です。
- 「〜と分かったとき」「〜だったとき」
- 「〜のうち」「〜の中で」
- 「〜という条件のもとで」
どれも、全体を「分かったこと」に絞ってから割合を出せ、という意味です。上のサイコロなら、「偶数が出たと分かったとき」で全体が 6 通りから 3 通りに縮み、その中で 4 以上を数えます。
乗法定理と独立
式を書き換えると、A と B が両方起きる確率が出ます。
P(A かつ B) = P(B) × P(A|B)
これを乗法定理と呼びます。P(B) が 0 でないとき、B が起きても起きなくても A の確率が変わらない、つまり P(A|B) = P(A) なら、A と B は独立と言います。独立なら P(A かつ B) = P(A) × P(B) です。サイコロを 2 回振る 1 回目と 2 回目は独立です。
1 万人の表で数える
検査の良さを表す数は 2 つあります。感度は、かかっている人を陽性と出す割合です。特異度は、かかっていない人を陰性と出す割合です。「精度 99%」と 1 つだけ言われたら、どちらの数かを確かめます。
有病率 1%、感度 99%、特異度 99% で、1 万人を表にします。
| 陽性 | 陰性 | 合計 |
|---|
| かかっている | 99 | 1 | 100 |
|---|
| かかっていない | 99 | 9,801 | 9,900 |
|---|
| 合計 | 198 | 9,802 | 10,000 |
|---|
かかっていない 9,900 人の 1% にあたる 99 人が、誤って陽性と出ます (偽陽性)。陽性 198 人のうち本当にかかっているのは 99 人で、99 ÷ 198 = 50% です。
ベイズの定理
表で数えたことを式にしたのが、ベイズの定理です。
P(A|B) = P(B|A) × P(A) ÷ P(B)
P(B) は、A のときと A でないときに分けて足します (全確率の定理)。
P(B) = P(B|A) × P(A) + P(B|A でない) × P(A でない)
検査なら、A が「かかっている」、B が「陽性」です。P(陽性) = 0.99 × 0.01 + 0.01 × 0.99 = 0.0198 で、P(かかっている|陽性) = 0.99 × 0.01 ÷ 0.0198 = 0.5 です。
P(A) を事前確率 (調べる前の見込み)、P(A|B) を事後確率 (結果を見たあとの見込み) と呼びます。ベイズの定理は、結果を見て見込みを更新する式です。
動かして確かめる
1 本目は、1 万人を 1 人ずつ並べて、表のマスごとに数えます。人の並びは、決まった割合どおりに作ります (乱数は使いません)。
動かす 1 万人を数えて表を作る
実行すると、次の通りに出ます
人数 10000
(True, True) 99
(False, True) 99
陽性 198
陽性で本当に 0.5
陽性の人だけに絞る (全体が「陽性」に縮む) と 198 人で、そのうち本当にかかっているのは 99 人、割合は 0.5 です。
2 本目は、ベイズの定理の式で同じ数を出し、有病率を変えます。Fraction は分数を誤差なしで持つ型です。
動かす 有病率を変えてベイズの定理で出す
実行すると、次の通りに出ます
有病率 1/1000 11/122 0.090
有病率 1/100 1/2 0.500
有病率 1/10 11/12 0.917
有病率 1/2 99/100 0.990
有病率 1/100 のとき 1/2 で、表と同じです。有病率が 1/1000 だと陽性の人の約 9% しか本当にかかっておらず、1/2 (50%) だと 99% です。同じ検査でも、調べる前の見込みで答えが大きく変わります。
3 本目は、陽性の人にもう一度、別の検査をしたときです。1 回目の答え 50% を、2 回目の事前確率にします。かかっているかどうかが同じなら、1 回目の結果は 2 回目の結果に影響しない (条件付きで独立) と仮定します。
動かす 2 回続けて陽性なら
実行すると、次の通りに出ます
1 回陽性 1/2 0.5000
2 回陽性 99/100 0.9900
3 回陽性 9801/9802 0.9999
1 回目で 50%、2 回目で 99%、3 回目で約 99.99% です。結果を見るたびに見込みを更新するのが、ベイズの考え方です。
4 本目は、乱数で確かめます。3 つの扉の 1 つに当たりがあり、1 つ選んだあとで、司会者が残りの外れの扉を 1 つ開けます。選び直すと得かどうかを、1 万回試します。モンティ・ホール問題と呼ばれる、条件付き確率の有名な問題です。種 (seed) を決めておくと、何度動かしても同じ結果が出ます。
動かす モンティ・ホール問題を 1 万回試す
実行すると、次の通りに出ます
そのまま 0.3332
選び直す 0.6668
そのままだと約 1/3、選び直すと約 2/3 です。最初の選び方が当たっている確率は 1/3 のままで、司会者が外れを開けたという条件で、残りの扉に 2/3 が移ります。
条件付き確率で外れる所
P(A|B) と P(B|A) を取り違える
「かかっている人の 99% が陽性」と「陽性の人の 99% がかかっている」は別の文です。前者は P(陽性|かかっている) で、後者は P(かかっている|陽性) です。上の例では前者が 99%、後者が 50% でした。報告やダッシュボードで「検知率 99%」と書くときは、どちらの向きかを書き添えます。
元の起こりやすさを忘れる
検査の感度と特異度だけを見て、有病率を見落とすと、答えが大きく外れます。この見落としは「基準率の無視」と呼ばれます。めったに起きない事を探す仕組みほど、陽性のうち誤りの割合が増えます。
独立と決めつける
3 本目のコードは、かかっているかどうかが同じなら、2 回の検査の結果は互いに関係しない (条件付きで独立) と仮定しました。同じ理由で誤る検査を 2 回しても、確率は掛け算のとおりには下がりません。独立かどうかは、データで確かめるまで仮定です。
条件の確率が 0
P(B) = 0 のとき、P(A|B) は決まりません。Python の整数や Fraction で割り算をすると、0 で割るエラー (ZeroDivisionError) になります。NumPy の小数の配列では、エラーではなく nan (数でない値) と警告になり、気付きにくくなります。データで数えるときは、条件に合う件数が 0 の場合を先に分けます。
仕事でどう使うか
条件付き確率とベイズの定理を使う場面は、次の通りです。
- 迷惑メールの判定。「当選」のような語が入っているという条件で、迷惑メールである確率を出す。迷惑メールかどうかが決まれば語どうしは関係しない (条件付きで独立) と見て、語ごとの確率を掛け合わせる方法を、ナイーブベイズと呼ぶ
- 監視の警報と不正の検知。めったに起きない障害や不正を探すと、警報の多くが誤報になる。1 万件の表を作り、警報のうち本物の割合を先に見積もる
- 機械学習の評価。陽性と出した物のうち本当に陽性の割合 (適合率) と、本当の陽性のうち陽性と出せた割合 (再現率) は、条件付き確率の向きの違いそのもの
- A/B テストとベイズ統計。結果を見るたびに、施策が効いている見込みを更新する
- 推薦。この商品を買った人が、別の商品も買う確率を出す
試験の形で練習するなら、統計検定 2 級の練習問題で、検査の陽性の問題を含む、出題範囲の全体から選んだ問題を 4 択で解けます。この回は表とコードで考え方を確かめる回で、練習問題と同じ問題は繰り返していません。
よくある問い
条件付き確率の公式はどう覚えればいいですか
「分かっている方で割る」と覚えます。P(A|B) は B が分かっているので、P(A かつ B) を P(B) で割ります。表で考えるなら、B の行か列だけを残し、その中で A の割合を出します。
P(A かつ B) と P(A|B) の違いは何ですか
P(A かつ B) は、全部の中で A と B が両方起きる割合です。P(A|B) は、B が起きた物だけの中で A が起きる割合です。検査の例では、P(かかっていて陽性) は 1 万人中 99 人で 0.0099、P(かかっている|陽性) は陽性 198 人中 99 人で 0.5 です。
くじを引く順番で当たる確率は変わりますか
変わりません。10 本中 3 本が当たりのくじを、A、B の順に戻さずに引くとき、B が当たる確率は、A が当たった場合と外れた場合に分けて 3/10 × 2/9 + 7/10 × 3/9 = 27/90 = 3/10 です。前の人の結果を知らなければ、どの順番でも同じです。前の人の結果を知ったあとなら、条件付き確率に変わります。
ベイズの定理は何の役に立ちますか
「原因から結果」の確率は分かっていて、「結果から原因」の確率を知りたいときに使います。検査なら、かかっている人が陽性と出る確率は分かっていて、陽性の人がかかっている確率を知りたい、という場面です。
2 枚のコインで少なくとも 1 枚が表なら、2 枚とも表の確率は
表と裏が同じ確率で、2 枚が互いに関係しないとすると、1/3 です。2 枚の出方は (表, 表)、(表, 裏)、(裏, 表)、(裏, 裏) の 4 通りで、「少なくとも 1 枚が表」に絞ると (裏, 裏) を除いた 3 通りが残り、そのうち 2 枚とも表は 1 通りだからです。「1 枚目が表と分かった」なら、残りは 2 枚目の出方だけなので 1/2 です。どちらの条件で絞ったかで答えが変わります。
「2 人の子のうち少なくとも 1 人が男の子なら、2 人とも男の子の確率は」も、男女が同じ確率で、2 人が互いに関係しないとすれば、同じ形で 1/3 です。「上の子が男の子と分かった」なら 1/2 です。
確認クイズ
答えだと思う選択肢を押すと、その場で正誤と理由が開きます。3 問すべてに正しく答えると、この回は修了で、石が緑に変わります (この端末のブラウザに残ります)。間違えた問いは、あとから解き直せます。
1 問目
有病率 1%、感度 99%、特異度 99% の検査で陽性と出ました。本当にかかっている確率に一番近いのはどれですか。
2 問目
P(A|B) = P(A) が成り立つとき、正しいのはどれですか。
3 問目
1000 通のメールのうち、「当選」の語が入っている物で、迷惑メールの割合を出します。このコードを動かすと何が出ますか。
# 1000 通のうち迷惑メール 200
# 「当選」入りの迷惑 120 通
# 「当選」入りの普通 40 通
spam_word = 120
ham_word = 40
print(spam_word /
(spam_word + ham_word))
説明課題
「99% 当たる検査で陽性と出ても、本当にかかっている確率が 50% になることがある理由」を、1 万人の表の数を使って 3 文で説明してください。書いたら、下の模範解答を開いて比べてください。
模範解答
自分の説明を書いてから開いて、比べてください。
有病率 1% なら、1 万人のうちかかっているのは 100 人で、そのうち 99 人が陽性と出る。かかっていない 9,900 人のうち 1% の 99 人も、誤って陽性と出る。陽性の 198 人のうち本当にかかっているのは 99 人なので、確率は 50% になる。
警報や判定の「当たった割合」を、元の起こりやすさから出せると、誤報だらけの仕組みを作る前に気付けます。いまの自分が転職までの道のどの段にいるかは、転職診断で確かめられます。
もっと深く
この回の続きを、ゆめさくのコースの章や道具で深められます。頁の中の確認クイズに答えたあと、手を動かす量を増やしたいときに使ってください。
一次資料
どれも 2026年10月30日に開いて、題と中身を確かめました。