跳到正文
LinkProfit

链接轮换器与会自我优化的分流测试

LinkProfit Team阅读约 10 分钟
  • ab-testing
  • link-rotator
  • analytics
本页内容

有两项功能在功能清单上看着几乎一模一样,回答的却是完全不同的问题。轮换器把一条短链接的流量分散到多个目标地址上。A/B 测试把流量分配给不同版本,再告诉你哪一个表现更好。两者都在一条链接背后放了不止一个地址;但只有其中一个是衡量。

本文覆盖两者真正的差别所在、权重在各自体系里的行为、为什么把访客固定在同一个目标地址上比分配比例本身更要紧、健康检查能发现与不能发现什么、自动重新分配权重是怎么工作的又为什么拒绝过早出手,以及什么时候更简单的那件工具才是对的。

轮换器是运营工具,分流测试是一次衡量

这个区别不是学院派的讲究。它决定了哪些行为你不用操心就能拿到,哪些行为你得自己想办法绕过去。

| | 目标地址轮换器 | A/B 分流测试 | | --- | --- | --- | | 用途 | 让同一个地址在不断更换的目标之间持续可用 | 比较目标地址并做出决定 | | 权重 | 相对值,取什么数都行 | 整数,且总和恰好等于 100 | | 可选集合 | 一直在变,最多二十个 | 测试期间固定不变 | | 逐项限制 | 点击上限、排期窗口、国家与设备筛选 | 没有——版本就是版本 | | 故障处理 | 不健康的目标地址被自动摘除 | 不适用 | | 结局 | 没有结局,它一直跑下去 | 一个赢家,或者一句诚实的“还不好说” |

当地址是不变的那一半、目标地址却在动时,轮换器才配得上它的位置:一个要比三轮 offer 活得更久的印刷二维码、一条简介页链接、一个广告主每周更换素材的联盟推广位。当你有一个问题、又有足够流量去回答它时,分流测试才配得上它的位置。在同一个账户里、在不同链接上分别使用两者是常态;在同一条链接上同时用两者,通常意味着其中一个什么也没做。

权重是相对的,而且按谁还合格重新计算

轮换器的权重是份额,不是百分比。某个目标地址的份额,等于它的权重除以当前所有合格目标地址的权重之和——所以 3、2、1 这组权重的含义是二分之一、三分之一和六分之一,而当你再加进第四个时,也不需要谁去手工重新归一。

合格性是在权重之前判定的,正是这个先后顺序,让这项功能成了运营工具而不是装饰。目标地址会在这些情况下退出候选集合:被关掉、用满了总点击上限或每日上限、排期窗口尚未打开或已经关闭、访客的国家或设备落在它的筛选之外,或者被健康检查摘了下来。其余目标会按各自的权重接手它那份份额,立刻生效,不需要谁在凌晨三点爬起来改设置。当所有目标地址都退场时,兜底地址接住剩下的流量;没有配置兜底地址时,链接会继续提供它的主目标地址,而不是变成一张错误页面。

轮换器还提供两种不带权重的分配方式:轮询,把连续的点击依次送给连续的目标地址;以及均分,把流量平均分开。镜像之间分摊负载该用的是轮询,因为它是唯一一种能保证连续两次点击落在不同地方的模式。

A/B 分流测试的行为恰好相反,而且理由很充分。它的权重是整数,且总和必须恰好等于 100,因为跳转服务会把访客映射到 0 到 99 之间的一个桶里,再沿着累计权重逐个比对:这个区间里只要出现缺口,就会有流量无人接应。带权重的轮换分配要用十万名合成访客做检验,实际份额与配置份额的偏差必须保持在一个百分点以内——任何一件号称能给流量分流的工具,都值得你期待这个级别的精度。

让同一位访客留在同一个目标地址上

没有粘性的轮换只会产生荒唐结果。一位访客打开链接,看到 offer A,一小时后再回来,看到 offer B,于是所有建立在这些点击之上的漏斗报表都是虚构作品——不是稍微有点偏差,是虚构,因为分子和分母此刻描述的是两个不同的页面。

