聊聊AA实验的波动性

当我们在实验评估系统上开启一个实验组和对照组配置一摸一样的实验时,我们称之为AA实验。AA实验通常用来辅助观察指标在产品不做改变时的偏差范围。我们通常会在实验里加一个和对照组一模一样的实验组来观察这个偏差,而如果这个偏差很大,通常你的AB实验也容易结果不置信。本文的目标受众是需要在实验评估系统上做实验,发现AA实验的指标差异很大,又懒的再回去翻大学概率论课本的同学们。以最低的学习成本使用实验评估系统拿到高效的产出,也是实验评估组的愿景,所以我们会用尽量通俗的语言展开描述,如果你看不懂,随时拿着你的水杯来砍我(别忘了先把热水倒掉);当然,记得先留言指出没有说清楚的地方,我们会改正。

闲话少说,我们开始:

波动?啥叫波动?为啥我的AA实验指标会有波动?

举个例子。假设我在实验评估系统上开了一个AA实验。实验开启一段时间之后我们去看产出的实验指标Read/U(平均每个用户每天会有多少次阅读),虽然分配到两个组的用户使用的是完全一样的产品,但是两个组汇总到的 Read/U 均值总是有多多少少的差别。如果你重复开这个实验很多次,你会发现每次两个组上的差别都不太一样。

这种出现在AA实验上的不稳定的指标差,就是我们说的波动

产生波动的原因很好理解,一句话来说就是”随机性”。下一秒打开头条的那个用户今天会读几篇文章这完全是随机的,不可预知的。所以当你开两个完全相同的实验组的时候,因为每个组里的用户今天会读的文章数完全随机,所以最终我们拿到的两个 Read/U 指标的差别也是随机的。

怎么描述AA实验指标的波动呢?

描述波动的方法很多,对应AB实验这个应用场景,我们用 置信度置信区间来描述波动性。如果你忘掉这两个统计学概念的话,就不要去网上查了,简单说就是:

你做无数多次AA实验,指标的差落在某个范围内(置信区间)的概率有多大(置信度)

假如我们知道头条主app的 Read/U 指标,200W入组用户的AA实验在置信度为95%的时候上下波动0.62%,说明大概率下,我们做一个AA实验,Read/U 指标的变化比例会在正负0.62%以内。

如果你做的AB实验预期 Read/U 会上升 1%,那么恭喜你,做实验验证去吧;如果你做的AB实验预期 Read/U 会上升 0.1%,那么不好意思,这个变化太不明显了,假如最终实验结果真的上升了0.1%,我们很难判断这是策略生效导致的还是波动导致的。

那么问题来了:

【问】你告诉我的波动在0.62%,为啥我的AA波动出现了0.78%? 【答】因为你有95%的概率波动在0.62%以内,还有5%的概率你会遇到指标超过0.62%。出现这种意外的概率(5%)还是要比买彩票中奖高太多。最简单的办法就是重新再开一次实验。

【问】5%的意外概率我无法承受,怎么办?【答】那就看看置信度为99%的波动值吧。当然,这个数字一定会比95%的波动值大,比如说0.81%。也就是说只有1%的概率,你的AA实验波动会超出0.81%。

【问】可是我的预期变化只有0.68%,不要说0.81%,就是0.62%,变化也不够明显啊!【答】加流量吧。试想一下你在掷硬币,你抛硬币的次数越多,拿到正面的次数越接近0.5, 这说明 实验的越多(进组用户数越大),指标的结果越稳定(波动越小)。当入组用户数升高到800W时,你会发现95%的置信度下,波动会降低到0.31%。【是的,你猜对了,波动与用户数的平方根呈反比,所以用户数升4倍,波动会降一半,如果感兴趣,回去复习概率论吧】

分流不是均匀的吗?怎么入组用户数也有波动?

用户的潜台词是:”你们在逗我吗?”还真没有。再举抛硬币的例子,分流的时候一个用户会进入哪个组就好比抛硬币时会出现哪个面。因为进入哪个组和出现哪个面一样,都是 随机的。所以无论分流策略多么完美,入组用户数和其他指标一样,都存在波动性。

什么影响波动性?不同产品的相同指标波动为何不同?

入组用户数

入组用户数对波动的影响前面说过,这个不难理解。入组用户数越多,波动性越小。所以当做实验的同学发现AA波动很大时,可以考虑一下提高实验流量来提高入组用户数数量,从而降低AA波动。

指标稳定性(标准差或方差)

指标标准差描述的是指标取值的稳定程度。举一个射箭的例子。如果有小张小王两个人射箭,平均都拿8环,小张比较稳定,大多数时候都射中8环,少数时候射中7环和9环;小王发挥很不稳定,大部分时候要么10环要么6环。如果小张先射100次算平均分,再射100次算平均分(等价于我们在小张这里做了一次AA实验),两个平均分的差别体现的就是波动性。很显然,小王指标的波动性要大很多,因为他本身射箭不稳定。

类似的,例如 Comment/U 指标,因为它的取值稳定性特别差,所以我们总是能看到这个指标的波动要大于 Read/U 这些稳定性稍好的指标。怎么描述指标的稳定性呢?算个标准差吧。

有同学曾经问过为什么相同的指标相近的入组用户数,在同一个产品的国内版本和国外版本波动不一样。可以简单的看看这个指标在两个版本上的标准差,如果不出意外,波动大的那个版本的标准差也会较大。

