購買金額を向上させるキャンペーンなどでは,以下のように結果の値が0を多く含むケースがあると思います.
このようなケースでABテストをやる場合,単純に平均の差に対する検定もできると思いますが,0か0でないかという重要な情報が考慮できません.一方で,0でない比率の差の検定も考えられますが,購買金額の向上効果が考慮できません.
ベイズの枠組みであれば,0か0でないかという情報と購買金額を同時に考慮したモデリングが可能です.また,ベイジアンABテストの枠組みがそのまま利用できます.
本記事では0を多く含むデータに対するABテストのための簡単なパッケージを作成したため,解説します.コードは以下に置いています.
モデル
このパッケージでは値が以下のようなゼロ過剰対数正規分布に従うと仮定します.A群とB群の分布は同様のため,A群について説明します.
y_A \sim (1-\pi_A)\delta(y_A) + \pi_A \mathcal{LN}(\mu_A, \sigma_A^2)
ここで$\delta(y)$はデルタ関数で,$\mathcal{LN}(\mu, \sigma^2)$は対数正規分布の確率密度関数です.対数正規分布の確率密度関数は以下です.この分布とデルタ関数を$\pi_A$対$1-\pi_A$の比率で混ぜ合わせた分布が上記のゼロ過剰対数正規分布です.
また,事前分布は以下のようなものを仮定します.
\begin{align*}
\pi_A &\sim \mathcal{B}(\alpha_A, \beta_A) \\
\mu_A &\sim \mathcal{N}(\theta_A, \sigma_A^2 / \lambda_A) \\
\sigma_A^2 &\sim \mathcal{IG}(a_A, b_A)
\end{align*}
ここで,$\mathcal{B}(\alpha, \beta)$はベータ分布で,$\mathcal{N}(\theta, \sigma^2)$は正規分布,$\mathcal{IG}(a, b)$は逆ガンマ分布です.
何ができるか
このパッケージは以下のような使い方ができます.
# パッケージをインストール
!pip install git+https://github.com/Kuno3/zero_inflated_bayesian_ab
# インポート
from zero_inflated_bayesian_ab.zero_inflated_bayesian_ab import (
zero_inflated_bayesian_ab,
)
# モデルにA群とB群のデータを渡す
model = zero_inflated_bayesian_ab(data_A, data_B)
# サンプリングを実施
model.sampling(100000)
# 推定結果のサマリを出力
model.summary()
summary()という関数では,以下を出力します.※1と3はサンプリングベースで推定しています.
- $Y_A-Y_B$の確率
- ゼロでない確率の比較
- 0より大きいときの値の確率(x軸は対数軸です)