条件反転の誤謬【ベイズ・条件付き確率連載#1】

本記事は「初学者が条件付き確率やベイズの学習時にひっかりやすいポイント整理」の連載記事として投稿されています。
本連載の概要、目次はこちら

https://qiita.com/takumi-wada/items/16283c8fcecf55b8f864

---
本記事では扱うのは、提示されている条件と比較したい項目が逆になっていることに気付かないパターンです。「サッカー部員の足が速い確率」と「足が速い生徒がサッカー部員である確率」を混同しちゃうやつです。

#### 長髪男性問題
長髪の人を見かけました。その人は男性の確率が高いですか、女性の確率が高いですか。
髪の長さ以外に情報はないものとし、その場所における性別別の長髪割合は表1に従うものとする(実データではありません)。
>表1 各性別における長髪、短髪割合

||長髪| 短髪|
|:---:|:---:|:---:|
|男性|10%|90%|
|女性|70%|30%|


この問題は私が大学院生の時に考案したもので、当時私は後ろ髪が腰に届く長髪だったので(私は男性です)「男性で長髪の人なんてそんなにいませんよね」とか言ってツッコミ待ちをするというネタだったのですが、執筆現在はあまり長髪でもないのでネタの方向性がブレてしまいました。

この問題の答えは「分からない」です。
なぜなら、その人を見かけた場所における男性と女性の比率が分からないからです。50%:50%だと仮定するならば確かに女性の確率の方が高いです。しかし例えば、男性比率が95%の工学部にいる時に長髪の人を見かけたとします。すると、確かに男性の中で長髪の人がレアキャラであるといっても、それ以上にそもそも女性が超レアキャラなので男性の確率の方が高くなるのです。
$p(男性|長髪)=\frac{男性かつ長髪の人}{長髪の人全体}=\frac{男性の割合 * 男性のうちの長髪の割合}{男性の割合 * 男性のうちの長髪の割合 + 女性の割合 * 女性のうちの長髪の割合}=\frac{0.95 * 0.1}{0.95 * 0.1 + 0.05 * 0.7}　\simeq 0.73 $
$p(女性|長髪) \simeq 0.27$
で73%で男性ということになります。
「95%が男性だなんて後出しだ」と思われたかもしれません。もちろん95%という数字は後出しですが、この問題のポイントは「性別比の情報が足りていない」ということに自分で気付けるかということです。
逆にいうと「書いてないけど、(明示していないということは)50%:50%ってことでいいんやろな」と自分で推定して判断できた人は、「女性！」と答えていてもこの問題の要点がちゃんと理解できていると言えます。文脈がなければ性別比の問題は50%:50%であることが多いから、そう判断する人がいても仕方ないです。
ただ、性別比のことなど思いつきもしなかった人がこの手の問題を間違えます。
> ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3070713/3bfc6956-1698-13b1-4065-df548173568c.png)
> Fig.1 長髪男性問題。知りたいのは長髪のうちの男性の割合である。全長髪者は男性の長髪者と女性の長髪者からなる。男性の中の長髪の割合は確かに低いかもしれないが、この問題ではそもそも女性が少ないので長髪者の中でも男性の割合が高くなっている。

この問題で表に示されていたのは「性別の情報が与えられた時の長髪の確率」であり、我々が知りたかったのは「髪の長さの情報が与えられた時の男性の確率」です。「与えられた条件」と「確率の比較をしたいもの」の関係が逆転しています。
数学的に書くと$p($髪の長さ|性別$)$と$p($性別|髪の長さ$)$の関係にあり、逆転関係にあるのがよくわかります。
> ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3070713/67a54658-fc5c-68c6-3834-78094f0b35d2.png)
> Fig.2 「男性の中の長髪の割合」と「長髪の人の中の男性の割合」の違い。どちらも分子は男性でかつ長髪の人であるが、分母、つまり何の中のでの割合を考えているか、が違う。　

