AB 实验说明¶
用户登录¶
首次部署完系统,进入登录页面, 默认用户名密码为 admin/admin, 首次登陆后,会强制修改密码。 密码修改完成, 可以在设置里新建普通用户,后面使用普通用户登录, admin 密码可以单独保管好。
AB 实验配置¶
在整个实验配置中, 相关的概念可以参考这里。我们按照相关概念一步步操作。
创建场景¶
创建实验室¶
实验室是一组流量的集合。可以一个实验室,也可以创建多个。 但是 base 实验室必须要有,这样如果流量没有匹配到实验室,可以走 base 实验室。
在这里我们创建了一个base 实验室。 选择了 UID 分桶,并且承载了 100% 的流量, 分桶数为 100, 桶号为 0 -100。
这里有个运行环境的概念,我们可以在预发环境了里测试整个实验的配置,如果没有问题后,可以发布到线上。这里我们用的就是预发环境。
我们可以在实验室列表中,看到相关的实验室。并且能看到, 实验室还没有上线。也就是说,在预发环境里也没有生效。我们可以把实验整体配置完成后,再配置上线。
添加分层¶
在实验室列表中可以进入层管理来管理分层信息。可以添加单层,也可以多层。多层之间流量是正交的,可以有效复用流量。 这里我们添加两层,对应召回和排序实验。
创建实验¶
从实验组管理里可以创建实验。实验组是一个逻辑概念,里面包含具体的实验,比如基准实验和测试实验。
基准实验:
测试实验:
这里我们创建了两个实验,流量分别占比 50%。 并且有个实验参数,version, 不同的实验值不同。version 相当于实验参数变量。
添加成功后,实验组是未上线状态,首先通过更新按钮进入实验组,把实验先上线。然后依次是实验组,实验室的上线。
点击这里进行实验上线
客户端调用¶
host := "http://1730760139076263.cn-beijing.pai-eas.aliyuncs.com/api/predict/pairec_experiment"
client, err := NewExperimentClient(host, common.Environment_Prepub_Desc, WithLogger(LoggerFunc(log.Printf)), WithErrorLogger(LoggerFunc(log.Fatalf)), WithToken("xxx"))
if err != nil {
t.Fatal(err)
}
experimentContext := model.ExperimentContext{
RequestId: "pvid",
Uid: "211789765",
FilterParams: map[string]interface{}{},
}
experimentResult := client.MatchExperiment("ab_test", &experimentContext)
fmt.Println(experimentResult.GetLayerParams("recall").GetString("version", "not exist"))
fmt.Println(experimentResult.Info())
fmt.Println(experimentResult.GetExpId())
common.Environment_Prepub_Desc, 这里指定了预发环境,输出如下:
可以看到, 实验参数返回了 version = v2, 实验ID 是ER19_L30#EG65#E156_L31, ER19 指的实验室的ID。L30#EG65#E156 是召回层 L30 上命中了实验 E156。 这里可以通过实验标识能看到。L31 是 rank 层,但是目前没有配置实验,这里显示没有命中实验。
experimentResult.GetExpId()
这里的命中的实验ID要返回给客户端,通过曝光回流来统计实验效果。
正式上线生成¶
如果是实验室第一次上线,可以通过实验室的克隆功能把预发的配置clone 到线上。 但是线上的数据全是未上线的状态,需要手动的上线。
如果后续再有实验的变更,需要手动的在预发和生产环境同步配置。
与 pairec 推荐引擎集成¶
如果使用了 pairec 的推荐引擎框架,pairec 本身集成了 ab 服务,并且预定义了一些配置参数可以直接使用。具体参考这里。