確率と統計の基本を踏まえた上で、スパムフィルターをはじめとして幅広く利用されているベイズの定理の考え方や応用について見ていく。
この記事は会員限定です。会員登録(無料)すると全てご覧いただけます。
前回は高校で学んだ確率の基礎と条件付き確率をおさらいしました。今回は、その内容を踏まえて、機械学習の基礎として幅広く利用されているベイズの定理についての理解を深めていきたいと思います。前回と今回で取り扱っているトピックは以下の通りです。
ベイズの定理は、難しい印象のあるベイズ統計学の基礎の基礎ですが、条件付き確率の乗法公式さえ分かれば、簡単に理解できます。一歩ずつ丁寧に説明していくので、急がずにゆっくりと読み進めていってください。なお、前回の「条件付き確率」を読んでいない場合は、先に一読することをお勧めします。セットでまとめて読みやすいように、今回は各節や図、脚注などの番号は、前回の番号からの続きとなっています。
まずは前回学んだ条件付き確率の乗法公式(以下、単に「乗法公式」)の復習です。「事象Aと事象Bの両方が起こる確率」は「事象Aが起こる確率」と「事象Aが起こったときに事象Bが起こる確率」の積で表されます。つまり、
と表現できましたね。この式は、機械学習でよく使われるベイズの定理の基礎となっています。これについては前回見た通りです。
ベイズの定理の基本的な形は以下の通りです。
事象Aを原因や仮説(Hypothesis)、事象Bを結果やデータ(Data)と考え、その頭文字を使って、以下のように表すこともあります(むしろ、この表し方がよく使われます)。
この式を見ると、左辺は「結果が得られたときの原因の確率」であることが分かります。右辺を計算すれば、何かの原因の確率が求められるというわけです。なお、P(H)は事前確率、P(H|D)は事後確率と呼ばれます。また、P(D|H)は尤度(ゆうど)、P(D)は周辺尤度と呼ばれます(※「尤度」の意味は後述)。これらの用語を使って上の式を書くと、以下のように表されます。
事前確率は「コトが起こる前の原因の確率」で、事後確率は「コトが起こった後に考えられる原因の確率」です。尤度の「尤」は「尤(もっと)もらしい」という意味で、P(D|H)はHという原因が分かればDという結果が得られるのは、その確率はまあもっともらしいと考えられる値だよね、といった意味合いです。英語のlikelihood(ありそうなこと、見込み)の訳ですね。周辺尤度はもう少し後で説明します。
ここから乗法公式を使ってベイズの定理を導き出していきます。その方法については動画でも解説しているので、ぜひ視聴してみてください。
条件付き確率の乗法公式は、AとBを別の文字にしてももちろん成り立ちます(例えば、目標のところではDとHに書き換えた例を示しました)。そこで、AとBを入れ替えてみましょう。すると、以下のような式が成り立つことが分かります。
[1]式は最初に見た乗法公式で、具体的な数値を使って前回確かめました。[2]式がAとBを入れ替えたものです。「え、ホント? 何だか騙(だま)されているような気が……」という人もいるかもしれないので、ちょっと寄り道になりますが、乗法公式のおさらいも兼ねて、[2]式がちゃんと成り立っていることを具体的な数値で確認しておきましょう。以下の表は前回見たウイルスの感染/非感染と検査の陽性/陰性の人数の表です。
[2]式の左辺、つまりP(B∩A)の値は1.94/1000です。右辺は、以下の通りです。
計算してみると、以下のようになり、ちゃんとP(B∩A)の値と一致していますね。
では、本筋の話に戻ります。通常、私たちが求めたい確率は、陽性であるときに感染している確率です。つまり、P(A|B)の確率です(上で見た例で1.94/11.92であることが既に分かってしまっていますが)。そこで、[2]式の方をP(A|B)=の形に変形してみましょう。[2]式の両辺をP(B)で割ります。ただし、P(B) ≠ 0 とします。
右辺はP(B)で約分できるので、P(A|B)だけになりますね。左辺と右辺を入れ替えると以下のようになります。
ここで、右辺の分子を見てください。Bという事象とAという事象の両方が起こることは、Aという事象とBという事象の両方が起こることと同じなので、P(B∩A)=P(A∩B) です。ということは、[1]式を代入できますね(図12)。
代入を行って、式を整理すると以下のようになります。
はい、これで目標の式が導き出されました。これがベイズの定理の基本的な形です。結果(B)が分かっているときの、原因(A)の確率がこの式で求められます。例えば、検査で陽性になったときに、ウイルスに感染している確率が求められるというわけです。
では、ウイルスの例に実際に適用してみましょう。感染しているという事象は原因と考えられ、検査で陽性になるという事象は結果と考えられるので、HとDという文字で表したいところですが、引き続きAとBを使うことにします。
ベイズの定理により、陽性になった場合にウイルスに感染している確率P(A|B)を求めてみます。ここからは穴埋めにしておくので考えながら読み進めてください。オレンジ色の部分をクリックまたはタップすれば答えが表示されます。まず、目標のところに書いた式(先ほど導き出した式)をそのまま書きましょう。
P( B|A )P( A )
P(A|B) = ────────────
P(B)
P(B|A)は「ウイルスに感染していることが既に分かっていて、検査で陽性になる確率」でしたね。前回見た通り、これは97%=0.97であることが分かっているものとします。
P(A)は感染している確率です。これも既に2/1000=0.002であることが分かっています。分母のP(B)は陽性である確率ですね。これは表2から11.92/1000=0.01192であることが分かります。
というわけで、
となります。検査の結果が陽性であったときに、感染している確率P(A|B)は約16.3%になります。直感的には90%を超える値が思い浮かぶかもしれませんが、意外なほどに小さい値ですね。これは、以下の図でも確認できます。
感染者よりも非感染者のほうが圧倒的に多いので、図では、非感染者の部分の幅が実際よりずいぶんと小さくなっていて、それぞれの部分の幅が比率を忠実には表していませんが、前回の図よりは多少実際のイメージに近くしてあります。ともあれ、図を見ると、陽性者全体は1.94人+9.98人=11.92人であることが分かります。そのうち、感染している人は1.94人なので、陽性者のうち、感染している人の割合は1.94÷11.92=0.1628となり、上で計算した結果と一致します。
実際のところ、表2ができていれば、図を描いたり、ベイズの定理を使って計算したりしなくても1.94÷11.92で答えは求められるのですが、ここでは、ベイズの定理が確認できたということで、ヨシとしましょう。
ここからは、A、Bの代わりにH、Dという文字を使うことにしましょう。単に違う文字を使うだけですが、それでも頭の切り替えが必要になるので、少しリフレッシュしてから読み進めていただくといいでしょう。
さて、ベイズの定理を一般的な表現に展開した公式は以下のようになります。以下の式のHiは原因を表すような事象Hが幾つかある場合のi番目の事象、Dは結果を表す事象です。これまでは取り扱ってきた事象が、陽性か陰性かといった2つでしたが、3つ以上になることも考えられます。そこで、式を一般化しておこうというわけです。
取りあえず、日本語でこの式の各項の説明を記しておきます。抽象的すぎて実感が湧かないかもしれませんが、今は分からなくてもあまり気にしないでください。この式を導き出す方法も含めて具体的な詳しい説明は次の解説セクションで行うので、まずは、式と以下の説明をざっと眺めておいてください。
ここでの目標は、上の式を理解し、事例に適用できるようになることです。では、解説に進みましょう。
最初にHiやHjの意味を具体的に確認しておきましょう。実は、これまで見てきたウイルスの例では、原因となる事象が2つで排反(同時に起こらない)だったので、感染をA、非感染をĀのように簡単に表してきました。しかし、実際にはいくつもの事象がある方が普通です。その場合も、これまでの例と同様、事象は互いに排反であるものとします。
例えば、「黙読する(H1)」「音読する(H2)」「筆記する(H3)」という3つのいずれかの方法を使って、単語を記憶する実験を行うなどがそれに当たります。それらの事象に対する結果としては「合格(D1)」「不合格(D2)」などが考えられます。そこで、添字を使って一般的に表したわけです。
とはいえ、別の例で考えるとさらに頭の切り替えが必要になるので、これまでのお話の中で頭に入っているウイルスの例をそういった表し方にしてみましょう。実際にはH1、H2、H3、……のように事象が幾つかあるわけですが、話を簡単にするためにH1、H2だけで見ていこうというわけです。また、陽性がD1、陰性がD2になりますが、添字が増えると煩雑になるので、陽性のところだけを単にDと表すことにします。
なお、表の中の数値は1000人中何人かという値ではなく、確率にしておきました。
感染(H1) | 非感染(H2) | 合計 | |
---|---|---|---|
陽性(D) | 0.00194 …… P(H1∩D) | 0.00998 …… P(H2∩D) | 0.01192 …… P(D) |
陰性 | 0.00006 | 0.98802 | 0.98808 |
合計 | 0.002 | 0.998 | 1 |
表3 「ウイルス感染/非感染」と「検査の陽性/陰性」のクロス集計表(数値は確率) |
検査の結果が陽性(D)であったときに、ウイルスに感染している(H1)確率は、P(H1|D)と表されますね。既に前項の解説【その4】でその値(P(A|B)=約16.3%)を求めましたが、ここでは、目標のところに示したベイズの展開公式が成り立つことを確認した上で、あらためてその公式を使ってP(H1|D)の値を求めてみることにします。ベイズの展開公式を導き出す方法については動画でも解説しているので、ぜひ視聴してみてください。
まず、ベイズの展開公式が成り立つことを確認しましょう。H1とDという文字を使ってベイズの公式をそのまま書いてみます。
H1とH2は排反(同時に起こらない)なので、
と表すことができます。え? ちょっと何を言っているのか分からない、という人もいるかもしれませんが、以下のように、日本語で言い替えてみると、なんだ当たり前じゃん、となりますね。前掲の表3を見てもらっても明らかです。
[1]式の分母に[2]式の右辺を代入してみましょう。
条件付き確率の乗法公式を適用すると、分母の各項は、
と表されます。これらの右辺を[3]式の分母の各項に代入してみましょう。
分母の部分は、結局のところ「総和」なのでΣを使って表すと以下のようになります。添字としてjを使っていることに注意してください。jという文字には特に意味はありませんが、事象がH1,H2,...,Hnであれば、j=1からnまでの合計になります。
P(H1|D)などのH1の部分はH2かH3のいずれかなので、Hiと表すことにします。このiは変化するわけではなく特定の値を一般的に表しただけです。
はい、いかがでしょう。目標のところで示した式ができましたね。分母の「周辺尤度」は、表の周辺部分に現れる値とでもいったイメージで捉えておいていただいて結構かと思います(正確に言うと、対象としている尤度も含め、全ての尤度を事前確率で重み付けした期待値になっています……が、結局のところP(D)の値なので、その事象が起こる平均的な確率ということになります)。
では、念のため、P(H1|D)の値も求めておきましょう。表3を再掲し、既に分かっている値も示しておきます。
感染(H1) | 非感染(H2) | 合計 | |
---|---|---|---|
陽性(D) | 0.00194 | 0.00998 | 0.01192 |
陰性 | 0.00006 | 0.98802 | 0.98808 |
合計 | 0.002 …… P(H1) | 0.998 …… P(H2) | 1 |
表3(再掲) 「ウイルス感染/非感染」と「検査の陽性/陰性」のクロス集計表(数値は確率) |
以下の値を公式に当てはめれば求められます。
計算してみましょう。単に値を代入して答えを求めるだけです。
となり、前に計算した結果と合っています。ここで見た例では、Hjが2つだけでしたが、ベイズの定理を展開した公式を使えば、Hjが3つ以上の場合にも計算できることが分かったと思います。
データが逐次得られるときに、事前確率P(Hi)を事後確率P(D)で逐次更新していくことをベイズ更新と呼びます。事前確率P(Hi)が分からない場合に、ベイズ更新によって事前確率P(Hi)を推定するのに使われます。
Copyright© Digital Advantage Corp. All Rights Reserved.