实验工具

实验工具处于内测阶段,对此有需求的小程序请填写调查问卷: 点击填写问卷
使用实验工具的开发者,需要在小程序成员管理中具备数据分析权限,已开通微信支付的小程序,操作人员需要同时开通数据分析权限和交易分析权限。管理员可在小程序后台【成员管理】中修改和设置权限
实验工具入口:[微信小程序后台]->[功能]->[实验工具]

1. A/B 实验介绍

1.1 什么是 A/B 实验

A/B 实验是比较产品功能的多个版本效果的方法。A/B 实验首先会从产品的用户中随机划分一部分用户,并对划分出的用户随机展示某个实验版本。然后获取各个实验组的用户数据,最后通过统计学的方法来找到在既定目标下的最优版本

例如:对于购买按钮用红色还是绿色是否会对用户的购买率产生影响,产品团队举棋不定,此时可以使用 A/B 实验来进行决策。首先假设红色和绿色不会对用户的购买率产生影响,然后创建一个 A/B 实验,其中 A 组用户展示红色的购买按钮,B 组用户展示绿色的购买按钮。实验上线一段时间后,通过计算两个组的用户的购买率,并使用统计学中假设检验的方法,从而决定是用红色还是绿色

1.2 为什么做 A/B 实验

  • 积少成多,科学决策
    • 增长黑客:互联网产品需要数据驱动,实验平台是数据驱动的工具
    • 积少成多。每天提升 1 %,365 天之后数据效果会达到原来的 37+ 倍
  • 人会犯错,但数学不会
    • A/B 实验是一种数据驱动的精细化运营方法,它避免了依据个人经验做出错误决策带来的损失

1.3 小程序 A/B 实验介绍、优势及适用场景

支持同层多组实验,随机流量,自定义指标。未来将支持分层实验、画像等能力

  • 优势

    • 开发门槛低。无需 SDK,基础库( 2.14.4 以上 )支持实验能力
    • 配置简单快捷,只需三步即可发布实验
    • 自动化生成结论和数据
  • 适用场景

    • 适用于对需要在小程序生态内进行精细化运营的开发者使用,支持小程序前端 UI、算法策略和后台功能需求

2. 怎么做 A/B 实验

内测入口:收到内测邀请默认开通白名单,如未开通,可在问卷中填写申请,2个工作日内审批,开通后登录小程序后台,在左侧菜单栏 - 功能 - 实验工具找到入口即可

2.1 观察并制定假设

实验所解决的问题是在日常的运营中,开发者通过对于用户行为及小程序产品的理解,洞察发现到某个具体变量可能会对对应流程的数据结果产生影响( 例如:某个按钮大小对点击率的影响 ),进而推导出该变量产生变化时可能对结果造成影响的假设。因此,我们可以通过进行实验去验证假设的正确性和影响情况

2.2 创建 A/B 实验

创建一个小程序 A/B 实验,需要先定义明确需要监控的指标。完成指标定义并设置好实验内容后,即可进行实验发布。最后当实验运行了一定时间后,就可以观察实验的数据和结论

2.2.1 指标定义

公共指标介绍

开发者可以自定义自己需要监控的指标,除去自定义之外,系统也默认提供了部分常用的指标用于快捷配置,这些指标无需创建即可直接使用。

  • 小程序打开次数:打开小程序的总次数。用户从打开小程序到主动关闭或超时退出小程序的过程,计为一次
  • 小程序访问人数:访问小程序的总用户数,同一用户多次访问不重复计
  • 小程序人均打开次数:平均每个用户打开小程序次数,即打开小程序的总次数/访问小程序的总用户数
  • 小程序人均停留时长:平均每个用户停留在小程序页面的总时长(单位为秒),即总停留时长/访问人数。
  • 小程序次日活跃留存率:访问小程序的用户,在第2天再次访问小程序的用户数占比
  • 小程序支付人数:小程序内非免密支付成功人数,同一用户多次支付不重复计算
  • 小程序支付次数:小程序内非免密支付次数
  • 小程序人均支付次数:小程序内完成非免密支付用户的平均支付次数,即小程序内非免密支付成功次数/小程序内非免密支付成功人数
创建事件并测试、创建指标

事件是组成指标的最小单位,开发者可以实现基于事件的部分运算来定义指标

1.创建事件并测试

开发者可以自定义事件的中英文名,系统会生成对应的事件上报代码,开发者可将这段代码加入小程序代码中需要监控的位置。并且可以通过测试来确认上报代码是否生效

  • 通过基础库接口wx.reportEvent上报事件数据
  • 测试完成的事件才能关联为指标

