Python A/B Testing SDK 依赖神策分析 SDK。在使用前请确保已经成功集成神策分析 SDK,并进行了 SDK 初始化,详情可参考Python SDK集成 

Python A/B Testing SDK 需要 Python 2.7.0 + 和 Python3 3.X。

SDK 集成

使用 pip 下载 Python ABTesting SDK

pip install SensorsABTestingSDK
CODE

初始化 SDK

Python A/B Testing SDK 依赖神策分析 SDK。请确保已经成功集成神策分析 SDK,并进行了 SDK 初始化。成功引入 A/B Testing SDK 之后,请先在神策分析前端页面创建相关的分流试验,然后获取生成的分流 URL。

import sensorsabtesting
consumer = sensorsanalytics.ConcurrentLoggingConsumer('您的日志文件路径')
# 使用 Consumer 来构造 SensorsAnalytics 对象
sa = sensorsanalytics.SensorsAnalytics(consumer)        
 
ab = sensorsabtesting.SensorsABTest("ABTesting 地址",sa=sa, enable_log=True)
JAVA

初始化全局参数设置说明

初始化 SDK 参数介绍:

参数名类型说明是否必填

base_url

str

分流试验地址,默认为空

sa

SensorsAnalytics

SensorsAnalytics SDK 对象

event_cache_time

int

单用户事件缓存时间,默认值为 1440min,最大限制 1440min,最小限制 0min

event_cache_size

int

事件总缓存用户量,默认值为 4096,无上限设置,最小限制 0

experiment_cache_size

int

试验总缓存用户量,默认值 4096,无上限设置,最小限制 0

experiment_cache_time

int

单用户试验缓存时间,默认值为 1440min,最大限制 1440min,最小限制 0min

enable_event_cache

bool

上报事件缓存开关,默认开启缓存

enable_log

bool

是否开启 SDK 运行输出控制台日志。默认开启

获取分流试验变量信息

Python SDK 提供两种方式获取试验变量信息:

  • async_fetch_ab_test :忽略本地缓存,从服务端获取数据;
  • fast_fetch_ab_test :优先读取本地缓存,缓存不存在时从服务端获取数据;

应该选择哪个API获取试验变量值?

1.一般情况下,我们推荐使用fast_fetch_ab_test获取试验变量值。

2.如果您进行的是时间片轮转等在试验过程中用户会进入不同组的试验,建议您使用async_fetch_ab_test,直接从服务端获取数据,保证获取变量的准确性。

1. 接入前请参考如何设置 distinct_id,在调用时正确设置 distinct_id 参数.

2. 请确保对 A/B 分流返回的 result 结果 & 接口中使用的默认值,都做了正常的业务逻辑处理!

3. 请确保默认值 default_value 和当前试验值类型相同。比如参数对应试验值为 Int 类型,则传入的 default_value 也必须是 Int 类型,同时返回的试验结果 result 也是 Int 类型

如果您需要在新用户注册流程中使用A/B Testing服务端SDK新用户进行用户主体分流试验,不建议您使用login_id请求分流。可参考以下方案,根据您试验的实际情况选择其中一个:

  1. 如果您目前的A/B Testing 版本在v0.9.1以上,可以在创建试验时采用登录ID作为试验的分流主体。
  2. 如果用户只会在一台设备登录,没有多设备登录场景,可使用客户端设备的匿名ID请求分流,即distinct_id为从客户端获取的匿名ID,is_login_id为false.
  3. 可以将试验移到客户端进行。
  4. 可以使用服务端SDK进行自定义主体分流试验。

async_fetch_ab_test 为例:

r = ab.async_fetch_ab_test(distinct_id=distinctId,
                       is_login_id=False,
                       param_name="具体的试验参数",
                       default_value=1)
if r.result == 1:
    #实验组 1 的处理逻辑
elif r.result == 2:
    #实验组 1 的处理逻辑
JAVA

携带自定义属性获取试验变量

SDK 支持自定义属性扩充受众筛选能力,可以在初始化 SDK 后,通过 API 添加自定义属性获取具体试验的变量值,根据获取试验变量值的方式,可分为下面 2 种策略:

  • async_fetch_ab_test忽略本地缓存,从服务端获取数据
  • fast_fetch_ab_test优先读取本地缓存,缓存不存在时从服务端获取数据

自定义属性值支持字符串、字符串数组、数值、布尔和日期时间格式,并且属性名支持英文、数字、下划线,且不能以数字开头

 fastFetchABTest 为例,可在相应的业务逻辑中添加如下代码:

r = ab.async_fetch_ab_test(distinct_id=distinctId,
                       is_login_id=False,
                       param_name="具体的试验参数",
                       default_value=1,
                       properties={'is_vip':True})
if r.result == 1:
    #实验组 1 的处理逻辑
elif r.result == 2:
    #实验组 1 的处理逻辑
PY

携带自定义主体获取试验变量

