8
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

ベイジアン𝐴/𝐵テストの活用+ウェブサービス有効利用

Last updated at Posted at 2021-08-23
*** ###はじめに よりよい改善によりコンバージョン(購入、登録等)を高める機会は、モノからコトの進展により、ますます増えてきている。 最近、ベイズ推定を利用した「ベイジアン𝐴/𝐵テスト」が注目されている。 「ベイジアン𝐴/𝐵テスト」は、統計が苦手な方にもわかりやすく、計算そのものは簡単ではないが、簡単に実行できるウェブサービス(無償)があり、これをうまく活用する方法についてまとめてみた。     *** ###𝐴/𝐵テストとは 𝐴/𝐵テストは、二つの異なる処置の効果の差をみるテスト。

例えば、

● 薬 𝐴 と薬 𝐵 の効果の違い
● どちらのウェブサイトのコンバージョン (訪問者が登録した、購入した、何かのアクションを起こした等)が良いか

など、「どちらのバージョンが良いだろうか」を把握したいときに行うテストが𝐴/𝐵テスト。

かならず効果が出るとは限らない(一般には10~20%とされる)が、以下のようにわずかな違いですばらしいインパクトが得られることもある。

   


###𝐴/𝐵テストの2つのアプローチ ─統計的仮説検定とベイズ推定─

「𝑁 人がサイト 𝐴 を見て、そのうち 𝑛 人がコンバージョンにつながった」

という場合、コンバージョンレートを単純計算すると 𝑝𝐴 = 𝑛/𝑁 となるが、観測された比率 𝑛/𝑁 が 真の比率と等しいとは限らない。

例えば「サイト𝐴 のコンバージョン率が5%、サイト𝐵が6%だった」という場合、

① 𝐴と𝐵の違い(差)は、そもそも意味がある差か?
② 𝐴と𝐵の違い(差)は、確率的にどの程度あてになる結果か?

を気にかけないといけない。

① は実施者の意図によるものなので、ここでは分析に関わる②のみに触れることとする。

𝐴/𝐵テストの結果の分析には、上記②の判断を誤らぬための分析アプローチがいくつかあり、
これまでは「統計的仮説検定(以下、仮説検定)」によるアプローチが主流であったが、最近は「ベイズ推定」によるアプローチ(※)=「ベイジアン𝐴/𝐵テスト」が注目されている。

※ Google optimizeが提供している𝐴/𝐵テスト(同じウェブページで複数のパターンを用意し、それらをランダムに表示して成果を調べる)も「ベイズ推定」を採用している。

 

「ベイジアン𝐴/𝐵テスト」が注目されている背景には「仮説検定による𝐴/𝐵テスト」の扱いにくさがある。
まず、事前にサンプルサイズを計算する必要があるという点がある。
計算は、コンバージョン率ならば、「現在のコンバージョン率」がすでにわかっている必要があり、「検出したい比率の最小差」と「統計的検出力の設定」も必要になる。
調べごとをするために調べごとが必要な感覚があり、残念ながらこの時点で断念していることも多いのではないだろうか?
おまけに、サンプルサイズを計算すると𝐴/𝐵テストを実施するには十分な数量が必要ということにも気づかされる。(サンプルの準備だけでも時間がかかるじゃないか・・・)

𝐴/𝐵テスト実施後の判断でも悩まされる。有意となった場合、推定値は得られるが、この推定値は点。「信頼区間95%で〇〇~△△」という幅も計算できるが、これは感覚的に理解したい幅ではなく、「同じ𝐴/𝐵テストを100回実施した時に、95回はその区間の中に推定値が含まれる」というものになる。
また、𝐴/𝐵テスト結果を検定することにより、白黒は判断できるとされているが、有意とならなかった場合は「差があるとはいえない」という非常に歯切れの悪い表現になる。白黒ではなく白グレーという感じである。
 
