增长团队有三宝:埋点、漏斗、AB测。工作中一直想实践,没有合适的机会,过段时间又忘了。在此整理一下,虽然比不上做过来的印象深刻,但未来复习起来也方便。
实际上很多以前我写过的代码也完全没印象了,一眼看上去好陌生,只觉得写的还不错,哈哈。
一、基本原理
AB测试概念来自生物医学的双盲测试,即分组药物实验,比较一段时间后两组病人的表现是否具有显著差异(假设检验)。AB测试是一种验证性研究方法,适于微观层面,不适合战略级的策略验证。
考虑到投入产出比,一般要具备两个必要条件:1、测试对象的决策影响大,或决策后不易修改;2、测试对象的方案选择存在困难。
零假设总是表述为研究没有改变,没有效果,不起作用等,H1是我们想要的假设。为什么统计者想要拒绝的假设放在原假设呢?因为原假设备被拒绝如果出错的话,只能犯第I类错误,而犯第I类错误的概率已经被规定的显著性水平所控制。
检验方式分为两种:双侧检验和单侧检验。单侧检验又分为两种:左侧检验和右侧检验。双侧检验:备择假设没有特定的方向性,形式为“≠”;单侧检验:备择假设带有特定的方向性,形式为">""<"的假设检验, "<"称为左侧检验,">"称为右侧检验。
给定显著性水平α后,查表就可以得到具体临界值,将检验统计量与临界值进行比较,如果样本观测计算出来的检验统计量的具体数值落在拒绝域内,就拒绝原假设,否则不拒绝原假设。
假设检验根据业务数据分为两种:一个总体参数的假设检验、两个总体参数的假设检验,检验统计量计算方式有所不同。例如,时段1,A版本,时段2,B版本,假设检验为同一总体(全部客户);版本A\B各分配50%的流量,两个总体。
一个总体参数的假设检验:
假设形式,;;。
检验统计量,,。
大、小样本的拒绝域确认略有不同,大样本查询Z分布,小样本查询t分布。
大样本的,
小样本的,
。
两个总体参数的假设检验
假设形式,;;。
检验统计量,
拒绝域与一个总体参数的假设检验一致。
样本成数:它是指样本中具有某一相同标志表现的单位数占样本容量的比重,记为p。总体成数:它是指总体中具有某一相同标志表现的单位数占全部总体单位数的比重,一般用π表示。
该假设检验可用于某一天的回款率情况(某天3000客户,回款客户所占比重为p)。
一个总体成数的假设检验
假设形式,;;。
检验统计量,
拒绝域与总体参数的假设检验一致。
两个总体成数的假设检验
当都大于或等于5时,就可以称为大样本,
假设形式,;;,其中可根据需要将0调整为。
检验统计量,,两个样本的合并成数。
情况下(一般形式),
二、检验统计量与样本量计算
检验统计量
据以对原假设和备择假设作出决策的某个样本统计量称为检验统计量,两个简单的例子:
1、两组测试,双样本均值显著性检验,使用Z检验。单侧检验值,显著性水平为0.05时,=1.645,当,拒绝原假设。
2、两组测试,不同的样本(如人),双独立样本是否相等的检验;小样本、数据分布近似符合正态分布,采用t检验;因为备选假设是A版本和B版本有差别,采用双尾检验。
服从什么分布,就用什么区间估计方式,也就就用什么检验。比如:两个样本方差比服从F分布,区间估计就采用F分布计算临界值(从而得出置信区间),最终采用F检验。
Z检验:一般用于大样本(即样本容量大于30),平均值差异性检验的方法,总体标准差σ已知。它是用标准正态分布的理论来推断差异发生的概率,从而比较两个平均数的差异是否显著。
T检验:主要用于样本含量较小(例如n < 30),总体标准差σ未知的正态分布。T检验是用t分布理论来推论差异发生的概率,从而比较两个平均数的差异是否显著。
一般情况下我们是不知道总体分布的标准差的,根据中心极限定理,当样本量很大时(大于30),抽样分布服从正态分布,样本的标准差是总体分布标准的一个很好估计,抽样分布方差就等于总体分布方差除以样本容量。
当样本容量小于30的时候,我们用样本标准差估计的总体分布标准差是不准的,一般会低估,所以出现了 t 分布,公式和Z 统计量一样,但查的是 t 表。
卡方检验:卡方检验是统计样本的实际观测值与理论推断值之间的偏离程度,实际观测值与理论推断值之间的偏离程度就决定卡方值的大小,如果卡方值越大,二者偏差程度越大;反之,二者偏差越小;若两个值完全相等时,卡方值就为0,表明理论值完全符合。适合x类别型变量,y类别型变量。
样本量计算
最小样本量计算公式,
其中是每组所需样本量,因为AB测试一般至少2组,所以实验所需样本量为。分别称为第一类错误概率和第二类错误概率,一般分别取0.05和0.2,为正态分布的分位数函数,为两组数值的差异,如点击率1%到1.5%,那么就是0.5%。为标准差,是数值波动性的衡量,越大表示数值波动越厉害。
对两类错误上限的选取(α是5%,β是20%),我们可以了解到AB实验的重要理念:宁肯砍掉4个好的产品,也不应该让1个不好的产品上线。
弃真错误也叫第I类错误或α错误:它是指原假设实际上是真的,但通过样本估计总体后,拒绝了原假设。明显这是错误的,我们拒绝了真实的原假设,所以叫弃真错误。这个值也是显著性水平,在假设检验之前我们会规定这个概率的大小。
取伪错误也叫第II类错误或β错误:它是指原假设实际上假的,但通过样本估计总体后,接受了原假设。明显者是错误的,我们接受的原假设实际上是假的,所以叫取伪错误。
Statistical Significance =1-α = 95%
Statistical Power = 1-β = 80%
Baseline Rate,是在实验开始之前,对照组本身的表现情况,即旧方案的点击率,由历史数据决定的。在我们的实验中,我们假定,实验开始之前的历史点击率是5%。所以Baseline Rate=5%。这个参数越小,你需要的样本量越大(分母越大,这个参数越小)。(debug)
Minimum Detectable Effect,衡量了我们对实验的判断精确度的最低要求,参数越小(比如1%),说明我们希望实验可以有能力检测出1%的细微差别。检测细微的差别当然更加困难(power变小)所以样本量越大,所以如果要保持power不变的话,需要的样本量会增加。
比例类数值的假设检验在统计学中叫做两样本比例假设检验,其最小样本量计算的公式为:
具体实践,可使用在线工具(https://www.evanmiller.org/ab-testing/sample-size.html)、Excel(NORM.S.INV函数)、R(power.prop.test)、Python计算。
# R
power.prop.test(p1 = 0.30, p2 = 0.305, sig.level = 0.05, power = 0.80, alternative = "two")
# python
from statsmodels.stats.power import zt_ind_solve_power
from statsmodels.stats.proportion import proportion_effectsize as es
zt_ind_solve_power(effect_size=es(prop1=0.30, prop2=0.305), alpha=0.05, power=0.8, alternative="two-sided")
三、实验设计与注意事项
1、计算两样本的描述性统计,建立零假设和备选假设,例如:
零假设:A版本和B版本键盘没有差别,即A版本的平均值等于B版本的平均值。
备选假设:A版本和B版本有差别,即A版本平均值不等于B版本平均值。
2、确定检验类型、检验统计量(如t检验),求t值、双尾检验的P值和自由度df,一般设置显著水平alpha=5%。
如双边检验,p < 判断标准(显著水平)alpha/2 时,拒绝零假设,有统计显著,也就是有差异。
import statsmodels.stats.weightstats as st
# import scipy.stats
# t, pval = scipy.stats.ttest_ind(B,A) #表示B-A
t, p_two, df = st.ttest_ind(data['A'], data['B'], usevar='unequal')
# 自由度一般只保留整数部分
print('t=', t, 'p_twoTail=', p_two, ',df=', df)
3、计算置信区间和效应统计量(Cohen's d)。
置信区间的上下限,,95%置信度下对应的t值(查询t表)。
# 计算标准误差
se = np.sqrt(np.square(a_std)/a_n + np.square(b_std)/b_n)
# 对于双独立样本检验,置信区间的样本平均值=A版本平均值 - B版本平均值
sample_mean = a_mean - b_mean
Cohen's d = (样本平均值1-样本平均值2) / 标准差,因是两个独立样本,此处要用合并标准差。效应量太小,意味着处理即使达到了显著水平,也缺乏实用价值。(debug,效应统计量显著的范围;标准差的计算公式)
# 合并标准差
sp = np.sqrt( ((a_n-1)*np.square(a_std) + (b_n-1) * np.square(a_std))
/ (a_n+b_n-2) )
# 效应量Cohen's d
d = (a_mean - b_mean) / sp
4、生成数据分析报告。
注意事项
控制变量,只有一个变量不同,否则将会影响测试中的基准控制,保证AB组数量和特征均匀(如男女比例接近),同时发布上线。
同时关注正向与负向指标,正向指标,一般依据实验路径制定,是策略好坏的直接评价,如:留存人数->点击人数->浏览人数->成交人数。负向指标,适用于结果指标相近的场景,如实验策略是下发公众号模板,其中两组的成交人数相近,但实验组却致使用户取关人数激增。如正向收益小于负向收益,则应分析问题考虑优化实验或停止实验。
四、实际案例
1、点击率的假设检验
某公司想知道产品优化是否有效,设立实验组与对照组收集一周点击率,请检验产品优化是否有效。
实验组7天点击率分别为:0.72,0.75,0.7,0.75,0.73,0.72,0.71
对照组7天点击率分别为:0.7,0.76,0.69,0.75,0.7,0.69,0.68
由于不同统计日之间是有随机波动的差异,而且实验组和对照组流量相等且随机,可以认为样本来自同一个总体,实验组是对同一天的对照组进行优化的结果,所以可以采用相关样本t检验。
Step1:μ为点击率
H0:功能优化之后与优化前没有差异(μ2-μ1=0)
H1:功能优化之后与优化前有差异(μ2-μ1≠0)
Step2:确定显著性水平α=0.05。计算统计量,相关样本t检验是以每一组数据的差值作为检验的,所以以点击率差作检验
day1:0.72-0.7=0.02 …… day7:0.71-0.68=0.03
Md为七组差值的均值,经计算为0.0157;样本方差(0.02-0.016)^2+……+(0.03- 0.016)^2/(7-1)=0.000262,开根号得到标准误=0.0161。最后代入t分数:t=(0.0157-0)*sqrt(n-1)/0.0161=2.38。
Step3:查表,按α=0.05,df=6,确定临界值,2.447。Step3中的t=2.38在临界值内,接受零假设,认为功能优化没有效果。
2、机器人催收的AB测试思路
未开展因测试数据量不足,A版本,人工催收M0回款率,B版本机器人。
附,参考资料:
1、python独立双样本t检验: AB测试,https://zhuanlan.zhihu.com/p/40227306
2、A/B实验,了解一下,https://mp.weixin.qq.com/s/PAxmkE2Dp1tyKIK3VJv2EQ
3、数据分析|如何做一个ABtest测验,https://zhuanlan.zhihu.com/p/75762862
4、假设检验——这一篇文章就够了,https://zhuanlan.zhihu.com/p/86178674
5、Z分布标准正态分布表