条件付き確率・ベイズの定理
条件付き確率(conditional probability)
$(X, \mathcal{B}, P)$を確率空間とする。
2つの事象$A \in \mathcal{B}, B \in \mathcal{B}$があり、$P(B) \neq 0$とする。
このとき、
$$ P_B(A) = \frac{P(A \cap B)}{P(B)} $$
を、条件$B$を与えたときの事象$A$の条件付き確率という。$P_B(A)$はまた、$P(A | B)$とも表記する。
事象の独立性(independency)
条件付確率がもとの確率と一致する、すなわち、
$$ P_B(A) = \frac{P(A \cap B)}{P(B)} = P(A) $$
のとき、言い変えると、
$$ P(A \cap B) = P(A)P(B) $$
のとき、事象A, Bは独立であるという。
全確率の公式(law of total probability)
事象の列$\{B_k\}$が、次を充たすとする。
$$ \forall k \in \mathbb{N}; P(B_k) > 0 $$
$$ X = \bigsqcup_{k=1}^{\infty}B_k $$
つまり、$\{B_k\}$は、全事象をMECEに分割し、分割された一つ一つの事象の確率は0ではない。
このとき、任意の事象$A$の確率を次のように表すことができる。
$$ P(A) = \sum_{k=1}^{\infty}P(A|B_k)P(B_k) $$
証明
$$ A = A \cap X = A \cap \bigsqcup_{k=1}^{\infty}B_k = \bigsqcup_{k=1}^{\infty}(A \cap B_k) $$
ゆえに、
$$ P(A) = \sum_{k=1}^{\infty}P(A \cap B_k) = \sum_{k=1}^{\infty}P(A|B_k)P(B_k) $$
Bayesの定理
状況設定は上と同じとする。
すなわち、$\{B_k\}$は、全事象$X$をMECEに分割し、分割された一つ一つの事象の確率は0ではない。
このとき、確率0でない任意の事象$A$について、条件$A$のもとでの$B_j$の条件付き確率$P(B_j|A)$が次のように表せる。
$$ P(B_j|A) = \frac{P(A|B_j)}{\sum_{k=1}^{\infty}P(A|B_k)P(B_k)}P(B_j) $$
証明
右辺の分母は、全確率の公式で示したように、$P(A)$に等しい。そこで分母を払うと、
$$ P(B_j|A) P(A) = P(A|B_j) P(B) $$
これは両辺とも、$P(A \cap B_j)$に等しい。
Bayesの定理の意味
Bayesの定理自体は、条件付き確率の定義をちょっと変形しただけで、定理と言っていいのかよくわからないくらい簡単なものであるが、重要なのはその意味である。
Bayesの定理は、$P(B_j) \rightarrow P(B_j|A)$という変換を示している、と解釈することができる。
つまり、はじめは、何の前提もなかったため$P(B_j)$としか言いようがなかった確率(事前確率)が、$A$であったという情報によって、より精緻な$P(B_j|A)$という確率(事後確率)になる。
その変換は、分母のややこしい式(規格化定数)を除けば、尤度$P(A|B_j)$を掛けることによって行われる、ということをBayesの定理は示している。
スローガン的に書けば、
$$ 事後確率 = k \times 尤度 \times 事前確率 $$
ということである。
Bayesの定理の例
沈没船がある海域に沈んでおり、沈没船を探索したい。 海域は4つの海域A, B, C, Dに分けられており、我々はそれを順次探索していく。 探索が始まる前、我々は何の知識もないので、沈没船がどこに沈んでいるかは同様に確からしい、とする。 つまり、沈没船が海域Xに沈んでいる確率を$P(X)$で表すと、$P(A) = P(B) = P(C) = P(D) = 1 / 4$とする。これが事前確率である。
さて、探索を開始するが、探索機の性能は、もし実際に沈没している場所を探索していたとしたら3回に2回程度で成功する程度のもの(大変素晴らしい性能)とする。
まず、Aの海域を探索する。 残念ながら見つからない。この事象を$\alpha$としよう。 このとき、事後確率が変化する。 事象$\alpha$は次の2つの場合にMECEに分けられる。
- 沈没船が海域Aに沈んでおらず(B, C, Dのいずれかに沈んでおり)、それゆえ見つからなかった
- 沈没船は海域Aに沈んでいたが、探索機が外した
Bayesの定理によって、
$$ P(A|\alpha) = \frac{P(\alpha|A)}{P(\alpha|A)P(A) + P(\alpha|B)P(B) + P(\alpha|C)P(C) + P(\alpha|D)P(D)} P(A) = \frac{\frac{1}{3}}{\frac{1}{3}\frac{1}{4}+1\frac{1}{4}+1\frac{1}{4}+1\frac{1}{4}}\frac{1}{4} = \frac{1}{10} $$
と計算される。
$$ P(A) = \frac{1}{4} \rightarrow \frac{1}{10} $$
の変化分は、それを打ち消すように$P(B), P(C), P(D)$に等しく分配されたと考えればよく、
$$ P(B) = \frac{1}{4} \rightarrow \frac{1}{4} + \frac{1}{3} (\frac{1}{4} - \frac{1}{10}) = \frac{3}{10} $$
$$ P(C) = \frac{1}{4} \rightarrow \frac{3}{10} $$
$$ P(D) = \frac{1}{4} \rightarrow \frac{3}{10} $$
となる。
これが事象$\alpha$を観測したあとの事後確率であり、情報の増加によって、確率分布が変化したとみなせる。
次に、海域Aを探すよりも別の海域を探すのが良いだろうから、海域Bを探す。 残念ながら、やはり見つからない。 この事象を$\beta$としよう。 先と同様の考察により、
$$ P(B|\beta) = \frac{P(\beta|B)}{P(\beta|A)P(A) + P(\beta|B)P(B) + P(\beta|C)P(C) + P(\beta|D)P(D)} P(B) = \frac{\frac{1}{3}}{1\frac{1}{10}+\frac{1}{3}\frac{3}{10}+1\frac{3}{10}+1\frac{3}{10}}\frac{3}{10} = \frac{1}{8} $$
確率分布の変化分を今度は事前確率にしたがって重みを付けて分配する。すなわち、
$$ P(B) = \frac{3}{10} \rightarrow \frac{1}{8} $$
$$ P(A) = \frac{1}{10} \rightarrow \frac{1}{10} + \frac{\frac{1}{10}}{\frac{1}{10}+\frac{3}{10}+\frac{3}{10}}(\frac{3}{10} - \frac{1}{8}) = \frac{1}{8} $$
$$ P(C) = \frac{3}{10} \rightarrow \frac{3}{10} + \frac{\frac{3}{10}}{\frac{1}{10}+\frac{3}{10}+\frac{3}{10}}(\frac{3}{10} - \frac{1}{8}) = \frac{3}{8} $$
$$ P(D) = \frac{3}{10} \rightarrow \frac{3}{10} + \frac{\frac{3}{10}}{\frac{1}{10}+\frac{3}{10}+\frac{3}{10}}(\frac{3}{10} - \frac{1}{8}) = \frac{3}{8} $$
となる。
さらに、海域Cを探す。見つからない。 確率分布の変化は、
$$ P(C) = \frac{3}{8} \rightarrow \frac{1}{6} $$
$$ P(A) = \frac{1}{8} \rightarrow \frac{1}{6} $$
$$ P(B) = \frac{1}{8} \rightarrow \frac{1}{6} $$
$$ P(D) = \frac{3}{8} \rightarrow \frac{1}{2} $$
さらに、海域Dを探す。見つからない。 確率分布の変化は、
$$ P(D) = \frac{1}{2} \rightarrow \frac{1}{4} $$
$$ P(A) = \frac{1}{6} \rightarrow \frac{1}{4} $$
$$ P(B) = \frac{1}{6} \rightarrow \frac{1}{4} $$
$$ P(C) = \frac{1}{6} \rightarrow \frac{1}{4} $$
計算を少し端折ったので、コードにも落としておく。
#! /usr/bin/env python
x = 1 / 4
a = [x, x, x, x]
p = 1 / 3
print(f"a: {a[0]:.3f}, b: {a[1]:.3f}, c: {a[2]:.3f}, d: {a[3]:.3f}")
for i in range(4):
b = 1 - a[i]
k = 1 / (1 - (1 - p) * a[i])
s = k * p * a[i]
t = a[i] - s
a[i] = s
for j in range(4):
if j == i:
continue
w = a[j] / b
a[j] += w * t
print(f"a: {a[0]:.3f}, b: {a[1]:.3f}, c: {a[2]:.3f}, d: {a[3]:.3f}")
これを実行すると次のようになり、手計算と一致する。
a: 0.250, b: 0.250, c: 0.250, d: 0.250
a: 0.100, b: 0.300, c: 0.300, d: 0.300
a: 0.125, b: 0.125, c: 0.375, d: 0.375
a: 0.167, b: 0.167, c: 0.167, d: 0.500
a: 0.250, b: 0.250, c: 0.250, d: 0.250
今、A, B, C, Dの海域をすべて探索し、そのいずれでも発見に至らなかった。
最後に得られる確率分布が、最初の確率分布に戻っているのは、「振り出しに戻った」という感覚に一致する。