A/B 实验
新版按钮是不是更好:在后台建实验,Web SDK 在浏览器里给访客分组,业务照常上报目标事件,结果页用统计检验告诉你差别是不是真的。
创建
「行为分析 → A/B 实验 → 新建实验」,只有管理员能建:
evstats


| 字段 | 说明 |
|---|---|
key | 实验标识,代码里用它取变体,例如 signup-button |
| 名称 | 显示用 |
| 目标事件 | 用来判断转化的事件,例如 signup。业务照常 track,不用改名 |
| 流量 | 百分之多少的访客进入实验,其余的人不分组 |
| 变体 | 2~8 个,每个有 key、名称、权重(正整数)。第一个变体是对照组 |
实验有三种状态:草稿、进行中、已停止。草稿可以修改,启动后配置只读;停止之后不能再启动,要重新建一个。一个项目同时进行中的实验最多 50 个。创建、修改、启停都记进操作日志。
在代码里取变体
实验启动后,Web SDK 从 /sdk/config 拿到进行中的实验,在浏览器里本地分组,不需要额外请求:
js
await evstats.init({ endpoint: "https://stats.example.com/sa", key: "evs_wk_xxx" })
if (evstats.variant("signup-button") === "new") {
showNewButton()
} else {
showOldButton()
}variant(key)返回变体的key;访客没进入实验(落在流量之外)或配置还没返回时是null,按对照组处理即可。init返回的 Promise 在配置返回(成功或失败)之后完成,await之后再取变体。- 分组稳定:同一个访客每次都分到同一组。用的是匿名 ID(没有时用用户 ID)加实验
key的哈希,服务端用同一个算法。 - 进入实验的访客每次页面加载发一次
$ABTestTrigger,属性$abtest_experiment_id是实验key,$abtest_experiment_group_id是变体key。
分组算法公开写在 Web SDK。自己用别的端上报时,按同一个算法分组、发同样的 $ABTestTrigger,结果页照样能算。
看结果
evstats


结果页列出每个变体的:进入人数、完成目标事件的人数、转化率、相对对照组的提升,以及结论:
| 结论 | 含义 |
|---|---|
| 显著(95%) | 两组转化率的差别通过了 95% 置信的 z 检验。只有这时才标出胜出的变体 |
| 不显著 | 数据已经够,但差别可能只是随机波动 |
| 样本不足 | 人数还太少,不宣布胜者,继续跑 |
结果最长看 90 天。实验列表和结果也在 OpenAPI 里(只读):experiments 与 experiments/{experimentId}。实验的创建和启停只在后台。