AB-test理解与实战

AB-test

1、定义:为同一个目标制定两个方案,在同一时间维度,分别让组成成分相同(相似)的用户群组随机的使用一个方案,收集各群组的用户体验数据和业务数据,最后根据显著性检验分析评估出较好的方案。

2、补充概念

  1. 显著性检验(significance test):事先对总体随机变量的参数或总体分布形式做出一个假设,然后利用样本信息来判断这个假设(备择假设)是否合理,即判断总体的真实情况与原假设是否有显著性差异
    (注:显著性检验是针对我们对总体所做的假设检验,其原理就是“小概率事件实际不可能性原理”来接受或否定假设。)
  2. 备择假设:统计学的基本概念之一。其包含关于总体分布的一切使原假设不成立的命题。备择假设亦称对立假设备选假设
  3. 假设检验:用来判断样本与样本、样本与总体的差异是由抽样误差引起还是本质差别造成的统计推断方法。显著性检验是假设检验中最常用的一种方法,常用的假设检验方法有Z检验、t检验、卡方检验、F检验等。
  4. Z检验(Z-Test)又叫U检验。由于实际问题中大多数随机变量服从或近似服从正态分布,U作为检验统计量与X的均值是等价的,且计算U的分位数或查相应的分布表比较方便。通过比较由样本观测值得到的U的观测值,可以判断数学期望的显著性,我们把这种利用服从标准正态分布统计量的检验方法成为U检验(U-test)
  5. 方差分析方差分析(analysis of variance,ANOVA),即变量分析,是对多个样本平均数差异显著性检验的方法。方差分析又称为F检验。分差分析的总体思想就是数据中的总变异,按变异原因划分。
  6. 方差分析方差分析(analysis of variance,ANOVA),即变量分析,是对多个样本平均数差异显著性检验的方法。方差分析又称为F检验。分差分析的总体思想就是数据中的总变异,按变异原因划分。
  7. 变异的基本来源有两个:
    1. 实验变量:样本的观测因素引起的变异,也称为组间差异;
    2. 随机误差:由于测量误差导致的每个个体间的差异,也称为组内差异
      (总偏差平方和=组间偏差平方和+组内偏差平方和 SST=SSR+SSE)

3、公式

  1. 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) AB(N,λa);BB(N,λb)我们知道,二项分布当n趋近于 ∞ \infty ,可以近似的看作服从正态分布;其均值方差为:
    u = n p , σ 2 = n p ( 1 − p ) u=np,\sigma^2 =np(1-p) u=np,σ2=np(1p)假设,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)

  2. 假设检验:
    H1是我们想要的假设,H0是要拒绝的假设:
    H 0 : λ b − λ a ≤ 0 H_0:\lambda_b-\lambda_a\leq0 H0:λbλa0 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σb2Nσ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样本量

  • 样本量太小,容易受到偶然因素影响;
  • 样本量太大,试错成本大;
    AB-Test样本计算器:
    https://www.evanmiller.org/ab-testing/
    https://cxl.com/ab-test-calculator/

5、AB-test效果检验

  • 两个样本数量 NA,NB,转化率/下单率,PA,PB
  • AB-test在检验什么?一种方案比另一种方案更有效
  • 由于AB-Test是让用户在两个选择中随机选择一项,相当于二项分布。根据统计学原理,可知若样本足够大,那么标准的二项分布的累计分布趋近于正态分布,即抽样的分布趋于正态分布,可采用z检验,即:
    P A ∼ N ( P A , P A ∗ ( 1 − P A ) / N A ) PA\thicksim N(PA,PA^*(1-PA)/NA) PAN(PA,PA(1PA)/NA) P B ∼ N ( P B , P B ∗ ( 1 − P B ) / N B ) PB\thicksim N(PB,PB^*(1-PB)/NB) PBN(PB,PB(1PB)/NB) P A − P B ∼ N ( P A − P B , P A ∗ ( 1 − P A ) / N A + P B ∗ ( 1 − P B ) / N B ) PA-PB\thicksim N(PA-PB,PA^*(1-PA)/NA+PB^*(1-PB)/NB) PAPBN(PAPB,PA(1PA)/NA+PB(1PB)/NB)

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(1Pa)nbPb(1Pb)PaPb)
若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}}} } (papb)zα/2naPa(1Pa)nbPb(1Pb)

样本的可信性

真实情况/假设判断 H0(没区别) H1(有区别)
H1 第一类错误 Power:绳之于法
H0 不冤枉好人 第二类错误
  • 第一类错误(Type I error)α错误:“弃真”,原假设为真,却落在拒绝域内。
  • 第二类错误(Type II error)β错误:“取伪”,原假设为假,却接受原假设。
  1. 判断错了——第一类错误,我们把第一类错误出现的概率用α表示。这个α,就是Significance Level。一般选择5%,即保证第一类错误的概率不超过5%。Statistical Significance=1-level,表示有多大的把握不冤枉好人。
  2. 判断正确,这类正确判断的概率称为Statistical Power,且一般越大越好;
  3. 判断错误——第二类错误,用β表示。根据条件概率的定义,可以计算出β = 1 - power。

7、总结
第一类错误α不超过5%。也就是说Statistical Significance =1-α=95%;
第二类错误β不超过20%。也就是说,Statistical Power = 1 -β = 80%;
对α与β的理解: 对两类错误上限的选取(α是5%,β是20%),我们可以了解到A/B-Test的重要理念:宁肯砍掉4个好的产品,也不应该让1个不好的产品上线。

8、AB-test应考虑的问题:

  1. 样本是否具有代表性,首先在样本的选取中就需要先行进行控制;
  2. 估计值是否是实际值的真实反映?即估计的准确性;
  3. 如果样本有偏差,考虑区间估计;
  4. 怎么分配流量来做多组测试?—根据统计功效计算

9、如何选择采用哪种假设检验?

  • Z检验:一般用于大样本(即样本容量大于30)平均值差异性检验的方法。它是用标准正态分布的理论来推断差异发生的概率,从而比较两个平均数的差异是否显著。在国内也被称作u检验。
  • T检验:主要用于样本含量较小(例如n < 30),总体标准差σ未知的正态分布。T检验是用t分布理论来推论差异发生的概率,从而比较两个平均数的差异是否显著。
  • 卡方检验:卡方检验是统计样本的实际观测值与理论推断值之间的偏离程度,实际观测值与理论推断值之间的偏离程度就决定卡方值的大小,如果卡方值越大,二者偏差程度越大;反之,二者偏差越小;若两个值完全相等时,卡方值就为0,表明理论值完全符合。
  • 总结:服从什么分布,就用什么区间估计方式,也就就用什么检验。比如:两个样本方差比服从F分布,区间估计就采用F分布计算临界值(从而得出置信区间),最终采用F检验。(假设样本足够大,可以用正态分布替换二项分布)
    AB-test理解与实战_第1张图片

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

你可能感兴趣的:(数据分析)