簡易ベイジアンABテスト＆アンケート分析のPyMC3版

:::note warn
PyMC3版が動かなくなっていたため，以下で置き換えました．
:::

https://qiita.com/o93/items/2a2429306a45c85e6464

# 経緯

タイトルの通り，以下の記事を基に作ったCoLabを利用したツールのPyMC3版を2つ，GitHubに上げました．手作り版はアクセス数・CV数が大きくなるとエラーになってしまう不具合があり，今回ライブラリを使用したバージョンを作り直すことにしました．

# 注意
- コード複製・改変・その他諸々フリーですが，ツールから得た結果について一切責任を負いません
- このツールはGoogleドライブ上に保存することができるので，セキュリティに注意ください！
- ツール紹介がメインなので，技術的な説明や使用条件は省略しています
- とは言え記載に致命的な誤りがある場合はコメントください

# 過去記事

ベイジアンABテストに関する記事

https://qiita.com/o93/items/15bfdb259580461793b5

旧手作り版ツールの記事

https://qiita.com/o93/items/95570b30ed37b608279f

# 新しいツール

## ABテストPyMC3版

https://github.com/o93/bayesian-ab/blob/main/BeyesianAB_PyMC3.ipynb

使い方は前記事とほぼ同じですが，ビジュアライズを若干改良しているので，変更部分だけ説明します．CoLabへの直接リンクではなく，CoLabの**GitHubにコピーを保存**を利用しています．

**Open in CoLab**ボタンをクリックすればCoLabが起動して使用できます．
![スクリーンショット 2022-11-03 16.58.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/44273/3cd481d1-cf61-9f3f-98eb-5aca49498646.png)

今回PyMC3というライブラリを使用しているため`pip install ..`の実行が必要です．「▶」を押してしばらく待てばインストール完了．
![スクリーンショット 2022-11-03 16.59.56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/44273/1ce583bc-b125-9261-50bb-f15646545d28.png)


情報の入力は前回と同じで，同様に左上の「▶」を押します．
![スクリーンショット 2022-11-03 17.01.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/44273/eb715754-1330-8a7b-143b-31f11f2da2c3.png)

しばらく待つと確率分布が表示されます．アクセス数とCV数から推定した分布を使用し，指定したサンプル数分の試行をシミュレートした結果を得ることができます！ライブラリを初期化しているのか，最初の実行だけ妙に時間がかかります，，，

|テスト|アクセス数|CV数|CV率|HDI下限値|HDI上限値|
|:-:|--:|--:|--:|--:|--:|
|A|122|11|0\.090|0\.054|0\.141|
|B|169|24|0\.142|0\.101|0\.190|

![スクリーンショット 2022-11-06 8.07.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/44273/2363c8f1-6dcb-7642-3adc-17d21ad34282.png)
**HDI（Highest density interval**）は誤差のようなものですが，厳密には異なります．例えばしきい値を0.9とした場合，90％の確率でこの範囲内に収まります．詳細は以下．

https://rindalog.blogspot.com/2015/10/hdi-highest-density-interval.html

今回は検証を分けているため，こちらも「▶」を押して実行します．
![スクリーンショット 2022-11-03 17.15.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/44273/038773ff-25cd-a019-3c1c-d7690c6bc5a9.png)

A - Bが`0`以上となる確率の合計から，**AよりBが高くなる確率**を求めることができます．
```:実行結果
AよりBが高い確率:90.48%
AよりBが低い確率:9.53%
```
![スクリーンショット 2022-11-06 8.09.01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/44273/3e6ff676-65dc-0d41-a94e-cf875970728d.png)

AよりBが高い確率，しきい値による判定，`B - A`の確率分布が表示されます．AよりBが何％高くなるか，の確率分布を確認することができます．オレンジと青のグラフに若干のズレがあるようです，，，こちらは時間のあるときに修正を試みます，，，

