1. technical

ベイズABテスト

計算ツール

信用区間の閾値 A B

試行回数$n_1$

成功回数$x_1$

$\alpha_1$

$\beta_1$

試行回数$n_2$

成功回数$x_2$

$\alpha_2$

$\beta_2$

計算方法の説明

勉強中の知識で独自に算出したもので,あまり自信がありません。予告なく修正される可能性が高いです。ご指摘があればtwitterで投げてもらえるとありがたいです。

この計算は,施策Aと施策Bの結果について,試行回数,成功回数,成功率の関係にベータ二項分布を仮定し,どちらの施策がどれくらいの確度でどれくらいの大きな成功率を持つかを詳しく評価するものです。

応用例としては,例えばインターネット広告のクリック率の評価があります。その場合,施策A,Bは広告A,B,試行回数は表示回数,成功回数はクリック数,となります。

ベータ二項分布について

ここで用いるベータ二項分布とは,ベータ分布と二項分布からなる確率関数です。二項分布は,結果が成功か失敗のいずれかである成功率$u$の試行を$n$回行ったときの成功回数$x$の確率分布といえます。以下の式で表されます。

$$ p(x|u) = {}_{n} \mathrm{C}_{x} u_{1}^{x} (1-u)^{n - x} $$

そして,成功率$u$を確率変数とする確率分布としてベータ分布を用います。以下の式で表されます。なお,$B(\alpha,\beta)$はベータ関数です。

$$ p(u) = \frac{u^{\alpha - 1} (1-u)^{\beta - 1}}{B(\alpha,\beta)} $$

ベータ二項分布を用いた施策A,Bの確率モデル

このベータ二項分布により,施策A,Bの確率モデルを考えると,以下の式となります。

$$ x_1 \sim p(x_1|u_1,n_1) = {}_{n_1} \mathrm{C}_{x_1} u_{1}^{x_1} (1-u_1)^{n_1 - x_1} $$

$$ u_1 \sim p(u_1) = \frac{u_1^{\alpha_1 - 1} (1-u_1)^{\beta_1 - 1}}{B(\alpha_1,\beta_1)} $$

$$ x_2 \sim p(x_2|u_2,n_2) = {}_{n_2} \mathrm{C}_{x_2} u_{2}^{x_2} (1-u_2)^{n_2 - x_2} $$

$$ u_2 \sim p(u_2) = \frac{u_2^{\alpha_2 - 1} (1-u_2)^{\beta_2 - 1}}{B(\alpha_2,\beta_2)} $$

ここで,各変数はそれぞれ以下を表します。

$\alpha_1,\beta_1,\alpha_2,\beta_2$は,施策の実施結果とは別に決める定数です。ハイパーパラメータと呼ばれることがあります。この値を適切に用いると,$u_1$と$u_2$について取り得る値を予め絞り込むことができ,少ないデータでも尤もらしい評価を行える可能性が上がります。

$\alpha_1,\beta_1,\alpha_2,\beta_2$を全て1にしたとき,ベータ分布は確率変数の値域[0,1]の一様分布と同じ形になります。これは,$u$が[0,1]の範囲のどの値になる確率も同じという仮定になります。

グラフィカルモデルで書くと以下。

bayes_ab_1

上記の確率モデルから求めたいもの

以下を求めてきます。

$u_1$,$u_2$の信用区間

ここでは,以下を求めるために,

試行回数と成功回数が与えられたときの成功率の確率関数$p(u_1|x_1,n_1,\alpha_1,\beta_1)$と$p(u_2|x_2,n_2,\alpha_2,\beta_2)$を考えます。

