基础知识
分流需要关注的基础知识
在阅读 A/B Testing 分流核心逻辑前,请您确保您对 A/B Testing 试验中的「试验层」「试验分组」「分流主体和 ID-Mapping」「试验主体筛选和属性订阅」等概念有基本的了解。如果您还不了解上述概念,请阅读 名词解释、试验分流模型介绍、切换试验分流主体等文档,这会帮助您更轻松地理解本文。
这里先简单将在神策 A/B Testing 中分流中会使用到的基础知识串联起来。
试验层、试验组和流量的关系
在神策 A/B Testing 中,各试验层的流量正交,同一试验层下个试验的流量互斥,各试验组的流量互斥。
假设 APP 的整体流量为 100%,可以创建多个试验层,每个试验层都享有 APP 的全部流量。在试验层下可以创建试验,该试验层的流量会分配给该层下的各试验,确保同层的试验之间流量互斥。每个试验都有试验组,试验的流量会全部分配给该试验的试验组,保证用户命中试验后,一定会命中该试验的某个试验组。
上述是我们试验流量的基础模型,但是神策 A/B Testing 有一个特殊的概念:发布层,发布层享有 APP 的全部流量。一旦发布试验,试验就会进入发布层,享有发布层的全部流量,且发布层中试验的流量正交,也就是每个试验都享有 APP 的整体流量。
选取受众
通过试验层和试验的流量分配,我们可以确定一个试验拥有 APP 多少的流量。假设 APP 的全部流量有 1000 人,且只配置了一个试验层,试验层拥有 100% 的流量,分配了 10% 的流量给试验 A,但这不意味着 1000 人中一定有 100 人命中试验。因为试验还可以选择受众。
分流主体
神策 A/B Testing 提供了四种分流主体,我们会根据分流主体确定唯一用户。
- 神策 ID
- 基于神策 ID-Mapping 生成的神策 ID,一个神策 ID 表示一个用户,此用户可以有多个设备 ID 和一个登录 ID。如果您开启了「关联设备 ID 和登录 ID 多对一」,可能存在登录前后分流不一致的情况。具体为:登录前,新设备使用设备 ID 生成的神策 ID (新用户)分流,登录后,新设备被绑定到旧的神策 ID (老用户)请求分流,由于前后请求分流时的神策 ID 不同,所以分流结果不同。
- 登录 ID
- 一个登录 ID 表示一个用户,若未登录,则分流时不会命中试验。
- 设备 ID
- 一个设备 ID 表示一个用户,同一个登录账号,若在两台设备上登录,各设备在请求分流时会被认为是不同的用户。
- 自定义 ID
- 自定义 ID 表示一个用户,具体 ID 由您指定。
设备 ID 和自定义 ID 属于高级功能,在使用前需要一些前置操作,具体使用方式可查阅 切换试验分流主体。
受众筛选
神策 A/B Testing 提供了多种受众筛选,最典型的是用户属性和用户分群,我们可以根据「是否满足用户属性」或「是否在用户分群中」去圈选指定的试验受众。只有满足试验受众筛选,才可以命中试验分流。
由于「用户属性」「用户分群」均是从 SA 私有端订阅到 AB SaaS 端,存在一定的订阅延迟,所以神策 A/B Testing 还提供了「预置属性」「自定义属性」。「预置属性」是神策 A/B Testing 提前筛选出的基础属性,无需订阅,优先从分流请求中获取属性值。「自定义属性」是您可以自己创建的属性,也无需订阅,目的是:在避免属性订阅延迟的同时,给您提供更多选择空间。您可以自己在请求分流时同时发送自己设置的「自定义属性」,即可在分流时对用户进行筛选。
分流在 A/B 试验中的位置
以服务端使用 API 接口分流为例,神策 A/B Testing 的整个流程可以被划分为三个模块:
- 业务模块
- 实现了您的业务逻辑,接入了神策 SDK 能进行埋点事件的上报,并且请求了神策 A/B Testing 的分流、进行 $ABTestTrigger 事件的上报
- 神策 A/B Tesiting 的分流服务
- 接收分流请求,并返回用户的分流结果
- 神策分析系统
- 包括且不限于神策 SA 和 A/B Testing,指整个神策分析系统,能接收事件的上报,有提供事件的分析能力
分流核心逻辑说明
分流核心逻辑
普通试验层的分流逻辑
在神策 A/B Testing 中,假设您有两个试验层,试验层 A 中有一个试验,试验层 B 中有两个试验,具体情况如下:
- 创建了两个试验层,试验层 1 和试验层 2。
- 试验层 1 中创建了两个试验,试验 A 和试验 B,试验 A 占试验层 80% 的流量,试验 B 占试验层 20 % 的流量。
- 试验 A 面向「购买过会员人群」的用户,且不随属性变更动态分流。两个试验组平分流量。
- 试验 B 面向自定义属性「浏览物品次数大于两次」的用户,且随属性变更动态分流。两个试验组平分流量。
- 试验层 2 创建了两个试验,试验 C 和试验 D,试验 C 占试验层 80% 的流量,试验 D 占试验层 20 % 的流量。
- 试验 C 面向全量用户,且不随属性变更动态分流。对照组占 30% 流量,试验组占 70 % 流量。
- 试验 D 面向用户属性「性别为女性」的用户,且随属性变更动态分流。对照组占 30% 流量,试验组占 70 % 流量。
- 试验层 1 中创建了两个试验,试验 A 和试验 B,试验 A 占试验层 80% 的流量,试验 B 占试验层 20 % 的流量。
这里有个小技巧是:如果属性的更新频率较高,未避免属性订阅延迟导致影响分流命中的实时性,我们优先使用「自定义属性」。
假设现在有三个用户,详情如下:
- 小红,已登录账号,性别女,购买过会员,浏览物品次数三次。
- 小蓝,未登录账号,性别男,未购买过会员,浏览物品次数一次。
- 调试设备,并且设置为试验 A、试验 B、试验 C、试验 D 对照组的调试设备
小红的分流过程:
- 根据登录 ID 获取分流主体 ID
- 查询历史分流结果为空
- 命中试验层 1 的其中一个桶,该桶属于试验 A;命中试验层 2 的其中一个桶,该桶属于试验 D。
- 命中试验 A 的其中一个桶,该桶属于对照组;命中试验 D 的其中一个桶,该桶属于试验组。
- 判断小红在「购买过会员人群」中,小红命中试验 A 的对照组;判断小红的性别为女,小红命中试验 D 的试验组。
- 判断小红非调试设备,无需命中指定分流结果。
- 判断小红非调试设备,且试验 A 不随属性变更,记录下小红试验 A 的历史分流结果。
小蓝的分流过程:
- 根据匿名 ID 获取分流主体 ID
- 查询历史分流结果为空
- 命中试验层 1 的其中一个桶,该桶属于试验 B;命中试验层 2 的其中一个桶,该桶属于试验 D。
- 命中试验 B 的其中一个桶,该桶属于试验组;命中试验 D 的其中一个桶,该桶属于对照组。
- 判断小蓝不在「购买过会员人群」中,小蓝不命中试验 B;判断小蓝的性别为男,小蓝不命中试验 D。
- 判断小蓝非调试设备,无需命中指定分流结果。
- 判断小蓝非调试设备,但无第一次分流命中结果需记录。
调试设备的分流过程:
- 判断为调试设备,指定分流结果:命中试验 A、试验 B、试验 C、试验 D 对照组。
- 判断为调试设备,不记录分流结果。
普通试验层的分流逻辑,如图所示:
发布层的分流逻辑
一旦试验出现了优胜组,我们就可以结束试验,进一步扩大优胜组的受众用户,此时往往可以进行发版,彻底采纳优胜组的策略。但是在试验结束后、代码发版前,若您想继续逐步扩大优胜组策略,神策 A/B Testing 提供了灰度发布的功能。所有正在运行的试验,都可以点击发布,选择发布策略和默认策略(其中发布策略往往是优势组的策略)并设置发布比例。点击发布后,试验会进入发布层,享有全量用户流量。
假设上述的试验 A、B、C、D 均进入了发布状态:
- 试验 A,发布策略为试验组,默认策略为对照组,发布周期 50 天,发布比例为 50%,发布方式为「试验用户在命中发布策略前,继续执行试验阶段命中的分组策略(推荐)」
- 试验 B,发布策略为试验组,默认策略为对照组,发布周期 60 天,发布比例为 60%,发布方式为「未命中发布策略的用户都将执行默认策略」
- 试验 C,发布策略为试验组,默认策略为对照组,发布周期 70 天,发布比例为 70%,发布方式为「试验用户在命中发布策略前,继续执行试验阶段命中的分组策略(推荐)」
- 试验 D,发布策略为试验组,默认策略为对照组,发布周期 80 天,发布比例为 80%,发布方式为「未命中发布策略的用户都将执行默认策略」
假设现在小红、小蓝和调试设备仍在请求分流,其中调试设备被放在试验 A、试验 B、试验 C、试验 D 的默认策略中。
小红的分流过程:
- 根据登录 ID 获取分流主体 ID
- 命中试验 A 的其中一个桶,该桶属于默认策略;命中试验 B 的其中一个桶,该桶属于发布策略;命中试验 C 的其中一个桶,该桶属于发布策略;命中试验 D 的其中一个桶,该桶属于发布策略。
- 判断小红在「购买过会员人群」中,小红命中试验 A ;判断小红浏览物品次数大于二,小红命中试验 B;小红命中试验 C;判断小红的性别为女,小红命中试验 D;
- 判断小红非调试设备,无需命中指定分流结果。
- 判断小红非调试设备,记录下小红试验 A、试验 B、试验 C 和试验 D 的历史分流结果。
小蓝的分流过程:
- 根据匿名 ID 获取分流主体 ID
- 命中试验 A 的其中一个桶,该桶属于默认策略;命中试验 B 的其中一个桶,该桶属于发布策略;命中试验 C 的其中一个桶,该桶属于发布策略;命中试验 D 的其中一个桶,该桶属于默认策略。
- 判断小蓝不在「购买过会员人群」中,小蓝不命中试验 A ;判断小蓝浏览物品次数小于二,小蓝不命中试验 B;小蓝命中试验 C;判断小蓝的性别为男,小蓝不命中试验 D;
- 判断小蓝非调试设备,无需命中指定分流结果。
- 判断小蓝非调试设备,记录下小蓝试验 C 的历史分流结果。
调试设备的分流过程:
- 判断为调试设备,指定分流结果:试验 A、试验 B、试验 C、试验 D 的默认策略。
- 判断为调试设备,不记录分流结果。
发布层的分流逻辑,如图所示:
不同试验类型的分流差异
神策 A/B Testing 目前提供五种试验类型,包括「编程试验」「多链接试验」「可视化试验」「多人群试验」和「时间片轮转试验」。
其中「编程试验」「多链接试验」「可视化试验」均需要选择试验层,所用流量为试验层中的流量。「多人群试验」和「时间片轮转试验」默认每一个单独的试验就是一个试验层,直接使用全量流量。如果是「多人群试验」,只要用户满足人群的筛选,则会按照人群的优先级分流命中。如果是「时间片轮转试验」,则会按照当前所属时间片分流命中。
快问快答
序号 | 问题 | 回答 |
---|---|---|
1 | 使用什么分流算法 | sHash,神策内部使用的哈希算法,保证哈希的离散度和神策内部系统的统一 |
2 | 如何保证试验层流量互斥 | M = sHash(试验层 ID + 分流主体 ID) % 1000,同一试验层内部会计算哈希结果之后,均匀的分配在多个试验当中,同一个用户之后命中试验层中的一个试验 |
3 | 如何保证正交 | M = sHash(试验 ID + 分流主体 ID) % 100,进行试验流量分组时,使用 (试验 ID + 分流主体 ID) 计算哈希结果,保证即使同一个用户在不同的试验当中计算哈希分流时结果也可能完全不一样,试验分配完全正交 |
4 | 什么时候需要记录分流结果? | 普通用户(非调试设备)在命中非随属性变更试验时,会记录历史分流结果,长时间保存,以方便查询和避免下次重新分流、浪费资源。 如果想实时分流,不想使用历史分流结果,请在试验配置时选择「随属性变更动态分流」。 |
5 | 试验处于什么状态时可以使用调试设备? | 试验处于「调试中」「运行中」「运行中(暂停)」「已发布」「已发布(暂停)」时,可以使用调试设备。 |
6 | 用户属性和用户分群什么时候订阅到 SaaS?如何分辨是否成功订阅到 SaaS 端呢? | 当点击试验上线后,试验会进入到「准备中」阶段,神策会检测试验所需的用户属性和用户分群是否已经成功订阅到 SaaS,若没有,则会发起相关用户属性或用户分群的订阅,在订阅完毕时,试验会进入「运行中」状态。 |