AB实验设计

简介: AB实验的原理、优缺点及流程

为什么要进行 A/B 实验?

决策无处不在,小到一个活动标题、一个 icon 的颜色,大到产品的交互形式、甚至是战略。每个决策都会影响一部分用户的使用体验。长远看,他们都将或大或小影响产品价值。我们该如何做决策、如何量化收益?这些问题,我们无法通过产品、UI设计、运营等同学的主观判断来得到答案。与此同时,任何一个功能从开发到上线,我们也无法保证整个过程中不出任何 BUG。如果直接对全量用户推全新功能,而新功能存在 BUG 的话,影响将非常大。为了避免此类情况发生,我们有必要先小流量测试一下。这就是我们进行 A/B 实验的原因。


什么是 A/B 实验?

A/B 实验中,将用户随机分为至少两组。如果样本足够大,那么我们可以认为不同组别的用户无差异。在某个时间节点,对他们施加不同的方案或策略(一般只设定一个唯一的变量,除此之外,不同组别的其他条件完全一样)。不施加其他影响的组为对照组(A 组),实施新方案(策略)的组为实验组(B 组)。A/B 实验就是通过对比 A 组和 B 组的差异,评估所施加的方案(策略)的收益,达到帮助业务决策的目的。


A/B 实验的基本原理为假设检验。假设的形式为:原假设 H0、备择假设 H1。一般在工作中用的场景是双尾检验,即 H0 为 A 组 B 组的数据指标无统计学意义上的差异(包括用户数、用户画像、用户活跃度分布等)。其原理基础为小概率事件。即事件 A(小概率事件)在一次试验中几乎不可能发生的,如果在一次实验中 A 就发生了,那么我们应当合理怀疑该假设的真实性,拒绝原假设。常用的方法有 F 检验法、T 检验法、χ2检验法(卡方检验)等。


A/B 实验适用场景

理论上,方案不唯一的场景,都可以通过 A/B 实验来解决。我们平时会接触到的 A/B 场景可以归为以下 3 类。

image.png

产品功能优化

产品功能优化细分可以有几大类:

一是功能的去留决策,新功能是否上线、旧功能是否下线,比如前段时间微信上线的视频号就是一个新功能;

二是功能策略优化,比如微信公账号里,打赏作者的几种默认打赏金额;

三是产品功能的 UI 优化,比如微信聊天里的默认表情包的优化、甚至 App LOGO 的优化;

四是产品文案的优化,比如微信红包的默认文案以及红包文案节假日时的变更。


运营策略优化

运营策略也有很多种。

一是运营策略设置,比如很多 app 都有打卡奖励活动,打卡的频次设置、奖励金额设置;电商 App 里给用户送优惠券,优惠券的额度、满减标准、发放人群等。

二是活动文案优化,标题的重要性不言而喻,会直接影响参与活动的用户数,标题的选择也可以通过小流量 A/B 决定。

三是 Push 促活等优化,Push 的发送时间段、发送频次、Push 内容等等,这些也可以通过 A/B 实验,选择用户转化率最高的方案。


推荐算法优化

相比产品和运营的优化,A/B 实验在推荐算法优化中使用的更为广泛。产品和运营还能依靠我们的主观判断完成部分决策,推荐算法相对来说,是算法模型封装的黑盒。调整推荐模型中某个参数,影响的用户量级、对指标的影响程度,都必须通过 A/B 实验来量化算法优劣。


A/B 实验优缺点

A/B 实验可以量化不同方案的影响程度,从而回答不同方案的优劣。但是 A/B 实验也是有局限的,它并不能告诉我们最优答案,只能对比不同方案的区别;它也不能告诉我们直接的因果关系。我们能通过 A/B 实验等到结果,但是结果产生的原因却不能通过数据得到。另外,A/B 实验也不能回答战略性选择的问题,比如一个实验会导致活跃用户数下降,但是也能提升用户使用 App 的时长和打开 App 的次数。这种偏战略的数据结果,我们很难通过数据来决策。