一方、「ベイジアン𝐴/𝐵テスト」は、サンプルサイズの縛りはなく、必要ならば逐次追加すればよく、現在の比率がわかっていなくてもテストはでき、結果も点ではなく確率分布として可視化できる等、「仮説検定による𝐴/𝐵テスト」で感じられているデメリットは忘れることができる。
結果の解釈も、有意か有意でないかではなく、よしあしの程度が確率でわかる。例えば「𝐴よりも𝐵は70%の確率でよい」など、とても簡単である。

これは、スモールスタートできるということであり、早くできるということでもあり、よしあし含め、より正しい意志決定につなげられるということになる。
これまで「ベイジアン𝐴/𝐵テスト」は、計算過程で多量のシミュレーションを必要とするため、敬遠されていたところがあるようであるが、最近では(今回紹介する)無償ウェブサービスも増えてきており、「仮説検定による𝐴/𝐵テスト」をやめてしまったというところも多いようである。
  
  
  


###𝐴/𝐵テストはウェブサービスが便利 :point_up_2:
「仮説検定による𝐴/𝐵テスト」も「ベイジアン𝐴/𝐵テスト」も、現在はRやPythonで分析されている方が多い。
RやPythonを駆使できる方、𝐴/𝐵テストが実行可能な統計ソフトをお持ちの方は、これらを活用されると思うが、便利なウェブサービスもあり、特にはじめての方にはすぐに試せるのでおすすめである。

  
###ベイジアン𝐴/𝐵テスト —— ウェブサービス ——
「ベイジアン𝐴/𝐵テスト」のウェブサービスを以下に4つ紹介する。
いずれも、①𝐴,𝐵のコンバージョンレート、②𝐴,𝐵のどちらが何%の確率でよいか?、③𝐴,𝐵の確率分布(事後確率)の表示 ができるものとなっており、2.は2種(𝐴,𝐵)超えるケースも対応、3.はコンバージョンユーザー増減予想に対応等の特徴がある。

各ウェブサービスの画面イメージ![キャプチャ3.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1275001/c2c48609-e624-32c3-51ee-57bf945a4936.jpeg)
>
注意点● ウェブサービスによるが、𝐴を現行Ver.を、𝐵に改善Ver.を対応づけ、結果を「𝐵は𝐴に対し、どの程度よいか」と表記されるケースが多い。これを意識しておくと結果の理解が自然になる。 ● 𝐴と𝐵の確率分布の差がグラフ表示されている場合、「差の確率分布」をグラフ化しているケースと「差の比率の確率分布」をグラフ化しているケースがある。
    

  
 
###1.Bayesian A/B test for conversion:Eric Benjamin Seufert

操作説明
 𝐴,𝐵ともに「successes」と「total」に値を入力、「Calculate」をクリック

上段の表
 𝐴,𝐵の「sample size」、𝐴,𝐵及び𝐵-𝐴の「conversion(Rate)」「95% HDI(95%信用区間)」と
 以下が示される。
Probability that B is better than A: ← BがAよりも良い確率
Expected uplift in conversion if B is actually better: ← Bが実際に優れている場合に期待されるコンバージョンのアップリフト(改善)
Expected loss in conversion if B is actually worse: ← Bが実際に悪い場合のコンバージョンにおける期待される損失
Approximate distribution of difference of conversions:中段グラフ
 𝐵-𝐴(差)の確率分布が示される。
Distribution of conversions 𝐴&𝐵:下段グラフ
 𝐴,𝐵の確率分布が表示されます。𝐴,𝐵にどの程度の違いがあるかを点ではなく、分布として視覚的につかむことができる。(サンプルサイズが大きいほど𝐴,𝐵の差は大きくなる)

###2.BAYESIAN A/B TESTING CALCULATOR:dynamicyield.com

操作説明
 𝐴,𝐵ともに「Samples」と「Conversions」に値を入力、「CALCULATE」をクリック
※通常、比較対象は𝐴,𝐵2種であるが、画面の『+』ボタンをクリックすることで最大10種まで設定できる。

中段の横棒グラフ
 各バージョンが他のバージョンよりも優れている確率がグラフで示される。
