面试_ABtest原理简介

01 什么是ABtest

  1. ABtest来源于假设检验,现有两个随机均匀的有样本组A、B,对其中一个组A做出某种改动,实验结束后分析两组用户行为数据,通过显著性检验,判断这个改动对于我们所关注的核心指标是否有显著的影响;
  2. 在这个实验中,我们的假设检验如下
    • 原假设H0:这项改动不会对核心指标有显著的影响;
    • 备选假设H1:这项改动会动核心指标有显著影响;
    • 如果我们做完实验发现通过显著性检验发现P值足够小,我们则推翻原假设,证明这项改动会对我们所关注的核心指标产生显著影响;否则接受原假设,认为该改动未产生显著影响
  3. 用一句话概括 ABtest其实就是随机均匀样本组的对照试验

02 ABtest的一般流程

ABtest会涉及到产品、开发、数据部门,流程较长,环节较复杂;

2.1一般来说,主要有以下几个步骤:

  1. 一般在开始实验之前,我们首先需要和相关产品或项目经理确定这个实验所需要验证的改动点是什么;
  2. 在确认改动点之后,数据分析师需要设计实验中所需要去观测的一些核心指标,比如点击率、转化率等;
  3. 确定完核心指标之后,下一步就是计算实验所需的最少样本流量,实验样本越大,我们的结果越可信,但是对我们用户的不良影响就越大,所以我们需要计算能够显著地证明我们策略有效的最少样本量;
  4. 结合目前日均活跃的用户量,计算实验的持续周期;
  5. 在计算完所需的样本量之后,就要设计流量分割策略,根据实验需要对样本流量就行分流分层,保证样本的随机和均匀分布,避免出现辛普森悖论;
  6. 以上准备工作就绪,需要和PM以及开发同学确认可以开始实验;一般在上线正式实验之前,会通过小流量去看一段时间的灰度实验,这个灰度实验的目的就是为了验证我们这个改动并不会造成什么特别极端的影响;
  7. 在灰度之后就会正式发版,等到实验周期结束,我们对实验的结果进行显著性检验;

总结:

实验改动点确认>核心指标确认>样本量、周期确认>流量分割>AB测试灰度>AB测试上线>效果评估

2.2 明确改动点和观测指标

2.2.1 明确改动点

实验开始之前,首先要和产品和项目经理明确实验的变量是什么,我们要保证ABtest的单一因素原则,即每一个实验的评估因素都是单一因素,一次实验都不能糅合多个影响因素,否则会导致实验效果难以区分是哪个因素的影响;

2.2.2 明确观测指标

观测指标可以分成两种类型;

  1. 【绝对之类指标】,我们平常可以直接计算就能得到的单个指标,不需要多个指标计算得到,一般都是该指标在一段时间内的均值或者汇总值,比如DAU,平均停留时长等;这类指标一般较少作为AB测试的观测指标;
  2. 比率类指标,与绝对值类指标相对应,我们不能直接计算得到,而后通过多个指标计算得出,比如某页面的点击率,我们需要先计算页面的点击数和展现数,两者相除才能得到该指标;类似的,还有一些转化率,复购率等;
  3. ABtest观测的大部分指标都是比率类指标,为什么这里要区分不同类型的观测指标,因为在接下来的样本量计算中,这两类的样本量计算有所差别

2.3 样本量、实验周期计算

ABtest样本量计算:AB测试的样本量选取基于大数定律和中心极限定理,在计算样本量之前,我们先了解一下大数定律和中心极限定理;

  1. 大数定律:当实验条件不变时,随机实验重复多次以后,随机事件的频率近似等于随机事件的概率;
  2. 中心极限定理:对独立同分布且有相同期望和方差的n个随机变量,但样本量很大时,样本的均值近似服从标准正态分布【说人话就是,只要样本量足够大,样本就能代表整体的表现】
  3. 这个足够大是多大?每一个实验组所需的样本量计算公式如下:
    1. 在这个公式当中,α代表的是样本数据的标准差,衡量的是整体样本数据的波动性,可以计算样本的标准差计算得到;
    2. \partial代表是预期实验组和对照组两组数据的差值,比如说期望点击率从20%提升到25%,那么\partial就是5%;
    3. α和β就是我们在统计学中经常提到的犯第一类错误的概率和第二类错误的概率,其中α为犯第一类错误的概率,把没有犯第一类错误的概率1-α称为置信水平;
    4. 一般情况下,α取值为0.05;β为防第二类错误的概率,把统计功效定义为1-β,一般情况下,β的取值为0.2,则统计功效的取值为0.8;
    5. 当观测的指标为绝对值类型/比率类指标时,样本的标准差的计算公式有所差异,当观测指标为绝对值类型时【】,当观测指标为比率类指标时【】,其中PA、PB分别为对照组和实验组的观测数据,举例说明,我们希望点击率从20%提升到25%,那么PA=20%,PB=25%,\partial=5%
    6. 计算样本量工具链接:Sample Size Calculator (Evan’s Awesome A/B Tools)
      1. Baseline conversion rate【PA】
      2. Minimum Detectable Effect【PB-PA】
      3. Significance level α:犯第一类错误的概率
      4. Statistical power 1−β:统计功效

