Trustworthy Online Controlled Experiments Part 5 Chap 20
在扣动扳机之前,请务必确定目标
– Tom Flynn
为什么重要
触发为实验人员提供了一种方法,可以去掉不会受到实验影响的用户,从而降低噪声来提高灵敏度(统计功效)。随着组织的实验成熟度的提高,我们看到了更多的触发性实验正在运行。
如果用户所在的版本与任何其他版本(反事实)之间在系统或用户行为上存在(潜在)差异,则会触发用户进行实验分析。触发是的宝贵工具,但是存在一些陷阱,可能会导致错误的结果。如果打算使用,则先要对所有触发的用户进行分析,这一点很重要。如果能够在运行时记录触发事件,则更容易识别触发的用户群。
触发的例子
如果更改仅影响某些用户,则相当于那些未受影响的用户的“处理效果”为零。这种只对可能受到更改影响的用户的观察对实验分析具有深远的意义,并且可以显着提高敏感性和统计能力。让我们看一下几个例子。
例1:故意的局部暴露
假设要进行一项更改, 并针对一部分人口进行实验:用户仅来自于美国。因此,应该只分析来自美国的用户。其他国家/地区的用户则不会受到此更改的影响,因此对他们的处理效果为零。如果把这些不是美国的用户添加到分析中, 则只会增加噪音并降低统计功效。请注意,如果他们可能已经看到更改后的版本,则必须在分析中包括来自美国和其他国家/地区的“混合”用户。在看到变化之后,请务必记录他们的所有活动,甚至包括在美国境外进行的活动,因为新版本已经暴露给他们,因此他们会对非美国用户的数据造成尾部影响。
此观察结果适用于其他类型的风险,例如进行更改仅适用于Edge浏览器的用户,或仅披露送货地址在给定邮政编码中的用户,或对重度(上个月至少有3次访问该网站)用户进行更改。
例2:有条件的曝光
假设干预是针对访问网站的一部分的用户, 而分析只针对这部分用户。在这些示例中,用户用到的功能一旦受到更改,就会因为存在一些差异而触发实验。有条件的暴露是一种非常常见的触发方案。以下是一些其他例子:
结帐功能的更改:仅触发开始结帐的用户。
更改协作功能:例如在Microsoft Word或Google Docs中共同编辑文档:仅触发参与协作的用户。
对退订屏幕的更改:仅触发看到这些更改的用户。
更改天气答案在搜索引擎结果页面上的显示方式:仅触发查询天气答案的用户。
例3:覆盖率增加
假设网站为购物车中超过 35美元的用户提供免费送货服务,而实验测试将门槛降低为 25美元。一个观察结果是,该更改仅会影响购物车商品在 25美元至35美元之间的用户。购物车超过35美元的用户和购物车低于25美元的用户在“干预组”中的行为与“对照组”相同。仅当购物车中有 25美元到 35美元时,用户才会看到免费送货优惠。对于这个例子,我们假定该站点上没有免费送货的促销“广告”;如果在某个时候为用户显示免费送货,而“对照组”和“干预组”之间有所不同,则该事件立即成为触发点。
图20.1以Venn图的形式显示了这个例子:C表示向某些用户提供免费送货服务,而T则将覆盖范围扩大到更广泛的用户群。不需要触发这些组之外的用户(如示例2中所示),同时,你也不需要触发既在“干预组”又在“对照组” 的用户,因为价格对他们来说,是相同的。
处理可扩大功能的覆盖范围。仅触发T \ C中的用户。 C(和T)中的人看到相同的报价,因此治疗效果为零
例4:覆盖范围变更
当覆盖率没有增加,但功能发生变化时,事情就会变得有些复杂,如图20.2的维恩图所示。例如,假设Control向购物车中至少有35美元的购物者提供免费送货服务,但Treatment向购物车中至少有25美元的用户提供免费送货服务,除非他们在实验开始前60天内退回了商品。
治疗组会改变覆盖范围。如果交叉部分的用户看到的东西完全相同,则仅触发其余的用户
控制和治疗都必须评估“其他”条件,即反事实,并且仅当两个变体之间存在差异时才将用户标记为已触发。
例5:机器学习模型的反事实触发
假设有一个机器学习分类器,可以将用户分类为三个促销中的一个,或者是将相关产品推荐给页面上显示的产品的推荐器模型。训练了新的分类器或推荐器模型,并且V2在离线测试中表现良好。现在,来看看它是否可以改善OEC(请参阅第7章)。
关键观察结果是,如果对于大多数用户而言,新模型与旧模型重叠,例如对相同输入进行相同分类或推荐时,则对于那些用户,处理效果为零。你怎么知道的?必须生成反事实。控件将同时运行“控制和处理”模型,并在记录“控制和处理(反事实)”输出时向用户显示“控制”。处理将同时运行“控制”和“处理”模型,并在记录两个模型的输出时将用户暴露给“处理”。如果实际和反事实不同,则会触发用户。
请注意,由于必须同时执行两个机器学习模型,因此这种情况下的计算成本会增加(例如,使用一种处理方法后模型推断成本将增加一倍)。如果两个模型无法同时运行,并且受控实验无法同时执行两个模型,则实验会造成访问时间延迟(例如,如果一个模型更快或更占用更少的内存),而延迟也影响结果。
数值例子
给定 标准差和所需灵敏度水平的OEC指标,即需要检测的变化量,置信度为95%,功效为80%的最小样本量(van Belle 2008, 31)如公式20.1所示:
以一个电子商务网站为例,在实验期间, 5%的访问用户最终完成了购买交易。把转化(访问了并且买了)事件看做伯努利试验,p = 0.05 (这里的p 不是 p-value 而是伯努利实验中的“成功率”)。标准差为 ,因此。根据以上公式,至少需要16 * 0.0475 /(0.05⋅0.05)2 = 121,600个用户。
如果像例2一样更改了结帐流程,则仅分析启动结帐流程的触发用户。假设在所有的访问用户中, 有10%的用户启动了结帐,因此在购买率为5%的情况下,其中一半完成结帐,或者p = 0.5。方差此。因此,需要个用进行结帐的用户。由于90%的用户未发起结帐,因此实验中的用户数应至少为64,000,几乎是上个例子的一半,因此,可以大约缩短一半的实验时间。
最佳的保守触发
比较两个版本时,最佳触发条件是只关注会用到修改的功能的用户, 比如在上一个例子中, 只关注进入结账流程的用户。
如果有多个干预方式,则最好记录所有版本的信息,包括实际值和所有反事实信息。然后,可以以最佳方式触发受影响的用户。但是,由于必须执行多个模型才能生成反事实信息,因此多个干预方式可能会带来可观的成本。
在实践中,有时会进行的是非最佳但保守的触发,例如:包括了更多的用户。这不会使分析无效,而是会失去统计功率。如果保守的触发器不能识别出比理想触发器更多的用户,那么简单的权衡可能是值得的。这里有些例子:
多种干预。版本之间的任何差异都会触发用户进入分析。无需记录每个变量的输出,只需记录一个布尔值以表明它们是否有所不同。对于某些用户,“对照”和“处理1”的行为可能相同,但对于“处理2”而言,行为可能有所不同。因此,仅比较“对照”和“治疗” 1时,需要包括具有对干预没有反应的用户。
事后分析。假设实验已经运行,并且反事实日志记录存在问题,也许在结帐期间使用的推荐模型无法正确记录反事实。可以使用触发条件,例如“用户启动的结帐”。尽管与结帐时推荐模型不同的用户相比,它识别的用户更多,但它仍然可以删除从未启动结帐的90%的用户,因此干预效果为零。
整体干预效果
在计算对触发人群的治疗效果时,必须将效果稀释到整个用户群,有时称为稀释影响或侧面影响(Xu等人,2015)。如果,将10%的用户收入提高了3%, 是否将整体收入提高了10%* 3%= 0.3%?不! (常见的陷阱)。总体影响可能在0%到3%之间!
例子1
如果对结帐流程进行了更改,则触发用户是发起结帐的用户。如果产生收入的唯一方法是启动结帐,那么这个改动将触发收入和总收入都提高了3%,则无需稀释该百分比。
例子2
如果更改是针对低支出用(购买力只有平均用户的10%),那么将支出10%的用户中的10%的收入提高了3%,因此实际将收入的10%的10%的3%提升了0.03 %,这是一个可忽略不计的改进。
- 令表示整个用户范围,令表示触发的总体。
- 令和分别表示控制和处理。
对于给定的指标M,我们有
- 是未触发的控制的度量值。
- 是未触发的干预的度量值。
- 是触发的控制的度量值。
- 是触发的干预的度量值。
令表示用户数,并定义,即对触发群体的绝对影响。
定义,即对触发群体的相对影响。
触发率是被触发的用户百分比。
对于 ,也可用公式20.2计算: (可能上面的方法更加简单, 是一种近似)
(20.2)
以下是两种考虑稀释影响的方法:
1.绝对治疗效果除以总(请参见方程式20.3):
2.“治疗效果相对于未触发指标的比率”乘以触发率(见公式20.4):
因为是,所以可以看到它等于先前的等式。
直接用触发率计算稀释的陷阱是什么?计算基本如公式20.5所示:
当触发的总体是随机样本时,该计算成立,但是如果触发的总体是偏斜的(通常是这种情况),那么计算 是不精确的。
为了稀释比率指标,需要使用更精细的公式(Deng and Hu 2015)。注意,使用比率指标可能会导致Simpson的悖论(请参阅第3章),在该比率中,被触发的总体比率有所提高,但稀释后的总体响力却在下降。
值得信赖的触发
为了确保可靠地使用触发,应进行两项检查。这些检测都是非常有价值的,并且它们经常指出问题。
1.采样率不匹配(SRM;请参阅第3章)。如果整个实验没有SRM,但触发分析显示SRM,则说明存在一些偏差。通常,反事实触发未正确完成。
2.补体分析。为从未触发过的用户生成一个记录,因此将获得一个A / A 测试记录(请参阅第19章)。如果出现了具有统计意义的结论,则很有可能是触发条件不正确;或者影响了未包含在触发条件中的用户。
常见陷阱
触发是一个强大的概念,但有几个陷阱需要注意。
陷阱1:实验针对的一小部分数据太小,对总体无意义
如果想改善总体指标,那么重要的是实验的摊薄价值。例如把某个指标提高了5%,如果触发的人口是总用户的0.1%,那么当根据公式20.6计算稀释值时,稀释值将具有:
在计算机体系结构中,经常提到阿姆达尔定律,说的是避免把所有精力都放在不重要的事情上(占总执行时间的一小部分)。
这个规则有一个重要的例外,那就是对一个小想法的概括。例如,2008年8月,MSN UK进行了一项实验,其中到Hotmail的链接在新标签页(或旧版本浏览器的新窗口)中打开,从而使MSN用户的参与度(按首页上的点击/用户衡量),增加了8.9%(Gupta等人2019)。这是一个很大的改进,不过出发的用户的细分市场相对较小。但是,几年来进行了一系列实验来推广这种想法。这在当时是很有争议的。到2011年,MSN US进行了一个非常大的实验,拥有超过1200万用户,该实验在新的标签/窗口中打开了搜索结果,每用户点击次数衡量的参与度提高了5%。就增加用户参与度而言,这是MSN曾经实现的最佳功能之一(Kohavi等,2014; Kohavi和Thomke,2017)。
陷阱2:在剩余的实验持续时间内未正确触发被触发的用户
用户一旦触发,分析就必须包括他们未来的行为。由于经验上的某些差异,干预可能会影响他们未来的行为。按天或会话对触发用户的分析很容易受到先前经验的影响。例如,假设“干预”提供了如此糟糕的体验,以至于用户显着减少了访问次数。如果按天或按会话分析用户,则会低估“治疗”效果。如果每个用户的访问次数在统计上没有显着变化,则可以通过查看触发的访问次数来获得统计功率。
陷阱3:反事实日志记录对性能的影响
要记录反事实,“控制组”和“干预组”都将执行彼此的代码(例如模型)。如果一种版本的模型比另一种版本的模型慢得多,就会造成问题。有两个办法:
1.意识到这个问题。记录代码执行时间,以便可以直接比较。
2.运行A /Aꞌ/ B实验,其中A是原始系统(对照),Aꞌ是具有反事实日志记录的原始系统,而B是具有反事实日志记录的新处理。如果A和Aꞌ显着不同,则可以发出警报,说明反事实日志记录正在产生影响。
值得注意的是,反事实的日志记录使得共享控制组非常困难(请参阅第12章和第18章),因为这些共享控制组通常无需更改代码即可运行。在某些情况下,可以通过其他方式确定触发条件,尽管这可能会导致触发条件欠佳或出现错误的情况。
尚未解决的问题
以下的问题在目前没有明确答案。即使目前没有确切答案,意识到他们也很重要。
问题1:触发单元
触发用户后,只能在触发点之后进行记录的活动。显然,触发点之前的数据不受干预的影响。但是触发后的会话是部分会话,回话之前的内容可能会对触发后的用户行为造成影响。是否要记录整个回话的内容, 或者是整天的活动?
从计算上讲,在任何时候触发更容易吸引用户(包括实验开始时)。但是,这会导致统计Power的少量损失。
问题2:绘制一段时间内的指标
随着时间的推移,随着用户数量的增加而绘制指标通常会导致错误的趋势(Kohavi等,2012; Chen,Liu和Xu,2019)。最好查看一段时间内的图表,其中每天会显示访问过该天的用户。触发用户时,我们会遇到相同的问题:在第一天触发了100%的用户,但是在第二天只触发了一小部分用户,因为某些用户在第一天触发,但用户在第二天才访问。 随着时间的流逝,治疗效果逐渐降低, 这就导致了错误的趋势。也许最好是把当天访问并在当天触发的用户一起进行绘图。关键问题是,总体治疗效果必须包括所有的日子,因此这样做, 或造成单日之和和总体数据不匹配。