欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

A/B test

程序员文章站 2022-05-24 08:48:21
...

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 是备责假设(我们想要的假设):

A/B test

第一类错误:真实(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修正