A/B test
A/B test 是线上策略的效果验证方法,在大型互联网公司非常常见。对于A/B 实验效果有明显差异的,可以直接给结论,但对于A/B 实验效果差不多的情况,需要用到 “假设检验” 来分析。
一、什么是 A/B-test ?
【目的】为同一个目标制定两种(多种)方案,对比不同方案的效果。
【方法】在同一时间维度,分别让组成成分相同(相似)的用户群组随机的使用一个方案,保证不同群体的唯一影响变量就是 ”测试方案“,收集各群体(方案)效果数据,根据显著性检验评估方案效果。
【数学原理】
1、大数定律:在一个随机事件中,随着试验次数的增加,事件发生的频率趋于稳定值,即概率。
2、中心极限定理:如果样本量足够大,则样本均值的分布将近似于正态分布,与该变量在总体中的分布无关。
3、定理应用:通过计算样本均值的正态分布,可以分配置信区间,可以进行T检验(即两个样本均值之间是否存在差异),可以进行方差分析(即3个或更多样本的均值之间是否存在差异)。
【A/B分流原理】
对并行实验非常多的大公司来说,逐渐开始探索“无限分层”的方法。每个实验都可以看成独立的层,只保证层间流量分桶的正交性,所有的实验都可能存在重叠情况。
二、什么是 假设检验?
【数学原理】
1、将测试用户群随机分为2组,用户群1使用A方案,用户群2使用B方案,由于每次实验结果要么转化成功,要么失败,所以A/B的分布可看作是伯努利分布,也叫二项分布。
2、当二项分布的样本量趋于无穷大时,可以近似看作服从正态分布。
【检验原理】
H0 是原假设(要拒绝的假设),H1 是备责假设(我们想要的假设):
第一类错误:真实(H0)无区别,判断为”有区别“,我们把第一类错误出现的概率用α表示,一般选择5%。
第二类错误:真实(H1)有区别,判断为”无区别“,我们把第二类错误出现的概率用β表示。根据条件概率的定义,可以计算出β = 1 - power。
【实例A/B test步骤】
此部分引自:https://zhuanlan.zhihu.com/p/75762862
实例背景简述:
某司「猜你想看」业务接入了的新推荐算法,新推荐策略算法开发完成后,在全流量上线之前要评估新推荐策略的优劣,所用的评估方法是A/B test,具体做法是在全量中抽样出两份小流量,分别走新推荐策略分支和旧推荐策略分支,通过对比这两份流量下的指标(这里按用户点击衡量)的差异,可以评估出新策略的优劣,进而决定新策略是否全适合全流量。
指标:CTR
变体:新的推荐策略
假设:新的推荐策略可以带来更多的用户点击。
收集数据:以下B组数据为我们想验证的新的策略结果数据,A组数据为旧的策略结果数据。均为伪造数据。
我们是想证明新开发的策略B效果更好,所以可以设置原假设和备择假设分别是:
H0:A>=B
H1:A < B
利用 python 中的 scipy.stats.ttest_ind 做关于两组数据的双边 t 检验,为了得到单边检验的结果,需要将 计算出来的 pvalue 除于2 取单边的结果(这里取阈值为0.05)。
from scipy import stats
import numpy as np
import numpy as np
import seaborn as sns
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))
'''
策略A的均值是: 6.416666666666667
策略B的均值是: 9.75
'''
import scipy.stats
t, pval = scipy.stats.ttest_ind(B,A) #表示B-A
print(t,pval)
'''
1.556783470104261 0.13379164919826217
'''
根据 scipy.stats.ttest_ind(x, y) 文档的解释,这是双边检验的结果。为了得到单边检验的结果,需要将 计算出来的 pvalue 除于2 取单边的结果(这里取阈值为0.05)。
求得pvalue=0.13462981561745652,p/2 > alpha(0.05),所以不能够拒绝假设,暂时不能够认为策略B能带来多的用户点击。
上一篇: proxool试用
下一篇: Latex bug修正