如何利用 A/B 实验提升产品用户留存? 看字节实战案例给你答案!
技术交流、求职机会,欢迎关注字节跳动数据平台微信公众号,回复【1】进入官方交流群
产品增长中最为经典的模型为 AARRR 漏斗模型,该模型追求最大化拉新,第一步“获客”(Acquisition)环节最为受到重视,而后在“激活、留存、营收、推荐”环节中不断优化转化率,实现用户增长。
但当流量红利见顶,用户拉新难度和成本倍速上升时,RARRA 模型适时出现,新的模型将“用户留存” (Retention) 视为了第一关注点,用户留存在产品增长中的重要性上愈加凸显。留存高,说明产品更能真正满足用户需求,当红利时代过去后,在好产品的基础上做拉新才有意义。

本文将围绕“提升新用户”留存这一关键点展开,以视频 APP 优化的真实故事为例,讲述字节的产品团队如何使用 A/B 测试产品 DataTester 设计 A/B 实验,并显著提升了该 APP 的新用户留存。本案例也是字节跳动在多年的 A/B 实验历程中,一个具有故事性的案例。
读完全文你将可以知晓:一个 A/B 实验的全生命周期是什么样的,以及如何设计和评估一个 A/B 实验。
第一轮 A/B 实验:理想很丰满,结果却很骨感
整个案例由针对该 APP 新人引导环节的两轮 A/B 实验组成,第一轮 A/B 实验以“失败”告终;在第一轮实验的基础上,字节跳动的产品团队又进行了第二轮实验,最终获得了成功,显著提升了新用户的留存。
该视频 APP 的使用方式与抖音类似,用户在使用该视频 App 时,可以通过在屏幕上进行[上滑]操作,来让当前视频跳转至下一视频。在这过程中,新用户会看到一个「上滑引导」的指示,该引导的主要作用是告知新用户:可以通过「上滑」方式跳转至下个视频。
由于当前的上滑引导由静态的手指图片及提示文案组成,展现时间比较短,整体上并且没有呈现出很明显的“提示上滑”的效果。这就意味着因新用户很可能看不懂这个提示,进而并没有学会如何使用该 APP,也就无法体验到产品的核心价值,最终流失。
初始引导式样如下图所示:

引导样式 1
因此产品团队希望能够通过 A/B 实验,优化“手指上滑”动作在产品界面中的引导。
他们认为,如果让更多新用户用户在初次使用 APP 时就看懂提示,学会正确地「上滑」,预期对新用户的留存会有提升。因此,该产品设计了新的「上滑引导」方式,并通过 A/B 实验对新方案的效果进行评估。
实验方案设计:半动态式的引导样式
在明确了产品目前的问题和改进的方向之后,该产品设计了一版改进方案,可以看到,为了加强引导效果,这一版本的「上滑引导」采用了半动态的方式:基础提示文案固定,屏幕最底端的指示条呈现出自下而上“滚动渐变”的动效。

引导样式 2(产品界面里为动态指示)
为了验证新方案的效果,该产品团队制定了在 DataTester 上开设 A/B 实验的方案,并明确了实验中需要关注的指标和预期值。
目标人群:
针对 APP 版本号最新的用户开启实验。
实验变量:
对照组 A:线上版本,即实验背景中所提及的引导样式 1;
实验组 B:采用新样式,即引导样式 2。
指标及预期:
实验开启前,实验者需选定关注的指标,并确定这部分指标变化的预期值,这对于确定实验所需的进组流量以及后续分析实验效果,都有着至关重要的意义。
在本实验中,「是否学会切换至下一视频的正确姿势」对「新用户是否留存」有直接或间接影响,因此,将「新用户留存」作为评判本次实验是否成功的核心指标。该产品希望:经由版本改动,新用户留存可提升 0.5%且显著;同时,该产品的其他核心指标需无显著负向表现。
除此之外,由于「上滑引导」改动会直接影响新用户尝试切换视频的操作方式,因此,将新用户「正确进行上滑操作」的渗透率和「错误操作」(如进行了下拉刷新、点击首页/推荐按钮等)的渗透率作为评估实验效果的直接指标。预期正确操作渗透率提升 1%且显著;错误操作渗透率降低 1%且显著。
流量与周期:
本次 AB 实验,产品组在 DataTester 中设置了 10%的线上流量,对照组和实验组各占 5%。实验周期为 1 个月。
实验结果分析:功能渗透率呈负向
实验运行了一段时间后,在 DataTester 的界面中,可以看到实时的实验数据分析。从指标表现来看:
衡量实验是否成功的核心指标——新用户留存,未见显著提升;

