每个来源的点击比例都下降,为什么总体却能上升?
假设你给博客换了首页,过一周发现“访问首页后点击文章的比例”涨了。你正准备把改版记为成功,按来源展开报表,却看见邮件通讯来的访问变差了,搜索来的访问也变差了。每一组都下降,总体怎么还会变好?应该相信哪张表?
这类反转通常称为辛普森悖论:汇总数据与分组数据中的关联方向可以相反。它没有破坏算术规则,真正容易出错的是我们把不同问题的答案当成了同一个结论。Judea Pearl:Understanding Simpson’s Paradox
下面全部使用我构造的教学数据,不是谷米的实际统计,也不是一次真实改版的结果。我们先把计数算清,再用可下载的 Python 脚本固定来源权重,最后说明这样能解释什么、不能证明什么。读者得到的应是一种检查报表的方法,而不是一句“平均数不可信”。
1. 先约定分子、分母和分组
本文的观察单位是一次首页访问,成功条件是这次访问是否至少点击过一篇文章。一次访问点击三篇也只算一次成功。因此,分子是“点击过文章的访问次数”,分母是“首页访问次数”;它不是点击事件总数除以访问人数,也不是按独立读者计算的比例。
为了专心观察加权问题,例子只设两个互斥且覆盖全部访问的来源:邮件通讯 newsletter 与搜索 search。两期都采用相同的来源分类与成功定义,观察窗口长度相同。真实网站当然可能有直接访问、社交媒体和未知来源,届时需要保留完整分类,不能把不方便解释的流量删掉。来源标签在这里仅是名称,不表示邮件读者必然更积极。
| 时期 | 来源 | 首页访问 | 点击过文章的访问 | 组内比例 | 占当期访问的权重 |
|---|---|---|---|---|---|
| 前一期 | 邮件通讯 | 100 | 50 | 50% | 20% |
| 前一期 | 搜索 | 400 | 40 | 10% | 80% |
| 后一期 | 邮件通讯 | 400 | 160 | 40% | 80% |
| 后一期 | 搜索 | 100 | 5 | 5% | 20% |
邮件通讯的组内比例下降了 10 个百分点,搜索下降了 5 个百分点。但前一期共有 500 次访问、90 次成功,整体是 90 / 500 = 18%;后一期仍是 500 次访问、165 次成功,整体是 165 / 500 = 33%。汇总比例上升了 15 个百分点,两个组内的比例却都下降。
表里点击次数和点击比例还给出不同信息。邮件通讯的成功次数从 50 增到 160,并不意味着这组每次访问更容易点击;它的访问量扩大了四倍。判断规模变化与判断访问行为变化时,分子和分母都应展示出来。
2. 总体比例是按访问量加权,不是平均两个百分比
把每组比例记为 r、每组访问占比记为 w,总体比例就是各组 w × r 相加。原因很直接:某组的“访问数 / 总访问数”乘以“成功数 / 该组访问数”,中间的访问数约掉,就得到该组成功数占全部访问的比例。各组加起来正好是总成功数除以总访问数。
前一期的计算是 0.2 × 0.5 + 0.8 × 0.1 = 0.18。后一期变成 0.8 × 0.4 + 0.2 × 0.05 = 0.33。前一期大部分访问来自比例较低的组,后一期大部分访问来自比例较高的组。来源构成的变化足够大,把组内下降盖了过去。
如果直接平均两个百分比,前一期会得到 30%,后一期得到 22.5%。这个算法把每个来源当成同等大小的一个单位,回答的是“两个来源比例的等权平均是多少”。它没有按实际访问数量加权,因此也不等于网站总体比例。一个只有十次访问的来源与一个有一万次访问的来源,不能在代表全部访问的指标里自动获得相同权重。
所以,两张表都可能算得正确:33% 描述后一期实际发生的全部访问;组内比例描述特定来源的访问。矛盾出在推断上——从“实际总体变高”跳到“每种访问的点击倾向都改善了”,这一步并不成立。
3. 想比较组内表现,可以固定一个参考构成
若现在关心的是“保持原来的来源构成,两期的比例如何比较”,就给两期都使用前一期权重:邮件通讯 20%,搜索 80%。前一期仍是 18%,后一期按相同权重重算为 0.2 × 0.4 + 0.8 × 0.05 = 0.12,即 12%。
这个数回答了一个明确的描述性问题:把两期观察到的组内比例放到同一个参考构成下加权,会得到什么?它让来源占比的变化退出这次比较。因此,报表可以同时列“实际总体:18% → 33%”与“按前一期来源构成加权:18% → 12%”。两行都要标清口径,避免把第二行写成后一期真实发生的总体比例。
参考权重需要在比较前说明。选前一期,是因为这里想以改版前的构成为参照;如果讨论下一季度的目标流量,可以使用事先规定的目标构成。不同权重代表不同人群,数值不必相同。不能试遍权重后只展示最符合愿望的一组,也不能每一期都更新参考权重,却继续把结果叫作固定构成比较。
有一个有用的边界:同样一套非负权重下,如果每组比例都下降,加权结果不会上升。每个“权重乘以变化量”都小于或等于零,相加仍如此。本例反转所需的关键条件,正是前后实际权重不同。
4. 把 15 个百分点拆开,说明变化从哪里来
用下标 0 表示前一期,1 表示后一期,总体变化可以写成:
总体变化 = Σ w0 × (r1 − r0) + Σ (w1 − w0) × r1
第一项固定前一期权重,统计组内比例变化:邮件通讯贡献 0.2 × (0.4 − 0.5) = −0.02,搜索贡献 0.8 × (0.05 − 0.1) = −0.04,合计下降 6 个百分点。这与固定构成后的 18% → 12% 完全对应。
第二项固定后一期组内比例,统计构成变化:邮件通讯权重增加 0.6,贡献 0.6 × 0.4 = 0.24;搜索权重减少 0.6,贡献 −0.6 × 0.05 = −0.03,合计增加 21 个百分点。两项加起来是 −6 + 21 = 15,与原来的总体上升吻合。
这是一次算术分解,方便描述变化,并没有测出“来源调整造成了 21 个百分点的因果收益”。它的分配依赖参考口径:若改成在前一期比例下先改变构成,再按后一期权重改变组内比例,两项的数值会不同,总和仍相同。报告分解结果时,要把使用的权重与比例一起写明。
这里也要分清百分比和百分点。18% 到 33% 是增加 15 个百分点;相对前一期的增长比例约为 83.3%。把它写成“增长 15%”,会改变读者理解的幅度。
5. 用脚本复算,并主动拒绝不成立的输入
我在 2026 年 10 月 2 日、macOS、Python 3.9.6 上实际运行了完整脚本与教学 CSV。把两个文件保存到同一目录后运行下面的命令;脚本只有标准库依赖,也可以把自己的同格式 CSV 路径作为参数传入。
python3 traffic-mix-lab.py traffic-mix-example.csv --self-test
脚本先检查列名和整数计数,再拒绝重复的“时期/来源”行,并核对两期是否具有相同且非空的来源集合。中间计算用整数构造 Fraction,保留精确分数;只在显示百分数时转换并保留两位小数。这样,分解是否能还原总体变化可以用精确相等检查,而不是依赖四舍五入。Python 3.9:fractions 文档
实际运行输出的汇总部分是:
overall: 18.00% -> 33.00%
fixed before mix: 18.00% -> 12.00%
within at before weights: -6.00 pp
composition at after rates: +21.00 pp
total change: +15.00 pp
边界检查也通过了:来源构成不变时,构成项为零,后一期实际总体与固定构成结果都为 12%;组内比例不变而构成改变时,组内项为零,总体可以升到 42%,固定构成结果仍为 18%。把所有计数乘以十,所有比例与分解结果不变。
脚本还实际拒绝了零分母、负计数、成功数超过访问数、某一期缺少来源、重复行和非整数计数。这里零分母不会被偷换成零比例:没有访问的组,比例是未定义的。如果该组在参考构成中占有权重,就缺少计算所需的信息。处理新增或消失来源,需要另订分组和比较口径;这个小脚本选择停止计算,让读者处理数据问题。
6. 固定权重以后,还不能直接给改版下结论
这次计算没有控制季节、入口页面、读者意图、文章主题或统计漏报。即使同一来源里比例下降,也不能单凭两期报表断言首页改版造成了下降;同理,总体上升也不能证明改版有效。Pearl 的研究讨论了一个关键限制:决定汇总还是分组数据适合因果判断,需要了解数据生成过程,不能只看哪张表更顺眼。Understanding Simpson’s Paradox
分组本身也可能被实验改变。微软研究团队在 2017 年论文的 §5.8 记录过按用户“是否看见某类链接”分组的例子:新算法改变了谁进入哪一组,使组内指标的改善容易被误解。对于实验,按受实验影响的结果来分组需要格外审慎;不停细分直到找到好看的结果还会带来多重比较问题。A Dirty Dozen:Segment Interpretation
还有数据口径的问题。访客与访问次数不能混用;来源重新归类、机器人过滤策略变化、时区切换和事件漏报,都可能改变分母。本文假定这些口径稳定,脚本检查计数合法,却不会替你确认埋点真的记录了什么。若一次访问能被记为多个来源,分组计数加起来也不再代表同一份总体。
样本不确定性是另一层问题。后一期搜索组只有五次成功,观察比例不等于稳定的真实概率。本文没有计算置信区间、显著性或重复访客造成的相关性,也没有执行 A/B 测试。分数计算精确,只说明给定计数下算术正确,不能把采样与测量的不确定性消掉。
7. 下一次看报表,先把问题写在数字旁边
如果要说明网站这段时间实际获得了多少后续点击,就展示总访问、成功访问与实际总体比例。来源构成改善本身可能是目标的一部分,不能一见反转就把总体数字宣布为无效。如果要比较相同来源构成下的表现,就并列来源计数、组内比例和事先说明的固定权重结果。如果要评价改版的因果效果,还需要合适的实验或因果分析设计。
本例可以写成一段有边界的报告:“总体从 18% 升到 33%;两个来源的组内比例都下降。按前一期构成重算,后一期是 12%。使用前一期权重的组内变化项为 −6 个百分点,使用后一期比例的构成变化项为 +21 个百分点。这解释了汇总反转,尚不能判断改版的因果效果。”
开头的两张表因此不必互相推翻。总体比例会跟着“来了哪些访问”和“各类访问怎样行动”一起变化。把分子、分母、组内比例和权重摆出来,才能知道某个漂亮的上升,究竟回答了你原本想问的哪一个问题。
资料与链接核对日期:2026 年 10 月 2 日。表格为原创教学假设;实验结果来自所附脚本,未接入谷米统计或任何真实实验数据。