uni farm

pymc3を用いてベイズ統計によるABテスト結果検証用notebookを作った

いわゆるベイジアンABテスト。流行ってそうなので、挑戦してみた。 統計モデルをつくる作業はあまりやったことがなかったので、面白かった

環境

  • python: 3.7
  • pymc3: 3.8

実験

図の見方と流れを書いておく。コードは最後にgistを掲載する

ABテストとして、例えばレコメンドロジックについて実装Aと実装Bを試したとする

どちらのロジックが優れていたか、各々のimpressionとconversionの値を用いてconversion rateの比較を行うようなことを考える

データとしては以下のようになった

Bの方が良さそうだが、本当に差分があるかどうかをベイズ統計を用いて評価してみる

# sampla data
sample_a = 6746
cv_a = 972
sample_b = 6790
cv_b = 1200

pymc3を用いて以下のようなモデルを設定し、パラメータ推定を行う 事前分布としてベータ分布を用いる( alpha bata が1のときは一様分布) 事後分布はベルヌーイ分布とする

stats model

ba = BayesianAB(sample_a, cv_a, sample_b, cv_b)
ba.fit_model(n_samples=10000)

推定結果は以下のようになった

summary of result

comparison of A and B

r_hatが1に近いので、シミュレーション自体は収束してそう

また、Aの方が起こりやすい(Aの方が大きい値が出やすい)確率は0であり、Bの方がCVも3%ほど高く、有意差があることが図からもわかる

コード全体はgistにした

Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.

まとめ

ABテストにて有意差を評価する時には基本的にt検定を用いた平均の差の検定を行うことが多い気がするが、こちらの方法は、サンプルサイズが大きい(数千程度)と、必ず有意差が出てしまうらしい。

ベイズ統計を用いることで、図で表せるためわかりやすい+サンプルサイズをあまり気にしなくて良いので、便利に使えそうだと思った

参考

数式周りから実装まで参考になった

pymc3の使い方を参考にした

2022, Built with Gatsby. This site uses Google Analytics.