[译] 解密 Lyft 的AB实验最佳实践

网络效应与AB实验

科技公司努力做出数据驱动的产品决策的趋势下,Lyft 也不能免俗。 正因为如此,在线实验,或者说 a / b 测试,变得无处不在。 AB测试太火了,以至于你可能会认为它是一个完全解决的问题。 在这篇文章中,我们将解释为什么实际情况相去甚远,在 Lyft 的拼车市场一样,系统是根据网络动态发展的。 正如我们将看到的,天真地将用户划分为实验组和控制组可能会影响您所关心的效果估计。

在实验结束后要求[数据科学家]对结果进行分析。 [她]也许能说出这个实验失败的原因。

— paraphrasing R. A. Fisher, 1938.

简单地说,Fisher 的意思是,实验设计很重要。以至于一个粗心的实验设计有时会导致无法回答感兴趣的问题的数据。

例如: 峰时定价补贴

想象一下,如下图所示,整个 Lyft 网络被微小的正方形区域所封装。 当用户 a 和 b 打开 Lyft 应用程序(大约在同一时间) ,附近只有一个驱动程序可用。 我们称这种情况为供应不足

图1. 典型的供应不足情况: 两名乘客和一名可用司机。 在这个例子中,两位乘客都可能接触到峰时价格

在这种情况下,Lyft 有时会采用峰时定价来维持驾驶员的可用性。 峰时定价是以百分比表示的价格附加费,根据供应不足的程度(+ 25% ,+ 50% 等)可以有不同的价值。 为了简单起见,在这个例子中我们假设峰时定价是二进制的 -- 要么有(在某个固定值) ,要么没有。 我们还假设峰时定价的供给效应发生在一个比需求效应更慢的时间尺度上,因此我们可以忽略它们。 换句话说,乘客对峰时定价的反应比司机快。

假设我们想要评估 Lyft 补贴峰时定价的效果,即代表乘客支付峰时定价,甚至不向乘客展示。 我们将在随后的图片中用绿色标记表示获得补贴的乘客。

这里有一个有趣的比喻是关于两个平行宇宙的。 我们感兴趣的是现实世界非现实世界之间的区别,前者是用户在供不应求的情况下获得峰时定价,后者是 Lyft 补贴峰时定价。 这两个宇宙如下图所示。 请注意,如果没有任何干预,我们只能观察到整体情况,我们称之为全局控制。 另一方面,全局性的施策相当于对所有乘客给予峰时定价补贴。

图2 事实和反事实的宇宙。 在现实生活中(上图) ,两个用户都体验黄金时间。 此场景也称为全局控制。 在下面的图片中,两个用户都得到了峰时定价补贴——全局施策。 我们不能同时观察这两个平行的现实,并且在没有一些干预的情况下观察全局控制。

假设核心指标是平均完成单量(或期望完成)。 我们想知道这个数字在两个平行宇宙之间是如何变化的。 让我们假设一个简单的概率模型来简化这个例子。 具体来说:

  • 当没有峰时定价,乘客打开应用程序,看到有司机总是要求搭车
  • 在峰时定价,同一位乘客有50% 的机会要求搭车
  • 无论是司机还是乘客都从来没有取消过ーー每一个请求都会导致一次完整的旅程

在全局控制情况下,乘客 a 和 b 的平均乘坐次数为0.75。 为了找到原因且不失一般性,假设乘客 a 在乘客 b 出现前几秒打开应用程序,随后半程加入,尽管看到峰时定价,用户 a 也将发生一个订单,乘坐次数是1。 另一种情况,用户 a 将选择不发起请求,那么用户 b 将取而代之完成一个订单。 否则,两个用户都会拒绝峰时定价,并且不会使用任何订单。根据对称性,如果 b 先打开,情况也是如此。 因此,期望是

在全局施策下,两位乘客都没有看到峰时定价,此时情况要简单得多。 第一个打开应用程序的用户会自动乘坐,第二个用户就不太走运了。 既然总是乘坐单程车,那么1也是一种期望。 比较这两个宇宙,我们看到全局平均实验效应,也就是我们想要估计的基本事实,是由

在我们的简单模型中,补贴峰时定价导致了1 / 3的订单增加。这种实验效果在现实生活中当然是无法观察到的。 因此,我们必须找到一些方法来估计它。

随机化乘客

A / b 测试干预(如补贴峰时定价)的标准方法是将用户(在本例中是乘客)随机分配到实验组或控制组,例如将他们的用户 id 散列到桶中。 在我们的例子中,这种随机化的平均结果是,一个用户看到峰时定价,而另一个用户看不到--如下图所示。 这个场景对应于第三个(相互排斥的)平行宇宙!

图3. 随机用户实验的一种实现方法。 在这个例子中,用户 a 在控制组中(隐藏峰时定价) ,用户 b 在实验组中(峰时定价补贴)

为了评估这种处理方式对于像这样的随机用户实验对核心指标的影响,人们通常会做以下操作:

  1. 将限定在控制组的用户估计全局控制下的核心指标。
  2. 将限定在实验组的用户估计全局实验下的核心指标。
  3. 计算1和2的估计值之间的相对差

让我们看看当我们把这个逻辑应用到我们的简单示例时会发生什么。 记住,每个用户有50% 的机会先打开应用程序。 让我们首先考虑用户 b,他碰巧在实验组中(补贴峰时定价)。 在我们的简单模型中,如果她先打开应用程序,她保证会要求并完成一个订单。 另一方面,如果她打开应用程序第二,她将完成一个订单当且仅当用户 a 决定不要求。 这种情况也有50% 的可能性发生,所以假设用户 a 首先打开应用程序,用户 b 希望乘坐半程。 综合所有这些,用户 b 的预期完单次数是