因此粘性窗口是一项一等设置,可以在零到三十天之间配置,而它的机制分两层。基础分配是从访客的当日指纹确定性地推导出来的,因此它不需要会话、不需要数据库记录,也不需要逐访客存下任何东西。随后,你自己跳转域名下的一个第一方 cookie 会把选中的目标地址一路带到窗口结束,正是它让粘性活得比指纹 salt 的每晚轮换更久。

有两个后果值得先知道,而不是事后才发现。清掉 cookie 或换了另一台设备的访客,会退回到推导出来的分配,它在一天之内稳定,跨天则未必——这与数据分析层为了不持久化标识符而做出的取舍是同一笔。还有,改动权重之后,已经被固定住的访客仍然固定不动,因为只要那个目标地址还合格,固定就压过分配比例。

有一个实现细节会带来看得见的效果。轮换器取访客指纹的一个切片来推导自己的桶,而A/B 分流测试取的是另一个切片。共用同一个切片会让两次分配彼此相关,于是版本 A 里的每一个人,都会系统性地只看到目标地址清单里的一部分。

健康检查,以及怎么把失效页面移出轮换

目标地址会腐坏。合作方撤下页面、证书过期、offer 被下线、域名到期之后又以一张兜售自己的停放页重新出现。与此同时,短链接还在把属于它的那份流量一直往墙上送,而没有人发现,直到周报出来。

定时检查会像访客那样跟着每个目标地址走一遍,并记录四件事:状态码、跳转链里的跳数、响应时间,以及 TLS 证书的到期日。它还会把页面和目标地址加入时采集的指纹做对比——最终主机名和页面标题——一个如今从停放页返回健康 200 的 URL,就是这样被抓出来的。同一套探测也支撑着链接检查器;同一个目标地址的复检间隔不短于十五分钟,免得一个大型工作区把自己的监测变成一个流量来源。

接下来发生什么,是逐条链接自己的选择。默认做法是响亮但被动的:该目标地址会在链接列表里被打上标记,所有者会收到一封汇总邮件,同时触发一个 Webhook。打开自动摘除之后,它还会被移出轮换直到恢复,并被标记为自动停用而不是被悄悄删掉,于是“轮换器一切正常”成了一句有人核实过的话。重新启用刻意做成手动的——一个抖过一次的页面还会再抖,而在流量回去之前,应该有个人亲眼看过它。

两条诚实的局限。检查是从我们的基础设施发起的,因此它验证的是页面有应答,而不是它对某个特定国家、某种特定设备上的访客也应答正确。还有,停放页识别匹配的是已知模式;一个返回完全合法页面、只是 offer 已经撤掉的目标地址,看上去依然健康——这正是逐目标地址的转化数据比任何健康标记都更重要的原因。

在 edge 网络上依然守得住的上限

只有当同一条链接在十几个国家被同时打开、上限依然守得住时,点击上限才有意义。各地区各自独立的计数器,正是一个限额一千次点击的目标地址最后发出去一千四百次的原因:十四个数据中心各自数到一百,各自都以为自己还没到线。

避开这件事的设计跑在两个速度上。计数器快照跟着链接的缓存配置一起下发,因此跳转服务不必在热路径上多跑一趟往返,就大致知道某个目标地址走到了哪一步。当某个目标地址逼近上限、只差几十次点击时,跳转服务会在应答之前切换到共享存储里的权威预扣,于是同时打进来的两次点击争最后一个名额时,由一次原子自增来裁决,输的那一次去别处,而不是越过上限。

把取舍直说出来:远离边界时,那个数字是一份快照而不是实时计数,因此上限在需要精确的地方精确,在不需要的地方近似——正是这一点,让一个没有限额的目标地址不必为一条它根本没有的限制去付一趟往返的代价。

自我优化到底是怎么运转的

会自我优化的分流测试,只在普通分流测试之上多加了一样东西:一个定时任务,按哪个版本在目标上表现更好来重新计算权重。其余的一切——分桶、粘性、报表——都没有变,而跳转服务始终不知道存在这么一种模式,因为它收到的就是普通权重,只不过这些权重是替它算出来的。