```:ABテストの判定
================================
しきい値90.0%での判定: Bの勝利！
================================
```
しきい値を基にABテストの判定結果を表示しています．しきい値を下回る場合は`優位差無し`となります．

|B - A|HDI下限値|HDI上限値|
|--:|--:|--:|
|0\.905|-0\.012|0\.113|

![スクリーンショット 2022-11-06 8.14.26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/44273/f35bf9f9-8461-7e4b-1d4b-471a8d7b5fb3.png)

この図からはHDIの範囲を確認することができます．

レポート上にも注意点として記載していますが，HDIは**AよりBが何%高いか**という値が90%の確率でこの範囲に収まる，としたものであり，**AよりBが高い確率**とは異なるものです．具体的には，HDIは確率分布の右側の確率を含みませんが，AよりBが高い確率は，右側の確率を含んでいます．

## アンケート分析PyMC3版

https://github.com/o93/bayesian-ab/blob/main/BeyesianCategory_PyMC3.ipynb

こっちは今回新たに作ったものです．アンケートやレビューなどの結果から得られたデータを分析するツールです．それぞれの確率分布とHDIを計算してくれます．

![スクリーンショット 2022-11-03 17.28.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/44273/79b6870c-b4c4-be1d-5111-7ece90e1ad51.png)
値のリスト`values`には，アンケートなどから得られた結果を選択肢分入力します．複数回答が可能な場合は件数が重複するため，総数`all_size`を入力．その他はベイジアンABテストと同じパラメータです．期待値を算出したいときは，それぞれの選択肢に対する重み`weights`を入力します．

実行結果
|選択肢|総数|選択数|割合|HDI下限値|HDI上限値|
|:-:|--:|--:|--:|--:|--:|
|選択1|185|25|0\.135|0\.096|0\.178|
|選択2|185|45|0\.243|0\.191|0\.293|
|選択3|185|31|0\.168|0\.122|0\.212|
|選択4|185|78|0\.422|0\.358|0\.476|
|選択5|185|6|0\.032|0\.0149|0\.058|

![スクリーンショット 2022-11-06 8.29.08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/44273/5c64d896-2e33-ef0c-4c24-83c0210bc5fa.png)
![スクリーンショット 2022-11-06 8.30.18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/44273/8e9a2b37-0e8b-07fd-d015-00fbc737f7b1.png)

各選択肢の平均の割合とHDIの範囲を比較することができます．それぞれの選択肢でどちらがどれだけ高いか，などの細かい比較は，ベイジアンABテストを使えば実現できます．例えば選択1より選択3の比較をしたい場合，ベイジアンABテストツールでそれぞれの総数と選択数を入力します．

更に，それぞれの選択肢に対する重み（レビューの星の数，課金額など）から，期待値の確率分布を表示します．今回の実行例では，それぞれの選択肢1〜5をそのままレビューの星の数として，期待値の確率分布とHDIを算出しています．

|期待値|HDI下限値|HDI上限値|
|---|---|---|
|2\.974|2\.833|3\.108|

![スクリーンショット 2022-11-06 8.39.22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/44273/bd9d360f-618a-a2a5-88a8-82393e39e2a1.png)

# おわりに
以前から，意思決定の材料として**確からしさ**が重要だと感じていて，それを定量的に確認できるツールを作りたいと考えていました．簡易的なツールで用途は限られますが，このツールをきっかけにして，新たな知識・技術を得てカスタマイズすることで，より適切な意思決定の助けになるのではないか，と思います．

また，以前であればアプリやWebサイト公開する必要がありましたが，CoLabを使えばスタンドアローンに近い実行環境を手軽に提供できます．GitHubからポチっとすれば，ユーザーのクラウド環境で，ある程度無料で実行できるのはめちゃくちゃ便利ですね．

まだまだ知識不足ですが，今後も勉強を続けながらツールを作り，公開できそうなものは公開していきます．最後まで読んで頂き，ありがとうございました！