全部产品

A/B Test

更新时间:2020-09-04 15:34:43

为了让用户更加合理地使用、调试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 PageView,指访问搜索页面的次数。
搜索结果曝光PV 指搜索结果页面上单条搜索结果的展现次数。次数不去重。
搜索UV UserView。访问过搜索结果页的用户数。同一个用户无论访问多少次都只记1个UV。
独立Query数 搜索的独立关键词数量。独立关键词是指所有用户在一段时间内所搜的所有关键词去重后的结果。若两个用户搜索了同一关键词记做1个
总Query数 所有用户在一段时间内搜索的所有关键词按用户按关键词去重后的结果。若两个用户搜索了同一关键词记做2个。
人均Query数 总Query数/uv
IPV ItemPageView。用户点击了搜索结果的次数。
IPV_UV 在点击了搜索结果的用户数。
人均IPV 搜索的IPV/搜索的UV。指访问搜索的用户平均从搜索页面中点击结果的次数。
人均pv(访问深度) 搜索的PV/搜索的UV。指访问搜索的用户平均访问搜索页面的次数。人均pv大的话可能代表用户对搜索比较感兴趣,但另一方面人均pv大也可能代表搜索召回的结果较差,用户无法使用较少的点击找到满足需求的结果。
浏览-点击 计算公式:IPV_UV/UV,表示使用搜索的用户中有点击行为的比例
CTR Click-Through-Rate。点击转化率,计算公式:IPV/PV,表示搜索结果点击次数占访问次数的比例。
平均页面停留时间 表示用户浏览单页面所花费的平均时长,计算公式为:用户在该页面的停留时长之和/用户浏览该页面的次数。计算逻辑一般是“用户离开这个页面的时间-用户进入这个页面的时间”。页面停留时间常用于衡量页面质量,但不能单纯的说长或短就是好或坏,要结合具体的业务场景和业务目标来理解。
跳失率 指进入该页面后没有任何操作、直接退出的比率。没有任何操作指没有点击任何搜索结果、没有后向翻页等。该指标一般用来衡量内容型页面的内容质量。
空结果率 计算公式:空结果pv/pv,空结果pv指的是页面未返回任何搜索结果的pv。
首位结果点击率 计算公式:首位结果ipv/pv,首位结果指的是rank在第一位的搜索结果。
前三结果点击率 计算公式:前三结果ipv/pv,前三结果指的是rank在前三位的搜索结果。

二、配置A/B Test 的基本流程说明

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

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

通过opensearch控制台左侧导航栏:功能扩展---->A/B测试 进入A/B测试界面,选择“应用”,点击“创建”即可进入A/B Test创建流程:
1

2.创建实验组:

实验组可以对查询分析、基础排序、策略排序以及类目预测进行实验。
实验组名称:实验组名称仅做展示使用,用户可修改。实验组名称不允许超过 30 个字符。
2

3.创建实验:

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

3.1 实验名称:
实验名称必须用户自定义,不超过 30 个字符。
4
3.2 添加配置:
用户可选择对查询分析、基础排序、业务排序进行配置。配置项弹框只支持用户进行选择已有的查询分析规则、基础排序、业务排序
在选择查询分析类型与策略时:

  • 用户选择“自定义”时,候选项为用户在当前应用下所创建的所有查询分析
  • 用户选择“线上一致”时表示此处不做任何配置同线上逻辑保持一致,即不是当前实验要测试的内容

在选择排序策略类型与策略时:
排序策略类型与策略也是同样的逻辑,考虑到状态为“配置中”的策略可能会被用户无意识的编辑,从而影响线上A/B测试效果,所以排序策略状态中仅支持“已发布”且不可更改。
5

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

4.实验组创建完成:

当实验配置完成后,点击“下一步”,完成配置,点击“完成”,返回A/B测试主页:
7
刚刚配置的实验组处于“待测试状态”:
8

5.启动测试:

在实验组创建成功后,在对应的实验组“操作”一栏点击“启动测试”,测试中的实验组状态处于“测试中”:
9

6.A/B Test实验生效:

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

请求的URL:

  1. /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测试主页中生成对应的实验组列表:
10
用户可对已创建的实验组进行基础的管理操作 :

1.启动测试:

用户可以对状态为“待测试”或“已停止”的实验组进行“启动测试”。

2.停止测试:

用户可以对状态为“测试中”的实验组进行“停止测试”。

3.删除实验组:

用户可在A/B测试主页对任意实验组进行“删除”操作。

实验管理:

创建好实验组和实验后,会在实验组详情页中生成对应的实验列表:
11
实验列表内展现了实验名称、查询分析类型与策略、排序策略类型与策略、流量占比和操作等基本信息:
12
用户可对已创建的实验进行基础的管理操作 :

  1. 编辑实验:
    支持对实验名称、实验配置、实验流量进行修改。
  2. 删除实验:
    实验被删除后,系统将不再保留其实验配置信息,并且线上不再生效。
  3. 白名单:

为了将特定flow_divider指定到特定的实验,从而方便查看特定实验的搜索效果,opensearch提供白名单功能,可将flow_divider添加到到特定的实验:
13

四、A/B Test 实验组详情

行为数据状态

当您成功创建实验组之后,进入实验组详情页,行为数据在列表中呈现的状态可能有以下几种:

  • 未开通:当前应用无行为数据上传(详情请点击此处
  • 已开通无数据:当前应用已开通行为数据采集,但一直未接收到数据
  • 数据异常:当前行为数据经质量检验发现问题较多不可信


实验组状态

当您成功创建实验组之后,进入实验组详情页,实验组在列表中呈现的状态可能有以下几种:

  • 待测试:当前实验组的当前状态,非历史状态,因为用户可能之前进行过测试或停止过测试
  • 测试中:指当前实验组已在控制台启动了测试,且显示启动测试时间距离当天的天数
  • 已停止:已停止,累计测试时间是指从首次启动测试到最后停止测试时间范围内,真正在测试的累计的天数,中间停止的时间不算

数据统计

从A/B Test实验组列表页点击“详情”或者直接从应用下的菜单栏内点击数据统计-A/B Test数据统计即可进入实验组详情页面,在数据统计页面中查看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 代表第一种需求:

14

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

2.1 SDK方式( 如下是java sdk用法,php sdk用法类似):
15
aliyun-sdk-opensearch-3.4.1(java版)、opensearch-sdk-php-3.2.1 (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的需求了。