1 引言
A/B Test,又称为对比测试,指的是一种实验技术,以确定根据一个选定的指标,新的设计是否带来改进。
在Web分析和UI用户体验中,这个想法是通过随机分割流量并比较每个分割点的指标,来比较现有网站(a)和新网站(b)的区别。
举个例子说明:
让我们假设A公司正在考虑为其Gold会员重新设计登陆页面。
对公司来说重要的衡量标准是:
- 每次访问在登陆页上花费的平均时间
- 转换率 :以交易结束作为本次访问的比例
A/B Test可以用来检验现有的设计。当然,如果担心由于版本B造成损失,可以不选择50:50的流量分割,并分配更多的流量到版本A。但是,一个非常倾斜的流量分割往往导致需要更长的时间,使A/B Test的结果在统计学上变为显著。
2 A/B Test的必要性
随着网站新功能的开发,人们事先不知道这些功能将带来何种结果:实际上,它们可能会损害业务或者使利润暴涨。
用户体验(User Experience,UX)设计师的知识对于挑选可行的功能至关重要。它通常遵循用户体验中的最佳实践或者在其他类似情况下被证明是成功的设计实例。
但是,任何预先的假设都无法与真实的测试相比,即A/B Test。
A/B Test通过真实的客户进行测试。如果在无偏情况下对总体进行抽样,得到A和B,那么该测试可以给出如果部署版本B会发生什么情况的最佳估计。
3 统计形式主义的必要性
在完成一些事先的市场研究之后,A公司认为在线测试b版本会很有趣,流量分配如下:
假设经过7天的A/B Test,实验的跟踪指标为:
仅仅从这些结果来看,一些问题就出现了:
- 由于版本B具有更高的CR,这是否意味着版本B带来了改进?同样地,我们是否可以得出其影响平均花费时间的结论?
- 如果是这样的话,置信度如何?
- 版本B带来的较高CR和较低平均花费时间,是否为偶然发生?
在下结论之前,需要记住的是:
我们得到的原始结果只是更大样本。它们的统计特性在它们所来自的人群中各不相同。
因此,统计建模是必要的。引入统计显著性的概念在假设检验也是必要的。
4 假设检验入门
在这里,本文将简单介绍假设检验: 一个基于样本比较两个人群分布的工具。可以比较的是它们的分布参数(例如平均时间花费),或分布本身(例如转化率的二元分布)。
假设检验给出以下关于种群假设:
- 零假设:H0。一般来说,是一个虚无(平等)假设: 例如,“这两个群体有着相同的均值”。
- 备择假设:H1否定零假设:,例如,“第二个群体的均值高于第一个群体”。
测试可以总结为两个步骤:
(1)H0模型作为单个实值随机变量(称为检验统计量)上的分布;
(2)评估样本,或者更极端的样本,在 H0情况下出现的可能性。这个概率就是著名的p值。P值越低,就越大概率拒绝H0
将估计值与理论值进行比较,并使用z检验来评估。
在这里,将该框架扩展到A/B Test中,以A公司为例。
- 如何应用z检验来评估使用版本B的客户平均花费时间是否更多
- 如何使用卡方检验来评估版本B是否会导致更高的转化率
- 如何使z检验适用于评估版本B的转换率,以及它是否产生与卡方检验相同的结论
4.1 z检验评估平均花费时间
需要验证的假设是:
- H0: “两个版本的平均花费时间是相同的”
- H1: “版本B平均花费时间更长”
(1)第一步:建立 H0模型
z检验应用中心极限定理来进行。
中心极限定理:给定一个期望为μ,有限方差为σ的随机变量(rv) X。{ X1,… ,Xn }∼ Xn,为n独立同分布(iid),可以对平均值(同样为随机变量)作如下的近似:
在上下文中,将每个客户会话i所花费的时间做为一种建模实现:
- 如果客户访问版本A,aᵢ 属于随机变量Aᵢ ∼ A
- 否则,bᵢ 属于随机变量 Bᵢ ∼ B
使用中心极限定理提供的近似值来推导:
因此,随机变量之差服从(wikipedia: 正态分布的随机变量之和):
在H0下,假设均值相等,则模型为:
(2)第二步:判断样本不为H0的可能性有多大
由于A和B的真实期望和方差未知,它们各自的经验估计(样本估计):
样本生成了检验统计量z,并根据约化中心正态分布进行检验:
从概念上讲,Z表示观测值平均值之差距离为0的标准差。这个数字越高,接受H0的可能性就越小。
但是,在这种情况下,估计的期望实际上是不同的,样本数目越多,Z值越大。Z的公式中,需要证明的差异越小,需要的样本就越多。
Python实现:
import numpy as np
from scipy.stats import