オーストラリアで勉強してきたMLデザイナーの口語自由詩

主に、データ分析・機械学習・ベイズ・統計について自由に書く。

ベイズの定理でクッキー問題の確率を計算する

f:id:yukinagae:20171124113049p:plain

TL;DR

ベイズの定理を使って具体的な問題の確率を求めてみましょう。

  • p(A|B)p(B|A) は別物
  • ベイズの定理を使うと、p(B|A) から p(A|B) を求めることができる

クッキー問題(Think Bayes p.3〜p.4参照)

クッキーが入った2つのボウルがあるとします。しかし、それぞれのボウルにはバニラとチョコの2種類のクッキーが異なる数入っています。

  • ボウル1: バニラ(30)/ チョコ(10) = total 40
  • ボウル2: バニラ(20)/ チョコ(20) = total 40

目をつぶってどちらか一つのボウルから1枚のクッキーを無作為に取り出します(どちらのボウルから取ったかはわかりません!)

取り出したクッキーがバニラだった場合、ボウル1からそのクッキーが選ばれた確率はいくらでしょうか??


これは条件付き確率の式で表すと以下のようになります。

p(ボウル1 | バニラ) = [バニラのクッキーという事前情報(事実)がある場合に、それがボウル1から取り出された確率]

これはどのように計算すればよいでしょうか?


ベイズの定理を使わず単純に考えれば、2つのボウルを足し合わせて、その中からボウル1のバニラが取り出される確率を求めることができそうです。

p(ボウル1のバニラ | 2つのボウル) = 30 / (40 + 40) = 30/80 = 3/8

あれ、思ったより確率が低いですね。これは変です。

なぜなら私たちは既にバニラのクッキーを見ていて、ボウル2よりボウル1の方がバニラの数が多いので、直感的にボウル1から取り出されたのではないかと推測しているはずです。ですので、最低でも1/2以上の確率があるように直感的に思えます。

また、バニラとボウル1を逆した場合(=ボウル1からバニラを取り出す確率)の p(バニラ | ボウル1) は簡単に計算できます。

p(バニラ | ボウル1) = 30 / 40 = 3/4

しかし、残念ながら p(ボウル1 | バニラ)p(バニラ | ボウル1) は同じではありません。バニラを見てからどちらのボウルから取り出されたかという確率と、ボウル1からどちらの種類のクッキーが取り出されるかという確率は、本質的に異なります。(段々ややこしくなってきますが、この点を理解するのが大事です)

もっと単純に考えると、 p(バニラ | ボウル1) を考える場合にはボウル1のクッキーの数だけ考えればよいことに注意してください。なぜならボウル1からクッキーを取り出すということがわかっていれば、ボウル2にどれだけクッキーが入っていても関係ないからです(当たり前!)。

しかし、バニラのクッキーがどちらのボウルから取り出されたかを考えるには、ボウル1とボウル2の両方のバニラのクッキーの数を考慮する必要があります。ボウル1のバニラが30でボウル2のバニラが20だからと言って、 30 / (30 + 20) = 30/50 = 3/5 というわけではありません。ボウル1とボウル2それぞれのチョコの数も考慮する必要があります。例えば、ボウル1のチョコが1,000個だと仮定した場合、ボウル1からバニラが選ばれる確率はかなり低いように思えるからです。

p(A|B)p(B|A) とは別の確率ということを理解した上、ここでベイズの定理の出番です。

ベイズの定理

 p(A|B) = \dfrac{p(A)p(B|A)}{p(B)}

ベイズの定理とは簡単に言ってしまうと、 p(B|A) から p(A|B) を求める方法です。クッキーの例で考えれば、 p(バニラ | ボウル1) から p(ボウル1 | バニラ) を求めることができるということです。

ベイズの定理の式をクッキーの例に適用してみましょう。

 p(ボウル1|バニラ) = \dfrac{p(ボウル1) \times p(バニラ|ボウル1)}{p(バニラ)}

一つずつ計算してみましょう。まずは p(ボウル1) です。これは2つのボウルからボウル1が選ばれる確率なので単純に1/2となります。

p(ボウル1) = [2つのボウルからボウル1が選ばれる確率] = 1/2

では、 p(バニラ|ボウル1) はどうでしょうか。既に前の説明で計算してしまいましたが再掲します。

p(バニラ | ボウル1) = [ボウル1のバニラの数] / [ボウル1のクッキーの数] = 30 / 40 = 3/4

最後に p(バニラ) です。これはどちらのボウルか関係なく、とにかくバニラが選ばれる確率です。

p(バニラ) = [全てのバニラの数] / [全てのクッキーの数] = (30 + 20) / (40 + 40) = 50/80 = 5/8

ではこれを全て組み合わせてみましょう。

 p(ボウル1|バニラ) = \dfrac{(1/2) \times (3/4)}{5/8} = 3/5

ふむ、なんとなく1/2よりは高い確率だと思っていたので直感的には合っているように見えます。とにかくクッキー問題をベイズの定理で解けたのでOKとしましょう。

# pythonで念のため計算
((1/2) * (3/4)) / (5/8) # => 0.6(3/5)

参考資料

  • 書籍: Think Bayes - 日本語で読める(有料)
  • Website: Think Bayes - pdfもhtmlもあるけど英語(無料)