中段の表
 𝐴,𝐵の「Samples」、「Conversion」、「Conversion Rate」、「Probability to be Best(ベストパフォーマンスの確率:各バージョンが他のバージョンよりも優れている確率)」、「Expected Loss(期待損失:あるバリエーションを勝者と宣言し、それが間違っていた場合、どのくらいの損失が予想されるか)」の値が示される。
下段のグラフ
 𝐴,𝐵の確率分布が表示されます。𝐴,𝐵にどの程度の違いがあるかを点ではなく、分布として視覚的につかむことができる。(サンプルサイズが大きいほど𝐴,𝐵の差は大きくなる)

###3.Bayesian A/B Test:Itamar Faran

操作説明
 A,Bともに「Number of Converted Users」と「Total Number of Users」に値を入力、「RUN!」をクリック

最初のグラフ
 コンバージョンレートの箱ひげ図。「Credibility 1 (%):」で箱ひげ図の箱の範囲、「Credibility 2 (%):」で箱ひげ図のひげの範囲が変更できる。
2段目のグラフ
 𝐴,𝐵の事後確率が重なっている場合、𝐴が𝐵よりもよい可能性も、AがBよりも悪い可能性も存在する。例えば𝐴が𝐵よりもよい場合、𝐴を選択すれば〇〇人のユーザーに対してコンバージョンユーザーが何人増えるか、𝐵を選択すれば〇〇人のユーザーに対してコンバージョンユーザーが何人減るかという予想が示される。(だと思います)
※統計的仮説検定を行った場合のp値も示される。(p≦0.05で有意)
下段のグラフ(左)
 𝐴,𝐵の確率分布が表示される。𝐴,𝐵にどの程度の違いがあるかを点ではなく、分布として視覚的につかむことができる。(サンプルサイズが大きいほど𝐴,𝐵の差は大きくなる)
下段のグラフ(右)
 𝐴,𝐵の差の確率分布が表示される。

###4.A/B Test Calculator:abtestcalculator.com

操作説明
 𝐴,𝐵ともに「Participants」と「Conversions」に値を入力するだけ

Executive Summary
 次のような結果(例)が示される。”A のコンバージョンレート(17.65%)は、B のコンバージョンレート(16.59%)よりも 6%高い。97%の確率で、Aの方がコンバージョンレートが高いことになります。この結果は、ランダムな偶然の結果ではなく、あなたが行った変更の結果であることを確信できます。”
Conversion Rate Distributions
 𝐴,𝐵の確率分布が表示される。𝐴,𝐵にどの程度の違いがあるかを点ではなく、分布として視覚的につかむことができる。(サンプルサイズが大きいほど𝐴,𝐵の差は大きくなる)
Improvement Distribution
 𝐴,𝐵の差の確率分布が表示される。

####Expected loss(期待損失)について
Expected loss(期待損失)は、期待損失率のこと。
期待損失率(=コンバージョンレートの減少量)の期待値。
上記ウェブサービスのうち、1.と2. はこの「Expected loss」が値で示されている。
期待損失率は『改善率(A-B/B)%』 × 『確率 %』 なので、改善率の確率分布(横軸『改善率(A-B/B)%』,縦軸『確率 %』)が表示されている場合はわかりやすい。
𝐴/𝐵テストの結果、改悪される場合だけに注目したときに、どの程度の改悪を見込めばいいのかを見積もった値ということになり、このExpected loss(期待損失)は、後で述べる「ベイジアン𝐴/𝐵テストの結果判断」に利用される。
 
  


###ベイジアン𝐴/𝐵テストのサンプルサイズと事後分布
「ベイジアン𝐴/𝐵テスト」は「仮説検定による𝐴/𝐵テスト」で必要とされるサンプルサイズ計算は行わなくてよいとされているが、「ベイジアン𝐴/𝐵テスト」後の𝐴,𝐵の確率分布(事後確率)はサンプルサイズによってどの程度変化するのかについて確認した。

コンバージョンレートが低い(2%)場合
𝐴のコンバージョンレートを**2%**とし、**𝐵-𝐴のコンバージョンレートの差『2%/5%/10%』サンプルサイズ『50/100/200/500/1000』**を可変した。
以下の表は、横をサンプルサイズ、縦をコンバージョンレートの差としたマトリクス。