(*虚拟数据)
直接效果指标:
新用户进组当日「正确操作-上滑」的渗透率下降约为 1%且显著,与预期不符;
新用户进组当日「错误操作-下拉刷新」的渗透率下降约为 1%且显著,符合预期;
新用户进组当日「错误操作-点击推荐/首页」的渗透率提升约为 1.5%且显著,与预期不符;
随后,数据分析师对指标表现进行了进一步分析:
对「正常操作-上滑」影响:将「上滑操作渗透率」按地区进行多维下钻后,分析师发现,经济发达地区用户的渗透率普遍更低,对「上滑引导」的理解更差。这听起来很奇怪,经过分析师的推断,导致这一现象的原因可能有两点:
经济发达地区用户互联网更发达,对观看新用户引导的耐心更低,导致对上滑引导的理解更差;
经济发达地区用户受常用 APP 操作习惯影响大,对新的操作方式不能很快适应,因此渗透率普遍更低;
2.分析「错误操作」的影响:
经用户行为分析,「错误操作-点击推荐/首页」显著提升,原因是用户未能理解「上滑引导」中所提示的操作,反而去尝试了点击推荐/首页 Tab。
第一轮 A/B 实验结论:本次改动无显著收益
经由上述分析,字节跳动的实验团队得出结论:
核心指标没有显著收益,关闭实验,功能下线;
直接效果指标负向,此次实验中上线的功能并没有达到预期收益,许多新用户对于这一功能仍旧存在理解障碍,需要探索更好的引导样式。
第二轮 A/B 实验:进化和迭代
实验方案设计:全动态引导样式
由于上一次的 A/B 测试结果并不理想,字节跳动的产品团队基于上次实验结论,又进行了详细的调研分析,再次设计了全新的「上滑引导」样式。
新的「上滑引导」使用了动态引导的方式,并且对文案进行了优化。引导方式从第一版实验中的半动态指示条,改为一段悬浮于屏幕之上的动画,动画中直接演示出上滑屏幕这一动作;同时,文案也由前一版的“向上滑动查看其他视频”更改为“向上滑动以获取更多视频”。

引导样式 3(产品界面里为动态指示)
字节跳动的产品团队在 DataTester 中配置了新的 A/B 实验。
对照组 A:当前线上版本,即实验背景中所提及的引导样式 1;
实验组 B:采用新样式,即引导样式 3;
在指标与预期、流量与实验周期方面,第二轮与第一轮保持了一致。
实验结果分析:指标正向收益明显
在实验运行了一段时间后,他们再次来到 DataTester 的数据分析界面,查看实时的指标表现情况:
分析两组实验发现,新的方案——实验组 B 对比对照组 A,在人均使用时长、人均视频播放量上,有了非常显著的提升!
- 实验成功指标——新用户留存提升约 1%-1.8%,且指标结果呈显著,符合预期;

