概要
この記事では、Pythonを使用したABテストの実施の流れと前提になる統計学の知識について書く。
前提
Webメディア
- ユーザーと店舗が存在するWebメディア。ex. 食べログ
- ユーザーはデバイスのIDによって識別される。ex. デバイスID:789836968368はAさんを表す。
- 店舗は店舗IDによって識別される。ex. 店舗ID:519836968368はa店を表す。
データ
こんなデータがあるとする。
- device_idはデバイスID
- shop_idは店舗ID
- groupは1がA群(施策を打った群)、0がB群(施策を打っていない群)。
- cv_flgはcvすれば1、そうでなければ0
- ユーザー・店舗間のCVは独立である。
- この状態は、例えば以下のような事象が独立であるような状況である。
- ユーザーAさんがa店をCVする。
- ユーザーAさんがb店にCVする
- ユーザーBさんがa店にCVする。
課題
- groupごと(A群B群ごとの)のCV数を比較して、施策を打った群でCV数が多かったのか、同じぐらいか、少なかったのかを特定したい。
- もし多かったのであれば、有効な施策として認識し、必要なタイミングで打ちたい。
分析方針
- A群・ユーザー・店舗数あたりCV数とB群・ユーザー・店舗数あたりCV数を比較して、その差が統計的に有意であるかどうかを判断したい。
- ~あたりCV数は比率であるため、2つの母比率の差の検定を使用したい。
2つの母比率の差の検定は使用できるのか?
- 2つの母比率の差の検定が前提としているのは、shop_id・device_id単位でのcv_flgがベルヌーイ母集団から得られたサンプルであること。
ベルヌーイ母集団
- ベルヌーイ確率変数による集合。
- ベルヌーイ確率変数とは、0か1を取る変数でかつ1を取る確率がp、0を取る確率が1-pであるような変数のこと。
- この変数が互いに独立であるような集合がベルヌーイ母集団。
cv_flgの集合はベルヌーイ母集団か?
- ユーザー・店舗間のCVは独立であると仮定しているので、ベルヌーイ母集団。
- note: 実際には、あるユーザーAがある店舗aをCVするなら、bもCVするという事象や、あるユーザーAがある店舗aをCVするなら、あるユーザーBもある店舗aをCVするといったように、ユーザー・店舗間のCVは相関するケース、即ち独立でないケースが多い。
どんな仮説を立てると良いのか?
- 帰無仮説
- A群・ユーザー・店舗数あたりCV数をp1、B群・ユーザー・店舗数あたりCV数をp2とおき、それらが等しくないとする。
- 対立仮説
- それらが等しい。
検定統計量・その分布は?
- 2つの母比率の差の検定は平均値の差の検定と同様のプロセス。参考:統計学 改訂版
- この検定においては、A群・B群の分布が以下に従うと仮定する。参考:正規性の確認
- A群の母分布~N(μ_A, σ^2)
- B群の母分布~N(μ_B, σ^2)
- このとき、共通な分散σ^2はS^2と推定する。
- 検定統計量は以下のようになる。
- T = (XA平均 - XB平均) / (S√(1/m) + (1/n))
- 参考:4.平均値の差の検定(2標本のt検定)
- mはA群のサンプルサイズ、nはB群のサンプルサイズ。
母比率の差の検定統計量・その分布は?
- 平均の差の検定に考えてきたが、元々は母比率の差の検定。
- ベルヌーイ確率変数の分散S^2は以下。
- S^2 = p(1-p) 参考:ベルヌーイ分布
- pを以下のように推定する。
- p^ = (ΣXA + ΣXB) / (m + n)
- とすると母比率の差の検定統計量は以下のようになる。
- Z = (XA平均 - XB平均) / √p^(1-p^)√(1/m) + (1/n)
- 参考:比率の検定・独立性の検定
- Zの分布は観測個数が十分大きければ、帰無仮説の下で標準正規分布に従うことがわかっている。参考:サンプルサイズの設計と検出力分析
どう統計的に判断するか?
- 帰無仮説を確認する ex. p1 = p2
- 有意水準を定める ex. α = 0.05
- Zを計算する
- Zが棄却域に含まれるかどうかを確認する
- 含まれていればp1 = p2ではない、即ちp1 > p2で施策は有効と判断できる。
- 含まれていなければp1 = p2ではない、即ちp1 > p2で施策は有効と判断できる。