コンバージョンレート2%時のマトリクス![キャプチャ.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1275001/65e6022e-51a3-183c-8f3b-2e91546a196c.jpeg)

 
𝐵-𝐴のコンバージョンレートの差**が大きくなるほど、サンプルサイズが大きくなるほど、𝐴,𝐵の確率分布(事後分布)の差が大きくなることがわかる。
このことから、サンプルサイズは一意に決まるものではなく、𝐵-𝐴のコンバージョンレートの差が大きければサンプルサイズは小さくでも判断しやすくなるし、差が小さければサンプルサイズが大きくないと判断がむつかしくなる。  
 

コンバージョンレートが高い(50%)場合
𝐴のコンバージョンレートを**50%**とし、**𝐵-𝐴のコンバージョンレートの差『2%/5%/10%』サンプルサイズ『50/100/200/500/1000』**を可変した。
※先との違いは、ベースとなるコンバージョンレートが2%→50%となったもの。
以下の表は、横をサンプルサイズ、縦をコンバージョンレートの差としたマトリクス。

コンバージョンレート2%時のマトリクス![キャプチャ2.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1275001/d56e97a2-612c-f869-8083-fa3ec6ac0c08.jpeg)

 
𝐵-𝐴のコンバージョンレートの差が大きくなるほど、サンプルサイズが大きくなるほど、𝐴,𝐵の確率分布(事後分布)の差が大きくなるという傾向は、先と同様であるが、コンバージョンレート2%の時よりも𝐴,𝐵の差が出にくくなっている。
このことから、レートが高い場合の比較の判断はよりむつかしいということになる。 
 
  
  


###ベイジアン𝐴/𝐵テストの結果判断
私は、以下のサイトがとても参考になった。

結果の判断に関する内容のみ、以下に要約。

ベイズのアプローチでは、𝑝値の代わりに、次の3つの數値が得られる。
 𝑃(𝐵 > 𝐴) - 𝐵が𝐴よりも優れている確率
 𝐸(loss|𝐵) - 𝐵が実際に悪い場合の予想損失
 𝐸(uplift|𝐵) - 𝐵が実際に良い場合、𝐵による期待されるアップリフト(改善)

𝐴と𝐵のどちらを使うかは、𝑃(𝐵 > 𝐴)に基づいて決定することもできるが、𝐸(loss|𝐵)があらかじめ定義された閾値よりも小さい場合にのみ𝐵を勝者とする方がはるかにスマート。
事前に定義した閾で区別できない場合でも少なくとも情報に基づいた決定を行うことはできる。𝑃(𝐵 > 𝐴)の確率でどれだけの利益が得られるか、1 - 𝑃(𝐵 > 𝐴)の確率でどれだけの損失が出るか、これがベイジアン𝐴/𝐵テストの重要な利点。

  
先に紹介した
1.Bayesian A/B test for conversion の場合、
「Probability that B is better than A:」𝑃(𝐵 > 𝐴) となり、
「Expected loss in conversion if B is actually worse:」𝐸(loss|𝐵) となる。

同サイトでは、80%の検出力を得るために必要なサンプルサイズのシミュレーションにより「仮説検定による𝐴/𝐵テスト」と「ベイジアン𝐴/𝐵テスト」を比較されている。(条件:コンバージョンレートはA:20%、B:22%とされている)
各サンプルサイズで1,000回の𝐴/𝐵テストを行い、Bが勝者であると正しく宣言した割合を計算した結果、80%の検出力を得るために必要なサンプルサイズは「ベイジアン𝐴/𝐵テスト」の方が著しく低くなったとのこと。

sim_chartUPG1.png

また、「仮説検定による𝐴/𝐵テスト」ではα値を5%、「ベイジアン𝐴/𝐵テスト」では、Expected loss(期待損失)が0.1%よりも低い場合にBを勝者と宣言した とあり、結果判断の1例として参考になる。
  
  


