1、定义:为同一个目标制定两个方案,在同一时间维度,分别让组成成分相同(相似)的用户群组随机的使用一个方案,收集各群组的用户体验数据和业务数据,最后根据显著性检验分析评估出较好的方案。
2、补充概念:
3、公式:
AB-test
设A方案为参考方案(或旧方案),B方案为实验方案(或新方案)。由于每次实验结果要么转化成功,要么失败,所以A,B的分布可看作是伯努利分布;
A ∼ B ( N , λ a ) ; B ∼ B ( N , λ b ) A\thicksim B(N,\lambda_a); B\thicksim B(N,\lambda_b) A∼B(N,λa);B∼B(N,λb)我们知道,二项分布当n趋近于 ∞ \infty ∞ ,可以近似的看作服从正态分布;其均值方差为:
u = n p , σ 2 = n p ( 1 − p ) u=np,\sigma^2 =np(1-p) u=np,σ2=np(1−p)假设,A方案的人数为 N a N_a Na ,B方案的人数为 N b N_b Nb ( N a = N b = N ) (N_a=N_b=N) (Na=Nb=N);
假设检验:
H1是我们想要的假设,H0是要拒绝的假设:
H 0 : λ b − λ a ≤ 0 H_0:\lambda_b-\lambda_a\leq0 H0:λb−λa≤0 H 1 : λ b − λ a > 0 H_1:\lambda_b-\lambda_a>0 H1:λb−λa>0Z检验可用于双样本均值显著性检测:
Z c = ( λ b ^ − λ b ^ σ b 2 N − σ a 2 N ) Z_c = (\frac{\hat{\lambda_b}-\hat{\lambda_b}}{\sqrt{\frac{\sigma^2_b}{N}-\sqrt{\frac{\sigma^2_a}{N}}} }) Zc=(Nσb2−Nσa2λb^−λb^)
σ a , σ b , λ a , λ b \sigma_a, \sigma_b,\lambda_a, \lambda_b σa,σb,λa,λb 都是业务沉淀获得的先验数据,或是先做一次测试获得的估计值。
power:拒绝H0后接受H1的概率,一般设为90%
置信度:我们做出结论的可信度有多少,一般是0.95或者0.99
显著性:1-置信度,也就是0.05或者0.01
置信区间:目标值的置信区间,以高斯分布为例,是 [ v − λ σ , v + λ σ ] [v−λσ,v+λσ] [v−λσ,v+λσ],其中 λ \lambda λ与置信度有关;
侧检验值,当显著性水平为0.05时, Z a = 1.645 Z_a=1.645 Za=1.645;
当 Z a > Z c Z_a>Z_c Za>Zc,拒绝原假设;反之,则不能拒绝原假设;
4、AB-test样本量
5、AB-test效果检验
6、AB-test的假设检验:
H0:A、B无差异
H1:A、B有显著差异根
据样本观察值,构造统计量:
Z c = ( P a − P b P a ∗ ( 1 − P a ) n a − P b ∗ ( 1 − P b ) n b ) Z_c = (\frac{P_a-P_b}{{\frac{P_a^*(1-P_a)}{n_a}-{\frac{P_b^*(1-P_b)}{n_b}}} }) Zc=(naPa∗(1−Pa)−nbPb∗(1−Pb)Pa−Pb)
若Z>Z0.025 ,那么拒绝原假设,认为两种方案有显著差异。
置信区间为 ( p a − p b ) − z α / 2 ∗ P a ∗ ( 1 − P a ) n a − P b ∗ ( 1 − P b ) n b (pa-pb)-z_{\alpha/2}*{{\frac{P_a^*(1-P_a)}{n_a}-{\frac{P_b^*(1-P_b)}{n_b}}} } (pa−pb)−zα/2∗naPa∗(1−Pa)−nbPb∗(1−Pb)
样本的可信性
真实情况/假设判断 | H0(没区别) | H1(有区别) |
---|---|---|
H1 | 第一类错误 | Power:绳之于法 |
H0 | 不冤枉好人 | 第二类错误 |
7、总结:
第一类错误α不超过5%。也就是说Statistical Significance =1-α=95%;
第二类错误β不超过20%。也就是说,Statistical Power = 1 -β = 80%;
对α与β的理解: 对两类错误上限的选取(α是5%,β是20%),我们可以了解到A/B-Test的重要理念:宁肯砍掉4个好的产品,也不应该让1个不好的产品上线。
8、AB-test应考虑的问题:
9、如何选择采用哪种假设检验?
10、如何用Python实现AB测试?
实例背景简述:某司「猜你想看」业务接入了的新推荐算法,新推荐策略算法开发完成后,在全流量上线之前要评估新推荐策略的优劣,所用的评估方法是A/B test,具体做法是在全量中抽样出两份小流量,分别走新推荐策略分支和旧推荐策略分支,通过对比这两份流量下的指标(这里按用户点击衡量)的差异,可以评估出新策略的优劣,进而决定新策略是否全适合全流量。
实例A/B-test步骤:
1. 指标:CTR
2. 变体:新的推荐策略
3. 假设:新的推荐策略可以带来更多的用户点击。
4. 收集数据:以下B组数据为我们想验证的新的策略结果数据,A组数据为旧的策略结果数据,均为伪造数据。
(我们是想证明新开发的策略B效果更好,所以可以设置原假设和备择假设分别是:H0:A>=B H1:A < B)
//利用 python中的scipy.stats.ttest_ind做关于两组数据的双边t检验,
//为了得到单边检验的结果,需要将计算出来的p-value除于2取单边的结果
//(这里取阈值为0.05)。
from scipy import stats
import numpy as np
import numpy as np
import seaborn as sns
import scipy.stats
A = np.array([ 1, 4, 2, 3, 5, 5, 5, 7, 8, 9,10,18])
B = np.array([ 1, 2, 5, 6, 8, 10, 13, 14, 17, 20,13,8])
print('策略A的均值是:',np.mean(A))
print('策略B的均值是:',np.mean(B))
t, pval = scipy.stats.ttest_ind(B,A) #表示B-A
print(t,pval)
//求得pvalue=0.13462981561745652,p/2 > alpha(0.05),所以不能够拒绝假设,暂时不能够认为策略B能带来多的用户点击。
参考来源:https://zhuanlan.zhihu.com/p/75762862
AB-test案例:https://zhuanlan.zhihu.com/p/25685006
https://zhuanlan.zhihu.com/p/36384858