目前 A/B 实验的方法已经比较普及了,甚至一些公司出现过分依赖 A/B 实验,造成 A/B 实验滥用的现象。我们知道 A/B 实验有诸多优点,但是 A/B 实验也是有成本的。多种方案就意味着,对应的产品、UI 设计、开发、测试、数据分析等等,都需要相应的资源来支持,另外,A/B 实验是需要流量的,也会出现用户产品体验不一致的问题。所以,现实中我们要辅以对业务的专业判断,及历史累计的经验来综合决策,避免 A/B 实验造成的资源浪费。


尽管有以上问题,我们不能因此忽视 A/B 实验优势。那么如何设计和评估 A/B 实验呢?


如何完成一个 A/B 实验?

我们以产品功能优化为例来说,根据业务流程,产品方案 → 功能开发→功能上线→产品决策,来说说数据分析师在各环节应该准备的 A/B 流程有哪些

image.png


A/B 实验设计(产品方案阶段)

在产品方案预评审阶段,我们基本可以知道功能的优化点或是新上线的功能形式。基于对业务的判断,和产品共同决策是否需要实行 A/B 实验,如果需要的话,前期我们需要完成以下准备工作。


首先,数据分析师需要根据功能特征,制定功能上线后的评估指标。预先做好评估方案,一是可以与各方业务达成一致的数据预期,作为后续功能上线、扩量等决策的依据;二是根据评估指标Check 目前的日志或者埋点数据,判断是否满足我们的需求。如果缺少数据,需要一并提交开发需求,以保证 A/B 实验的可评估性。


其次,我们要确定 A/B 实验的流量选取方案。流量的选取最好满足以下条件:一是每组用户的数量相当,且可以确保 A/B 实验的结果是可读的(量级太大会扩大影响范围、量级太小得不到置信结果);二是保证各组用户是随机分组产生的,即每组用户无显著差异,以此保证后续试验时,实验组(B 组)和对照组(A 组)只有唯一变量;最后,依照通常情况,每种方案最好选取 2 组用户,这样可以排除不同组别用户的随机波动影响。你可能会问,如果满足以上全部条件,一个方案至少需要 4 组用户(AABB 组)。那么在活跃用户数一定的情况下,如果同时有多个 A/B 实验需要并行,那如何保证有足够的流量使得不同实验之间相互不影响呢?这就涉及一个实验设计的概念:用户(流量)分层正交。

image.png

我们假设,根据目前 App 活跃用户数的量级来看,需要每组至少 10% 的流量才能得到统计学相对置信的结果。此时我们可以随机将用户分为 10 组,每组 10% 的流量,即 A1、B1、C1……这样的分组结果,可以支持我们同时进行 2 个 A/B 实验(每个 A/B 实验,有 AABB 共 4 组用户)。如果,此时想同时进行第三个、第四个实验怎么办呢?此时,我们把刚刚分为 A1、B1、C1 等的 10 组称为第一层,再将第一层的用户随机分到第二层的 10 个组里,即将 A1 组 10% 的流量随机分为 10 个 1% 的流量分到第二层的 A2、B2、C3 等组中。同理 B1、C1 等也各自随机分到第二层每个组中,以此可以得到第二层 10 个 10% 流量的实验组。以此内推,可以得到第三层、第四层等。通过上述的分层规则,我们可以看到,不同层之间的实验是相互不影响的,即不同层的用户是正交的。通过这种方式,我们可以实现多个 A/B 实验的同时进行。


埋点验证(功能开发阶段)

进入开发阶段,如果有新增埋点,我们需要检验上报埋点的准确性。如果等到功能上线再来介入,可能会因为埋点的缺失或者不准确,导致 A/B 实验的结果无法评估。所以埋点验证需要在前置到开发阶段进行,以此保证后续数据的可用性。


实验分析(功能上线阶段)

功能上线后,一般需要用户更新安装新版本后,才能体验到新功能。所以,为了保证一定量级的用户体验到新功能,必须保证新版本的用户渗透率达到一定水平。也因为这个原因,A/B 实验通常需要一段观察周期。观察周期的长短与产品形态有关,像微信、微博这种高频 App,通常一周时间就够了;像淘宝这种相对低频的 App,需要的时间周期更长一些。


