プログラマのためのベイズ理論

そもそものはじめのはじめ

近頃スパムメールにはベイズ理論が有効らしい、そういう話を聞くことが多い。そもそもベイズ理論とはどういったものなんだろうか。ベイズ理論とはベイズの定理のことで、確率の乗法の定理から導き出せるものだ。

ふつう、確率はさいころの話だったりして、1の目が出る確率と2の目が出る確率はお互いを影響しない。だって1の目が出たから次はまた1の目が出たらヤダから2の目がでる確率を多めにしようかな、なんてさいころが考えているわけじゃないよね。やっぱりどう考えても1の目が出る確率が2の目が出る確率に影響しない。この場合は互いに排反だよね。

世の中にはそんな独立に確率が決まる訳じゃなくて、一方が他方の確率に影響が出るものもある。そんなのを条件付き確率とか言ったりする。タバコを吸うから肺ガンになるとか、勉強したからいい大学に入ることができるとか、世の中の確率は互いに関連のあるもののほうが多いのだ。

犬も歩けば棒に当たる、を予測してみる

で、話を簡単にするためにもう少し簡単に考えてみる。

例えば


A……犬が歩く事象
B……棒に当たる事象
としてみよう。

すると確率は次のようになる。


P(A)……犬が歩く確率
P(B)……棒に当たる確率

この場合はAとBがお互いの確率に干渉し合っているとする。つまり


P(A)+P(B) = P(A∨B)
が成り立たない場合ということだ。こういうのを排反ではないという。

ふたつの事柄について排反ではないことは互いに関連し合っているということを示している。

条件付き確率のおはなし

すると、犬が歩くことと棒に当たることは、お互いに関係あることになる。だってこれは互いに独立していないわけだから、一方が他方を導き出せることになる。これが重要だったりする。Aが起こる確率P(A)が分かったらBが起こる確率P(B)も分かってしまう。これはすごいことだ。でも、まだAとBに何の関係があるかわからない。

だからとりあえず


P(B∧A) = P(A) *(定数)

というように、確率P(A∧B)とP(A)のあいだに比例定数のようなものをおいてしまえばよい。そうするとイコールの関係で表すことができる。等号の記号とは不思議なもので、これを使うと使わないとでは大違いなのだ。関係があるけれども、どうなっているかわからない、そういうときはとりあえず定数を置いてイコールにしてしまうというのがある。これは物理なんかでおおざっぱな考えをするときですら多く使われる便利なやり方のひとつでもある。

できた等式は


犬が歩いていて棒に当たる確率=犬が歩いている確率 *(定数)
という意味だ。

で、A(犬が歩く)→ B(棒に当たる)なのだから


P(B∧A) = P(B|A) * P(A)
というように、(定数)をP(B|A) というように表して、A→Bという確率を表すことにする。

P(B|A)はA→Bが起きるときにかかる比例係数のようなものだ。あくまでこれ自体は単独の確率じゃない。「○だから×」というように、ふたつのものが組み合わさったカタチでの確率だ。

ここでP(A|B)は条件付き確率という。
ようするにP(A|B)はB→Aのときにかかる定数である。

するとみごとに次のような式が導ける。


P(B∧A) = P(B|A) * P(A)
これはこういう意味だ。


(犬が歩いていて かつ 棒に当たる確率)=(「犬だから棒」の結びつける確率)*(犬が歩く確率)

逆に考える

すると、逆に「棒に当たった」から「犬が歩いている」という確率が求めることができる。なんでかって?はじめに犬が歩いていることと棒に当たることは関連しているって言ったからなのだ。


P(B∧A) = P(B|A) * P(A)
はさっき導いたものだ。

で、同じようにこんなふうにも書ける。ただ単純にAとBを交換しただけ。


P(B∧A) = P(A|B) * P(B)

この意味はやっぱり同じように


(犬が歩いていて かつ 棒に当たる確率)=(棒と犬とを結びつける確率)*(棒に当たる確率)
というようになる。

◆ ◆ ◆

ここで注意したいのは
P(B|A) とP(A|B) は同じじゃあない。
だって、


P(B|A)……「犬だから棒」の結びつける確率
P(A|B)……「棒だから犬」の結びつける確率
ね、ぜんぜん違うでしょう?

棒に当たったのを見て犬が歩いていた確率がわかる!

このふたつの式を眺めてみると、こんなこともできちゃう。


P(B|A) * P(A) = P(A|B) * P(B)
この式はいったい何を意味しているんだろう?

少し式変形をしてみる。


P(A|B) * P(B)
P(B|A) = ----------------
P(A)

P(B)というのは棒に当たる確率だ。何も棒に当たる可能性は犬だけじゃない。いろいろな人やあらゆる物が棒に当たる確率がある。これはそういう意味を表している。

また、P(A|B)というのは、棒に当たったから犬が歩いている確率を示している。ふだん、犬が歩いているかどうかは意識して注目していないと分からない。そばに犬がいること自体、ぼーっとしているときなどは分からないときがある。そういうときに、棒が当たった音で犬が歩いていたことがわかるとする。P(A|B)はそういう確率だ。

やっていることがだんだんと複雑になってきている。ここでの目標は、すでに起きてしまったことがらから原因となるものの確率を求めようとしているのだ。

時間は過去から現在を経て未来へ流れているので、何も過去のことを探らなくてもそれは事実だと分かっているじゃないか、という話もある。でも、いったん過ぎてしまった過去はひとたび分からなくなったらもうまるっきり分からない。だって、誰も過去に時間をさかのぼれないんだから。それを確率で求めてみようって話だ。

Aという原因となる要素を分解してみる

ここで犬が歩く確率P(A)は直接求めるのが難しいので間接的に求めてみる。

まず、AはBと¬Bの2パターンがあるので


A = A∧B + A∧¬B
としてみる。

これを確率にしてみると


P(A) = P(A∧B) + P(A∧¬B)
= P(A|B)P(B) + P(A|¬B)P(¬B)

これをさっきの式に代入してみると


P(B|A) * P(A) P(B|A) * P(A)
P(A|B) = ---------------- = ---------------------------
P(A) P(A|B)P(B) + P(A|¬B)P(¬B)

これがベイズの定理だ。

結果から原因が分かる

ベイズの定理で何がすごいかというと、結果から原因となる確率が分かるということだ。

世の中の多くのことがらは、原因から結果は時間が経てばやがて分かる。そして原因の起きる確率もだいたい求まる。

でも、なかなか結果から原因を知ろうとすると、なかなか難しいことが多かったりする。時間は過去から未来へ一方通行に流れているので、未来のことは分からないにしても、過去のこともひとたび過ぎ去ってしまえばぜんぜんわからなくなってしまう。