📑 本页目录(点开跳转)
15 · 长期效应与代理指标
⏱ 40 分钟 | ⭐ 短期涨 ≠ 长期好
🎯 一句话
实验只能跑两周,但你关心的是一年后的留存。 这一章讲:怎么用能测的东西,去推断你真正在乎但测不了的东西。
⏳ 一、为什么短期和长期会背离
| 机制 | 表现 |
|---|---|
| 新奇效应 | 前几天涨,之后衰减到 0(第 12 章) |
| 学习效应 | 用户需要时间适应,前期反而是负的,后期才涨 ⭐ |
| 透支未来 ⭐⭐ | 推更刺激的内容 → 今天多点了 → 明天更容易疲劳流失 |
| 生态影响 | 只推头部内容 → 短期 CTR 高 → 创作者流失 → 长期供给恶化 |
⭐ 「透支未来」是最危险的: 它在短期指标上完全表现为成功。 你会兴高采烈地全量上线一个长期有害的东西。
一个典型的曲线:
效果
│ ╱▔▔╲ 新奇效应:先涨后落回
│ ╱ ╲___________
│──────────────────────── 0 线
│ ╲___ 学习效应:先跌后涨
│ ╲______╱▔▔▔▔
│ ▔▔▔▔╲ 透支未来:先涨后【转负】⭐
│ ╲______
└──────────────────────────► 时间
🔭 二、四种办法推断长期效应
① 长周期实验(holdback)⭐⭐
新策略全量上线,但【永久留出 1~5% 的用户】不上
→ 这批人就是长期对照组
→ 半年后对比,得到真实的长期效应
⭐ 这是最可靠的办法,代价是这部分用户享受不到新功能
💡 成熟团队通常会维持一个「长期 holdback 组」, 用来回答「我们这一年做的所有事,累计起来到底有没有用」—— 这个问题不留 holdback 就永远回答不了。
先把成本算清楚,它比直觉便宜得多:
holdback 1% 的成本
= 1% 的用户,一整年享受不到所有改进
假设一年的改进累计起来是 +8%:
→ 损失 ≈ 总盘子 × 1% × 8% = 0.08% ⭐ 基本可以忽略
而它买到的是:
【唯一一个】能回答"这一年到底有没有用"的数据源
⚠️ 但有一个必须先算的数:1% 的流量够不够测出这 8%? 用第 12 章的 MDE反算一遍 —— 如果算出来 MDE 是 12%,那这个 holdback 就是个摆设, 你花了成本却拿不到结论。宁可留 3% 一年,也不要留 0.5% 什么都测不出。
三个会把 holdback 毁掉的实操坑 ⭐:
| 坑 | 为什么致命 | 怎么防 |
|---|---|---|
| 分组哈希被改动 | 一次分流改造,holdback 的人就换了一批,一年的历史直接作废 | 哈希种子写进配置并加变更审批 |
| 被"全量"功能覆盖 ⭐⭐ | 上线的人根本不知道有 holdback,一次全量就污染了 | 发布流程里加一道「是否需要排除 holdback」的强制选项 |
| 一直不轮换 | 一年后 holdback 组和大盘差距太大,用户体验明显落后 | 一年一轮换;换之前把当期结论固化下来 |
② 代理指标 + 历史验证 ⭐
① 找一个短期能测、且和长期目标相关的指标
② 用【历史数据】验证这个相关性确实存在且稳定
③ 之后用它做快速决策
④ 定期回头重新验证 ⭐
| 长期目标(测不了) | 短期代理(能测) |
|---|---|
| 一年留存 | 首周活跃天数、第 7 日回访率 |
| 用户满意度 | 主动搜索率、负反馈率(点"不感兴趣")⭐ |
| 内容生态健康 | 创作者发布量、长尾内容曝光占比 |
| 长期收入 | 复购率、客单价趋势 |
一个好代理指标要同时满足四条:
① 和长期目标的关系【被历史数据验证过】,不是拍脑袋
② 短期可测 —— 两周内有足够 power(第 12 章的 MDE 算一下)
③ 【不容易被单独优化】⭐⭐ —— 这是最容易被忽略的一条
④ 方向明确(涨就是好),不需要"要看情况"
💀 ③ 说的是:如果一个代理指标可以被"钻空子"地拉高
而不带来真实价值,它一定会被钻 —— 无论钻的是模型还是人
验证 ② 号步骤有标准做法:用「历史实验」而不是「历史用户」 ⭐⭐
import numpy as np
# past: 每行 = 一个已经跑完、并且已经有长期数据的历史实验
# d_proxy = 该实验在【短期代理指标】上的效应(如 加购率 +2.1%)
# d_target = 该实验在【长期目标】上的效应 (如 30 天 GMV +0.4%)
def validate_proxy(past):
r = np.corrcoef(past.d_proxy, past.d_target)[0, 1]
# ⭐ 方向一致率比相关系数更好懂:代理涨的实验里有多少长期也涨了
agree = ((past.d_proxy > 0) == (past.d_target > 0)).mean()
# ⭐⭐ 最该盯的一个数:代理为正但长期为负 = 你会做错的决策比例
wrong = ((past.d_proxy > 0) & (past.d_target < 0)).mean()
return {"相关系数": r, "方向一致率": agree, "会做错的比例": wrong}
| 相关系数 | 方向一致率 | 结论 |
|---|---|---|
| > 0.7 | > 85% | ✅ 可以用它做上线决策 |
| 0.4 – 0.7 | 70 – 85% | ⚠️ 只能用来筛掉明显差的,不能用来宣布成功 |
| < 0.4 | < 70% | 🔴 别用,它在骗你 |
⭐ 要至少 20–30 个历史实验才算得准。 手上没有这么多历史时,正确的说法是 「这是一个假设,不是一个被验证过的事实」 —— 并在报告里写出来。
⚠️ 和第 7 章一样,第 ④ 步不能省: 代理和目标的关系本身会漂移。 尤其是当代理指标变成了优化目标之后 —— 那就是第 14 章的古德哈特定律。
💀 一个跑了 14 个月才被发现的代理失效
场景:电商推荐
长期目标:30 天 GMV —— 噪声太大,两周的实验根本测不出
选定代理:加购率
建立时验证过,而且很扎实:
· 用过去 26 个实验回归,相关系数 ρ = 0.72
· 方向一致率 88%
→ 团队据此在之后 14 个月判断了 60 多个实验,累计「加购率 +19%」
然后 holdback 组说话了:
| 指标 | 14 个月累计 |
|---|---|
| 加购率(代理) | +19% ✅ |
| 30 天 GMV(真实目标) | +1.3%,且不显著 💀 |
根因:中间产品侧上了两个功能 ——
· 「加购提醒」(降价时推送)
· 「购物车凑单」(凑满减)
→ 加购变成了一个【几乎零成本】的动作
→ 用户开始把购物车当收藏夹用 ⭐
→ 加购 → 下单的转化率从 31% 掉到 12%
重新跑 validate_proxy:ρ 从 0.72 掉到 0.19 🔴
⭐⭐ 这个案例最重要的一条: 代理指标的失效通常不是缓慢漂移,而是被某次产品改动一次性打断的。 它不会有任何告警,因为代理指标本身一切正常 —— 它只是不再代表目标了。
修法:把「代理 → 目标」的相关系数本身做成一个监控指标, 每季度用最近的历史实验重算一次,跌破 0.4 就自动触发告警。 🔗 这和第 6 章监控「特征 → 标签」关系的漂移是同一个思想。
③ 看效果的时间曲线,而不只是累计值 ⭐
把实验期内【每一天】的效果画出来:
· 单调衰减 → 新奇效应,长期收益要打折
· 稳定 → 大概率能持续
· 先负后正 → 学习效应,别过早叫停 ⭐
· 先正后转负 → 危险信号,考虑不上线 ⭐⭐
⭐ 这一步几乎零成本,但大部分团队只看累计值
④ 护栏指标
主指标涨的同时,这些【不能掉】:
· 留存(次日/7日/30日)
· 负反馈率、投诉率
· 内容/商品多样性
· 长尾供给方的收益
· 延迟、错误率
⭐ 护栏不是用来"优化"的,是用来【否决】的:
主指标涨 5% 但留存掉 1% → 大概率不该上
⚖️ 三、怎么把多个指标合成一个决策
现实问题:主指标涨了、护栏指标 A 微跌、护栏 B 微涨 —— 上不上?
⭐ 事前定规则,事后照规则执行:
① 主指标:必须显著为正
② 护栏指标:每个都设一条【红线】
· 跌破红线 → 一票否决
· 在红线内的波动 → 忽略
③ 都满足 → 上线;否则 → 不上或继续改
⚠️ 关键是【事前】定。事后定规则等于没有规则
💡 为什么要设"红线"而不是"加权求和": 加权求和意味着「留存的损失可以被 CTR 的提升补偿」—— 但很多时候你并不真的这么认为。 红线表达的是「这条不能碰」,更接近真实意图。
🎯 四、北极星指标:一个常见的误用
✅ 正确用法:
北极星指标是【方向共识】——让全公司知道往哪走
❌ 错误用法:
把它当成【实验判据】——每个实验都用它
为什么错:
北极星(如"月活跃用户数")通常【变化慢、噪声大】
→ 单个实验根本测不出它的变化
→ 你需要一个能在两周内测出差异的【可操作指标】⭐
北极星(月活)
↑ 由什么驱动
一级指标(次日留存、人均使用时长)
↑ 由什么驱动
实验指标(CTR、完播率) ← 实验实际用这个 ⭐
⭐ 关键是:这条链上每一环的连接,都要用数据验证过,
而不是拍脑袋画出来的
🧪 五、一个务实的组合方案
日常实验(1-2 周)
用【实验指标】判断成败 + 护栏否决
季度复盘
用【长期 holdback 组】验证累计效果 ⭐
半年一次
重新验证「实验指标 → 一级指标 → 北极星」这条链
还成立吗? ⭐⭐
⭐ 最后那条最容易被跳过,但它是整套体系的地基。 链条断了而没人发现,会导致你连续做了半年"成功的实验",北极星纹丝不动 —— 这是很多团队真实发生过的事。
⚠️ 六、一张坑表
| 坑 | 后果 | 怎么修 |
|---|---|---|
| 只看累计效果,不看逐日曲线 ⭐ | 新奇效应和"透支未来"都被当成成功 | 逐日画效应;先正后转负 = 别上 |
| 代理指标从没验证过 | 你在优化一个和目标无关的东西 | validate_proxy:ρ > 0.7 且方向一致率 > 85% 才能做决策 |
| 验证过一次就再也不验证 💀 | 就是那个 14 个月 / +19% vs +1.3% 的案例 | 把相关系数本身做成季度监控项 ⭐⭐ |
| 代理指标容易被钻空子 | 会被钻,无论钻的是模型还是人 | 选代理时把「能不能被单独拉高」列为硬条件 |
| holdback 留太小 | 花了成本却测不出任何东西 | 先用 MDE 反算,宁可 3% 也不要 0.5% |
| holdback 被全量功能污染 ⭐ | 对照组不再是对照组,一年白留 | 发布流程加强制项:是否排除 holdback |
| 护栏指标用加权求和 | 「留存的损失被 CTR 补偿」——你并不真这么想 | 用红线一票否决 |
| 决策规则事后才定 | 等于没有规则,永远能找到一个"该上线"的理由 | 事前写下来并存档 |
| 拿北极星当实验判据 | 变化慢、噪声大,单个实验测不出 | 用可操作的实验指标,链条每一环都要验证过 |
🔗 七、和站内其他章的关系
| 相关的地方 | 和这一章的关系 |
|---|---|
| 第 7 章行为代理 | 同一个思想,那里是监控、这里是决策 |
| 第 12 章新奇效应 | 时间曲线的一种形态 |
| 第 14 章古德哈特 | 代理指标失效的机制 |
| 推荐算法 11多样性 | 典型的护栏指标 |
| 推荐算法 挑战B | 「透支未来」的模拟实验 |
| ⭐ 博弈论与集体决策 09 | 本章多目标权衡用的「帕累托」,定义在那里(第五节)。⚠️ 它讲清了两件容易搞错的事:不能把不同目标的分数相加(效用是序数的,两把尺子不通用)、帕累托最优不等于好(一个目标拉满、另一个归零照样是帕累托最优) |
✅ 检查点
- 短期和长期背离的四种机制是什么?哪个最危险、为什么?
- holdback 是什么?它能回答什么别的方法回答不了的问题?留 1% 的成本大概是多少?留之前必须先算什么?
- 会把 holdback 毁掉的三个实操坑是什么?
- 一个好代理指标要满足哪四条?哪一条最容易被忽略?
- 怎么验证一个代理指标?用什么数据、看哪几个数、判据是多少?
- 用那个 14 个月的案例说明代理失效。它最反直觉的一点是什么?怎么防?
- 效果时间曲线的四种形状分别意味着什么?
- 护栏指标是用来做什么的?为什么用红线而不是加权求和?
- 北极星指标最常见的误用是什么?为什么错?半年一次要重新验证什么?
👀 答案
- 新奇效应(先涨后落)、学习效应(先跌后涨)、透支未来(先涨后转负)、生态影响。透支未来最危险——它在短期指标上完全表现为成功,你会兴高采烈地全量上线一个长期有害的东西。
- 新策略全量上线但永久留出 1~5% 用户不上,作为长期对照组。它能回答「我们这一年做的所有事累计起来到底有没有用」——不留 holdback 就永远回答不了。成本:一年改进累计 +8% 时,留 1% 的损失 ≈ 总盘子 × 1% × 8% = 0.08%,基本可以忽略。留之前必须先用 MDE 反算「这点流量够不够测出这么大的差异」——算出来 MDE 是 12% 的话,这个 holdback 就是个摆设;宁可留 3% 一年,也不要留 0.5% 什么都测不出。
- ①分组哈希被改动(一次分流改造就换了一批人,一年历史作废)②被"全量"功能污染(上线的人根本不知道有 holdback)③一直不轮换(一年后体验落后太多)。对应:哈希种子加变更审批、发布流程加「是否排除 holdback」的强制项、一年一轮换且换前固化结论。
- ①和长期目标的关系被历史数据验证过 ②短期可测(两周内有足够 power)③不容易被单独优化 ④方向明确。第③条最容易被忽略——能被钻空子拉高的代理指标一定会被钻,无论钻的是模型还是人。
- 用历史实验而不是历史用户:每个跑完且已有长期数据的实验,取它在代理上的效应和在长期目标上的效应,算相关系数、方向一致率、以及"代理为正但长期为负"的比例(= 你会做错的决策比例)。判据:ρ 大于 0.7 且方向一致率大于 85% 才能用来做上线决策;0.4–0.7 只能用来筛掉明显差的;低于 0.4 就是在骗你。要 20–30 个历史实验才算得准,不够就老实说"这是假设不是事实"。
- 电商用「加购率」代理 30 天 GMV,建立时 ρ=0.72、方向一致率 88%,很扎实;之后 14 个月判断了 60 多个实验,累计加购率 +19%,而 holdback 显示 GMV 只涨 1.3% 且不显著。根因是产品上了「加购提醒」和「购物车凑单」,加购变成零成本动作、用户拿购物车当收藏夹,加购到下单的转化率从 31% 掉到 12%,重算 ρ 只剩 0.19。最反直觉的一点:代理失效通常不是缓慢漂移,而是被某次产品改动一次性打断的,而且不会有任何告警——代理指标本身一切正常,它只是不再代表目标了。防法:把相关系数本身做成季度监控项,跌破 0.4 自动告警。
- 单调衰减→新奇效应,长期收益打折;稳定→大概率能持续;先负后正→学习效应,别过早叫停;先正后转负→危险信号,考虑不上线。
- 用来否决,不是用来优化的。用红线是因为加权求和意味着"留存损失可以被 CTR 提升补偿",而很多时候你并不真的这么认为;红线表达"这条不能碰",更接近真实意图。
- 把它当成实验判据。因为北极星(如月活)变化慢、噪声大,单个实验根本测不出它的变化;实验需要能在两周内测出差异的可操作指标。半年一次要重新验证「实验指标 → 一级指标 → 北极星」这条链还成立吗。不做的后果:连续做了半年"成功的实验",北极星纹丝不动。
🛑 可以停在这里
⚡ 走神救援
⭐短期涨≠长期好,四种背离机制:新奇效应(先涨后落)、学习效应(先跌后涨,别过早叫停)、⭐⭐透支未来(先涨后转负——最危险,因为它在短期指标上完全表现为成功)、生态影响。四种推断办法:①⭐⭐长期 holdback(全量上线但永久留 1~5% 不上做长期对照;这是唯一能回答"我们这一年做的所有事累计有没有用"的方法)②代理指标+历史验证(四步,第④步定期重新验证不能省——代理和目标的关系会漂移,尤其代理变成优化目标后就是古德哈特)③⭐看每日效果曲线而非累计值(衰减=新奇效应、稳定=能持续、先负后正=学习效应、先正后转负=危险信号;几乎零成本但大部分团队只看累计)④护栏指标(用来否决不是用来优化;⭐用红线而非加权求和,因为加权意味着"留存损失可被CTR补偿"而你并不真这么认为)。决策规则必须事前定。⭐北极星最常见的误用是拿它当实验判据——它变化慢噪声大,单个实验测不出;要用能两周测出差异的实验指标,且链条每一环都要用数据验证过。⭐半年重验一次这条链,否则会出现「连做半年成功实验,北极星纹丝不动」。⭐holdback 比你想的便宜:一年改进累计 +8% 时留 1% 的损失只有 0.08%;但留之前必须用 MDE 反算够不够测——MDE 算出来 12% 的话这个 holdback 就是摆设。三个会毁掉它的坑:哈希被改动(一年历史作废)、⭐被"全量"功能污染(上线的人不知道有 holdback,发布流程要加强制排除项)、一直不轮换。⭐好代理指标四条:验证过、短期可测、⭐⭐不容易被单独优化(能被钻的一定会被钻)、方向明确。⭐⭐验证要用「历史实验」不是「历史用户」:看相关系数、方向一致率、以及"代理为正但长期为负"的比例(= 你会做错的决策比例);ρ 大于 0.7 且一致率大于 85% 才能做决策,低于 0.4 就是在骗你,需要 20–30 个历史实验才算得准。💀真实案例:电商用「加购率」代理 30 天 GMV,建立时 ρ=0.72 很扎实,14 个月里判断了 60 多个实验、累计加购率 +19%,而 holdback 显示 GMV 只涨 1.3% 且不显著;根因是产品上了「加购提醒」和「购物车凑单」,加购变成零成本动作、用户拿它当收藏夹,加购→下单转化率从 31% 掉到 12%,ρ 掉到 0.19。⭐⭐最反直觉的一点:代理失效不是缓慢漂移,是被某次产品改动一次性打断的,而且不会有任何告警(代理本身一切正常,它只是不再代表目标了)→ 把相关系数本身做成季度监控项,跌破 0.4 告警。
下一节 👉 16-重训练.md