###まとめ
「ベイジアン𝐴/𝐵テスト」は、事前にサンプルサイズ計算を行う必要はなく、𝐴,𝐵のサンプルサイズが異なっていても問題ない。
従来の「仮説検定による𝐴/𝐵テスト」は、𝐴,𝐵は同じであるとはいえないといった結論であったが、「ベイジアン𝐴/𝐵テスト」は、どちら(𝐴,𝐵)が何%確率でよいか(悪いか)が示されるため、意思決定につなげやすい。
いずれのアプローチもサンプルサイズが小さいと精度はえられないが、「ベイジアン𝐴/𝐵テスト」はスモールスタートができる。𝐴/𝐵テストを実施し、𝐴,𝐵の違いがはっきりしなければ、テストデータ(サンプルサイズ)を増やすことによって、白黒をハッキリさせられる。 
逐次、確率分布(事後分布)を確認し、𝐴と𝐵に差があると見いだせた時点で早々に調査は終え、アクションをとればよい。

※「仮説検定による𝐴/𝐵テスト」のウェブサービスも以下に紹介する。

 

   


###仮説検定による𝐴/𝐵テスト —— ウェブサービス ——

###Sample Size Calculator:ClinCalc.com

操作説明
 サンプルサイズ算出できる →以下設定を行い、「Calculate」クリック

Study Group Design :Two independent study groups
Primary Endpoint :Dichotomous(yes/no, 0/1なので)
Anticipated Incidence :Group1はコントロールの平均CVR、Group2はテストケースに期待するCVRを入力
Enrollment ratio :1(サンプルサイズの比率)
Type I/II Error Rate :α(有意水準)=5%, 1-β(検出力) 80%(0.8) /一般設定

###𝐴/𝐵テストCalculator:surveymonkey.com

操作説明
 𝐴/𝐵テスト判定(検出力、p値計算も)→以下設定を行い、「計算」クリック(𝑝値は0.05以下で有意、検出力は80%が目安)

訪問者 :𝐴,𝐵それぞれ訪問者数を入力
コンバージョン :𝐴,𝐵それぞれコンバージョン数を入力
仮説 :両側
信頼度 :95%/一般設定


###参考ページ

  
  


###おまけ:他のシミュレータ
https://vidogreg.shinyapps.io/bayes-arpu-test/

1.Bayesian A/B test for conversion の 別Ver.。ARPU(Average Revenue Per User:1ユーザーあたりの平均収益)で比較できる。
𝐴,𝐵それぞれ「total revenue(売上)」、「converted payers(アクティブユーザーと思う)」、「all players(対象ユーザー)」を入力。
各パラメータは以下のように計算されており、
「sample size used in simulations:」も入力(※初期値が100000)
「conversion」=「converted payers」/「total revenue(売上)」
「ARPPU」=「total revenue(売上)」/「converted payers」
「ARPU」=「ARPPU」×「conversion」
𝐵が𝐴に対する「ARPU」と「ARPPU」の優劣(Probability,Expected uplift,Expected loss)が示される。

※これは課金モデルのアプリ等での適用が想定されていると思われる。
ARPUは課金している1ユーザーあたりの平均収益(ARPPU)に課金ユーザー率(Paid User Rate)を掛けたものになる。ARPPUを構成する要素は商品の単価、一回あたりの購入数、購入頻度。
 ARPU = ARPPU x PUR
例えば、あるECアプリにおける1ヶ月に買い物をするユーザーの割合が40%で、買い物をするユーザーの月間平均購入金額が1,000円、平均購入点数が2点、購入頻度が月に2回だとするとこの月のARPPUは、
 ARPPU = 1,000 x 2 x 2 = 4,000 ARPPU:4,000円
よってこの月のARPUは、
 ARPU = 4,000 x 40% = 1,600 ARPU:1,600円 となる。

↑『Bayesian A/B Test Simulator』では「仮説検定による𝐴/𝐵テスト」と「ベイジアン𝐴/𝐵テスト」の実行時間が比較(シミュレーション)できる。Run Time(結論に達するまでの時間)とAccuracy(正しい結論に達したかどうか)が比較できます。すごいです。


###参考書籍

8
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?