このような条件反転している命題間をつなぐものは、問題の題材を問わず常に「その条件がそもそも満たされる確率」なのです。そしてその関係を表したものこそがベイズの定理です。
### ベイズの定理
$p(B)p(A|B)=p(A)p(B|A)=p(A,B)$
「Aの条件下でBが成り立つ確率」が$p(B|A)$, 「そもそもAが成り立つ確率」が$p(A)$です。
$\sum_A{p(A, B)}=p(B),  \sum_B{p(A, B)}=p(A)$が成り立つため、$p(A,B)$が求められれば全て求められます。つまり、繰り返しになりますが条件を反転させるには、その条件が満たされる確率が必要なのです。

「Aの条件下でBが成り立つ確率」である$p(B|A)$は「Aの中でのBの内訳」, 「そもそもAが成り立つ確率」である$p(A)$は「Aごとの規模の違い」と言い換えられることも多いです。表1は各性別の中での髪の長さの内訳(だから性別ごとに合計が1になる)であり、性別比は性別ごとにいる人数のスケールの違いを意味します。そして$p(X,Y)$は全体の規模とそれぞれの内訳の両方の情報です。
> ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3070713/913e0cf6-c834-3336-47ed-31cf31a628d8.png)
> Fig.3 ベイズの定理の視覚的説明。$p(A)$はAごとの規模の違い、$p(B|A)$はAの中の内訳、$p(A, B)$は規模と内訳を両方含む。統計グラフなどで$p(B|A)$のような全体を100%の正規化したグラフと$p(A,B)$のように正規化せずに規模をそのまま反映したグラフの両方を見たことがあると思う。「どちらが見やすいか」は見せたい情報によるが、「情報が多い」のは規模の情報が含まれている分、$p(A,B)$である。

この違いを表現したのがFig.3です。例えば、Aが国、Bが輸出品目で輸出額を見ているとすると$p(A)$は国ごとの輸出規模の違い、$p(B|A)$は国別の中の輸出額の内訳であり、$p(A, B)$は規模と内訳を両方含んでいます。「国別の輸出内訳割合$p(B|A)$」からB1が最も多いのはA3であることが見て取れますが、だからと言って「B1を最も輸出している国はA3である」とは言えません(B1の輸出依存度が最も高い国がA3だと言えるだけです)。国ごとに総輸出額の規模$p(A)$が違うからです。規模を反映した$p(A,B)$をまず作って、そこからB1が最も多い国を探す必要があります。
> ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3070713/1e56acf9-4783-dfd7-162e-9806b8250131.png)
>Fig.4　ベイズの定理と条件反転。左: ベイズの定理。$p(B|A)$から$p(A|B)$を知りたければ、規模の情報$p(A)$を与えて$p(A,B)$を得てから、Bごとに正規化する必要がある。$p(A,B)$が得られればどちらの条件付き確率でも得られる。　右: 条件反転に関する部分だけ抜き出した概略図。途中計算として$p(A,B)$を経由する部分を省略した。条件反転には規模の情報が必要である。

いくつかの他の例題を示します。
#### 医療検査問題
ある病気の診断検査の正確性は表2に記した通りとする。その検査で陽性の結果が出た際にその病気にかかっている確率はいくらであると言えるか。
>表2 本問題における医療検査の正確性

||陽性| 陰性|
|:---:|:---:|:---:|
|健康|1% (偽陽性率)|99%|
|病気|99%|1% (偽陰性率)|

この手の問題は医療統計を学び始めたばかりの医学生などが一回ひっかかることでお馴染みであり、COVID-19のPCR検査でも話題になったため解ける方も結構いるのではないかと思います。
答えはもちろん「分からない」です。理由がわからない方は長髪男性問題があまり理解できていないと思います。
表2は「病気か健康か与えられた際に陽性が出る確率」$p($陽性か|病気か$)$で我々が知りたいのは「陽性が出た場合に病気である確率」$p($病気か|陽性か$)$です。「そもそもその病気にかかる確率」がないと反転はできないはずです。
例えば1000人に1人がかかる病気であったと仮定します。この条件があれば解くことができます。
>![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3070713/bba3e70c-0f7b-e26b-af08-19282cffdd4b.png)
> Fig.5 医療診断問題。与えられているのは「健康か否かが与えられている時の陽性、陰性が出る確率」であり、知りたいのは「陽性が出た時の病気である確率」であり、条件が反転しているため、「健康の人と病気の人の規模の情報」が必要である。