(*虚拟数据)
其他核心指标:人均时长、人均视频播放量均有提升,且呈显著;
直接效果指标:新用户进组当日「正确操作-上滑」的渗透率提升且显著,幅度约为 1.5%,符合预期;同时实验证明了:教会新用户上滑操作对新用户留存有明确的收益;
- 分地区多维分析:鉴于初次实验发现发达地区用户对上滑教育的理解度更差,因此需要进一步分地区分析用户对于实验组策略的理解;
- 经济发达地区:上滑功能渗透率提升且呈显著,新用户留存提升且呈显著,幅度约 2%,比实验组平均水平提示更为明显。说明新引导功能的教育作用有明显的收益;
- 经济非发达地区:上滑渗透率无显著提升,新用户留存无显著提升。
第二轮 A/B 实验结论:收益显著 全量上线
在第二轮 A/B 测试结束后,新的方案在该 APP 上全量上线了。后续字节跳动的产品团队观察发现,仍有一定比例的新用户看过视频但没有进行上滑操作。经进一步的下钻分析,他们发现经济发达地区这类用户占比更高,后续将对这部分用户行为进行持续观察,挖掘是否有进一步教育的空间。
上方的案例为大家展示了一个完整 A/B 测试生命周期的全过程,实际上,该实验也是字节跳动在众多的 A/B 测试中比较有代表性的案例。
DataTester 产品介绍
案例中使用到的 A/B 实验平台 DataTester ,是字节跳动自研的 AB 实验平台。截至 2022 年 8 月,DataTester 已在字节跳动内部累计完成 150 万次 A/B 测试。DataTester 集成了字节内部丰富的业务场景中的 A/B 测试经验,并已通过火山引擎,面向外部企业客户开放服务支持。
如何利用 A/B 实验提升产品用户留存? 看字节实战案例给你答案!的更多相关文章
- 提升网站用户体验—WebP 图片的高效使用
一.WebP 的由来 现代图像压缩技术对我们的生活方式影响很大.数码相机能将上千张高质量图片存储到一张内存卡里.智能手机可以与邻近设备快速分享高分辨率的图片.网站与手机等移动设备能快速展示各种富媒体. ...
- APP开发中,如何从UI设计上提升APP用户体验
设计中有很多细微的东西要注意,就如UI设计中,元素的统一性,图标风格.段落的排版等等,只有能注意这些细节,你的 APP UI 才算合格. 干货君总结了17个提升用户体验的 UI 设计小技巧,也是我们日 ...
- ZWS物联网云平台为电器设备智能化,提升产品竞争力
从目前的消费趋势来看,家居电器设备的消费发力点在于年轻人.他们基本由"80"."90后"组成,对于消费理念更加的新颖,对于新产品与新观念更加容易接受.不过相对的 ...
- Java Web 开发利用Struts2+Spring+mybatis写一个用户登录界面以及简单的数据交互
框架的东西太复杂也难以讲通,直接上代码: 一.首先得配置环境 和导入必要的jar包 有一些重要的如下: Filter文件夹下的SafetyFilter.java model文件夹下的 Global ...
- Spring Boot中利用递归算法查询到所有下级用户,并手动进行分页
Spring Boot中利用递归算法查询到所有下级用户,并手动进行分页 前提:语言用的是kotlin(和Java一样,但更简洁),写下这篇文章用来记录编程过程中遇到的一些难点 1.功能需求 前端用户A ...
- 利用方法HttpUtility.HtmlEncode来预处理用户输入
利用方法HttpUtility.HtmlEncode来预处理用户输入.这样能阻止用户用链接注入JavaScript代码或HTML标记,比如//Store/Broswe?Genre=<script ...
- 利用expect交互批量修改普通用户过期密码
利用expect交互批量修改普通用户过期密码 因为公司接了一个密码托管的活,有10000多台机器,系统有 openSUSE,SUSE,Ubuntu,centos,Oracle-Linux, 而且什么版 ...
- 一个AI产品经理怎么看AI的发展
一个AI产品经理怎么看AI的发展 https://www.jianshu.com/p/bed6b22ae837 最近一直在思考这个问题,人工智能接下来的几年会有什么样的发展,是否真的能够在很多工作岗位 ...
- Linux企业生产环境用户权限集中管理项目方案案例
企业生产环境用户权限集中管理项目方案案例: 1 问题现状 当前我们公司里服务器上百台,各个服务器上的管理人员很多(开发+运维+架构+DBA+产品+市场),在大家登录使用Linux服务器时,不同职能的员 ...
- 客户流失?来看看大厂如何基于spark+机器学习构建千万数据规模上的用户留存模型 ⛵
作者:韩信子@ShowMeAI 大数据技术 ◉ 技能提升系列:https://www.showmeai.tech/tutorials/84 行业名企应用系列:https://www.showmeai. ...
随机推荐
- P4870 [BalticOI 2009 Day1]甲虫 题解
题目链接 简要题意 在一个数轴上有 \(n\) 滴露水,每滴露水初始水量为 \(m\),每秒会蒸发一滴水,一个甲虫初始在原点,速度为 1,水能瞬间喝完,问它最多能喝到几滴水. 题目分析 对于这种移动区 ...
- SQL改写案例4(开窗函数取中位数案例)
周总找我问个报表SQL实现逻辑的案例,废话不说给他看看. 原SQL: SELECT d.tname 姓名, d.spname 岗位, d.sum_cnt 报单单量, d.min_cnt 放款单量, d ...
- gitlab : You won`t be able to pull or push project code via SSH until you add an SSH key to your profile(导致的问题:合并不了代码)
gitlab : You won`t be able to pull or push project code via SSH until you add an SSH key to your pro ...
- 题解 CF637B
题目大意: 维护个栈,去重保留最上层 题目分析: 啥也不是,数组模拟 \(\text{stack} + \text{unordered\_map}\) 直接秒掉. 复杂度 \(O(n)\) 代码实现: ...
- decltype关键词
简述 decltype 是 C++11 新增的一个关键字,它和 auto 的功能一样,都用来在编译时期进行自动类型推导. decltype 是"declare type"的缩写,译 ...
- Educational Codeforces Round 118 (Rated for Div. 2) D. MEX Sequences
\(DP\)真的太难了啊!! 首先考虑到\(f(i, s)\)表示,从前\(i\)个数中选,最后一个数为\(a_i\),且\(MEX(a_1,....,a_i) = \left\{ \begin{al ...
- Jdk_HashMap 源码 —— hash(Object)
Jdk 源码 HashMap 的源码是在面试中考的算是比较多的,其中有很多高性能的经典写法,也值得多学习学习. 本文是本人在阅读和学习源码的过程中的笔记(不是教程),如有错误欢迎指正. Jdk Ver ...
- ASM字节码操作类库(打开java语言世界通往字节码世界的大门)
前言:授人以鱼不如授人以渔,应用asm的文章有很多,简单demo的也很多,那么ASM都具备哪些能力呢?如何去学习编写ASM代码呢?什么样的情景需要用到ASM呢?让我们带着这些问题阅读这篇文章吧. 这里 ...
- Mybatis-Flex之增、删、改
方法全解 (1) INSERT BaseMapper 的接口提供了 insert 和 insertBatch 方法,用于新增数据: insert(entity):插入实体类数据,不忽略 null 值. ...
- Java8新特性Optional
Optional类的方法 1.empty private static void createNullOptional() { // 创建一个空的Optional实例 // 方式一 Optional& ...