デジタルマーケティングの現場では、日々さまざまな施策のPDCAが回っています。こうしたプロセスにおいて、単純な数字の大小を比較するだけでは、施策の効果を正確に検証するのは難しいこともあるのではないでしょうか。統計学の知識をより良い分析や改善提案に生かすにはどうすればいいかという視点から、統計学的検定の手法を活用したケーススタディに取り組んでみました。
今回のトピックは、あるウェブサイトのA/Bテストの結果について、有意差の有無を検証するというものです(有意水準は0.05と仮定)。A/Bテストの効果検証によく用いられるカイ二乗検定(独立性の検定)を採用し、データはkaggleの「audacity ab testing」を参照しました。
https://www.kaggle.com/samtyagi/audacity-ab-testing
まずはライブラリをインポートし、データを読み込みます。
import math
import numpy as np
import pandas as pd
import scipy.stats
df=pd.read_csv("homepage_actions.csv")
df.head()
各カラムの説明は以下の通りです。
timestamp:アクセス日時
id:ユーザーID
group:コントロールグループがcontrol、テストグループがexperiment
action:クリックしたらclick、見ただけならview
次にデータを集計します。各グループの総数を出してみましょう。
group=df.groupby('group').count()
group
さらにピボットテーブルで、グループ毎のクリック数を集計します。
pd.pivot_table(df,index='group',columns='action',values=['group','action'],aggfunc='count')
それぞれのグループのクリック率は、
コントロールグループ:932÷4264=0.21857410881801126
テストグループ:928÷3924=0.23649337410805302
となり、クリック率自体はテストグループのほうが高いことが分かります。
果たして、テストグループのほうが有意にクリック率が高いと言えるのでしょうか?
カイ二乗検定で検証してみましょう。Pythonの場合、scipy.statsのchi2_contingency関数を使います。
data=np.matrix([[932,3332],[928,2996]])
chi2,p,ddof,expected=scipy.stats.chi2_contingency(data,correction=False)
print("カイ二乗値:", chi2)
print("p値:", p)
print("自由度:", ddof)
print("期待度数:", expected)
出力結果をみると、有意確率であるp値は0.05より高い数値になりました。この場合、「2標本の間には有意差がない」とする帰無仮説は棄却されません。つまり、テストグループのほうが有意にクリック率が高いとは言えないということになります。単純な数字の大小だけでは判断できない、ということが分かりますね。
クリック率だけで施策の良し悪しを判断するのは適切でないケースもあるでしょうが、こうした手法による分析は、より効果的な施策を打つための判断材料として活用できそうです。