Wish如何进行A/B测试百分位数

694 阅读14分钟

在大规模在线实验中检测百分比差异的方法学研究

图片: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的所有实验都需要几天时间才能完成。相比之下,分析方案的计算时间可以忽略不计。

medium.com/media/883af…

第一类错误率在A/A测试中得到了很好的控制

为了评估I型错误率,我们利用各种API调用的请求数据,为不同的百分位数追溯构建A/A测试。I型错误率(假阳性率)接近5%,而P值分布遵循从0到1的均匀范围。

分析解决方案产生了良好的统计能力

我们还评估了力量(真阳性率)。我们采取了历史请求数据,并将其随机分成50%的对照组和50%的治疗组。对于处理桶,我们将请求时间乘以110%或101%。即使只有1%的响应时间增加,检测差异的能力仍然是很好的。

medium.com/media/68d3f…

结论

可靠的统计测试是值得信赖的实验平台的一个关键组成部分。对于不同的指标和不同类型的业务,没有一个放之四海而皆准的统计测试。我们分享了开发百分位数测试的努力,它为我们的实验平台释放了更多潜在的应用。现在,百分位数测试被应用于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,人们通过强调和回应这个故事继续对话。