谷歌A/B实验——重叠实验基础设施解读

谷歌A/B实验——重叠实验基础设施解读

    • 〇、来源
    • 一、背景介绍
    • 二、如何划分参数
    • 三、谷歌设计的ab实验系统
      • 3.1 域和层的设计
        • 3.1.1 基础重叠域和层设计
        • 3.1.2 具备非重叠和重叠的域和层设计
        • 3.1.2 具备非重叠的域的嵌套设计优点
        • 3.1.3 具备非重叠的域的嵌套设计缺点
        • 3.1.4 启动层(launch layers)设计
    • 四、引用

〇、来源

谷歌ab实验论文Overlapping Experiment Infrastructure: More, Better, Faster Experimentation第四章——OVERLAPPING EXPERIMENT INFRAS- TRUCTURE

一、背景介绍

统计解决方案是一个多因素系统,其中每个因素对应于系统中的一个可变参数。

实际上,一个请求将在 N 个同时进行的实验中进行,其中每个实验将修改不同的参数,N 等于参数的数量。多因素实验得到了大量理论和实践的支持 [^1]。

然而,多因素系统在我们的复杂环境中根本不可行,因为并非所有参数都是独立的,并且并非我们可能想要测试的所有参数值都与另一个参数的值一起使用(例如,粉色background上的粉色text)。

鉴于此约束,谷歌的主要思想是将参数划分为 N 个子集。每个子集都与一个实验层相关联。每个请求最多同时进行 N 个实验(每层一个实验)。

每个实验只能修改与其层相关联的参数(即在该子集中),并且同一参数不能与多个层相关联

二、如何划分参数

首先,我们可以将模块化利用到多个二进制文件中:来自不同二进制文件的参数可以位于不同的子集中,这解决了饥饿和偏差问题。

然而,给定二进制文件的所有参数不需要在单个子集中。我们可以通过:

a.检查了解哪些参数不能相互独立地改变;
b.检查过去的实验,即凭经验查看在以前的实验中哪些参数被一起修改。

查看图 1,我们可以为 Web 服务器、搜索结果服务器和广告结果服务器分别设置一个或多个layer

在这里插入图片描述

三、谷歌设计的ab实验系统

谷歌设计的系统比简单地将参数划分为子集然后与层相关联更灵活。

为了解释灵活性,谷歌引入了几个定义。 在传入流量和系统参数的空间内工作,我们有三个关键概念:

domain,是流量的分段。
layer,一个层对应于系统参数的一个子集。
experiment实验,实验是流量分段,其中可以为零个或多个系统参数指定替代值,以改变传入请求的处理方式。

3.1 域和层的设计

我们可以嵌套域和层。

a.域可以包含层。
b.层可以包含实验,也可以包含域。
c.在层内嵌套域允许与该层相关联的参数子集在该嵌套域内进一步分区。

在包含所有流量和所有参数的默认的域和层。 我们可以:
在这里插入图片描述

3.1.1 基础重叠域和层设计

针对图 2a设计,只需将参数分为三层。 在这种情况下,每个请求最多同时进行三个实验,每一层一个。 每个实验只能修改该层对应的参数。

3.1.2 具备非重叠和重叠的域和层设计

针对图 2b设计,首先将流量分成两个域。 一个域可以是具有单层的域(非重叠域),另一个域将是具有三层的重叠域。

在这种情况下,每个请求将首先分配给非重叠域或重叠域:

a.如果请求在非重叠域中,则该请求最多在一个实验中(并且可以更改整个参数空间中的任何参数)。

b.如果请求在重叠域中,则请求最多在三个实验中,每层一个,每个实验只能使用该层对应的参数。

3.1.2 具备非重叠的域的嵌套设计优点

a.拥有一个不重叠的域,允许我们运行真正需要更改大量通常不会一起使用的参数的实验。
b.它允许我们对参数划分不同的分区;
可以想象三个域:

  • 不重叠的域。
  • 具有一个参数分区的重叠域。
  • 具有不同参数分区的重叠域。

c.嵌套允许我们更有效地利用空间,这取决于哪些分区最常用,哪些跨层参数实验最常用。

请注意,将当前未使用的参数从一层移动到另一层很容易:只要确保参数可以安全地与原始层分配中的参数重叠即可。

如果层具有语义上有意义的名称,例如“广告结果层”和“搜索结果层”,工程师往往不愿意移动违反该语义的标志。 当实验配置不正确时,有意义的名称可以通过使其更加明显来帮助提高稳健性,但它也会限制工程师将利用的灵活性。

还要注意,对于基于 cookie-mod 的实验,使用mod = f(cookie) % 1000,为了确保不同层的实验独立转移,谷歌使用 mod = f(cookie, layer) % 1000 代替

