为了让用户更加合理地使用、调试OpenSearch的各种算法,上线A/B Test功能,方便业务在全量使用前可以分配一定比例的流量进行先验,避免盲用带来对线上业务的负面影响。A/B Test功能目前支持用户对查询分析、基础排序、业务排序进行实验配置。
使用介绍
一、配置A/B Test 的基本流程说明
为了最终的实验指标更全面,在配置A/B Test之前建议先开通单击行为采集数据。用户初次使用A/B Test功能需要经过以下四个步骤才能完成具体实验的配置上线:
1.进入A/B Test创建流程:
通过opensearch控制台左侧导航栏:功能扩展---->A/B测试
进入A/B测试界面,单击“创建”即可进入A/B Test创建流程:
2.创建实验组:
实验组可以对查询分析、基础排序、策略排序以及类目预测进行实验。实验组名称:实验组名称仅做展示使用,用户可修改。实验组名称不允许超过 30 个字符。
3.创建实验:
实验组创建好以后单击“添加实验”就可以在实验组内创建具体的实验了。每个实验组里面最多只能创建20个实验,其中最多只能有10个实验同时在线生效。
3.1 实验名称:实验名称必须用户自定义,不超过 30 个字符。3.2 添加配置:
用户可选择对查询分析、基础排序、业务排序进行配置。配置项弹框只支持用户进行选择已有的查询分析规则、基础排序、业务排序
在选择查询分析类型与策略时:
用户选择“自定义”时,候选项为用户在当前应用下所创建的所有查询分析
用户选择“线上一致”时表示此处不做任何配置同线上逻辑保持一致,即不是当前实验要测试的内容
在选择排序策略类型与策略时:
排序策略类型与策略也是同样的逻辑,考虑到状态为“配置中”的策略可能会被用户无意识的编辑,从而影响线上A/B测试效果,所以排序策略状态中仅支持“已发布”且不可更改。
3.3 实验流量:实验流量最小粒度为1%,同一场景的同一实验组内在线的所有实验流量总和应该≤100%。
4.实验组创建完成:
当实验配置完成后,单击“下一步”,完成配置,单击“完成”,返回A/B测试主页:刚刚配置的实验组处于“待测试状态”:
5.启动测试:
在实验组创建成功后,在对应的实验组“操作”一栏单击“启动测试”,测试中的实验组状态处于“测试中”:
6.A/B Test实验生效:
控制台开通A/B Test功能,并配置好实验之后,如果想让实验对线上的查询生效,需要在查询中指定abtest参数。abtest参数主要包含2个部分:scene_tag和flow_divider。
请求的URL:
/v3/openapi/apps/160029126/search?query=query=default:'深圳'&&config=start:0,hit:10,format:fulljson&abtest=scene_tag:test_1,flow_divider:123456
scene_tag:实验组名称(原实验场景标识),用户在控制台创建一个或多个实验组后,将其中一个实验组的名称设置为 scene_tag的参数值(如上图所示),最终实验流量会进到该实验组名称下面对应的各个实验中。
flow_divider:该参数必须指定。表示:后端系统对该值进行hash将用户的查询流量分配到不同的实验中,分配的比例为用户在控制台上配置的实验流量比例。flow_divider推荐为最终用户的ID,如果没有的话可以用最终用户的设备ID或者IP地址。
注意:
如果通过SDK访问开放搜索服务,当scene_tag和flow_divider不包含空格和标点时,只需要调用对应的接口即可,scene_tag和flow_divider无需encode处理;若包含标点,则scene_tag和flow_divider也需要先encode. 详细请参考“实战示例”。
如果通过API访问开放搜索服务,scene_tag和flow_divider的值需要urlencode,最终传给开放搜索的abtest参数格式为abtest=urlencode(scene_tag:urlencode(\$scene),flow_divider:urlencode(\$value)),其中urlencode为URL编码函数。
若您还有疑问,可以参考A/B测试常见问题文档。
二、 实验组和实验管理
实验组管理:
创建好实验组和实验后,会在A/B测试主页中生成对应的实验组列表:用户可对已创建的实验组进行基础的管理操作 :
1.启动测试:
用户可以对状态为“待测试”或“已停止”的实验组进行“启动测试”。
2.停止测试:
用户可以对状态为“测试中”的实验组进行“停止测试”。
3.删除实验组:
用户可在A/B测试主页对任意实验组进行“删除”操作。
实验管理:
创建好实验组和实验后,会在实验组详情页中生成对应的实验列表:实验列表内展现了实验名称、查询分析类型与策略、排序策略类型与策略、流量占比和操作等基本信息:用户可对已创建的实验进行基础的管理操作 :
编辑实验:支持对实验名称、实验配置、实验流量进行修改。
删除实验:实验被删除后,系统将不再保留其实验配置信息,并且线上不再生效。
白名单:
为了将特定flow_divider指定到特定的实验,从而方便查看特定实验的搜索效果,opensearch提供白名单功能,可将flow_divider添加到特定的实验:
三、A/B Test 实验组详情
行为数据状态
当您成功创建实验组之后,进入实验组详情页,行为数据在列表中呈现的状态可能有以下几种:
未开通:当前应用无行为数据上传(详情请点击此处)
已开通无数据:当前应用已开通行为数据采集,但一直未接收到数据
数据异常:当前行为数据经质量检验发现问题较多不可信
实验组状态
当您成功创建实验组之后,进入实验组详情页,实验组在列表中呈现的状态可能有以下几种:
待测试:当前实验组的当前状态,非历史状态,因为用户可能之前进行过测试或停止过测试
测试中:指当前实验组已在控制台启动了测试,且显示启动测试时间距离当天的天数
已停止:已停止,累计测试时间是指从首次启动测试到最后停止测试时间范围内,真正在测试的累计的天数,中间停止的时间不算
数据统计
从A/B Test实验组列表页单击“详情”或者直接从应用下的菜单栏内单击“统计报表-A/B测试报表”即可进入实验组详情页面,在数据统计页面中查看A/B测试实验数据报表,控制台查看的数据是T+1天的(假设今天测试,明天才能在控制台看到结果)。新控制台改版之后合并了核心数据指标对比页和具体指标数据表格,用户可通过选择“指标类型”下拉框内容来查看相应的指标。核心指标数据也从原有的数据形式更换成了折线统计图的形式更直观的呈现,默认展现的是最近1天的指标数据。用户可在页面内的实验选择下拉框内勾选多个要对比数据的实验。目前的可统计的核心指标有搜索PV、搜索UV、无结果率、人均搜索PV、曝光次数、Query数、人均Query数。
注意:当日的A/B测试报表数据可在次日上午8点后查看,即使当日停止了A/B测试,次日也可查看实验停止前的报表数据。
实战示例
某电商产品线上使用OpenSearch查询有以下两种需求:
第一种需求:来自终端客户进行的商品关键词搜索流量,查询方式为:
query=config=format:fulljson&&query=default:'宝宝奶粉'&&sort=price
第二种需求:来自内部其他业务的调用流量,查询方式为:
query=config=format:fulljson&&query=cat_id:'1'|'2'|'3'&&sort=timestamp
现在该用户希望在第一种需求下,按照终端用户会员ID分流进行A/B Test,对比几种排序表达式或者类目预测模型或者查询分析规则的效果。那么这个用户的配置步骤如下:
1.在控制台A/B Test功能里创建实验组和实验。其中在创建实验组的步骤中,将实验组名称填写为 user_search 代表第一种需求:
2.在查询中设置A/B Test参数。由于在控制台已填写实验组为 user_search,所以在需求一的查询中应该设置参数scene_tag:user_search,flow_divider:xxxx(终端用户会员ID的值)。
2.1 SDK方式( 如下是java sdk用法,php sdk用法类似):aliyun-sdk-opensearch-3.4.1(java版)、opensearch-sdk-php-3.3.0(php版)。
2.2 API方式:
i. query=config=format:fulljson&&query=default:'宝宝奶粉'&&sort=-price&abtest=scene_tag:user_search,flow_divider:%e5%bc%a0%e4%b8%89
注意:这里对abtest的子参数scene_tag和flow_divider的value都做了urlencode)。
ii. 对请求中的每个参数(即query, sort, abtest)的value做urlencode:
query=config%3dformat%3afulljson&&query%3ddefault%3a%27%e5%ae%9d%e5%ae%9d%e5%a5%b6%e7%b2%8
3.以上配置完毕后,就可以实现对第一种场景的流量进行A/B Test的需求了。
业务运营报表
界面
可以通过【功能扩展—->A/B测试】,“统计报表”进入A/B测试的统计报表页面;
也可以直接在“统计报表—->A/B测试报表”里查:
注意:A/B测试报表对应指标介绍可点击此处进行查看。