Tubi 的实验

在 Tubi,从数据中学习是我们的首要任务之一,而实验在其中起着至关重要的作用1。截止到目前,借助 Tubi 的内部实验平台 Popper, 所有实验都可以实现用户分组的 A/B 测试方式。一个典型的实验流程可以分为三个步骤:首先,实验负责人通过自定义样本量计算器(运行在 Tubi Data Runtime 2上)来估计实验所需的持续时间。然后使用 Popper 来配置实验,例如,实验组的组数、实验部署安排以及每个实验组所需的资源。最后,实验配置审核无误后就可以上线了。

我们的主要实验系统实现了 CUPED 方差缩减方法3 来提升统计功效,并在中心仪表盘上展示平均实验效果和统计检验结果。

在用户分组实验中,Popper 将用户随机分配到实验组和对照组,然后,我们在实验期间对每个用户的实验效果指标(例如,总观看时间)进行追踪,并使用统计学检验来比较不同实验组之间的变量级均值。用户分组实验设计中的随机分配使得我们可以根据鲁宾因果模型4 来进行因果推理。

然而,用户分组实验并不总是适用于 Tubi 的每个场景。在许多广告设置实验中,由于两组共享一份广告供给,实验组和对照组之间会存在互相影响的行为。举一个具体的例子:假设每个广告时段的汽车广告的数量原本是 1,我们想要测试每次广告时段汽车广告数量的增加会如何影响用户行为。进一步假设我们进行了一个用户分组实验,其中对照组的用户每次广告时段看到 1 个汽车广告,而实验组中的用户每次时段看到 3 个汽车广告。在这种情况下,提供给实验组的汽车广告数量的增加会改变对照组的可用汽车广告供应,可能导致对照组中的大量用户看到的汽车广告比原来要少。在这种情况下,比较实验组和对照组的用户行为可能会对实验估计结果带来偏差。

这种网络干扰违反了鲁宾因果模型的假设,从而使用户分组实验不再适用。因此,我们需要 Switchback 实验 来估计存在网络干扰(组间相互影响)时的因果效应。

Switchback 实验

你可能会好奇什么是 Switchback 实验,以及它可以解决哪些典型的用户分组 A/B 测试无法解决的问题。在 Switchback 实验中,我们不再将用户随机分配到实验组和对照组,而是将一系列时间窗口随机分配给两个组,我们称它们为“分配窗口”。在每个“分配窗口”期间内,所有用户都会处在相同的实验设定中。这样便消除了上述用户分组的实验组和对照组之间的干扰,例如,在任何单个时间点实验组和对照组之间不再有共享的广告供给。一般情况下,Switchback 旨在消除由共享有限资源而引起的干扰,因此这种实验在有多边市场属性的行业(例如拼车)中被广泛使用。

Switchback 实验有一个经常被忽略的优势: 它能够用于解决一些用户分组 A/B 测试无法处理的问题。因为这个设计没有将用户设置为实验单元,所以可检验的假设集不再局限于那些参与实验的用户。一个很好的例子是工程系统测试,例如测试广告预算分配策略或竞价算法。Switchback 测试还使我们能够衡量集成新的需求方平台 (DSPs) 对收入的影响,而这些我们过去只能通过集成前 / 后的对比分析来衡量。因此,我们能够基于实验结果来做出更加准确和严谨的决策,并据此改进那些非直接面向用户的系统。

Switchback 实验也改变了我们对实验效果指标的看法。在用户分组实验中,效果指标是在每个用户级别上计算并汇总的。而对于 Switchback 实验,效果指标则与时间块(分配窗口)相关联,这也改变了我们对实验数据的思考方式。

Switchbacks 带来的难题

尽管 Switchback 实验能够解决组间相互干扰的问题,但它同时也为我们带来了一系列新的难题。以下列出了其中三个在 Tubi 设计和实现 Switchback 实验系统时产生影响的难点,并介绍了我们是如何克服这些困难的:

难点 #1:时间依赖

难点:由于实验单元不再是用户而是时间窗口,如果我们的指标表现出季节性,那么我们的随机化就可能会出现偏差。例如,如果人们在周末比工作日看更多影视节目,要是正好有一个实验组,在周末分配的实验窗口比工作日更多,这种情况下我们可能会得出一个非常有误导性的结论。

解决方案:为了减轻季节性带来的潜在偏差,我们对分配窗口施加每周镜像约束。也就是说,分配窗口是按“双周对”创建的。第一周是随机的,但第二周不是 —— 它只是第一周的镜像翻转。图 1 是一个为期两周的 Switchback 实验示例,每个分配窗口为两小时(红色 = 实验组,蓝色 = 对照组):

图 1 : 具有周间镜像的分配窗口随机化的示例

以两个星期日的前三个分配窗口为例,可以看到:第一个星期日的前两个分配窗口(第 1 - 4 小时)是对照组,下一个分配窗口(第 5 和第 6 小时)是实验组,而在下一个星期日,前两个分配窗口是实验组,下一个分配窗口是对照组。这种周间镜像的方法不仅能确保实验和对照组有相同数量的窗口,还确保随机化不会在一天中的某时刻(几点)或一周中的某一天(周几)上产生不平衡的窗口分配。尤其要注意的是,如果每周之间存在较大的差异,则此约束将无济于事,但在 Tubi,一般情况下几点或星期几的影响往往比周和周之间的差异更大。

难点 #2:残留效应 (Carryover Effects)

难点:虽然分配窗口通常可以随时切换,但前一个窗口对用户的影响可能会在切换到新窗口之后残留一段时间。例如,在实验组窗口快结束时开始观看影视节目并在随后进入对照组窗口期间继续观看的用户,相比于观看行为开始和结束都在同一个窗口内的用户,可能有不同的用户行为表现。

解决方案:残留效应可以通过删除在时间窗口切入 (burn-in)或切出 (burn-out)的那部分数据来减轻。为了实现这一点,我们的 Switchback 数据系统将事件数据聚合到 20 分钟的窗口中,这是在对此系统的效率和实验指标精度之间做了分析与权衡后选择的值。图 2 提供了在 Tubi 的 20 分钟事件数据聚合粒度下,从某一天的第 5 到第 8 小时开始切换实验分配窗口,在窗口切入时的三种不同数据处理方式的示例:

图 2 : 由 20 分钟数据聚合窗组成的 2 小时分配窗口的三种切入选项

在图 2 的第一列中,没有在窗口切入阶段删除任何数据。但是,如果我们预计本实验中会出现短期残留效应,我们可以删除第 5 小时和第 7 小时的前 20 分钟数据窗,正如中间列中的灰色单元格所示。如果我们预计有更长的遗留效应,我们可能需要如右列所示在切换后删除紧接着的 2 个 20 分钟的窗口数据。一旦我们有了无偏的数据,我们就可以进行有效的统计检验。需要注意的是,如果有更长期的遗留效应需要移除更多个 20 分钟数据窗, 则可能需要更长的实验分配窗口才能累积到足够的实验数据。

难点 #3:更少的样本量和更低的功效

难点:由于实验单元是分配窗口而不是用户,因而样本量远小于典型的用户分组实验。此外,根据我们的经验,分配窗口之间的变化通常(远)大于每个窗口内的变化。因此,Switchback 实验在同样的条件下会表现出较低的功效。

解决方案:Bojinov, Simchi-Levi, and Zhao5 分析了传统 Switchback 实验设计(即,所有分配窗口都是随机的且没有施加镜像约束的设计),并提出使用置换检验的方法来解决。对于一个传统 Switchback 实验,置换检验反复重新随机化每个窗口的分配标签,并且每次会重新计算实验组的效果指标以构建一个参考分布,然后将观察到的实验估计效果与重新采样的实验组效果分布进行比较。如果实际观察到的效果相对于该分布足够极端(例如,如果观察到更极端的效果的概率小于 0.05 ),则将其视为实验组具有鲁棒效果的信号。