你们是怎么计算波动性的呢?

先辈们提出并证明了一条统计学公式,简单且不严谨的说就是,如果已知母本的期望与方差,那么从该母本上的任意样本数量为N的采样得到的期望满足正态分布;正态分布的参数与母本的期望,方差和样本数量N有关。

如果我们把某个app一整天全量的日志数据作为母本,AA实验不过是在考察两个采样样本的期望的变化比。期望和方差我们都有,套入公式,我们就能得到发生在这一天的所有指标的波动性,并以此推测明天这些指标在相同app下的波动性。

其他资料

如果周末不需要陪男/女朋友,而且上面那些看得不过瘾的话,请阅读《概率论与数理统计》,随便谁出版的哪个版本都可以。

Original: https://www.cnblogs.com/softidea/p/14452167.html
Author: 沧海一滴
Title: 聊聊AA实验的波动性

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/547701/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 期末代码

    使用Java的输入输出流将一个文本文件的内容按行读出,每读出一行,就顺序添加行号,并写入到另一个文件中。 import java.io.*; public class E { pu…

    技术杂谈 2023年6月21日
    085
  • 响应式布局

    1 什么是媒体查询 ¶ 媒体查询指的是获取设备屏幕、浏览器尺寸(width,height),进而为不同尺寸设定不同的CSS样式。一般而言,可以通过@media来获取屏幕或浏览器尺寸…

    技术杂谈 2023年7月23日
    073
  • 使用 deb 包的方式安装 TensorRT

    使用 deb 包的方式安装 TensorRT 完成日期:2022 年 4 月 17 日最后修改:—-此文使用 markdown 完成 要在 ubuntu 下使用 Ten…

    技术杂谈 2023年7月11日
    095
  • webrtc统计信息之rtt计算

    1. 概述 WebRTC使用 SR/RR包来计算rtt的 SR报文格式: RR报文格式: 2. 相关代码 RTCPSender::BuildSR RTCPSender::Build…

    技术杂谈 2023年5月31日
    0107
  • NEST与JSON语法对照 一 match与multi_match

    javascript;gutter:true; { "query": { "bool": { "must": [ { &…

    技术杂谈 2023年5月31日
    0111
  • CentOS5.5挂载本地ISO镜像

    操作步骤: 一、挂载iso文件到挂载点 [root@server ~ ]# mount -o loop /mnt/iso/CentOS5.iso /mnt/cdrom 二、查看挂载…

    技术杂谈 2023年5月31日
    097
  • 实战模拟│JWT 登录认证

    404. 抱歉,您访问的资源不存在。 可能是网址有误,或者对应的内容被删除,或者处于私有状态。 代码改变世界,联系邮箱 contact@cnblogs.com 园子的商业化努力-困…

    技术杂谈 2023年7月11日
    058
  • JZ0047:二叉树剪支

    title:二叉树剪支 📃 题目描述 题目链接:二叉树剪支、相同题目 🔔 解题思路 第一种做法:dfs,思考方式是你站在一个点上怎么做,在一个点上,先看左子树是否要删除,再看看右子…

    技术杂谈 2023年7月24日
    085
  • 从“蚁族”现象看高等教育公平

    一、蚁族的出现背景 2003年初,首批扩招大学生进入社会,与下岗再就业职工和民工潮汇聚成为就业洪峰,就业压力空前增大。 2014年,教育部公告显示,全国普通高校毕业生规模达到727…

    技术杂谈 2023年5月31日
    0102
  • 4、Swift协程详解:结构化并发与TaskGroup

    TaskGroup 的基本用法 我们现在已经知道怎么在自己的程序里面调用异步函数了。 不难发现,调用异步函数的关键点是创建 Task 的实例。通过 Task 的构造器或者 deta…

    技术杂谈 2023年6月1日
    077
  • 原型模式详解

    原型模式 1.1原型模式概述 1.1.1原型模式定义 原型模式(Prototype Pattern)指原型实例指定创建对象的种类,并且通过复制这些原型创建新的对象,属于创建型设计模…

    技术杂谈 2023年6月21日
    0101
  • 统一的Json组件和csv下载组件

    Json组件 规范Json接口格式 Controller中一律返回 Java object,组件将自动转换数据格式,满足Json接口格式 统一处理Json接口中出现的异常,cont…

    技术杂谈 2023年6月1日
    083
  • nginx安装配置步骤

    ​ yum install gcc gcc-c++ pcre pcre-devel openssl openssl-devel zlib zlib-devel -y [root@n…

    技术杂谈 2023年7月11日
    076
  • 消息粘包 和 消息不完整 问题

    消息粘包 和 消息不完整 问题 消息粘包 和 消息不完整问题 其实都是应用层会带来的问题,和TCP 没关系,TCP 是能够保证消息的顺序 和 完整性的本篇只是简单说明一下 什么是 …

    技术杂谈 2023年7月11日
    073
  • golang 文件操作io bufio ioutil

    io golang中 os.File 库封装了文件相关操作,File是一个结构体。 go语言标准库文档:https://studygolang.com/static/pkgdoc/…

    技术杂谈 2023年5月30日
    0126
  • Mybatis plus 中数据库中字段有SQL关键字的处理方法

    最近碰到一个问题,mysql的数据表中有一个字段desc,如果使用mybatis plus来访问数据库,使用继承BaseMapper<>的方法。自己如果不书写xml,自…

    技术杂谈 2023年7月11日
    0107
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球