开始试验
|
收藏
1. 概述
本文是从客户真实场景出发,从提出假设到设计试验,从开发集成到运行、发布试验,带您一起快速搭建试验、运行试验、分析报告、做出决策,快速走通整个 A/B 试验流程。通过 QuickLaunch 您可以理解到 A/B 试验的核心能力,抓住各种试验类型的特点,轻松设计、搭建与验证自己的试验。
2. 编程试验
2.1.1. 编程试验概述
编程试验指通过代码编程的 A/B 试验。广泛应用于客户端和服务端试验,覆盖产品功能、UI 样式和后端算法优化等多种试验场景。
2.2. 提出假设
2.2.1. 故事背景
假设您是一家网络课程平台的产品负责人,如何提高精品课程的点击率是最近期望解决的难题。如何让用户为课程买单呢?我们将问题拆大化小,基于优化主转化路径的命题,首先要做到的就是提升课程列表的点击率。道理浅显易懂,用户进入平台第一眼看到的就是首页,而首页为了展示更多种类的课程,相关课程的介绍必须简明扼要,用户往往要点击课程并了解详情,才会为课程买单。
那么我们怎么吸引用户更多地点击课程列表呢?我们决定从首页课程的介绍入手,经过对竞品的调研,发现部分平台会在课程列表标注节数,而标注节数可能会给用户带来 课程至少在数量上很有料的感觉
2.2.2. 提出假设
首先我们提出假设:在课程价格旁边增加课程节数,会增加课程列表的点击率。
2.3. 设计试验
2.3.1. 根据假设引出试验需求
作为一个稳妥的网络课程平台,我们不会孤注一掷、直接在课程价格旁增加课程节数,因为我们并不知道这是不是一个好的决策。我们会选择使用 A/B 试验,选择一小部分用户进行测试,统计他们的行为,先验证或推翻假设,再决定是否扩大策略影响范围。
2.3.2. 开始设计试验
现在我们的课程介绍由图片、课程名称、课程价格组成(参考左图),基于假设,UI 设计师给课程介绍加上了课程节数(参考右图)。
左图 | 右图 |
---|---|
现在开始设计试验,主要关注下面几点:
- 明确这是一个首页试验,需要使用 试验层内试验流量正交 的概念,隔离首页试验的相互干扰
- 我们有两个策略,我希望每个策略面向的用户是均分的
- 我接受进入试验的用户最多是总用户量的 20%,那代表着一个策略最多拥有 10% 的用户量
- 我期望验证或推翻假设,所以需要设计合理的指标,让我能观察到 增加课程节数是否能够 增加课程点击率,是否能够增加客户购买次数和金额
2.4. 开发集成
设计完成试验后,我们已经知道这个试验需要对哪些事件进行埋点了。比如针对此次「在课程介绍增加课程节数」的试验,我们需要收集「课程列表浏览」、「课程列表点击」、「课程购买」等事件,且要收集「课程购买的金额」属性。如果我们是第一次做试验,上述事件、属性都未上报过,那接下来我们要开发集成 SDK,为配置试验做准备,主要完成:
- 检查或集成神策 SDK
- 上报或检查相关指标所需的埋点
如果您当前还未了解神策基础埋点的概念,可查阅: 技术指南-基础知识
2.4.1. 新建试验
在试验列表中,点击「+试验」按钮,弹出试验创建窗口。
选择「编程试验」,进入试验创建页面。
2.4.2. 试验配置
填写试验基本信息,创建具有标识性的名称,并简要介绍这个试验的行为和目的。
选取试验受众,由于此场景对用户无特殊要求,所以我们无需关心用户是否属于定向人群,也不需要担心用户属性变更。所以我们直接采用默认配置:按用户 ID 分流、选取全部受众、随属性变更动态分流。
如果您当前还未了解不同分流主体、不同受众、属性变更的概念,可查阅:试验分流主体、受众用户、用户变更
创建试验的过程中,我们需要选取试验层。试验层内的试验 流量是互斥的,我们希望有关首页的试验互不干扰,这样才能控制变量,使得我们试验的效果是切实可靠的,所以我们新建一个关于首页的试验层。首先点击试验层的绿框,然后点击 「+」 按钮,创建试验层。
填写试验层的基础信息,点击确定后,试验层创建成功。
接下来分配流量。由于我们只是圈选小部分用户进行试验,且此次试验只是首页的某个试验,所以我们只会用到「首页试验层」的部分流量比例。我们平台的日活是 10000 人,此次我们希望圈选 2000 用户进行试验,所以我们计划使用试验层流量的 20%。
设计两个试验组,对照组代表默认策略,保持原有设计不变(即不引入课程节数),试验组代表新型策略,新增课程节数。两个组的流量比例均分,各占 50%,则每组占试验层 10% 的流量。
接下来开始配置试验组数据,给各试验组加上描述信息,方便后续识别。另外,由于此试验是编程试验,需要通过编程 接入我们网络课程平台中,而进行编程试验时,会通过试验组参数 辨别用户对应策略 以提供正确效果,所以我们也要配置好试验组参数 以及对应值。
2.4.3. 指标配置
配置试验指标,到时候报告会按照我们指标的规则 统计用户行为数据,这对我们的试验 至关重要。在前期的试验设计阶段,我们就已经有试验的大概雏形了,我们设计了四个指标:进组用户课程点击率、课程购买率、课程购买人均金额、人均课程点击次数。
在进一步明确指标口径后,我们找到对应的指标类型,进行指标配置。点击「创建指标」,开始创建指标。
首先配置校验类指标:进组用户课程点击率、课程购买率、课程购买人均金额(
如果您当前还未了解指标的概念,可查阅:试验指标管理
然后配置事件分析指标:人均课程点击次数
指标配置完成啦~指标可以编辑、查看、复制、移除,移除指标之后,如果还想将指标添加回试验,可以选择添加已有指标。
然后可以通过勾选、取消勾选的方式,调整试验的指标。
2.5. 调试试验
2.5.1. 查看示例代码
完成试验配置后,点击完成配置,试验会进入「调试中」状态。
「调试中」状态是 A/B 试验的一个重要状态,此时试验已经基本配置好了,但我们不能保证试验的效果能完美呈现,所以还需要内部工作人员切实体验、调试,确认无误后,才会点击上线,让用户进入试验。
之后点击试验名称,我们就可以查看试验配置情况,也可以查看到示例代码,这是我们编程试验的重要内容。
神策 A/B 试验提供多种类型 SDK,我们可以选择合适的 SDK 类型示例代码,并通过示例代码接入 SDK。接入成功后,SDK 将分流结果以试验组参数的形式返回给客户,这个试验我们配置的试验组参数是布尔类型的「exist_courese_num」,如图所示。
2.5.2. 接入埋点
由于我们已经在「开发集成」里通过神策 SDK 对指标事件进行埋点,在实验配置完成后,我们只需要接入 AB SDK。
在主 module 的 build.gradle 文件中添加 A/B Testing SDK 依赖
apply plugin: 'com.android.application'
dependencies {
// 添加 A/B Testing SDK 依赖
implementation 'com.sensorsdata.analytics.abtesting:SensorsABTesting:版本号'
}
SDK 初始化和获取试验变量
import com.sensorsdata.abtest.SensorsABTest;
import com.sensorsdata.abtest.SensorsABTestConfigOptions;
import com.sensorsdata.abtest.OnABTestReceivedData;
// 必须先初始化神策分析 SDK(参考文档 https://manual.sensorsdata.cn/sa/latest/tech_sdk_client_android_basic-17563982.html)
// A/B Testing SDK 初始化(试验上线前,请检查试验的分流服务的 url 是否正确)
SensorsABTestConfigOptions abTestConfigOptions = new SensorsABTestConfigOptions("http://10.129.19.61:8202/api/v2/abtest/online/results?project-key=A42C405DEEA8B79D2B5219804D68698AE3A4E045");
SensorsABTest.startWithConfigOptions(this, abTestConfigOptions);
// 初始化 SDK 之后,可以通过 fastFetchABTest 接口获取具体试验的变量值,然后进行试验。
// Boolean 类型试验(第二个参数 false,表示未命中试验时,会返回此默认值,请根据业务需要更改此处的值)
try {
SensorsABTest.shareInstance().fastFetchABTest("exist_courses_num", false, new OnABTestReceivedData<Boolean>() {
@Override
public void onResult(Boolean result) {
// TODO 请根据 result 进行自己的试验,当前试验对照组返回值为:false,试验组依次返回:true
switch (result) {
case false:
useExitCoursesNumPlan(); // 使用存在课程节数的方案
break;
case false:
case default:
useNoCoursesNumPlan(); // 使用不存在课程节数的方案
break;
}
}
});
} catch (Exception e) {
e.printStackTrace();
}
2.5.3. 新增调试设备
在试验列表点击试验名称 进入试验详情页后,点击编辑试验,可以对试验进行二次编辑。
这次编辑的目的是新增调试设备,方便调试时验证效果(如果已经有明确的调试设备,在创建试验的时候就可以添加上)。调试设备有以下特点:
- 调试设备在哪个试验组,就一定会「临时命中」哪个组,如果更换试验组,命中结果也会随之变更
- 调试设备在 试验处于「调试中」「运行中」「运行中(暂停)」时都是有效的,其余试验状态调试设备无效
- 调试设备不会因「临时命中」而上报「试验进组事件」,所以调试时,调试设备的事件数据不会统计到试验报告中
点击「+添加」添加设备,如果已经有合适设备,可以勾选上,如果没有,则可以点击「+」创建调试设备。
添加两个调试设备后,点击「完成配置」。接下来我们就可以验证试验效果啦~
2.5.4. 使用调试设备验证效果
调试设备 1 的效果 | 调试设备 2 的效果 |
---|---|
2.6. 运行试验
2.6.1. 上线试验
点击试验列表的「上线」按钮,并点击「确认」后,试验会进入「准备中」状态。如果试验所需属性均订阅成功,则试验会进入「运行中」状态。这代表试验已经上线成功了。
2.6.2. 等待数据
接下来,我们就等待用户触发试验、通过我们的埋点 上报事件数据吧。
2.7. 分析试验
自试验上线后,每日我们都会来查验试验运行情况,主要内容是 试验指标的分析和监控,从中可以知道分流是否均匀、各指标是否符合逻辑,方便随时调整试验策略,也利于试验有异常时 及时停止试验。
截止目前,试验已经运行两周,可以看到报告已经了足够多的用户和数据。可以看到两种策略对用户行为是有影响的,当前样本量充足,优胜者已经出现。
2.8. 得出结论
2.8.1. 分析报告
现在我们开始逐个分析数据,首先看到的是「试验总览」报告,其统计了「校验类指标」数据。从中我们可以清晰地看到:
- 每个试验组有 1600 余用户进组,进组人数分布均匀
- 「有课程节数」的试验组,课程购买率、进组用户课程点击率 相对「无课程节数」的对照组 有显著提高,置信区间正向显著,P 值 < 0.001,样本量达标
然后看到「业务数据」报告,其统计了这次我们添加的「事件分析类指标」。从中我们可以清晰地看到:
- 「有课程节数」的试验组 课程点击率比「无课程节数」的对照组高 25% 左右
事实证明,假设成立,在课程价格旁边增加课程节数,会增加课程列表的点击率。「增加课程节数」是优胜策略。
2.8.2. 发布试验
现在试验算是做完了,接下来我们可以结束试验或者发布试验。发布试验是神策 A/B 提供的一个快捷功能,试验做完了,但我们等不及发版 就想让更多的用户体验到优胜策略,所以接下来我们发布试验。
有两种方式可以发布试验:
- 在试验报告里,点击「快速发布」
- 在试验列表里,对应试验行里点击「发布」
接下来要创建发布计划,我们可以选择「有课程节数」的试验组策略 作为发布策略,「无课程结束」的对照组策略 作为默认策略。由于发布只是神策提供的,临时扩大优胜策略的方案,不能代替客户发版,所以限制发布周期为 90 天,如果发布周期结束或提前结束试验,试验都会进入「已结束」状态。
这里需要注意的是,试验一旦发布,发布比例只允许上调,不允许下降,这也是发布的特点。为了不让用户跳版本,我们选择「试验用户在命中发布策略前,继续执行试验阶段命中的分组策略」。
2.8.3. 发布报告
试验上线后,报告列表新增了「发布报告」,我们可以看到已经有数据进入发布报告了,在这里可以持续观察「发布策略」的指标数据。接下来,就等开发人员真正给课程介绍增加课程节数,真正发版产品吧~科学的 A/B 试验一定会给我们带来新的收益。
注:本文档内容为神策产品使用和技术细节说明文档,不包含适销类条款;具体企业采购产品和技术服务内容,以商业采购合同为准。