まず,グラフィカルモデルから,以下の式が得られます。 $$ p(u_1,x_1,n_1,\alpha_1,\beta_1) = p(x_1|u_1,n_1) p(u_1|,\alpha_1,\beta_1) p(n_1) p(\alpha_1) p(\beta_1) $$ 両辺を$p(x_1,n_1)$で割ると, $$ \frac{p(u_1,x_1,n_1,\alpha_1,\beta_1)}{p(x_1,n_1)} = \frac{p(x_1|u_1,n_1) p(u_1) p(n_1) p(\alpha_1) p(\beta_1)}{p(x_1,n_1)} $$ となり,左辺を条件付き確率の定義を用いて変形すると $$ p(u_1 | x_1,n_1,\alpha_1,\beta_1) = \frac{p(x_1|u_1,n_1) p(u_1) p(n_1)p(\alpha_1) p(\beta_1)}{p(x_1,n_1)} $$ が得られます。また,右辺は,$x_1,n_1,\alpha_1,\beta_1$が定数であること,確率関数は積分すると1となることを利用して,積分したとき1にするための定数$K_1$をおいて, $$ p(u_1 | x_1,n_1) = K_1 p(x_1|u_1,n_1) p(u_1) $$ と表すことができます。ここに上述した確率モデルの$p(x_1|u_1,n_1), p(u_1)$を代入し,さらに,$x_1$,$n_1$,$\alpha_1$,$\beta_1$が定数であることから積分したとき1にするための定数$K^{'}_1$を用いて整理すると, $$ \begin{align*} p(u_1 | x_1,n_1) &= K_1 {}_{n_1} \mathrm{C}_{x_1} u_{1}^{x_1} (1-u_1)^{n_1 - x_1}  \frac{u_1^{\alpha_1 - 1} (1-u_1)^{\beta_1 - 1}}{B(\alpha_1,\beta_1)} \\ &= K^{'}_1 u_{1}^{x_1} (1-u_1)^{n_1 - x_1}  u_1^{\alpha_1 - 1} (1-u_1)^{\beta_1 - 1} \\ &= K^{'}_1 u_{1}^{x_1 + \alpha_1 - 1} (1-u_1)^{n_1 - x_1 + \beta_1 - 1} \end{align*} $$ が得られます。$p(u_2 | x_2,n_2,\alpha_2,\beta_2)$についても,同様にして得ることができ,以下となります。 $$ p(u_2 | x_2,n_2) = K^{'}_2 u_{2}^{x_2 + \alpha_2 - 1} (1-u_2)^{n_2 - x_2 + \beta_2 - 1} $$

試行回数と成功回数が与えられたときの成功率の確率関数が得られたので,ここから信用区間を求めることができるようになりました。

$u_1$,$u_2$の差の確率関数と信用区間

次に,以下を求めるために,

施策Bの成功率$u_2$と施策Aの成功率$u_1$の差$e=u_2-u_1$の確率関数$p(e | x_1,n_1,\alpha_1,\beta_1,x_2,n_2,\alpha_2,\beta_2)$を求めます(この表記,ちょっと自信ありません)。 $u_2 - u_1 = e$になる確率を全て足せば良いはずです。したがって,確率変数の差$e$は以下の式で得られます。

$$ p(e) = \int_{-\infty}^{\infty} p(u_1=k,u_2=k+e|u_1,n_1,u_2,n_2)dk = \int_{-\infty}^{\infty} p(u_1=k|u_1,n_1) p(u_2=k+e|u_2,n_2) dk $$

なお,ここで,$u_1$と$u_2$が独立であることを利用して2変数の確率関数$p(u_1,u_2|u_1,n_1,u_2,n_2)$を積の形$p(u_1|u_1,n_1) p(u_2|u_2,n_2)$にしています。

これを用いることで,施策BとAの成功率の差$e$の信用区間と,施策BがAよりも優れている確率 $p_{e21}$,施策Aが施策Bより優れている確率$p_{e12}$を求められます。

プロットしているもの

が,$p(e | x_1,n_1,\alpha_1,\beta_1,x_2,n_2,\alpha_2,\beta_2)$の解析解を導けていません。力不足か,あるいは閉形式で書けないものなのかわからないです。なので,計算ツールでプロットしているものは,確率密度関数$p(e | x_1,n_1,\alpha_1,\beta_1,x_2,n_2,\alpha_2,\beta_2)$と同じような形をした確率質量関数$p(e^{'} | x_1,n_1,\alpha_1,\beta_1,x_2,n_2,\alpha_2,\beta_2)$です。

$p(e^{'} | x_1,n_1,\alpha_1,\beta_1,x_2,n_2,\alpha_2,\beta_2)$の計算方法ですが,まず,確率密度関数$p(u_1 | x_1,n_1)$と$p(u_2 | x_2,n_2)$を,以下のような区分求積法により

bayes_ab_3

同じような形をした確率質量関数$p(u_1^{'} | x_1,n_1,\alpha_1,\beta_1)$と$p(u_2^{'} | x_2,n_2,\alpha_2,\beta_2)$に変換しています。(図中で,$\alpha,\beta$は記述を省略しています)

そして,それを用いて,$p(e | x_1,n_1,\alpha_1,\beta_1,x_2,n_2,\alpha_2,\beta_2)$と同じような形をした$p(e^{'} | x_1,n_1,\alpha_1,\beta_1,x_2,n_2,\alpha_2,\beta_2)$を以下の計算で得ています。 $$ p(e^{'} | x_1,n_1,\alpha_1,\beta_1,x_2,n_2,\alpha_2,\beta_2) = \sum_k p(u_1^{'}=k|u_1,n_1) p(u_2^{'}=k+e^{'}|u_2,n_2) $$

計算ツールでプロットしているものは,このようにして算出した,以下の確率質量関数です。

以上。

検算

未。

更新履歴

2021.09.26, 計算ツール作成

2021.10.04, 文章作成

2021.10.24, 文章修正(数式周り)

2021.10.27, 文章修正(また数式周り)