キヨシの命題考えたこと、つくったもの。

記事

施策効果の測定にはベイジアンA/Bテストを使おう!

この記事の目次 6項目

クライアント先のデータサイエンティストから、「施策検証といえば普通はA/Bテストだけど、ベイジアンA/Bテストというモダンな手法があって面白いよ!」と勧められたのでいろいろ調べてみました。
なるほど確かに、ベイジアンA/Bテストかなり使えます。
ということで、簡単にベイジアンA/Bテストを紹介しようと思います!
(Pyhtonでの実装方法や便利ツールなどは他所に詳しいのでリンクを貼っておきます)

※ちなみに、2020/6/15に弊社ブログにてStreamlitでベイジアンABテストができるWebアプリを作成した記事を書いています。

Ledge Tech Blog
StreamlitでベイジアンABテストができるWebアプリを作成してみた - Ledge Tech Blog
https://tech.ledge.co.jp/entry/2020/06/15/120000
こんにちは。レッジのデータサイエンティストの松本です。今回が3回目の投稿になります。 レッジでは、クライアント先に常駐してデータ・ドリブンな課題解決に取り組んだり、ダイナミックプライシングアルゴリズムを受託開発したり、クライアント先へのBI導入の推進など、幅広くデータ利活用に関わる業務に取り組んでいます。 さて、今回はStreamlitというMLツールを使った、ベイジアンA/BテストができるWebアプリの作り方をご紹介します。 なお、本記事で紹介するA/Bテストは、Webページへの来訪者数とコンバージョン数をもとに実施す...

目次

ベイジアンA/Bテスト(bayesian A/B testing)とは

ベイズ推論を使ったA/Bテストのことです。
ちなみによく使われるA/Bテストでは χ2 \chi ^2 (カイ2乗)検定という統計手法が使われています。

ベイズ推論とは

以下のベイズの定理によりパラメータの確率分布を推論することです。

f(θ∣x)=f(x∣θ)×f(θ)f(x) f(\theta | x) = \frac{f(x | \theta) \times f(\theta)}{f(x)}

左辺は事後分布 f(θ∣x) f(\theta | x) で右辺は尤度 f(x∣θ) f(x | \theta) と事前分布 f(θ) f(\theta) の掛け算になっています。
(分子の f(x) f(x) はパラメータ θ \theta に依存せずに決まるため、A/Bテストでは無視してOKです。)
直観的なイメージは以下となります。

項目イメージ(ふわっとした定義)
事前分布 f(θ) f( \theta) パラメータ θ \theta の経験的な分布。CVRでいえば、だいたい10%前後だよなぁとか
尤度f(x∣θ) f(x | \theta) パラメータ θ \theta が与えられたときの xx の確率分布
事後分布f(θ∣x) f(\theta | x) 右辺のような xx が与えられたときのパラメータ θ \theta の確率分布

右辺の事前分布には文字通り経験的にこうであろうと思われる確率分布を設定します。
たいていの場合、 α=1,β=1 \alpha = 1 , \beta = 1 のベータ分布 Be(1,1) Be(1,1) を事前分布とします。
ただ、この事前分布は経験則に基づく分布なので、観測データが入るたびにアップデートする必要があります。
(そうでないと、いつまでたっても経験則で推論することになるためです)
この事前分布は、右辺の計算結果である事後分布で更新されていきます。

これをベイズ推論の逐次合理性と言います。
事後分布(事前分布を更新するもの)を保持しておけば、過去に使ったデータは消去して良いので、オンラインでの利用で有効です。

(参考)事前分布にベータ分布を使う理由

上でいきなり出てきたベータ分布ですが、具体的には以下の定義となります。

Be(α,β)=1B(α,β)xα−1(1−x)β–1   (0<x<1) Be( \alpha , \beta ) = \frac{1}{ B( \alpha , \beta ) } x^{ \alpha -1 }(1-x)^{ \beta – 1} \,\,\, ( 0 < x < 1)
B(α,β) B(\alpha , \beta) はベータ関数であり、上記を正規化するための定数なので、今は気にする必要ありません。ここで、先ほど述べた事前分布によく設定される α=1,β=1 \alpha = 1 , \beta = 1 のベータ分布ですが、 Be(1,1)=1/B(1,1)=定数 Be(1,1) = 1/B(1,1) = 定数 であり、一様分布になります。要は、事前情報がなくて良くわからない場合は、事前分布に一様分布を設定しているというだけです。また、細かい話ですが、ベータ分布の xα−1(1−x)β−1 x^{ \alpha -1 }(1-x)^{ \beta - 1} 部分がベルヌーイ分布と同じ形をしています。このため、尤度関数がベルヌーイ分布から生成される場合、尤度関数と事前分布の掛け合わせである事後分布もベータ分布 Be(α,β) Be( \alpha, \beta ) となるため、再帰的なアルゴリズムを構築できます。こういったことから、事前分布にベータ分布を使う理由となっています。

A/Bテストの問題点

A/Bテストは施策の評価でよく使われますが、統計的仮説検定をベースにしているため以下の問題点を抱えています。

  1. テストを始める前にテストに必要なデータがどれくらいか知っている必要がある
  2. リアルタイムにテストできない。
    計画したデータサイズが集まるまで意思決定を保留しないといけない。
  3. テスト結果が直観的ではない。具体的にはP値とは何か?といった統計知識が必要になる。
  4. テスト結果が有意か有意でないかの白黒判断しかできない。
    特に統計的に有意差がない場合に何をすべきかの理解が非常に難しい。

上記のA/Bテストで抱える問題を解消するのが、ベイジアンA/Bテストになります。

ベイジアンA/Bテストだと何が良いか

ベイジアンA/Bテストを使うことで確率的に施策の良し悪しを判断できるようになります。

  1. 統計知識がなくても直観的に理解できる。
    つまり、ビジネスにおいてはステークホルダーとの会話がよりも容易になります。
  2. データサイズが少なくてもテストできる。
    A/Bテストなら「全くデータがないから判断不能」となるところを、ベイジアンA/Bテストなら「Aの方がBよりも60%の確率で良い」と言える。

なるほど、ベイジアンA/Bテストはビジネスの意思決定ではかなり重宝しそうです、

ベイジアンA/Bテストの過程では多くのシミュレーションを必要とし、計算コストが大きくなりますが、現在のPCスペックでは問題にはなりませんので、ぜひこちらを活用すべきでしょう。

参考リンク

Exploratoryというツールを使った分析例

Medium
An Introduction to Bayesian A/B Testing in Exploratory
https://blog.exploratory.io/an-introduction-to-bayesian-a-b-testing-in-exploratory-cb5a7ad80963
A/B Testing Framework that Business People Can Understand

Pythonでの実装例
tdualのブログ
A/Bテストの評価をベイズ統計でやってみない? - tdualのブログ
http://tdual.hatenablog.com/entry/2018/04/21/004620
遊びでA/Bテストの評価をベイズ統計でやってみたら、思いのほか面白かったので記事に残します。 用語の定義 コンバージョン コンバージョン率 A/Bテスト コンバージョンの確率分布 なぜベイズ統計を使うのか 割合の問題点 尤度と最尤法 尤度 最尤法 ベイズ統計 ベイズの定理 共役事前分布 ベータ分布 事後分布の導出 事後分布のグラフ ベイジアンA/Bテストの実装 コード 使用例 本番っぽい使い方 カイ二乗検定と比較 最後に 用語の定義 コンバージョン コンバージョンとは「Webサイト上で起きた最終的な成果」のことです。 具体的に何...