2.创建指标

事件测试通过后,即可进行指标的创建,开发者可以自定义指标的中英文名,并且可以设置指标的类型(整数型、比例型),以及设置由哪些事件组成指标从而完成创建

  • 整数型。分为总量(上报一次计一次,不按用户去重),人均(上报一次计一次,按用户去重)
  • 比例性。事件的组合,分为总量/人数,总量/总量

2.2.2 创建实验

1.确定实验层

  • 当实验可用流量不足时,可以通过添加实验层的方式扩展实验用户,系统会提供新的实验层用于实验
  • 例如:小程序活跃用户有 10,000 人,当这 10,000 用户都已命中了实验,还需要再进行实验时,可通过添加实验层,来实现单个用户可以命中多个实验,且互不干扰,将流量效率运用到最大化
  • 如实验流量本身足够,则不需要用到实验层概念,系统默认选择第一层,开发者在操作时也无需改动
  • 当流量不足时(实验看板处可看到每层实验的流量情况),可在新建实验时添加实验层,正常进行实验

2.定义实验参数

  • 创建实验需要输入实验的相关基本信息,以及实验关注的核心指标,核心指标只能选择一个,核心指标将作为实验关注的唯一变量,同时也可以设置实验的监控指标,用于监控一些开发者关心的数据指标波动情况
  • 实验参数是用于区分实验的唯一标识,请务必确保实验参数的唯一性

3.配置实验组及实验参数

实验组和对照组用于进行实验中的对比,开发者可以按照需要进行分组设置,并且需要设置好对应组的参数值以确保实验的正确性

  • 核心指标必选且唯一,监控指标可多选
  • 为确保实验准确性,单个分组至少覆盖 2000 用户
  • 参数值为字符串,填入 0 表示 "0"
  • 提交实验白名单即生效,不需要发布,方便测试
  • 一个微信号可关联多个实验

4.发布小程序

  • 因为定义事件和参数可能涉及到了小程序代码的修改,因此完成了实验的设置后,需要发布小程序
  • 通过基础库接口 wx.getExptInfoSync 获取参数值,并执行不同实验逻辑,具体见 4. 实验API

5.发布实验

  • 小程序发布审核通过并完成发布后,可在实验看板中发布实验生效到外网

2.3 查看数据

发布实验次日早上 10 点可查看历史数据,7 日后可查看结论建议

  • 过往数据
    • 实验上线后,系统会以图表的形式呈现每日数据,开发者可以通过图表观察每日实验组对照组的数据波动情况并进行分析对比
  • 实时数据
    • 实时数据可观察当前实验实时命中的用户数,数据延迟在 20 分钟内
  • 总体数据
    • 总体数据为从实验发布之日到现在的每个实验分组的平均数据情况,开发者可以根据数据表感知实验对各个分组的核心指标及监控指标的数据影响
  • 核心指标
    • 核心指标以表格方式呈现出从实验发布之日到现在的每个实验分组的数据结果及置信程度,帮助开发者判断实验对于核心指标的影响
  • 结论建议
    • 结论建议为系统根据实验数据,为本实验提供的结论和参考建议

3. 实验结论及分析

名词解释
  • 第一类错误与第二类错误

    • 如果对照组与实验组无差异,而平台得出了对照组与实验组存在显著差异的结论,此时称发生了第一类错误
    • 如果对照组与实验组存在显著差异,而平台没有给出对照组与实验组存在显著差异的结论,此时称发生了第二类错误
  • 置信区间

    • 目前平台在结果页面展示了95%的置信区间。这个区间的含义是指如果我们将这个实验做 100 次,得到 100 个置信区间,有大概 95 个左右的置信区间是包含总体的真实差异的。因此在实验组有显著提升时,实验者可以通过置信区间下界得到实验组提升的一个保守的点估计值
  • 统计功效

    • 统计功效(power)指的是当被择假设为真时,拒绝原假设的概率。在计算样本量时,需要用到统计功效,平台设置的值是 80%
实验结论前提条件
  • 实验流量分配要均匀,否则实验结论不可信
  • 实验周期建议 7 日以上,具体原因见 5. A/B 实验FAQ:实验要运行多久
实验结论分类
  • 正向:核心指标正向,观察指标无负向
  • 正向待观察:核心指标正向,观察指标有负向
  • 负向:核心指标负向
  • 无效果:核心指标不显著,且命中用户数大于等于推荐样本量
  • 无法下结论:核心指标不显著,且命中用户数小于推荐样本量