在评估指标时,有一点我们需要注意:我们必须排除实验前 AB 组差异的影响,即排除 preAA 的差异。下图为每组日活用户数的曲线图,假如实验在第 9 天上线,如果只看上线后的趋势图,我们会得出,B2 组的活跃用户数明显低于 A1 和 A2 组。因此会得出,实验组 B2 的方案会造成 DAU 下降。但是,如果我们多观察实验上线前的数据会发现,B2 的 DAU 在实验上线前就低于 A1 和 A2 组,他们之间的 diff 并非实验造成。


实验决策(功能决策阶段)

通过上一步,我们可以得到实验组各项指标收益与对照组的对比情况。这就需要针对实验方案作出决策。我们知道 A/B 实验不适宜长期观察,因为对于一个产品,不宜同时存在多种方案,让用户之间存在明显差异。另外,A/B 实验的客户端代码也会增加 App 包的大小,新用户对此比较敏感,可能会影响用户的下载转化;再次,A/B 实验可用的流量是有限的,长期占据流量也是一种资源浪费。所以需要对实验结果尽快决策。如果实验组的关键指标显著负向,可能需要继续优化功能后再上线;如果观察到的关键指标变化不大,但是功能本身的改动很大,可以建议扩大流量观察;如果实验组指标有正向收益,也可以建议直接推全。

目录
相关文章
|
存储 SQL 缓存
StarRocks常见面试问题(一)
StarRocks常见面试问题(一)
|
安全 编译器 Go
Go语言中的int和int32:同一个概念吗?
【2月更文挑战第24天】
1039 3
|
自然语言处理
ChatGPT Prompt顶级思维框架:LangGPT
ChatGPT作为当前最先进的对话生成模型,能够满足各种文本生成需求。然而,要充分利用其强大的功能,合理而全面的指令设置(Prompt Engineering)是关键。 今天,我要与大家分享一种名为“LangGPT”的思维框架,它可以帮助你更有效地构建ChatGPT的提示词。
|
SQL 搜索推荐 Android开发
AB测试实战(一)
AB测试是一种数据驱动的产品优化方法,用于比较不同版本的网页、应用界面或营销策略的效果。
|
数据处理 Apache 流计算
实时计算引擎 Flink:从入门到深入理解
本篇详细介绍了Apache Flink实时计算引擎的基本概念和核心功能。从入门到深入,逐步介绍了Flink的数据源与接收、数据转换与计算、窗口操作以及状态管理等方面的内容,并附带代码示例进行实际操作演示。通过阅读本文,读者可以建立起对Flink实时计算引擎的全面理解,为实际项目中的实时数据处理提供了有力的指导和实践基础。
4852 2
|
机器学习/深度学习 人工智能 分布式计算
因果推断:效应估计的常用方法及工具变量讨论
日常工作中很多的策略/产品的效果是无法设计完美的随机实验的,要求我们从观察性数据中去(拟合随机试验)发现因果关系、测算因果效应。
2420 0
因果推断:效应估计的常用方法及工具变量讨论
|
机器学习/深度学习
大模型中的Scaling Law是什么?
【2月更文挑战第9天】大模型中的Scaling Law是什么?
17085 3
大模型中的Scaling Law是什么?
|
NoSQL Serverless Python
在Python的Pandas中,可以通过直接赋值或使用apply函数在DataFrame添加新列。
【5月更文挑战第2天】在Python的Pandas中,可以通过直接赋值或使用apply函数在DataFrame添加新列。方法一是直接赋值,如`df['C'] = 0`,创建新列C并初始化为0。方法二是应用函数,例如定义`add_column`函数计算A列和B列之和,然后使用`df.apply(add_column, axis=1)`,使C列存储每行A、B列的和。
643 0
|
Java Unix API
Kotlin:正则Regex原来这么方便
Regex相对于Java的Api来说,使用起来更加的简单,如果大家在非正则的功能使用时,比如寻找,替换,是否包含等等,完全可以使用字符串自带的功能即可,如果说要实现一些较为复杂的,比如邮箱的验证,手机号的验证等等,那么Regex绝对是你的首选。
429 0
Kotlin:正则Regex原来这么方便
|
Java 开发工具 Android开发
Android字体Font相关知识
Android字体简介 Android系统默认支持三种字体,分别为:“sans”,“serif”,“monospace”。 android.
4669 0