在大规模在线实验中检测百分比差异的方法学研究
图片:Gerd Altmann来自Pixabay
在这篇文章中,我们分享了我们为百分位数开发A/B测试方法的历程。你会看到用例,为什么A/B测试百分位数指标具有挑战性,看似简单的解决方案如何失败,我们最终使用的统计测试,以及测试的表现。
在Wish,我们对所有的新产品功能 进行A/B测试,以确保它们能提升用户体验。在每个实验中,我们都会对一些指标进行假设测试,其中一些指标是[百分位数](en.wikipedia.org/wiki/Percen…](en.wikipedia.org/wiki/Studen…
使用案例
百分位数A/B测试使我们能够衡量一个新产品功能对网站性能的影响。网站性能高度影响用户体验,并具有真正的货币效应。亚马逊发现,仅仅100毫秒的额外加载时间就使他们损失了1%的销售额。Pinterest将等待时间减少了40%,这导致搜索引擎流量和注册人数增加了15%。
照片:CHUTTERSNAPonUnsplash
百分比,如P50(第五十百分位数)或P95(第九十五百分位数),是比样本平均值更好的网站性能指标。例如,产品A对所有用户的加载时间为0.5秒,而产品B对95%的用户的加载时间为0秒,对5%的用户的加载时间为10秒。尽管这两种产品的平均加载时间相同,但产品A的用户体验要好得多。产品A在眨眼间就为所有用户加载完毕。相比之下,对于5%的用户来说,加载产品B似乎需要很长时间,这种糟糕的体验可能会鼓励这些用户流失。在这篇文章中,我们重点讨论了百分位数测试在性能指标上的应用。
除了性能指标外,当我们关注对指标分布的影响时,百分位数测试还可以释放出许多其他的应用。例如,百分位数测试对于交易指标也是非常有价值的。Wish寻求提供一个公平的市场,为各种规模的商家发展业务。因此,当我们做出政策改变时,我们的目标是促进所有商家的销售。因此,在A/B测试对照组和展示组之间的平均销售额时,我们还需要比较P10、P50和P90等百分比,以确保该政策不会因为严重偏袒少数顶级商家而提高平台销售额,这可能使小规模商家处于不利地位。
测试百分位数的挑战
由于以下原因,A/B测试性能指标的百分位数的差异具有挑战性。
- 挑战一:随机化单元。大多数实验平台随机化用户,这保证了用户之间的独立性。但性能指标是在响应层面上测量的,来自相同用户的响应时间很可能是相关的,这违反了大多数统计测试的独立性假设,可能会产生很高的假阳性率。这通常被称为随机化单元和分析单元之间的差异[1]。
- 挑战二:可扩展性。 该方法需要有足够的可扩展性,以便在可接受的时间范围内对数十亿行的输入数据进行假设检验。
我们首先探索了简单的解决方案
我们能否设置一个固定的阈值来检测性能变化?
检查处理组和控制组之间的差异是否超过一个固定的阈值,如100毫秒的差异或10%的相对变化就足够了吗?例如,如果处理桶中的P95比控制桶中的P95高100ms,或者处理桶中的P95比控制桶中的P95高10%,我们就得出结论:产品特征引入了延迟。
为了了解使用固定阈值是否合适,我们回顾性地进行了几次A/A实验,发现固定绝对变化和固定相对变化都不适用。请注意,对于那些A/A实验,展示和控制之间的任何差异都不是真正的差异,而是由于自然波动。
我们调查了各种API的处理和控制之间的P95差异。由于以下原因,使用一个固定的阈值是不稳健的。
- 一种API可能比另一种慢两个数量级。10毫秒的差异对一个API来说无疑是性能下降,但对另一个API来说可能是自然波动所致。
- 当我们看一个不太常用的API的延迟时,样本百分位数的变化可能相当大。例如,样本百分位数的10%的差异可能来自自然变化。而对于大量使用的API来说,P95的10%的增长可能表明有实质性的性能下降。
与统计学测试相比,固定阈值没有考虑到样本差异(即一些API的响应时间比其他API的响应时间更易变),因此,不能保证I型错误率(假阳性率)得到良好控制。
我们可以应用比例Z检验吗?
双样本比例Z检验允许我们比较两个比例,看两个比例之间的差异是否显著。当两个实验桶的两个P95之间真的有显著差异时,高于集合P95的样本比例(对照组和治疗组数据的P95)就会有显著差异。为了说明问题,让治疗组、对照组和集合组的P95延迟分别为300ms、100ms和200ms。假设两组的规模相等,治疗组(对照组)可能会包含明显多于(少于)200ms的数据点。为了利用这一特性构建一个有意义的检验,我们对比例Z检验进行如下修改。
- 计算集合的P95。
- 使用比例Z检验来比较响应时间高于集合P95的请求在治疗和控制中的比例。
这种方法对于比较百分位数似乎是合理的。但是,不幸的是,它没有解决实验单位和分析单位之间的差异**(挑战一**)。因此,我们以如下两种不同的方式模拟A/A试验,研究修改后的比例Z试验是否适合于百分位数。
- 用Wish的数据追溯模拟A/A测试,有两种不同的随机化方式。1)随机化用户**(随机化I**);2)随机化请求**(随机化II**)。注意由于这些是模拟的A/A测试,随机化请求是可能的。
- 应用修改后的比例Z测试
如果测试工作正常,A/A测试产生的P值的分布应该遵循从0到1的均匀分布。而且,如果我们将显著性水平设定为5%,我们应该期望看到~5%的A/A测试的p值小于0.05。
我们发现,当在用户层面进行随机化时**(随机化I**),60%以上的A/A测试导致了假阳性。假阳性率之所以高,是因为随机化单位与分析单位不同。另一方面,当在请求层面进行随机化时(随机化单位与分析单位相同),P值分布合理地接近于均匀,I型错误得到了很好的控制。
总之,如果我们能够对请求进行随机化,这种方法是合理的。然而,在实践中,我们的随机化是在用户层面,这使得这种方法无效。
集群引导法是否适用?
为了解决随机化单元和分析单元之间的差异,我们可以应用集群引导法。然而,引导法是不可扩展的**(挑战二**),它的计算成本过高。自举的复杂性基本上是_O(nB)_,其中_n_是样本的数量,_B_是自举迭代的数量。考虑到Wish的庞大用户群,为一个实验运行集群自举需要几天时间,而我们经常有数百个实验同时运行。
虽然对于Wish的数据规模(或大多数其他科技公司)来说,集群引导法是不可扩展的,但它在理论上是合理的。我们可以用它作为黄金标准来评估样本百分位数的标准误差估计。
Wish的解决方案
我们对上述方法的探索强调,A/B测试百分位数的方法需要解决随机化单位和分析单位之间的差异(挑战一),并且是可扩展的(挑战二)。
LinkedIn在2019年发表的一个方法[2]提供了一个闭合式分析解决方案,以估计样本百分位数估计的标准误差,因此是可扩展的。它还专门解决了挑战一。LinkedIn方法中的一个步骤需要估计百分位数的概率密度。对于这一步,我们发现Quora的方法在实践中更容易使用,并取得了令人满意的结果。
我们采用这两种方法来估计样本百分位数的标准误差。有了样本百分位数和它的标准误差,我们对无效假设进行Z检验--两个实验桶(例如,对照组和治疗组)的百分位数之间没有差异。
符号
假设我们运行一个有两个变体的A/B测试,每个变体的用户在浏览产品页面时得到不同的体验。我们的目标是检测两个变体之间的产品页面加载时间的P95差异。注意,这里我们以P95为例,我们在实践中使用这种方法来测试各种百分位数。专注于一个变体,假设有。
- N个用户,索引为i = 1, 2, . . ., N;
- 用户i浏览了Pᵢ产品,其中Pᵢ是独立和相同分布(i.i.d)的随机变量。
- Xᵢⱼ是用户i的jᵗʰ页面浏览的页面加载时间。Xᵢⱼ很可能是正相关的,因为页面浏览很可能都是来自一个拥有快速网络和快速设备的用户,反之亦然。
- {Xᵢⱼ的样本P95,i=1,2,. . ., N; j = 1, 2, . . .,Pᵢ}被表示为Q̂。
总结统计
我们的数据管道需要输出以下汇总统计数据,以进行假设检验。
- 用户数 N
- 样本 P95 Q̂
- ∑ᵢ Jᵢ,其中
而Jᵢ是用户i在一个桶中低于样本P95的页面加载时间的数量。
- ∑ᵢPᵢ,其中Pᵢ是用户i的页面访问数
- ∑ᵢ Jᵢ²
- ∑ᵢPᵢ2
- ∑ᵢJᵢPᵢ
- (P(95-δ)和P(95+δ)。δ是一个可调整的窗口大小。假设δ=0.25,我们需要计算P94.75和P95.25。
请注意,所有这些汇总统计都是在实验桶级别上汇总的,这使得数据管道更加简单。关于调谐参数,我们发现=0.25导致了像P50和P95这样的百分位数的满意结果。当涉及到像P99或P99.9这样的极端百分位数时,它可能需要更仔细的调整。
假设检验
通过汇总统计,样本P95的方差被估计为
注意,我们按照Quora的方法来估计分母中的密度fₓ(Q)
fₓ(Q)=2*δ/(P(95+δ) -P(95-δ))
而分母的估计方法如下
有了样本P95的方差估计,我们进行Z检验来计算P值。
如果你好奇为什么我们可以这样估计样本P95的标准误差,请参考LinkedIn论文中的方程式1-6。实质上,百分位数等于F-¹(百分比),其中F是Xᵢⱼ的累积密度函数 (cdf),在P95的情况下百分比是0.95。该百分比是∑ᵢJᵢ和∑ᵢPᵢ的函数。此外(1/n∑ᵢJᵢ和1/n∑ᵢPᵢ)由于中心极限定理而遵循双变量正态分布。应用两次delta方法,我们可以得出样本百分位数的分布。
数据管道
百分位数测试的数据管道与典型的A/B测试有很大的不同,后者通常应用t检验,只需要三个汇总统计数据:样本平均值、样本方差和样本大小。此外,计算大数据集的百分位数是很慢的,而且是资源密集型的。因此,我们计算了近似的百分位数,这要快上一个数量级,并能得到令人满意的结果。最后,由于一些汇总统计是十进制的百分位数(例如,P94.75和P95.25),最小的样本量至少需要大于10,000,这远远小于Wish的典型样本量。
结果
分析解决方案产生了准确的方差估计
我们将聚类自举作为黄金标准,比较了上述分析法和聚类自举法所估计的标准误差。在不同的客户平台上,这两种方法估计的标准误差都很接近。在超过200个内核和1.5T内存的服务器上,对于中等规模的样本,集群自举需要几个小时。而如果我们要使用引导法,对于Wish的所有实验都需要几天时间才能完成。相比之下,分析方案的计算时间可以忽略不计。
第一类错误率在A/A测试中得到了很好的控制
为了评估I型错误率,我们利用各种API调用的请求数据,为不同的百分位数追溯构建A/A测试。I型错误率(假阳性率)接近5%,而P值分布遵循从0到1的均匀范围。
分析解决方案产生了良好的统计能力
我们还评估了力量(真阳性率)。我们采取了历史请求数据,并将其随机分成50%的对照组和50%的治疗组。对于处理桶,我们将请求时间乘以110%或101%。即使只有1%的响应时间增加,检测差异的能力仍然是很好的。
结论
可靠的统计测试是值得信赖的实验平台的一个关键组成部分。对于不同的指标和不同类型的业务,没有一个放之四海而皆准的统计测试。我们分享了开发百分位数测试的努力,它为我们的实验平台释放了更多潜在的应用。现在,百分位数测试被应用于Wish的所有实验,以A/B他们对每个API的延迟影响。我们设置了护栏规则来识别引入高延迟的实验,并通知实验者以防止引入缓慢的产品功能。
鸣谢
感谢高博和齐超对这个项目的贡献。我们也感谢Pai Liu、Shawn Song、Simla Ceyhan的支持,以及Pavel Kochetkov、Lance Deng、Caroline Davey、Leah Levine对本帖草稿的反馈。
Wish的数据科学家对建立一个值得信赖的实验平台充满热情。如果你对解决这一领域的挑战性问题感兴趣,我们正在为数据科学团队招聘人员。
[1] A. Deng, J. Lu, and J. Litz,Trustworthy Analysis of Online A/B Tests:陷阱、挑战和解决方案(2017),WSDM:第十届网络搜索和数据挖掘国际会议。剑桥,英国。
[2] M. Liu , X. Sun, M. Varshney, and Y. Xu,Large-Scale Online Experimentation with Quantile Metrics ( 2019),arXiv preprint arXiv: 1903.08762
How Wish A/B tests percentiles最初发表于Towards Data Scienceon Medium,人们通过强调和回应这个故事继续对话。