uni-3 log

    Search by

    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.
    view raw bayesian_ab.ipynb hosted with ❤ by GitHub

    まとめ

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

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

    参考

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