3.1.3 具备非重叠的域的嵌套设计缺点

虽然这种嵌套复杂性确实增加了灵活性,但更改配置(尤其是域的配置)是有成本的:更改流量分配到域的方式会改变可用于实验的流量

例如,如果我们将非重叠域从 10% 的 cookie mods 更改为 15%。则额外 5% 的 cookie mods 来自重叠域。

3.1.4 启动层(launch layers)设计

另一个概念是启动层。 启动层在几个关键方面与迄今为止讨论的实验层不同。
启动层始终包含在默认域中(即,它们在所有流量上运行)

a.启动层是参数的单独分区,即一个参数最多可以同时位于一个启动层和最多一个“正常”层(在一个域内)。

b.为了使启动层和正常层之间的参数重叠起作用,启动层内的实验在语义上略有不同:启动层中的实验为参数提供了替代默认值
换句话说,如果正常实验层中没有实验覆盖参数,那么在启动层实验中,将使用指定的替代默认值,并且启动层实验的行为就像正常实验一样。

c.但是,如果普通实验层中的实验确实覆盖了此参数,则该实验将覆盖参数的默认值,无论该值是指定为系统默认值还是在启动层实验中。

启动层的示例如图 2c、d 所示。 以这种方式定义启动层使我们能够在不干扰现有实验的情况下逐步向所有用户推出更改,并以标准化方式跟踪这些推出。

启动层的一般用法是为每个启动的功能创建一个新的启动层,并在功能完全推出时删除该层(并且新的参数值被纳入默认值)

最后,由于启动层中的实验通常更大,因此它们可用于测试特征之间的交互。

虽然理论上我们可以测试正常实验层中的交互作用(假设我们要么在参数在同一层时手动设置实验,要么在参数在不同层时查看交集),因为实验在正常层中,交叉点更小,因此交互更难检测。

四、引用

[^1] D. Cox and N. Reid. The theory of the design of experiments, 2000.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/549145.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

oracle 备份

1.首先以 sysdba的身份登录数据库 SQL> conn sys/oracle as sysdba SQL> col name for a50 SQL> select * from v$controlfile; 找到控制文件所在目录 STATUS ------- NAME --------------------------------------- F:\ORACLE\ORADATA\AFIS40\CONTROL01.CTL F:\O…

Mysql 5.7 创建索引官方解读

一、环境 Mysql 5.7 二、Mysql索引创建解读 1.概述 通常我们在使用CREATE TABLE时会创建所有的索引。索引的创建对于 InnoDB 表尤其重要,其中主键决定了数据文件中行的物理布局。 CREATE INDEX是另一种添加索引的方式,针对已经创建的表添加索引。注…

ntp时间服务解析

网络时间协议NTP(Network Time Protocol)是用于互联网中时间同步的标准互联网协议。NTP的用途是把计算机的时间同步到某些时间标准。目前采用的时间标准是世界协调时UTC(Universal Time Coordinated)。NTP的主要开发者是美国特拉华…

java循环中list.add对象的坑——后加入元素覆盖早期数据成相同值问题

原因 list.add(对象),放入的实质是对象的引用。当对象在循环外进行new后,第一次循环add对象1,第二次循环add对象2,由于放入实质是对象的引用,引用指向了对象2,故变成list里有两个对…

AspectJ切面自定义注解实现参数分组校验——基础概念(1)

AspectJ切面自定义注解实现参数分组校验——基础概念&#xff08;1&#xff09;一、环境二、validation-api源码解读2-1.Default源码解读2-2.valid源码解读2-3.Validation源码解读一、环境 maven 需要引入的依赖&#xff1a; <dependency><groupId>javax.valida…

【注册机】ColorSchemer Studio 2.1.0 注册机

下载地址&#xff1a;http://files.cnblogs.com/boringlamb/keygencs.rar转载于:https://www.cnblogs.com/boringlamb/archive/2010/09/01/1815264.html

AspectJ切面自定义注解实现参数分组校验——基础概念(2)

AspectJ切面自定义注解实现参数分组校验——基础概念&#xff08;2&#xff09;一、环境二、创建AspectJ2-1.基础概念2-2.Pointcut规则表达式2-3.切点标志符pointcut designator (PCD)1&#xff09;execution2&#xff09;within3&#xff09;this和target4&#xff09;args5&a…

5230主题下载

最近朋友买了新手机&#xff0c;可是她又是电脑白痴&#xff0c;告诉她要她用百度搜&#xff0c;硬是没找到&#xff0c;百般无奈我千挑万选&#xff0c;找到了这个网站&#xff0c;让方便也同样带给同样不知道怎么用百度的朋友了5230主题下载网址&#xff1a;http://d.958shop…

