全部产品
云市场

A/B Test

更新时间:2019-09-06 10:41:37

说明

为了让用户更加合理地使用、调试OpenSearch的各种算法,上线A/B Test功能,方便业务在全量使用前可以分配一定比例的流量进行先验,避免盲用带来对线上业务的负面影响。A/B Test功能目前支持用户对查询分析、粗排表达式、精排表达式以及类目预测进行实验配置。

使用介绍

一. 名词解释

名词
释义
A/B Test
A/B Test是对同一个算法功能制作两个(A/B)或多个(A/B/n)版本,在同一时间维度,分别让组成成分相同(相似)的访客群组随机的访问这些版本,收集各群组的用户体验数据和业务数据,最后分析评估出最好版本正式采用。
实验场景
指的是准备进行实验的全部流量集合。
场景标识
应用内不同的流量集合标记,根据用户自身业务来标记区分;对应查询参数abtest中scene_tag。
实验组
实验的容器,目前一个实验场景下只能创建一个实验组。
实验
实验组内用来测试算法功能的随机流量。
实验分流
实验流量随机切分的方式,对应查询参数abtest中flow_divider。
PV
访问OpenSearch搜索接口的次数。
IPV
用户点击OpenSearch搜索结果页中的文档的次数。
UV
访问OpenSearch搜索接口的用户数。同一个用户无论访问多少次都只记1个UV。
IPV_UV
在OpenSearch搜索结果页中点击了文档的用户数。
CTR
点击转化率=IPV/PV
无结果率
OpenSearch返回的搜索结果数(即num)为0的PV/PV。

实验场景、实验组和实验的逻辑关系

image.png | left | 747x494

二. 配置A/B Test的基本流程

为了最终的实验指标更全面,在配置A/B Test之前建议先开通点击行为采集数据。用户初次使用A/B Test功能需要经过以下四个步骤才能完成具体实验的配置上线:

  1. 进入A/B Test创建流程

    首次进入点击“立即创建”即可进入A/B Test创建流程。

  2. 创建实验场景

    实验场景的创建是为了明确应用中哪一部分流量集合是用户准备做实验的。每个应用下最多只能创建3个实验场景。

    2.1 场景标识

    创建时用户首先需要填写场景标识,场景标识是实验场景识别的唯一标志,同一个实验场景可以由多个场景组成,所以场景标识可以填写多个。场景标识必须是字母数字下划线组合,不超过 30 个字符,非 ops_ 开头。场景标识最多 10 个。如果不需要实验场景划分,场景标识不填即可,代表该实例下的全部流量均可被实验。要注意的是,由于每个实验场景所包含的场景标识不可以有交叉,所以当一个实验场景内包含所有场景标识,就不能再新建另一个场景。

    2.2 实验场景名称

    实验场景名称仅做展示使用,默认生成规则为Scene_创建日期_创建时间,用户可修改。场景名称不允许超过 30 个字符。实验场景.png | center | 747x343

  3. 创建实验组

    实验组是隶属于实验场景的,目前一个实验场景内仅支持创建一个实验组,这个实验组将默认绑定所有的实验参数,也就是说目前在实验场景内唯一的实验组下,可以对查询分析、粗排表达式、精排表达式以及类目预测进行实验。

    3.1 实验组名称

    实验组名称仅做展示使用,默认生成规则为Group_创建日期_创建时间,用户可修改。实验组名称不允许超过 30 个字符。实验组.png | center | 747x347

  4. 创建实验

    实验组创建好以后点击“添加实验”就可以在实验组内创建具体的实验了。每个实验组里面最多只能创建20个实验,其中最多只能有10个实验同时在线生效。image.png | left | 747x345

4.1 实验名称

实验名称必须用户自定义,不超过 30 个字符。

4.2 添加配置

用户可选择对查询分析、粗排表达式、精排表达式以及类目预测进行配置。配置项弹框只支持用户进行选择已有的查询分析规则、粗排表达式、精排表达式以及应用关联的类目预测模型。用户如需新增或者修改当前已有内容,点击“添加或编辑”进入对应配置项的新增/修改页,在新增/修改页上配置完毕点击保存后返回配置项弹窗,此时弹窗里会同步展示出用户新增的相关内容。一个实验可以最多添加4个配置,对已添加的配置,可点击配置生成的方块右上方删除按钮进行删除。

4.3 实验流量

实验流量最小粒度为1%,同一场景的同一实验组内在线的所有实验流量总和应该≤100%。

添加实验.png | center | 747x342

4.3实验流量_图2.jpg | center | 827x288

查询分析.png | center | 747x335

粗排.png | center | 747x373