2.4 ABtest 流量分割

  1. 为什么要进行合理的流量分割,细分的结果和总体的结果相悖;
    1. 流量风格忽略了一个重要的隐藏因素,也就是性别比例,性别上的差异在AB组中也成为了影响结果的一个变量,从而导致最终结果相悖;
  2. 正确的试验实施方案里,除被测试的变量外,其他可能影响结果的变量的比例都应该保持一致,这就需要对流量进行均匀合理的分割;
  3. 分流分层原理,流量的分割通常的有分流和分层
    1. 用户分流是指按照地域、性别、年龄等把用户均匀地分为几个组;一个用户只能出现在一个组中,但是实际情况中,往往会同时上线多个实验,拿广告来说,有针对样式形态的实验,有针对广告位置策略的实验,有针对预估模型的实验,如果只是按照这种分流模式来,在每组实验放量10%的情况下,整体的流量只能同时开展10个实验,这个实验效率是非常低的;为了解决这个问题,提出用户分层、流量复用的方法
    2. 用户分层,用一份流量可以分布在多个实验层,也就是用一批用户可以出现在不同实验层,前提是各个实验层之间无业务关联,保证这一批用户都均匀地分不到所有实验层里,达到用户"正交"的效果就可以;所谓的正交分层,其实可以理解为互不影响的流量分层,从而实验流量复用的效果;
    3. 分流分层模型
      1. 组1、组2通过分流的方式分为2组流量,此时组1组2是互斥的,即组1+组2=100%实验流量;
      2. 分层:流量流过组2中的B1层、B2层、B3层时,B1层、B2层、B3层的流量都是与组2相等,相等于对组2的流量就行了复用即B1层=B2层=B3层=组2;流量流过组2中的B1层时,又把B1层分为了B1-1、B1-2、B1-3,此时B1-1、B1-2、B1-3之间又是互斥的;即B1-1层+B1-2层+B1-3层 =B1层;
      3. 根据以上规则,我们可以不断的在此模型中增加组、层;并且可以相互嵌套,这要与实际业务相匹配,拆分过多可能会把简单的业务复杂化,拆分过少的结构又可能不能满足实际业务
      4. 对于上图所示的流量分流分层模型,如果用于某些对所有功能都有影响的运营活动,比如春节红包运营,由于活动时整体的,UI、策略、内容等模块都会配合配合修改,因此要评估春节红包活动的时候就会使用组1来评估;而剩余的组2流量,则会划分为多个层,比如UI层,推荐策略层,内容模块层等,这几层基本上是没有任何业务关联度的,计算共用相同流量(流量正交)也不会对实际的业务造成结果;

2.5 显著性检验

  1. AB测试效果显著性检验,AB测试后,我们需要对AB测试的结果进行显著性校验,从而判断改动是否对我们的核心指标产生了显著差异;
  2. 举个例子:我们以点击率为例,我们运行了AB测试一周,分为对1000个样本进行了测试,对照组A 1000 ,点击率7.5%;对照组B 1000,点击率9%;我们能否给出结论说B比A好,改动是有效果的呢?有多大的可能是因为一些随机的因素导致这样的差异呢?
  3. 假设检验可以有效的帮助我们回答这个问题,首先假设改动没有效果,即B的效果不会比A好,然后试图通过样本测试的结果来验证这个假设,如果样本足以推翻假设,那么我们就可以认为改动有效果,否则我们需要继续实验或者干脆就接受这个假设,把B方案扔掉了事;
  4. 由于我们实验的样本一般都较大(大于30),所以我们使用Z检验来检验差异显著性(样本量较小时,我们一般用T检验)

