CozyRats Notebook

Pythonや機械学習、データの可視化について書きます。

ベイジアンABテストツールを作成してみた

TL;DL

  • ABテストの結果を入力すると、どれくらいの確率で差があるかを判定するツールを作成しました
  • 共役事前分布はBeta分布、事前分布は一様分布を仮定しています
    • そのため、観測データはベルヌーイ分布を仮定します

github.com

ベイジアンABテストとは

ベイズ推定の理論を用いて、介入効果を確率分布として表現し、各群で得られた確率分布の差を見ることで介入効果が実際にありそうか否かを判断します。

頻度主義でよく用いられる検定の考え方は、元々の母集団が真の値があり、得られたサンプル(=標本)は、t分布やχ自乗分布に沿うように振る舞うという前提で考えられます。

ビジネスでこの手法を使う場合、事前にどういった分布を仮定するか、おおよその結果の差、p値や検出力をどうするかなど、ある程度実験計画をしっかりしておく必要があります。

またUIの改善などしてみたもののABで有意な差がなかった、となる状況が多いのですが、この場合の解釈として帰無仮設を棄却できない、つまり「差があるかどうか分からない」という何とも言えない解釈になり意思決定への貢献がしづらい一面がありました。

ベイズ推定は逆の発想で、今得られた結果からはこれぐらいのことが言えるよね、というのを常時アップデートしていく考え方です。得られたサンプルが10個しかなければ、「今の段階ではBが◯◯%の確率で勝っているよ」という形で教えてくれるため、事前に綿密な計画をたてる必要が薄くなったり、日々データを見てある程度確証が持てたのでここでテストを打ち切ろう、という判断もしやすく、ビジネスのプロセスと非常に相性が良いかなと思っています。

今回は観測データがベルヌーイ分布仮定、つまり成功、失敗という2つの結果が一定の確率で起こっているという仮定で作成しています。CTRやCVRなどでは、ClickやCVの有無を表現しています。

おわりに

今回作成するにあたり、FastAPIを使ってみたかったこともありそちらも活用してみました。不慣れな状態なので違和感ある箇所があるかもしれませんが、その際はコメントなどいただけますと幸いです。