我们还考虑了使用 t 检验和其他实验效果估计技术来解决这一问题(例如,具有夹心方差估计器的线性模型和多级建模方法;请参阅文末链接的 DoorDash 博客文章)。最终,考虑到兼顾最少限制性假设和计算简洁性,我们认为带有约束的置换检验是最佳选择。

Tubi 的 Switchback 实验系统

与实现用户分组测试的方式类似,Switchback 实验是通过在 Popper 中指定实验参数(例如,分配窗口的时长、总体实验持续时间和涉及的设备平台类型)来实现的。

当一个 Switchback 实验上线,数据处理系统(如下图 3 所示)会在每个夜间运行。在第一阶段,系统会确定有哪些实验有新数据要处理。对于这些实验,系统会查询和转换用户行为事件和广告曝光数据,以创建 20 分钟事件聚合窗的数据。然后,将包含这些 20 分钟窗的每日文件写入 S3。最后,每次完成一个为期两周的实验时,都会清理该实验的数据(例如,去除窗口切入和 / 或切出的数据),将指标汇总到分配窗口级别,进行统计学检验,并将实验效果报表文件写入 S3。对于尚未结束完整实验周期的实验,处理系统会在将每日文件写入 S3 后停止。

图 3 : Tubi 的 S witchback 实验系统流程图

Switchback 实验仪表盘与样本量计算器一样,都使用 Tubi Data Runtime6 来运行。在仪表盘后台,应用 Benjamini-Hochberg procedure 7 来降低错误发现率。从报表上的下拉菜单中选择实验后,结果将以颜色编码显示正(绿色)或负(红色)提升以及统计显著性(灰色 = 假,白色 = 真)。下面图 4 中的屏幕截图显示了报表的示例(为保护隐私,去除了实验和对照组的平均值以及平均实验效果)。

图 4 : S witchback 实验效果报表屏幕截图

我们目前在做什么

我们的 Switchback 实验系统已经启动并运行了数月,现在我们正在其上开发其他功能。例如,对于解决残留效应和优化实验设计进行的实证检验,例如对于给定的实验组,确定其最优分配窗口时长和周数。

尽管目前来看,我们的 Switchback 实验系统在应用范围上比用户分组实验系统小得多,但我们预期 Switchback 实验系统的应用将在 Tubi 持续拓展。随着越来越多 Switchback 实验的开展,在未来的工作中,我们也会进一步致力于减少实验间的相互干扰以及优化每个实验设计。

如果您对从事此类数据科学项目感兴趣,请联系我们!期待充满热情的数据科学家们加入我们团队!更多热招职位请访问这里。

原文作者:Michael Berk, Max Dorofiyenko, and Noah Silbert, Tubi Data Science

译者:Yaqi WANG, Tubi Senior Engineer - Machine Learning


欢迎加入 Tubi,一起高效工作,品质生活!