2.5.2 Z检验

  1. 样本统计量Z值:
    1. Z检验是一种适用于大样本(样本量大于30)的两组平均数之间的差异性检验的方法;
    2. 它是计算两组平均数之间差的Z值和理论Z值想比较,看是否大于规定的理论Z值,从而判定两组平均数的差异是否显著;
  2. 其一般步骤如下:
    1. 建立原假设H0,μ1=μ2,即先假定两组平均数之间没有显著差异
    2. 计算统计量Z值,对于不同类型的问题,选择不同的统计量计算方法,通过检验两组样本平均数的差异性,判断它们各自代表的总体差异是否显著,与计算样本相似;当观测的指标为绝对值类型的类型/比率型指标时,Z值的计算公式有所差异
    3. 当观测指标为绝对值类指标时
    4. 当观测指标为比率类指标时
    5. 理论Z值
      1. 置信水平 90% Z值 1.64
      2. 置信水平 95% Z值 1.96
      3. 置信水平 99% Z值 2.58
    6. 样本统计量Z值VS理论Z值比较,假设通过以上公式计算的统计量Z值 =1.22,小于我们设定95%置信水平对于理论值Z值1.96,也就是说我们暂无法判断这种差异性是显著的,所以上述样本不足以得出B比A好的结论;
  3. 继续实验,正如之前所说,由于无法得出B比A好的结论,这种情况下,我们需要做更多实验,于是我们又做了一周,AB分别得到了3000个样本,对照组和实验组转化率不变,仍然套用上诉公式求统计量Z值=2.66,超出了我们设定的95%置信水平对应的理论Z值1.96,这个时候我们有了足够的信心来相信B比A好;
  4. 用工具直接验证 Evan’s Awesome A/B Tools Evan's Awesome A/B Tools - sample size calculator, A/B test results, and more
    1. 分别输入对照组和实验组的比率类指标对应分子、分母和置信水平Confidence level(一般95%)
    2. 第一周
    3. 第二周

03 ABtest常见面试题

3.1如何理解ABtest中的第一类错误和第二类错误

  1. 第一类错误代表的是一个功能的改动,本来不能给我们带来任何收益,但是我们却误以为它能够给我们带来收益;
  2. 同样第二类错误代表的是本来是一个好产品,它本来可以给我们带来收益,但是由于我们统计的误差,导致我们误认为它并不能给我们带来收益;
  3. 往往在实际工作中,第一类错误是我们更加不能接受的,换句更直白的话,就是我们宁愿砍掉几个好的产品,也绝对不能让一个坏的产品上线;因为通常是一个坏的产品上线会给用户的体验带来极大的不好的影响;而这个不好的影响会非常大程度影响到我们日活以及留存;

3.2 统计显著 = 实际显著?

  1.   【问题】 如果你发现在AB测试的结果在统计上来说是显著的,但是在实际中却不显著,这是为什么?
  2. 【解答】这个可能的原因是我们在AB测试当中所选取的样本量过大,导致和总体数据差异很小;这样的话即使我们发现一个细微的差别,它在统计上来说也是显著的,在实际的案例当中可能变得不显著了;
  3. 举例:我们做了一个改动,app启动优化了0.001秒,这个数字可能在统计学上对于的P值很小,也就是说统计学上是显著的,但是在实际中用户0.01秒的差异是感知不出来的,那么这样一个显著性的统计差别其实对我们来说没有太大的实际意义的;
  4. 所以统计学上的显著并不意味着实际效果的显著;

3.3 AB测试效果统计学上不显著

  1. 【问题】如果你发现你在AB测试当中所选取的指标在统计上来说都是不显著的,你该怎么去判断这个实验的收益?
  2. 我们选取的通用方式:将这个指标拆分成每一天去观察,如果指标的变化曲线每一天实验组都高于对照组,即使他在统计学上不显著,我们也认为在这样一个观测周期内,实验组的关键指标变现是优于对照组的;
  3. 结合这样一个观测,我们最终也可以得出这个优化可以上线的结论;

3.4 实验组优于对照组就能上线?

  1. 【问题】如果你在AB测试中发现实验组核心指标明显优与对照组,那这个优化就一定能够上线吗?
  2. 不一定;举例:比如有的时候我们想提升产品的视觉展现效果,但是这种优化可能是以用户等待内容展示事件作为代价来进行提升的;所以一个方面的优化可能会导致另一方面的劣化;在做这个优化的时候,可能会对其他部门产生一些负向的影响,进而导致公司收入的下降;,所以我们在进行AB测试的时候,必须要评估所有方面的一些指标变动,同时对收益和损失来做一个评估,才能确认这个优化可以最终上线;