屏幕快照 2018-08-30 上午11.43.54副本副本.png | center | 747x344

提交实验.png | center | 747x343

4.3实验流量_图7.jpg | center | 827x322

5 . A/B Test实验生效

控制台开通A/B Test功能,并配置好实验之后,如果想让实验对线上的查询生效,需要在查询中指定abtest参数。abtest参数主要包含2个部分:scene_tag和flow_divider。

  • scene_tag:场景标识,如果用户在控制台上没有设置表示对所有场景下的流量都会做实验,查询中也不用设置。如果用户在控制台上设置多个场景标识(用分号分割),查询中只要设置其中的一个值即可。
  • flow_divider:后端系统对该值进行hash将用户的查询流量分配到不同的实验中,分配的比例为用户在控制台上配置的实验流量比例。flow_divider推荐为最终用户的id,如果没有的话可以用最终用户的设备id或者ip地址。

如果通过api访问开放搜索服务,scene_tag和flow_divider的值需要urlencode,最终传给开放搜索的abtest参数格式为abtest=urlencode(scene_tag:urlencode(\$scene),flow_divider:urlencode(\$value)),其中urlencode为url编码函数。如果通过sdk访问开放搜索服务,当scene_tag和flow_divider不包含空格和标点时,只需要调用对应的接口即可,scene_tag和flow_divider无需encode处理;若包含标点,则scene_tag和flow_divider也需要先encode. 详细请参考“六.实战示例”。

三. 实验管理

创建好实验场景、实验组和实验后,会生成对应的实验列表。实验列表内可切换展现其他已创建过的实验场景下的实验列表。

实验列表内展现了实验名称、实验状态、实验配置、实验流量和更新时间等基本信息。用户可对已创建的实验进行基础的管理操作。

  1. 编辑实验

    支持对实验名称、实验配置、实验流量进行修改。

  2. 删除实验

    实验被删除后,系统将不再保留其实验配置信息,并且线上不再生效。

  3. 下线实验

    实验被下线后,实验流量将被切为0,但是会在列表里保留实验的其他配置信息。

  4. 启用实验

    被下线的实验,通过重新编辑流量后,点击启用即可上线重新生效。

实验列表.png | center | 747x344

四. 场景管理

场景管理页内是已创建的实验场景列表,可对列表里的实验场景进行编辑和删除。

  1. 编辑实验场景

    支持对实验场景名称、标识进行修改。

  2. 删除实验场景

    实验场景删除后,场景下的实验组以及实验组内的所有实现也均被删除,线上将不再生效,且系统不会再保留所有相关的配置信息。请谨慎处理。场景列表副本.png | center | 747x346

五. A/B Test实验数据报表

从A/B Test实验列表页内点击查看实验数据或者直接从应用下的菜单栏内点击数据统计-A/B Test数据统计即可进入实验数据报表页。页面包含核心数据指标对比页和具体指标数据表格两个tab。实验数据报表目前是按照实验场景-实验组粒度展现,用户可以在页面内切换选择其它实验场景查看对应的实验数据。

  1. 核心数据指标

    默认展现的是最近1天的指标数据。用户可在页面内的实验选择下拉框内勾选多个要对比数据的实验。目前的可统计的核心指标有PV、IPV、UV、IPV_UV、CTR、无结果率,未开通点击数据采集服务的核心指标只支持统计PV、UV和无结果率。

    实验数据副本.png | center | 747x404

  2. 具体数据表格

    具体数据页面内展现的是各个实验下指标的天级具体数据以及每个指标在周期内每天的趋势变化。页面默认展现最近3天各个实验的相关数据,用户可自定义修改查看的日期跨度。展现的指标项同核心数据表格。点击表格内的指标旁边的icon即可展现该指标的变化曲线图。

    实验数据2副本.png | center | 747x405

六. 实战示例

某电商产品线上使用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 代表第一种场景。

    实战示例_图1.png | center | 827x252

  2. 在查询中设置A/B Test参数。由于在控制台已填写场景标识为 user_search,所以在场景一的查询中应该设置参数scene_tag:user_search,flow_divider:xxxx(终端用户会员id的值)。

    2.1 SDK方式( 如下是java sdk用法,php sdk用法类似)image.png | left | 827x237

    [aliyun-sdk-opensearch-3.3.0](java版)、 [opensearch-sdk-php-release-v3.1.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%89%27&&sort=-price&abtest=scene_tag%3auser_search%2cflow_divider%3a%25e5%25bc%25a0%25e4%25b8%2589

  3. 以上配置完毕后,就可以实现对第一种场景的流量进行A/B Test的需求了。