準1級-37 応用統計の手法
ベイズ法
- 事前分布
- 事後分布
- MH(Metropolis-Hastings)アルゴリズム
- マルコフ連鎖モンテカルロ(MCMC)法
- ギブスサンプリング
- 階層ベイズモデル
はじめに
「『母数が0.5より大きい確率は87%です』って、言ってはいけないの?」
2級で信頼区間を学んだとき、注意がありましたよね。95%信頼区間は、「母数がこの区間に入る確率が95%」という意味ではない、という話です。母数は決まった値で、確率的に動くのは区間のほうだからです。正しい説明ですが、少し回りくどく感じたかもしれません。
例えば、初めて入ったラーメン店がおいしかったとしましょう。「この店は当たりの可能性が高い」と考えますよね。もう1回行っておいしければ、確信はさらに強まります。私たちは日常で、知りたい値について確率で語り、データを見るたびに更新しています。
実は、この考え方をそのまま統計学にしたものがあります。母数を確率変数として扱えば、「母数が0.5より大きい確率」を素直に計算できるのです。
そこで登場するのが、今回の主役 ベイズ法 です。出発点は、準1級の最初の記事で学んだベイズの定理です。
前回の記事で、BICの導出にベイズの考え方が少しだけ出てきました。今回の記事では、事前分布から事後分布を求める方法、共役事前分布、そして計算を支えるマルコフ連鎖モンテカルロ法と階層ベイズモデルについて解説します。
事前分布から事後分布へ
はじめに、ベイズ法の基本の式について解説します。
これまでの推定では、母数 を未知の定数と考えてきました。ベイズ法では、 の不確かさを確率分布で表します。データを見る前の の分布を 事前分布(prior distribution)、データ を見たあとの分布を 事後分布(posterior distribution)と呼びます。
2つをつなぐのが、ベイズの定理です。
が事前分布、 が尤度、 が事後分布です。分母はデータの周辺尤度で、 を含まない定数です。そのため、次の一言に要約できます。
天気予報の更新に例えられます。朝の予報が事前分布です。昼の雲の様子というデータを見て、午後の予報を修正します。これが事後分布です。そして、その事後分布は、次のデータを見るときの事前分布になります。
具体的に見てみましょう。くじの当たる確率 が 0.3, 0.5, 0.7 のどれかで、事前確率を 0.25, 0.5, 0.25 とします。4回引いて3回当たりました。
| 事前確率 | 尤度 | 事前 × 尤度 | 事後確率 | |
|---|---|---|---|---|
| 0.3 | 0.25 | 0.0189 | 0.004725 | 0.077 |
| 0.5 | 0.50 | 0.0625 | 0.031250 | 0.506 |
| 0.7 | 0.25 | 0.1029 | 0.025725 | 0.417 |
表の見方はシンプルです。事前確率に尤度を掛けて、合計が1になるように割るだけです。0.3の確率が0.25から0.077に下がり、0.7の確率が0.25から0.417に上がりました。データが、信じる度合いを動かしたのです。
事後分布が得られたら、1つの値にまとめて報告します。
【事後分布のまとめ方】
- 事後平均: 二乗誤差の期待値を最小にする点推定
- 事後中央値: 絶対誤差の期待値を最小にする点推定
- 事後モード(MAP推定値): 事後分布の密度が最大の点
- 信用区間: 事後確率が95%となる区間
信用区間(credible interval)は、「 がこの区間に入る確率は95%」と、そのまま読める区間です。冒頭の信頼区間との違いは、ここにあります。
以上が、事前分布と事後分布についての解説です。
共役事前分布:手で計算できる組み合わせ
次に、事後分布が公式で求まる場合を説明します。
事後分布が事前分布と同じ分布族になるとき、その事前分布を 共役事前分布(conjugate prior)と呼びます。鍵と鍵穴がぴったり合う組み合わせのようなものです。パラメータを足し算で更新するだけで、事後分布が求まります。
代表的な組み合わせは次のとおりです。
| データの分布 | 共役事前分布 | 事後分布 |
|---|---|---|
| 二項分布( 回中 回) | ||
| ポアソン分布( 個の合計 ) | ||
| 正規分布(分散 は既知) | 正規分布 |
ガンマ分布は、 に比例する形( はレート)です。
1. ベータ分布と二項分布
なぜベータ分布になるのか、確かめましょう。尤度と事前分布の を含む部分を掛けます。
指数が足されるだけで、これは の形です。 と は「事前に見た当たりとはずれの回数」のように働きます。
例題:ベータ事前分布で当たる確率を推定する
事前分布を として、くじを10回引いたら7回当たりました。事後分布、事後平均、MAP推定値を求めましょう。
【解き方】
- 事後分布:
- 事後平均: の平均は なので、
- MAP推定値: モードは なので、
答えは、事後分布 、事後平均 約0.643、MAP推定値 約0.667です。ベータ分布の分位点を数値計算すると、95%信用区間は約 (0.386, 0.861)、 です。
ここがポイントです。事後平均は、事前平均0.5と最尤推定値0.7の重みつき平均になっています。
重みの4は事前分布の 、10はデータの数です。データが増えれば、事前分布の影響はだんだん薄れます。
2. 正規分布の平均
せっかくなので、別の例も見てみましょう。 が に従い、 は既知で、事前分布を とします。分散の逆数である 精度 を使うと、事後分布はきれいに書けます。
言葉で言うと、事後平均は事前平均とデータの平均を、それぞれの精度で重みづけた平均です。事後の精度は、2つの精度の和です。綱引きのように、確信の強いほうへ引っ張られます。
例えば、、、、、 とします。事前の精度は 、データの精度は で同じです。事後平均はちょうど真ん中の65、事後分散は です。
事前分布の選び方も確認しましょう。過去の知見があれば、それを反映した情報のある事前分布を使います。知見がなければ、一様分布 のように、なるべく影響の小さい 無情報事前分布 を使います。
試験のポイント:事後分布を求める問題では、 を含む部分だけを掛けて、どの分布の形かを見抜きます。定数は最後まで無視してかまいません。
以上が、共役事前分布についての説明です。
MCMC:事後分布から乱数を引く
続いて、公式で解けないときの計算方法を解説します。
共役でない場合、ベイズの定理の分母の積分は、ふつう計算できません。母数が多いと、数値積分もお手上げです。ここで発想を変えます。事後分布の式が書けなくても、事後分布に従う乱数がたくさんあれば、その平均や分位点で事後分布を調べられます。
そこで登場するのが、マルコフ連鎖モンテカルロ法(MCMC法、Markov chain Monte Carlo)です。マルコフ連鎖の記事で、連鎖を長く走らせると定常分布に落ち着くことを学びました。それを逆に使います。定常分布が目標の事後分布になるようにマルコフ連鎖を設計して走らせ、その軌跡を乱数として使うのです。
その代表が MHアルゴリズム(メトロポリス・ヘイスティングス法、Metropolis-Hastings)です。目標の分布を 、現在の値を とします。
【MHアルゴリズムの手順】
- 提案分布 から、候補 を引く
- 採択確率 を計算する
- 確率 で に移動し、それ以外なら にとどまる
- 1〜3を繰り返す
が左右対称なら、比は です。登山に例えるなら、目隠しで1歩踏み出す場所を決めて、登りなら必ず進み、下りならくじで進むかどうかを決めます。その結果、高いところほど長く滞在し、滞在時間が標高に比例するようになります。
大切なのは、 が比でしか現れないことです。事後分布の定数である分母の積分は約分されて消えるので、「尤度 × 事前分布」だけで計算できます。
なぜ定常分布が になるのでしょうか? から へ移る確率を とすると、次の 詳細釣り合い条件 が成り立ちます。
中央の式は と を入れ替えても同じです。両辺を について足すと、 が定常分布であることが分かります。
具体的に見てみましょう。先ほどの を目標に、定数を除いた だけで動かします。現在が0.6で、対称な提案から候補が出たとします。
【1ステップの計算】
- 候補が0.7のとき: 比は約1.09なので、採択確率は1で必ず移動
- 候補が0.5のとき: 比は約0.57なので、確率0.57で移動
- 候補が0.9のとき: 比は約0.10なので、確率0.10で移動
標準偏差0.15の正規乱数で提案して20万回動かすと、平均は約0.642、標準偏差は約0.124となりました。真の値は0.643と0.124です。公式を使わなくても、事後分布が再現できています。
一方で、MCMCには実務上の注意があります。
【MCMCの注意点】
- 初期値の影響が残る最初の部分は捨てる(バーンイン)
- 連続する値には自己相関があるので、見た目の個数ほど情報がない
- 提案の幅が狭いと採択されても動きが遅く、広いと棄却が増える
- 初期値を変えた複数の連鎖が同じ分布に落ち着くかを確認する
試験のポイント:MHアルゴリズムの採択確率は比で決まるので、正規化定数が分からなくても使えます。棄却されたときは、「現在の値をもう1回記録する」点に注意します。
以上が、MCMCについての解説です。
ギブスサンプリング:1変数ずつ順番に更新する
さらに、MCMCのもう1つの代表を説明します。
母数が複数あると、全部を同時に提案するのは大変です。そこで、1変数ずつ順番に更新します。これが ギブスサンプリング(Gibbs sampling)です。
【ギブスサンプリングの手順(2変数の場合)】
- 現在の を固定して、 を から引く
- 新しい を固定して、 を から引く
- 1と2を繰り返す
このように、他の変数すべてを固定したときの分布を 完全条件付き分布 と呼びます。縦に動いて、横に動いて、を繰り返す将棋の飛車のような動きです。
ギブスサンプリングは、MHアルゴリズムの特別な場合です。提案分布を完全条件付き分布にすると、採択確率の比は次のように1になります。
つまり、棄却が一度も起きません。その代わり、完全条件付き分布から乱数を引けることが条件です。
例えば、 が平均0、分散1、相関 の2変量正規分布なら、 です。 で今の が1なら、次の は から引きます。 が出たら、次の は から引きます。
せっかくなので、ベイズ推定の例も見てみましょう。正規分布の平均 と精度 がともに未知で、事前分布を 、 と独立に置きます。同時の事後分布は名前のある形になりませんが、完全条件付き分布は名前のある形です。
を見るときは を既知とみなし、共役事前分布の節の公式を使っています。 のほうも同じ考えです。難しい同時分布を、簡単な1変数の問題に分けて解くのが、ギブスサンプリングの強みです。
ただし、変数どうしの相関が強いと、1回の動きが小さくなり、連鎖がなかなか全体を回りません。 なら条件つき分散は0.0199しかなく、細い谷を少しずつ進むことになります。
以上が、ギブスサンプリングについての説明です。
階層ベイズモデル:似たグループで情報を分け合う
最後に、MCMCが特に力を発揮するモデルを見ていきましょう。
ラーメン店の口コミサイトを考えてみてください。A店は口コミ4件で平均75点、B店は口コミ100件で平均75点です。全店の平均は60点だとします。A店とB店の実力を、同じ75点と考えてよいでしょうか? A店の4件は、たまたま好意的な客だったのかもしれません。
階層ベイズモデル(hierarchical Bayes model)は、事前分布の母数にもさらに事前分布を置き、グループの母数を2段階で表すモデルです。店 の 件目の点数を 、店の実力を とすると、次のように書けます。
1段目が店の中の点数のばらつき、2段目が店どうしの実力のばらつきです。3段目の、事前分布の母数の事前分布を 超事前分布(hyperprior)と呼びます。「どの店も、ラーメン店という同じ業界の出身」と考えるイメージです。
、、 を与えたとき、 の事後平均は、共役事前分布の節の公式から次のようになります。
、、 として計算してみましょう。
| 店 | 件数 | 店の平均 | 重み | 事後平均 |
|---|---|---|---|---|
| A店 | 4 | 75 | 0.50 | 67.5 |
| C店 | 25 | 75 | 0.86 | 72.9 |
| B店 | 100 | 75 | 0.96 | 74.4 |
件数の少ない店ほど、全店の平均に引き寄せられています。これを 縮小(shrinkage)と呼びます。店ごとに別々に推定すると少数のデータに振り回されます。全店を1つの平均で見ると店の差を無視します。階層モデルは、その中間で、データの量に応じて情報を分け合います。これを部分プーリングと呼びます。
実際には、 と も未知です。 と母数が多いので積分は手に負えませんが、完全条件付き分布は簡単な形になることが多く、ギブスサンプリングで計算できます。これが、MCMCと階層ベイズモデルの相性がよい理由です。
補足(ここは読み飛ばしてOK): と に超事前分布を置かず、データから推定した値を代入して使う方法を、経験ベイズ法と呼びます。
試験のポイント:階層ベイズモデルでは、データの少ないグループの推定値ほど、全体の平均へ強く縮小されます。
以上が、階層ベイズモデルについての解説です。
細かい式を忘れてしまっても問題ありません。ここでは、「事後分布は尤度 × 事前分布」「解けないときはMCMCで乱数を引く」「階層モデルはグループで情報を分け合う」という点だけ押さえておきましょう。
今回のまとめ
それでは、今回の内容を振り返ります。
今回は、母数の不確かさを確率分布で表し、データで更新するベイズ法について紹介しました。やっていることは、天気予報の更新と同じです。計算の難しさはMCMCが引き受けてくれるので、複雑なモデルでも「事前分布と尤度を書く」ことに集中できます。
今回のポイントを振り返りましょう。
振り返り
- 事後分布は「尤度 × 事前分布」に比例する。信用区間は「母数が入る確率」とそのまま読める。
- 共役事前分布なら、パラメータの足し算で事後分布が求まる。事後平均は事前平均とデータの重みつき平均。
- MCMCは、定常分布が事後分布になるマルコフ連鎖を走らせて、乱数を得る方法。
- MHアルゴリズムは比で採択を決めるので、正規化定数がいらない。登りは必ず進み、下りはくじで決める。
- ギブスサンプリングは完全条件付き分布から順に引く方法で、棄却がない。
- 階層ベイズモデルは、データの少ないグループを全体の平均へ縮小する。
キーワードのおさらい
- 事前分布: データを見る前の母数の分布
- 事後分布: データを見たあとの母数の分布。尤度 × 事前分布に比例する
- 共役事前分布: 事後分布が事前分布と同じ分布族になる事前分布
- マルコフ連鎖モンテカルロ(MCMC)法: 目標の分布を定常分布にもつマルコフ連鎖で乱数を得る方法
- MH(Metropolis-Hastings)アルゴリズム: 提案された候補を採択確率で受け入れるMCMCの方法
- ギブスサンプリング: 完全条件付き分布から1変数ずつ順に乱数を引くMCMCの方法
- 階層ベイズモデル: 事前分布の母数にも事前分布を置く、多段階のモデル
さて、MCMCでは、乱数がたくさん引ければ分布が分かることを見ました。でも、そもそもコンピュータはどうやって乱数を作っているのでしょうか? 乱数で計算する方法は、ほかにもあるのでしょうか?
次回は、乱数の生成法と「モンテカルロ法」「ブートストラップ法」などの計算手法について紹介します。
それでは、次の記事へ進んでいきましょう。