3.5 AB测试时必须的吗?

  1. 【问题】AB测试成本很高,每个调整都需要AB测试吗
  2. 如果是验证一个小按钮或者小改动,我们可以在界面去设置一个开关,用户可以通过开关的形式自行决定我才用哪一种方式,那么我们最后就可以通过这个开关的相关指标去判断用户对哪一种形式有更大的倾向性;或者有的时候我们可以去做一些用户的调研,比如通过访谈或者设计问卷的形式,去收集一些用户的反馈;或者他们关于这些小变动的体验,所以并不是绝对的;

3.6 AB测试其他变式考法

  1. 【问题】如何量化这个数字、这些收益的显著性;

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

PCB+SMT线上报价系统+PCB生产ERP系统自动化拼板模块升级

PCB生产ERP系统的智能拼版技术,是基于PCB前端报价系统获取到的用户或市场人员已录入系统的板子尺寸及set参数等,按照最优原则或利用率最大化原则自动进行计算并输出拼版样式图和板材利用率,提高工程人员效率,减少板材的浪费。覆铜…

Kubernetes 10 问,测测你对 k8s 的理解程度

Kubernetes 10 问 假设集群有 2 个 node 节点,其中一个有 pod,另一个则没有,那么新的 pod 会被调度到哪个节点上? 应用程序通过容器的形式运行,如果 OOM(Out-of-Memory)了,是容器重…

《操作系统 - 清华大学》3 -3:连续内存分配:内存碎片与分区的动态分配

文章目录 0. 概述1. 内存碎片问题2. 动态分配3. 首次适配算法4. 最优适配算法5. 最差适配算法 0. 概述 内存分配是操作系统管理过程中很重要的环节,首先需要考虑的是一块连续区域分配的过程,这个过程中会有很多问题,首先比较关注的一个问题是…

CICD持续集成与持续交付

一 CICD是什么 CI/CD 是指持续集成(Continuous Integration)和持续部署(Continuous Deployment)或持续交付(Continuous Delivery) 1.1 持续集成(Continuous Integration) 持续集成…

[前端面试]javascript

js数据类型 简单数据类型 null undefined string number boolean bigint 任意精度的大整数 symbol 创建唯一且不变的值,常用来表示对象属性的唯一标识 复杂数据类型 object,数组,函数,正则,日期等 区别 存储区别 简单数据类型因为其大小固定…

多线程-阻塞队列

目录 阻塞队列 消息队列 阻塞队列用于生产者消费者模型 概念 实现原理 生产者消费者主要优势 缺陷 阻塞队列的实现 1.写一个普通队列 2.加上线程安全和阻塞等待 3.解决代码中的问题 阻塞队列 阻塞队列,是带有线程安全功能的队列,拥有队列先进…

Uniapp 引入 Android aar 包 和 Android 离线打包

需求: 原生安卓 apk 要求嵌入到 uniapp 中,并通过 uniapp 前端调起 app 的相关组件。 下面手把手教你,从 apk 到 aar,以及打包冲突到如何运行,期间我所遇到的问题都会 一 一 进行说明,相关版本以我文章内为…

软间隔支持向量机

软间隔支持向量机 ​ 我们先直接给出软间隔支持向量机的形式: P min ⁡ ω , b , ζ 1 2 ∥ ω ∥ 2 2 − C ∑ i 1 m ζ i s . t . y i ( ω x i b ) ≥ 1 − ζ i , i 1 , 2 , 3.. m ζ i ≥ 0 , i 1 , 2 , 3.. m P \min_{\omega,b,\zeta} \frac{1}{2}\Ve…

html + css 自适应首页布局案例

文章目录 前言一、组成二、代码1. css 样式2. body 内容3.全部整体 三、效果 前言 一个自适应的html布局 一、组成 整体居中&#xff0c;宽度1200px&#xff0c;小屏幕宽度100% 二、代码 1. css 样式 代码如下&#xff08;示例&#xff09;&#xff1a; <style>* {…

深入List集合:ArrayList与LinkedList的底层逻辑与区别