对于用户 A 来说,情况就更简单了。 如果用户 B 先打开应用程序,用户 A 就不能乘车,因此在这种情况下,预期值是0。 我们知道,用户 A,谁看到峰时定价,在有司机条件下将要求中途上车。 因此,A 预计完成的订单数量为

现在让我们计算一下由于峰时定价补贴而带来的核心指标增量有多少。

显然,这比我们上面计算的33% 的真实效果大得多 -- 我们高估了峰时定价补贴的效果6倍! 诚然,两个用户并不是很多,所以您可能认为这个虚构的 A/B 测试存在样本量小的问题。 当然,一个用户实际上不能乘坐0.25次。 但是想象一下,真正的 Lyft 网络是由这个两人仿真衍生而成的,它们都是随着时间的推移独立进化的,以一个固定的速率为司机和乘客提供补给。 我们可以构造一个更大规模的例子,在大量类似用例上面计算仍然适用。

统计推断

上面例子中发生的情况是由于一种称为 干扰(interference) 的统计现象(不要与推断混淆)。 为了正确定义它,我们首先必须引入 潜在结果 的概念。 潜在结果背后的想法很简单: 每一个 实验单位 (例如用户)走来走去都带着两张纸,一张在后面的口袋里。 在其中一张纸中写道,被分配到对照组。 另一张纸上标记分配到实验组。 这两张纸合在一起,就是一个单位的潜在结果ーー如果她参加实验,这些事情就可能发生在她身上。 通常,单元分配给一个实验组被认为是确定性且唯一随机的。

因果推理的一个关键假设是,写在这两张纸上的内容不受实验单元碰巧得到的实验任务和实验中其他单元的任务的影响。 当 a 单元的分组分配改变 b 单元的任何潜在结果时,就会发生干扰。 这正是我们在上面的样例中看到的情况,其结果是乘坐是否完成。 当用户 a 的峰时得到补贴时,用户 b 不太可能完成乘车(不管用户 b 的峰时是否也得到补贴)。

在医学统计学中,干扰的概念出现在传染病疫苗的研究中。 疫苗对一个受试者结果的有效性取决于在他的社交圈中有多少其他人也接种了疫苗。 换句话说,一个实验对象的治疗可以给其他可能未经治疗的实验对象提供保护作用。 结果是,实验组和未实验组之间的测量差异(归因于疫苗的好处)将会缩小。 上图中,用户 a 的峰时是对用户 b 成功完成 Lyft 旅程的倾向的“保护”——在这种情况下,这导致了对真实效果的夸大。 通常,干涉偏差可以发生在任何一个方向上。

Lyft 并不是唯一一家试图在 a / b 测试中减少统计干扰的科技公司。GoogleeBay 的研究人员在广告商或用户在网上拍卖中互动的应用程序中观察到了同样的现象。 粗糙的随机化,比如说在拍卖层面,可以帮助(但不是完全)减轻这种偏见。 eBay 的例子特别适合我们的样例,因为作者描述的干扰偏见相对于供应和需求弹性。 干扰问题也出现在社交网络的实验中,用户对治疗的反应可能会污染图中的邻近节点。 对于相对静态的网络,这个问题已经取得了一些进展,其中图聚类起着核心作用。 让我们的世界变得复杂的是,Lyft 网络是双面的(乘客和司机) ,它的图形结构具有难以置信的动态性。 因此,干扰很难明确地建模。

另类实验设计

随机化用户肯定不是在拼车市场上构建在线实验的唯一方式。 你可以选择随机化应用程序会话,从方块到整个城市的空间单位,甚至时间间隔。 这些实验单位越粗糙,在你的效果估计中对干涉偏见的保护就越强。 然而,成本增加了估计量的方差,因为粗糙的单位自然少于精细的单位(方差比例是样本容量的一倍) ,有时也是不均匀的。 这个成本可能是巨大的。 尽管如此,在全局控制和全局实验配置之间的交替时间间隔对于 Lyft Marketplace 团队在实验早期是一个成功的策略。 下表将这些不同的随机化方案置于偏差-方差折衷的连续体上。

表一 实验单元的不同选择对应于偏差-方差折衷谱的不同点。 在网络实验中,偏差来源于干扰效应,方差来源于单元集基数的减少,以及单元间的异质性

然而,要严格量化这些权衡,需要仔细的模拟研究。 在我们开始这项冒险之前,我们需要描述 Lyft 数据科学团队设计和构建的精细的仿真框架。 幸运的是,这正是我们下一篇博客文章的主题,第2部分: 模拟乘车共享市场。 敬请期待!

你对试验设计,市场优化,或数据科学感兴趣吗? Lyft 持续招聘中! 邮件至 [email protected].

参考资料

原文作者: Nicholas Chamandy 译者: Harry Zhu 英文原文地址:
https://eng.lyft.com/experime...

作为分享主义者(sharism),本人所有互联网发布的图文均遵从CC版权,转载请保留作者信息并注明作者 Harry Zhu 的 FinanceR专栏:https://segmentfault.com/blog...,如果涉及源代码请注明GitHub地址:https://github.com/harryprince。微信号: harryzhustudio
商业使用请联系作者。

你可能感兴趣的:(uber,人工智能)