Tubi 的 Switchback 实验相关推荐

  1. 石灰吟思维导图视频_石灰实验分析

    石灰吟思维导图视频 Inaccurate experimentation analysis leads to suboptimal business decisions. As Lime grows, ...

  2. Tubi x Scala:为什么

    Scala Meetup 上有一个问题被反复提及" Tubi 为什么选择使用 Scala?" Tubi Senior Tech Lead - Alexandros Bantis 在 ...

  3. 合肥工业大学—SQL Server数据库实验四:数据库的分离和附加

    数据库的分离和附加 1. 数据库分离 2. 数据库附加 1. 数据库分离 当SQL Server服务器运行时,该服务器上所有的数据库自动处于运行状态,而运行中的数据库文件是无法进行数据库文件的拷贝的. ...

  4. 解读模拟摇杆原理及实验

    解读模拟摇杆原理及实验 Interpreting Analog Sticks 当游戏支持控制器时,玩家可能会一直使用模拟摇杆.在整个体验过程中,钉住输入处理可能会对质量产生重大影响.让来看一些核心概念 ...

  5. legend位置 pyecharts_实验|pyecharts数据可视化分析-1

    1. 实验介绍 本实验主要介绍pyecharts基本特点与属性. 1.1. 实验目的 了解pyecharts功能.特点.与安装方式. 1.2. 知识点 pyecharts特点 pyecharts图表 ...

  6. 2019春第二次课程设计实验报告

    2019春第二次课程设计实验报告 一.实验项目名称: 贪吃蛇游戏编写: 二.实验项目功能描述: 这个实验主要是实现游戏的正常运行,实现的目标是对小蛇移动的控制, 同时对小蛇数据的保存,如何实现转弯的效 ...

  7. 汇编语言程序设计 实验九

    实验内容 实验一: 补全程序t1.asm,完成在屏幕上输出内存单元中的十进制两位数 ; 在屏幕上输出内存单元中的十进制两位数 assume cs:code, ds:data data segmentd ...

  8. 20172324 2018-2019-1《程序设计与数据结构》实验2报告

    20172324 2018-2019-1<程序设计与数据结构>实验2报告 课程:<程序设计与数据结构> 班级: 1723 姓名: 曾程 学号:20172324 实验教师:王志强 ...

  9. JAVA第二次验证设计性实验报告

    [实验任务一]:素数输出 (3)实验报告中要求包括程序设计思想.程序流程图.源代码.运行结果截图.编译错误分析等内容. 1.   实验内容 (1)计算并输出3~100之间的素数. (2)编程满足下列要 ...

最新文章

  1. 【GPU精粹与Shader编程】(一) 全系列核心知识点总览
  2. 手机App扫描多个网站显示的二维码的数据结构设计
  3. 递归和分治思想及其应用
  4. android 模拟器read-only file system,WAC启动Android模拟器 transfer error: Read-only file system错误解决方法...
  5. 如何在 .Net Core 中使用 IHostedService
  6. 数字图像处理学习笔记(二):SIFT(尺度不变特征变换)算法
  7. PHP字符串运算结果,PHP 实现后缀表达式(接受四则运算字符串,输出计算结果,附代码)...
  8. Java调用Lua脚本(热载实现)
  9. 算法不归路之最大子序列(C++版)
  10. python写数据库校验_Python:生成验证码并插入到数据库!
  11. Spring MVC控制流程与简易配置方案
  12. 什么是pytorch(3神经网络)(翻译)
  13. 处理器管理与进程调度
  14. python识别文字软件_使用Python和大漠插件进行文字识别含软件源码
  15. 自然语言处理——基于预训练模型的方法——第2章 自然语言处理基础
  16. 电赛笔记【msp430简介——基于msp430f5529】
  17. 小狼毫 Rime 输入法任务导向式常用参数修改指南
  18. 不懂Web基本原理怎么能学好爬虫。( 二、Web服务器工作原理)(爬虫、反爬虫、服务器、客户端、网络协议 )
  19. Titan XP值不值?一文教你如何挑选深度学习GPU
  20. 全智通A+常见问题汇总解答—A+打印本次派工单,结果显示所派工项目

热门文章

  1. php获取访客信息,PHP 获取访客的信息
  2. js如何获取html中输入框中的内容?
  3. 网络中链路复用的优缺点及交换机作用分析
  4. CSS3与页面布局——Box Model、边距折叠、内联与块标签、CSSReset
  5. mysql刷题(不定时更新)
  6. 三子棋2(完成玩家和电脑循环操作部分)
  7. Lombok的使用详解
  8. Visio1——Visio2019对任意手绘不规则图形进行颜色填充
  9. mysql报1862_解决mySQL中1862(phpmyadmin)/1820(mysql)错误的方法
  10. Centos 查看端口是否开放的三种方式