目录 一、前言 二、基本概念 三、相同之处 四、不同之处 五、ArrayList 底层 六、LinkedList 底层 七、ArrayList 应用场景 八、LinkedList 应用场景 九、ArrayList和LinkedList高级话题 十、总结 一、前言 在Java集合的广阔舞台上&#xff0c;ArrayList与LinkedLis…

Vue3中实现插槽使用

目录 一、前言 二、插槽类型 三、示例 四、插槽的分类实现 1. 基本插槽 2. 命名插槽 3. 默认插槽内容 4. 作用域插槽&#xff08;Scoped Slots&#xff09; 5. 多插槽与具名插槽组合 一、前言 在 Vue 3 中&#xff0c;插槽&#xff08;Slot&#xff09;用于实现组件的内…

海思3403对RTSP进行目标检测

1.概述 主要功能是调过live555 testRTSPClient 简单封装的rtsp客户端库&#xff0c;拉取RTSP流&#xff0c;然后调过3403的VDEC模块进行解码&#xff0c;送个NPU进行目标检测&#xff0c;输出到hdmi&#xff0c;这样保证了开发没有sensor的时候可以识别其它摄像头的视频流&…

【Java知识】Java性能测试工具JMeter

一文带你了解什么是JMeter 概述JMeter的主要功能&#xff1a;JMeter的工作原理&#xff1a;JMeter的应用场景&#xff1a;JMeter的组件介绍&#xff1a; 实践说明JMeter实践基本步骤&#xff1a;JMeter实践关键点&#xff1a; JMeter支持哪些参数化技术&#xff1f;常见插件及其…

Github客户端工具github-desktop使用教程

文章目录 1.客户端工具的介绍2.客户端工具使用感受3.仓库的创建4.初步尝试5.本地文件和仓库路径5.1原理说明5.2修改文件5.3版本号的说明5.4结合码云解释5.5版本号的查找 6.分支管理6.1分支的引入6.2分支合并6.3创建测试仓库6.4创建测试分支6.5合并分支6.6合并效果查看6.7分支冲…

Flutter中的Material Theme完全指南:从入门到实战

Flutter作为一款热门的跨平台开发框架&#xff0c;其UI组件库Material Design深受开发者喜爱。本文将深入探讨Flutter Material Theme的使用&#xff0c;包括如何借助Material Theme Builder创建符合产品需求的主题风格。通过多个场景和代码实例&#xff0c;让你轻松掌握这一工…

EWM 打印

目录 1 简介 2 后台配置 3 主数据 4 业务操作 1 简介 打印即输出管理&#xff08;output management&#xff09;利用“条件表”那一套理论实现。而当打印跟 EWM 集成到一起时&#xff0c;也需要利用 PPF&#xff08;Post Processing Framework&#xff09;那一套理论。而…

2024 同一个网段,反弹shell四种方法【linux版本】bash、python、nc、villian反弹shell图解步骤

实验环境准备&#xff08;同一个网段下&#xff0c;我是桥接的虚拟机&#xff09; 一、bash反弹shell 二、python反弹shell 三、nc反弹shell 四、villain反弹shell 实验环境准备&#xff08;同一个网段下&#xff0c;我是桥接的虚拟机&#xff09; 一台kali的linux(攻击者)…

ubuntu 安装kafka-eagle

上传压缩包 kafka-eagle-bin-2.0.8.tar.gz 到集群 /root/efak 目录 cd /root/efak tar -zxvf kafka-eagle-bin-2.0.8.tar.gz cd /root/efak/kafka-eagle-bin-2.0.8 mkdir /root/efakmodule tar -zxvf efak-web-2.0.8-bin.tar.gz -C /root/efakmodule/ mv /root/efakmodule/efak…

算法沉淀一:双指针

目录 前言&#xff1a; 双指针介绍 对撞指针 快慢指针 题目练习 1.移动零 2.复写零 3.快乐数 4.盛水最多的容器 5.有效三角形的个数 6.和为s的两个数 7.三数之和 8.四数之和 前言&#xff1a; 此章节介绍一些算法&#xff0c;主要从leetcode上的题来讲解&#xff…

安全机制解析:深入SELinux与权限管理

Linux内核作为一个高自由度和优秀性能的操作系统核心&#xff0c;基于安全需求提供了完善的安全机制。内核安全机制不仅限于保护个人数据&#xff0c;还包括对运行环境和系统体系的线程化操作。本文将全方位分析Linux内核安全机制&#xff0c;以SELinux为主要代表&#xff0c;选…