$p(病気|陽性)=\frac{病気でかつ陽性の人}{陽性の人}=\frac{病気でかつ陽性の人}{病気でかつ陽性の人+健康でかつ陽性の人}=\frac{p(病気)p(陽性|病気)}{p(病気)p(陽性|病気)+ p(健康)p(陽性|健康)}$
$p(病気)=0.001, p(健康)=0.999, p(陽性|病気)=0.99, p(陽性|健康)=0.01$より
$p(病気|陽性)=\frac{0.001 * 0.99}{0.001 * 0.99 + 0.999 + 0.01} \simeq 0.09$
で9%しかありません。「精度99%もある検査で陽性だった」と言われれば「ほぼ病気確定か」と思ってしまうかもしれませんが、この条件なら病気の確率はまだ9%であることがわかりました。
なぜなら、健康な人と病気の人のスケールが全然違うからです。健康なのに陽性が出てしまう人というのは割合としては多くないのかもしれませんが、絶対的なスケールの差が存在しており、割合としては低くても絶対数としてみれば「健康でかつ陽性な人」というのはある程度出てきてしまうのです。
病気の診断問題の場合、大抵の病気で「その病気の人とそうではない人」を比較すると「そうではない人」の方が圧倒的に多くなります。なので条件反転を無視した推論を行うと、正しい結果と大きく齟齬が生じやすいです。


# 条件反転の誤謬
上述の問題は全て条件付き確率における「なにが条件か」という問題の誤りに起因しています。
特に$p(Y|X)$と$p(X|Y)$のように「条件」と「確率の比較をしたいもの」が反転したものを混同することによる過ちを"条件反転の誤謬"と呼んでいます(私の造語です。他所では通じません)。

「性別の情報が与えられた時の長髪の確率」と「髪の長さの情報が与えられた時の男性の確率」であったり、
「病気か健康か与えられた際に陽性が出る確率」と「陽性が出た場合に病気である確率」であったり、
「サッカー部員の足が速い確率」と「足が速い生徒がサッカー部員の確率」であったりです。
「各部活の部員の足が速い確率」から「足が速い生徒がサッカー部員の確率」を割り出したければ「各部活に部員が何人いるのか」の情報が必須です。サッカー部員が俊足揃いであったとしてもそもそも部員が少ないなら、「足が速い生徒がサッカー部員の確率」は高くならないのです。
文章にしてみるとわかりにくいと感じたなら式で書いてみましょう。
$p($足の速さ|部活$)$ 、$p($部活|足の速さ$)$などのようにすればシンプルにまとまります。|の右の変数中での、|の左の変数を比較しています。
$p($足の速さ|部活$)$は各部活の中で、足の速さを比較していますし、$p($部活|足の速さ$)$は足の速さの条件(足が速い子)を揃えた上で、各部活が占める割合を比較しています。
|の右側にある変数間で比較しようとしてはいけません。$p($足の速さ|部活$)$で部活間の比較はできないのです。

#### 仮説検定
統計学を学んだことのある方にとってはお馴染みの仮説検定についても考えてみましょう(仮説検定とは何かについては解説しません。聞いたことがない方は読み飛ばしてください)
> ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3070713/788638fa-2dc7-c37d-766d-3bf21584a91b.png)
> Fig.6 仮説検定例題。分析者から見えているのは全比較数(10000), 有意水準(5%), 検出陽性、検出陰性数(1000, 9000)のみ。

例題として10000個の仮説について検定を繰り返した場合を考えます。その中には本当に帰無仮説に従っているもの(=陰性)が8000、対立仮説に従っているもの(=陽性)が2000あるとします。そして有意水準5%で検定したところ、1000個が有意(=検出陽性)でした。
この時、分析者に見えている数字というのは全比較数(10000), 有意水準(5%), 検出陽性、検出陰性数(1000, 9000)だけです。本当に差がある比較がいくらあるかなど分かりません。