4. 实验API

自基础库版本2.14.4 起支持实验能力

1.wx.getExptInfoSync(keys?: string[]) => Object

给定实验参数数组,获取对应的实验参数值

  • 返回值为对象,对象的 key 为传入的 keys 中的各项,value 为参数值(请注意是字符串);没命中任何实验返回空对象
  • 请在真正要用到参数的时候去调用 API 获取参数。每次要使用参数时,都需要重新调用API获取最新的值,不要记录历史结果。原因是参数的取值可能会发生变化,旧的值很可能已经过期,导致实验结果不准确
console.log(wx.getExptInfoSync(['实验参数']))

2.wx.reportEvent(eventId: string, data?: Object)

事件上报

  • eventId 为在小程序后台实验系统中设置的事件英文名
  • data 可选,为可被 JSON.stringify 的对象,将被一起上报至系统
wx.reportEvent('事件英文名', {expt_data: num})
其中expt_data固定;num由业务决定且只支持整数,可上报停留时长或者金额

需注意的是 wx.reportEvent('事件英文名') 与 wx.reportEvent('事件英文名', {expt_data: 1}) 等价

5. A/B 实验FAQ

1.为什么指标结果没数据?

  • 实验没有发布。创建完实验需要发布实验,才可能在第二天观察到数据
  • 实验上线的当天无数据。指标数据是按天更新的,上线后的第二天才能观察到数据
  • 实验的各组流量为 0。这种情况下,不会有用户命中实验。请确保发布的小程序调用 getExptInfoSync 接口

2.实验要运行多久?

建议实验至少运行一周。原因如下:

  • 实验时间过短,容易因新颖性导致误判。对于一个新功能,用户可能会因好奇心而使用,即使用户不喜欢这个新功能。这种场景下,可能会出现指标刚开始几天上涨,之后下降。因此应增加实验时间,避免因新颖性导致的误判。
  • 不同的时间可能会影响用户的行为。比如工作日与周末,用户的表现可能不一样。因此,应分析产品的周期性,实验运行时间应尽量包含一个周期

3.为什么实验有效果,全量上线后没效果?

  • 第一类错误。实验平台使用的是统计学中的假设检验方法。在这种方法框架下,第一类错误是无法避免的。具体的含义是两个组不存在差异的情况下,平台仍旧可能给出两个组有显著差异的结论。这种情况出现的概率是5%,大概每20次出现一次。
  • 指标结果中展示的是样本的提升,上线之后,有一定的概率会出现总体的提升小于样本的提升。建议关注指标结果中置信区间的下界值

4.为什么不能每天查看实验结论,有显著提升就上线?

  • 会放大第一类错误。正确的实验方法是:实验前需要确定好实验时间,只依据实验结束时间时的结论做决策。此时,实验平台能够保证第一类错误率控制在 5%。如果实验者每天查看实验结论,有显著就停止实验并作出有差异的决策,那么会放大第一类错误。举个例子,在两个组完全无差异的场景下,用户连续观察 7 天,一旦出现显著差异,就上线,那么做 100 次这样的实验,会有超过 30% 的实验出现第一类错误(准确的第一类错误为:1 - (1 - 0.05)^7)

6. 流程示例

  1. 找到入口,进入「实验工具」


  2. 若不需要自定义「监控指标」,可直接创建实验,在监控指标中,系统默认提供了小程序的一些宏观数据( 活跃、留存 )等


  3. 若需要自定义「监控指标」且未创建过指标,需先创建事件、定义指标再进行实验

    • 事件创建:创建完成后,可在事件列表「操作」栏中,点击「查看代码」,将系统返回的代码插入小程序对应的代码段中
    • 事件测试:事件可通过在小程序中进行上报尝试进行测试,测试通过后,事件创建完成,可继续事件组合成为指标



  4. 指标定义:通过事件组合生成需要监控的指标,也可直接使用系统默认创建的指标


  5. 创建实验:按照需求创建实验并进行测试(支持微信号白名单)


  6. 小程序发布:因有代码改动,需要进行一次小程序发布

  7. 发布实验:小程序发布后,在「实验看板 - 实验列表 - 操作」中上线实验到外网


  8. 观察数据:实验进行 1 天后,可在「实验数据」中观察数据,实验进行 7 天后,可在「实验数据」中查看实验结论