这个任务每小时跑一次,分三步走。它收集每个版本自上次运行以来的点击增量,累加进一份存下来的样本。它用一个平滑过的比率给每个版本打分,做法是给成功数加一、给试验数加二,于是一个只有三次点击的版本不可能拿到满分,除零也不可能发生。然后它按这些分数的比例,把一百个整数点位分配给各个版本——在此之前,先给每个版本预留五个点位作为下限。

那个下限是整套算法里最重要的一行。一个被压到零的版本再也不会积累到新的观测,而放弃它的这个决定,会仅凭当初产生它的那份样本被永远定下来。五个点位,既够继续学习,又便宜到无关痛痒。

下面是两道闸门都打开之后,一次双版本测试的实际数据:

| 版本 | 点击量 | 目标事件 | 原始比率 | 平滑得分 | 新权重 | | --- | --- | --- | --- | --- | --- | | A | 620 | 31 | 5.00% | 5.14% | 54 | | B | 610 | 25 | 4.10% | 4.25% | 46 |

请注意算法没有做什么。转化率上大约五分之一的相对差距,产生的是 54 比 46 的分配,而不是 90 比 10,因为重新分配权重是按分数成比例来的,不是赢家通吃的规则。自动优化会倾斜,但不会切换。你要的如果是切换,就手工把赢家定下来——那会把全部流量路由到一个目标地址并结束这次实验,而这个决定会和那些自动决定一起,被记进链接的历史里。

为什么最小样本量要排在这一切之前

在优化器被允许碰任何东西之前,有两道闸门让分配保持均匀:一段按自然时间计的预热期,以及一个按点击量计的最小总样本,默认是一千次。任何一道闸门没过,权重就完全不调整,而不是稍微调一点。

理由不是统计上的吹毛求疵,而是链接流量本身的形状。一场营销活动最初的几个小时里,主导它的是最先发布的那个渠道,以及那些扫描链接的自动化流量——这一点我们在跟踪链接点击那篇指南里讲过。在那段窗口上算出来的比率,描述的是发布排期,不是页面。更糟的是,据此出手的优化器会饿着那个恰好在冷清时段上线的版本,而挨饿的版本积累证据的速度又更慢,于是早期的失误会自我强化。下限限制了损害的大小;闸门则从一开始就防住它。

自动模式有两件事不做。它是按比例重新分配权重,不是一次序贯检验:它不计算显著性水平,也永远不宣布赢家——宣布赢家始终是人的动作,就做在分流测试界面在版本表格下方打印出的那条置信说明旁边。还有,它据以重新分配权重的样本,只在你喂给它的目标有意义时才有意义——如果每一次点击都算成功,那么按定义每个版本的得分都一样,分配也就基本保持均匀。想要倾斜,就得有一个不是每次点击都能达成的目标,而这正是转化跟踪逐版本记录下来的东西;带签名的点击标识符携带着版本标签,因此订单和收入在转化文档描述的那些报表里可以按版本拆开来看。

什么时候你并不需要轮换器

| 场景 | 更合适的工具 | | --- | --- | | 现在指向一个目标,下个月换成另一个 | 直接改链接的目标地址;短地址和它的历史都不变 | | 每个市场一个不同的页面 | 带优先级的定向规则——结果确定,也读得懂 | | 一个问题,两个候选页面 | 一次普通的分流测试,外加那条置信说明 | | 手机进 App,桌面进网站 | 链接上的深度链接字段 | | 同一个页面的多个镜像 | 轮询模式下的轮换器,这正是它被造出来要解决的场景 |

总的规矩是:当目标地址在变而地址本身不变时,轮换器才对得起它的复杂度;在其余任何地方,它都要拿清晰度去换。一个加权份额比一条规则更难在脑子里推演,而任何一个在晚上十一点调试过“这位访客为什么拿到了那个页面”的人,都清楚自己更愿意读哪一种。配置细节见轮换器文档链接文档