SDK支持使用自定义主体进行分流。在接入前,需要确认以下几点:

  • 确认您要使用的自定义主体参数名(例如 phone_number, account等,支持自定义)。
  • 在神策元数据管理将该自定义主体设置为公共属性。
  • 将自定义主体名提供给神策,由神策技术人员将其配置到分流服务后台。

初始化SDK后,在调用获取试验变量API时,手动将自定义主体添加到接口请求参数custom_ids中,并在后续上报的事件中添加该自定义主体作为事件属性。

fast_fetch_ab_test 为例:

distinct_id = 'example_distinct_id'
r = ab.async_fetch_ab_test(distinct_id=distinct_id,
                       is_login_id=False,
                       param_name="具体的试验参数",
                       default_value=1,
                       custom_ids={'自定义主体参数名': '自定义主体参数值'})
if r.result == 1:
    #实验组 1 的处理逻辑
elif r.result == 2:
    #实验组 1 的处理逻辑  

# 如果需要上报事件参与AB试验指标计算,需要将该自定义主体作为事件属性
properties = {
   '自定义主体参数名':'自定义主体参数值',
   'price': '100',
}
sa.track(distinct_id, 'buy', properties, is_login_id=False)

PY


获取设备主体试验变量

接入前请参考如何设置distinctId,在调用时正确设置distinct_id参数。获取设备主体试验变量时,distinct_id为从客户端获取的匿名ID。

请确保对A/B分流返回的 result 结果 & 接口中使用的默认值,都做了正常的业务逻辑处理!

初始化SDK后,需要使用从客户端获取的匿名ID调用获取试验变量API,添加anonymous_id属性后手动上报$ABTestTrigger事件,且需要在后续上报的事件中添加anonymous_id作为事件属性。

distinct_id = 'example_distinct_id'     #从客户端获取的匿名ID
r = ab.async_fetch_ab_test(distinct_id=distinct_id,
                       is_login_id=False,
                       param_name="具体的试验参数",
                       default_value=1,
                       enable_auto_track_event=False)

# 添加anonymous_id属性后,手动上报$ABTestTrigger事件
ab.track_ab_test_trigger(experiment=r,properties={'anonymous_id':distinct_id})

if r.result == 1:
    #实验组 1 的处理逻辑
elif r.result == 2:
    #实验组 1 的处理逻辑  

# 如果需要上报事件参与AB试验指标计算,需要在每条埋点事件中将anonymous_id作为事件属性上报
properties = {
   'anonymous_id': distinct_id,
   'price': '100',
}
sa.track(distinct_id, 'buy', properties, is_login_id=False)

PY

API 介绍

API 方法说明

描述说明
方法名

async_fetch_ab_test/fast_fetch_ab_test

参数
  • distinct_id 具体的用户 ID 标识,必填

  • is_login_id 当前用户是否是登录 ID,必填

  • param_name 试验变量名称,必填

  • default_value  未命中试验,返回默认值(支持数据类型:int|bool|str|dict),必填

  • enable_auto_track_event  是否开启自动上报 $ABTestTrigger 事件,默认自动上报,可选

  • timeout_seconds 请求超时时间,单位为秒,默认 3s,可选

  • custom_ids 设置自定义主体,可选

  • properties 设置自定义属性,可选

返回值
experiment

方法返回值说明

Python AB Testing SDK 统一返回 experiment 对象,具体返回参数如下:

参数名类型说明

distinct_id

str
具体的用户 ID 标识

is_login_id

bool当前用户是否是登录 ID

ab_experiment_id

str
试验 ID

ab_experiment_group_id

str
试验分组 ID
is_white_listbool是否白名单用户,白名单用户不进行试验事件的上报
is_control_groupbool是否是对照组

result

int|bool|str|json试验命中返回值

手动触发 A/B 测试($ABTestTrigger)事件

Python AB Testing SDK中提供的方法中,如果设置参数 enable_auto_track_event =true 或者不设置,SDK 会自动上报 A/B 测试($ABTestTrigger)事件。

如果设置 enable_auto_track_event =false ,则需要用户自己手动触发上报 A/B 测试($ABTestTrigger)事件

SDK 提供 track_ab_test_trigger 方法,示例如下:

// 手动触发 A/B 测试($ABTestTrigger)事件
abTest.track_ab_test_trigger(experiment)
JAVA

 track_ab_test_trigger 方法使用说明:

方法名track_ab_test_trigger
参数
  • experiment,即获取分流试验结果返回对象
  • custom_ids 自定义主体,可不填
  • properties 自定义属性,可不填
返回结果

调试试验

  1. 可以通过录入调试设备的方式,把用户加入指定分组中;加入调试设备后,会强制命中当前试验指定的分组调试设备在调试状态和正式上线阶段都会生效)。
  2. 使用服务端SDK对该用户请求分流,返回当前试验指定的分组。需要注意的是,在请求分流时,请根据调试设备的ID类型(设备ID、登录ID)正确设置分流API中使用的distinct_id与is_login_id参数,否则可能不会命中试验。