AspectJ切面自定义注解实现参数分组校验——代码实现(3)

AspectJ切面自定义注解实现参数分组校验——代码实现&#xff08;3&#xff09;一、环境1-1.备注二、代码实现2-1.注解定义2-2.组定义2-3.constraints使用2-4.切面定义2-5.复用ValidatorFactory2-6.单测校验2-7.说明一、环境 springbootmaven <dependency><groupId&…

solaris下修改 IPMP 配置

使用 IPMP 配置文件 /etc/default/mpathd 为 IPMP 组配置以下系统范围的参数。 FAILURE_DETECTION_TIME TRACK_INTERFACES_ONLY_WITH_GROUPS FAILBACK 如何配置 /etc/default/mpathd 文件 在具有 IPMP 组配置的系统上&#xff0c;承担主管理员角色或成为超级用户。 主管理员角色…

电力自动化及继电保护实验室规章制度

为了按时完成电力自动化及继电保护实验&#xff0c;确保实验时人身安全与设备安全&#xff0c;要严格遵守如下规定的安全操作规程 一、 仔细阅读实验指导书内容&#xff0c;严格按实验指导书中的步骤来做试验。 二、 实验时&#xff0c;人体不可接触带电线路。 三、 接线或拆线…

主板跳线连接技巧图解

作为一名新手&#xff0c;要真正从头组装好自己的电脑并不容易&#xff0c;也许你知道CPU应该插哪儿&#xff0c;内存应该插哪儿&#xff0c;但遇到一排排复杂跳线的时候&#xff0c;很多新手都不知道如何下手。 钥匙开机其实并不神秘 还记不记得你第一次见到装电脑的时候…

几个不同的概念

站点 虚拟目录2个是不同德概念。站点需要应用程序池去生效。转载于:https://blog.51cto.com/vaxvax0000/390912

VMWARE双机安装说明

详见附件。 开始创建第一台机器&#xff1a;WIN2003 NODE1这里虚拟硬盘可以尽量选择大点,然后点“完成”进行创建就OK了。配置NODE1&#xff1a;把内存调整到256M以上&#xff0c;然后点“Add”增加一块网卡&#xff1a;网卡添加完后&#xff0c;再点“Add” 添加共享磁盘&…

GridView 中 Bind和Eval的区别详解

Eval()方法在运行时使用反射执行后期绑定计算&#xff0c;因此与标准的ASP.NET数据绑定方法bind相比&#xff0c;会导致性能明显下降。它一般用在绑定时需要格式化字符串的情况下。多数情况尽量少用此方法 Eval 方法是静态&#xff08;只读&#xff09;方法&#xff0c;该方法采…

为什么每个线程都需要创建一个栈?

有四个函数A、B、C、D&#xff0c;地址分别为100、200、300、400&#xff1b;有两个线程同时执行&#xff1b; 1&#xff09;假如只有一个栈 函数A在线程1中执行的时候&#xff0c;调用了函数B&#xff0c;将函数A中下一条指令的地址入栈&#xff08;104&#xff09;&#xff…

创建线程时,需要创建的内容

请参看文献&#xff1a;线程调度&#xff0c;这样就能明白为什么需要有TCB&#xff0c;栈等&#xff1b; 创建线程时&#xff0c;需要初始化的参数&#xff1a; void ThreadCreate(A){TCB *tcbmalloc(); //申请一段内存作为TCB* stackmalloc(); //申请一段内存作为栈* st…

莎士比亚,肯尼迪总统,孔子,奥巴马总统,马克吐温,梵高,比尔盖茨等13位名人阔谈微博(中英双语版本)...

2019独角兽企业重金招聘Python工程师标准>>> 作者: ganzhijie 发表于 2010-09-02 10:11 原文链接 阅读: 21 评论: 0 John F. Kennedy-“Ask not what your twitter can do for you, ask what you can do for your twitter.”肯尼迪总统-“不要问你的微博能为你做些什…

Scala中=gt;的用法

1.匿名函数 (x: Int) > x 1这一部分就是一个匿名函数&#xff0c;我这里使用了一个变量anonymousFun代替了这个匿名函数方便测试调用&#xff1b;>左边是参数和参数类型&#xff0c;而>右边是函数体&#xff0c;并没有函数名。 val anonymousFun (x: Int) > x …

sql server 游标的使用

1 --zhxia2 DECLAREusernameVARCHAR(20),flagBIT,ncountint3 DECLAREmycursor CURSORFOR--声明游标4 SELECTuser_nameFROMRBAC_User5 OPENmycursor --打开游标6 SETflag07 SETncount08 WHILE(flag0)9 BEGIN10 SETncountncount111 FETCHmycursor INTOusername--循环读取游标12 I…