一套经得起考验的配置

  1. 从能回答问题的最简单那件工具开始,只有当目标地址清单真的会变时,才加上轮换。
  2. 凡是背后有漏斗的场景,粘性窗口至少设成一次会话的长度;只有分摊负载时才设成零。
  3. 只要某个目标地址有真实的限制,就给它配上上限或排期窗口,并设好兜底地址,让用尽不至于变成一张错误页面。
  4. 对你控制不了的目标地址打开自动摘除;在短暂中断好过悄无声息重新分流的地方,就让它关着。
  5. 在从自我优化的分流测试里读出任何结论之前,先让预热期和最小样本量走完;在定下赢家之前,先看那条置信说明。
  6. 按目标地址读结果:点击事件记录了是哪一个应答了它,因此点击量、独立访客和收入都能这样拆开来看。

这一切背后的套路是同一个。轮换、上限和重新分配权重,是在没人盯着的时候让一条链接继续做正确的事。它们不能替代你去看究竟哪个目标地址在赚钱——它们只是替你买来了从容去看的时间。

大家常问的问题

轮换器和 A/B 测试到底有什么区别?

A/B 测试是一次衡量:版本集合固定、周期固定,结束时要给出结论。轮换器是一件运营工具:目标地址来来去去,各自带着点击上限和排期,服务特定国家或设备类型,坏掉时被自动摘除。机制也因此不同——分流测试的权重之和必须恰好等于 100,而轮换器的权重是相对值,某个目标退场时,它那份份额由其余目标接手。心里有问题时用分流测试,手上有运营时用轮换器。

轮换器的权重之和必须等于 100 吗?

不必。轮换器的权重是相对值:某个目标地址的份额,等于它的权重除以当前所有合格目标地址的权重之和。3、2、1 这组权重的含义是二分之一、三分之一和六分之一;一旦中间那个用满了当日上限,另外两个立刻按三比一分走全部流量。A/B 分流测试则恰好相反,权重之和不等于 100 就拒绝保存——因为跳转服务是把访客映射到 0 到 99 之间的一个桶里,再去比对累计权重,这个区间里只要有缺口,就会有流量无人接应。

同一位访客会始终落在同一个目标地址上吗?

在你配置的粘性窗口之内会,这个窗口可以是零到三十天之间的任意长度。这个分配是从访客的当日指纹推导出来的,而不是逐访客存下来的,随后由你自己跳转域名下的第一方 cookie 把它一路带下去。清掉 cookie 或换了设备的人,会退回到推导出来的分配,它在一天之内保持稳定,因为指纹 salt 每晚轮换。把窗口设成零,就是每次访问都重新轮换:分摊负载时你要的正是它,而漏斗场景下你永远不该要它。

健康检查凭什么判定一个目标地址坏了?

它像访客一样跟着目标地址走一遍,看四件事:状态码、跳转链的长度、响应时间,以及证书的到期日。它还会把页面和目标地址加入时采集的指纹做对比,于是一个已经悄悄变成停放页的 URL,哪怕回的是漂漂亮亮的 200,也照样会被抓出来。同一个目标地址的复检间隔不短于十五分钟,而自动移出轮换是需要你主动打开的选项,不是默认行为。

自我优化的测试要跑到多少流量才会重新分配权重?

两道闸门都得打开才行。预热期让分配在一段你配置的自然时间里保持均匀;最小样本量则让它继续保持均匀,直到各版本合计累积到足够的点击量——默认是一千次。任何一道闸门没过,优化器不会做任何微调,而是干脆什么都不动,这是刻意的:重新分配权重的可信度,取决于它所依据的最小的那份样本,而这个品类里的早期数据,主导它的是最先发布的那个渠道。

什么时候轮换器是用错了工具?

当只有一个目标地址是对的、你只是想以后换掉它时——改掉短链接的目标地址就能换个去处,地址本身不变,点击历史也照样挂在它身上。当不同市场需要不同页面时,带优先级的定向规则比加权份额更清楚,因为对给定的一位访客来说,结果是确定的、读得懂的。而当你只有一个问题和两个候选页面时,一次普通的分流测试外加一条置信说明,用比轮换器少得多的机械装置就能回答它。