全局保留组
全局保留组
如何在 Eyeofcloud Feature Experiment 中创建全局保留组。
全局保留组是流量的子集接收控制变体 (也称为基准) 的位置。同时,剩余流量可以参与 A/B 测试和多臂老虎机优化。保留组通过将放入测试变体的变体与排除的变体进行比较,帮助您衡量实验计划的累积影响。
全局保留组包括:
- 仅在指定的时间范围内使用。
- 由固定百分比或固定部分流量组成。
- 通过将对照组中的用户与测试变体中的用户进行比较来评估实验的累积影响。
功能实验是无状态的,并使用确定性分桶来做出决策。因此,全局保留组只能使用无状态全局保留策略直接提供开箱即用的支持。您还可以使用有状态全局保留策略使用持久性数据存储定义全局保留。但是,您需要第三方或自托管基础设施来实施此策略。
每种策略都有其优点和缺点,因此评估哪种方法最符合您的特定需求和架构功能非常重要。无论您选择哪种解决方案,都必须在每个标志上包含一个合理的默认变体,以便全局保留组中的用户接收。
无状态全局保留(推荐)
创建全局保留组的最简单方法是使用用户属性和受众,并将该受众添加到所有实验中。
优点
- 开发人员唯一需要的工作是实现 user 属性,但您必须在应用程序的功能实验 SDK 的所有实现中执行此操作。
- 不需要第三方或客户托管的基础设施。
- 全局 holdback 组会随着用户群的增长而自然扩展(这可以考虑季节性影响)。
- 全局保留组是随机采样的,因此该样本的构成类似于不在保留中的访客的构成。
缺点
- 全局保留组不是静态的,需要数据分析师了解该组的定义方式,以确定用户是否属于该组。
- 如果存在结构性原因,即遵循给定模式的 ID 样本不是随机的,则可能会引入偏差。
示例实施步骤
📘
注意
示例 1 – 创建 5% 的全局保留。
此示例使用用户 ID 的最后两位数字来确定用户是否处于全局保留状态。
创建一个名为
lastTwoOfId
的用户属性,您可以使用该属性来确定用户是否位于全局保留组中。创建名为
Not in Global Holdback
的受众。拖放
lastTwoOfId
属性。要配置受众,请检查访客是否与数量大于4的
lastTwoOfId
匹配具有 lastTwoOfID 属性的受众
具有 lastTwoOfId
=00
、01
、02
、03
或04
且不符合受众资格的用户,因为他们位于全局保留组中。
- 使用
Not in Global Holdback
and
条件与您要定位的任何其他受众一起使用,以确保实验仅考虑不在 Global Holdback 组中的用户。 - 在开发人员将正确的数据传递到 user 属性后,前面的步骤将创建一个全局保留组。该组中的用户会收到包含
Not in Global Holdback
受众的每个标志的默认变体。
示例 2 – 使用布尔值确定用户是否位于全局保留组中。
- 创建一个名为
inGlobalHoldback
的属性,您可以使用该属性来确定用户是否位于全局保留组中。 - 在 SDK 级别,使用您自己的逻辑来确定用户是否属于全局保留组,并作为布尔值 user
inGlobalHoldback
属性传递true
。 - 使用
Not in Global Holdback
and
条件与您要定位的任何其他受众一起使用,以确保实验仅考虑不在 Global Holdback 组中的用户。 - 在开发人员将正确的数据传递到新的 user 属性后,前面的步骤将创建一个全局保留组。该组中的用户会收到包含
Not in Global Holdback
受众的每个标志的默认变体。
有状态全局保留
您可以创建静态用户列表以组成全局保留组。您必须使用第三方或自托管数据存储保留该数据,并将其传递到 user 属性中。
优点
- 例如,数据分析团队可以提前静态定义全局保留,除非进行编辑,否则它不会增长。
- 您可以避免 (或引入偏见,因此请小心) 的方式在全局 holdback 组中定义用户。
- 使用持久数据存储查询全局保留成员资格可能更容易,例如,它可能位于数据湖中。
缺点
- 持久化全局保留成员资格需要第三方或客户托管的基础设施,因为它不是确定性定义的(读取时)。
- 开发人员需要努力安全地向所有功能实验 SDK 实现公开全局保留成员 ID 的静态列表(例如通过 API),并实施新的用户属性。
- 假设用户群增长,而全局保留组保持不变,则全局保留组会按比例缩小。
实施步骤
以所有 Feature Experimentation SDK 实现均可访问的方式(例如通过 API)公开全局保留的静态列表。
示例 1 – 检查用户是否在全局列表中。
创建一个名为 的属性,您可以使用
inGlobalHoldback
属性来确定用户是否位于全局保留组中。创建名为
Not in Global Holdback
的受众。拖放
inGlobalHoldback
属性。配置受众定位条件,以检查访客是否与
inGlobalHoldback
布尔值为 false 的位置匹配。受众,其中 inGlobalHoldback 布尔值为 false。 使用
Not in Global Holdback
and
条件与您要定位的任何其他受众一起使用,以确保实验仅考虑不在 Global Holdback 组中的用户。在开发人员将正确的数据传递到新的 user 属性后,前面的步骤将创建一个全局保留组。该组中的用户将收到包含
inGlobalHoldback
受众的每个标志的默认变体。Not in Global Holdback
示例 2 – 在代码中使用数组。
在
3rdPartyAudiences
代码中创建一个以受众列表命名的数组,例如inGlobalHoldback
.创建名为
Not in Global Holdback
的受众。拖放
inGlobalHoldback
属性。配置受众定位条件,以检查访客是否与
inGlobalHoldback
布尔值为 true 的位置不匹配。访客不匹配的受众 inGlobalHoldout 为 true。 使用
Not in Global Holdback
and
条件与您要定位的任何其他受众一起使用,以确保实验仅考虑不在 Global Holdback 组中的用户。在开发人员将正确的数据传递到新的 user 属性后,前面的步骤将创建一个全局保留组。该组中的用户将收到包含
Not in Global Holdback
受众的每个标志的默认变体。