有意水準とは偽陽性率、つまり「本当は帰無仮説に従っているのにも関わらず棄却される(有意差ありと判定される)確率」を表しています。これは「本当は帰無仮説に従っている」という"仮定"の世界の中で、これ以上の差が現れる確率を表しています。
これはやや解釈がしにくく、「有意差ありと判定された比較について、本当は間違いである確率」と混同されがちです。
偽陽性率は$p($棄却させる|陰性$)$であり、「有意差ありと判定された比較について、本当は間違いである確率」は$p($陰性|棄却させる$)$となり、条件反転の関係にあります。
> <img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3070713/41cc6608-14f7-127c-11a6-e527a1753a72.png" width=60%/>
>
> Fig.7 偽陽性率とFDRの関係

偽陽性率から条件反転をさせるには、そもそも帰無仮説に従っている確率$p($陰性$)$が必要です。そんなものは普通分からないので、仕方なく偽陽性率が低いことで議論している面があるのですが、多重比較の時限定で推定する方法が存在しています。そうして求められる「有意差ありと判定された比較について、本当は間違いである確率」のことをFDR (False Discovery Rate; 偽発見率)と言います。

#まとめ
条件を反転させる計算をしている時にごちゃごちゃした計算が出てきて「ややこしい」と感じたかもしれませんが、何をやっているかを理解すればやるべきことは簡単にわかるようになります。
1. Aの中での内訳$p(B|A)$と、Aごとの規模$p(A)$を掛け合わせて、規模と内訳を合わせた$p(A,B)$を求める。
> ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3070713/1b3f30ea-ed89-c245-c450-2576d357e16d.png)
> Fig.8 ステップ1
2. (元々はAごとにBが集計されていたのを)BごとにAを集計し直して、Bごとの合計が1になるように正規化する。
> ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3070713/ba3e5016-47a3-3bc5-1def-60944a8b6d19.png)
> Fig.9 ステップ2

の2ステップです。1を式で書くと$p(B|A)p(A)=p(A,B)$であり、2を式で書くと$p(A|B)=\frac{p(A,B)}{p(B)}=\frac{p(A,B)}{\sum_Ap(A,B)}$です。
$\sum_Ap(A,B)$はBごとに全てのAの総和を取るので、Bごとの規模の違い$p(B)$が求められるのです。
まとめて書くと
$p(A|B)=\frac{p(B|A)p(A)}{\sum_Ap(B|A)p(A)}$ですが、これを丸暗記しようとする必要はありません。
長髪男性問題でいうと元々は「性別ごとの正規化済み積み上げグラフ」だったのを、「髪の長さごとの正規化済み積み上げグラフ」に作りかえるのです。そのために性別ごとの規模の違いが必要になるのです。

$p(A|B)=\frac{p(A,B)}{p(B)}$はベイズの定理そのものですし、$\sum_Ap(A,B)=p(B)$も公式として覚えておくと計算がスムーズになり、より高度な問題を考える際にも役立ちます。
ただ強調しておきたいのは、「なんか定理を駆使すればこの問題は解けるよ」ということではなく、「自分は今、"何を条件としていて、その条件の中の何の確率"を考えているのかちゃんと認識すること」と「条件を反転させるのに、元々の条件が満たされる確率が必要なこと」を理解することであり、上記ステップ1ができてしまえばあとは何を求めたいのかが理解していれば自ずとわかるはずであるということです。

本記事を読んで頭に入れておいて欲しいことは
- 今持っている情報と、知りたい情報で条件反転していないかを考える
- 条件反転しているなら、そもそも条件が満たされる確率、条件ごとの規模の違いが必要である

ということなのです。

---
### 連載内容
・<a href="https://qiita.com/takumi-wada/items/16283c8fcecf55b8f864">初学者が条件付き確率やベイズの学習時にひっかりやすいポイント整理【ベイズ・条件付き確率連載#0】</a>
 -> 今ここ　条件反転の誤謬【ベイズ・条件付き確率連載#1】
・「共通の結果」の固定【ベイズ・条件付き確率連載#2】
・事前分布・尤度・事後確率・周辺化【ベイズ・条件付き確率連載#3】
・サンプリングアルゴリズム【ベイズ・条件付き確率連載#4】
・前提条件不揃い問題【ベイズ・条件付き確率連載・おまけ回】