Victor's Code Journey
Victor's Code Journey

目录

指标异动归因全景:从指标波动到可执行结论

周会上,运营问了一句:“这周 GMV 环比涨了 5%,为什么?”

三种回答摆在桌上:

  • “大促上线了。"——结论可能对,但没法回答"大促贡献了几成”。
  • “搜索和直播涨得比较多。"——方向可能对,但"比较多"是多少?涨的部分又被谁抵消了?
  • “直播贡献 51.4%,推荐 34.3%,私域 25.7%,搜索 −11.4%,四个渠道加起来正好 100%。"——这个能直接拿去排优先级。

第三种回答就是归因分析。它的本质不是"找原因"这种模糊的事,而是把 ΔY 拆成一组加起来等于 ΔY 的数,然后按大小排序。本系列 7 篇要讲的就是这件事怎么算对:每种方法的适用边界、残差从哪来、以及在几百个维度里怎么找到真正反常的那一个。

本文是总纲。后面每一篇对应一种方法族,单独展开。

“指标异动归因分析"这六个字,拆开是四个独立的概念:

概念含义容易混淆的点
指标对业务过程的度量(GMV、转化率、留存率)指标口径必须先钉死,否则后面全是空谈
异动指标发生了偏离预期的变动异动隐含"比较”——跟谁比?
归因透过现象看本质,定位是哪些因素导致了变动要量化,不是定性推测
分析解读归因结果,给出可落地的建议到人、到周、到动作

“异动"这个词里藏着最容易被跳过的一步:异动永远是相对某个基准的。常见有两类基准——同一主体的本期 vs 基期(本月 GMV 比上月),或者不同主体的同期对比(新算法版 vs 老算法版)。基准选错,后面全错:拿日环比当基线,会把"周末效应"当成异动。

把目标指标写成若干因子的函数:

Y = f(X₁, X₂, ..., Xₙ)

其中 Xᵢ⁰ 是基期值,Xᵢ¹ 是当期值。指标的变化是:

ΔY = f(X₁¹, ..., Xₙ¹) − f(X₁⁰, ..., Xₙ⁰)

归因要做的,是找到一个映射 g,把"每个因子的变化"翻译成"对 ΔY 的贡献”:

g(ΔX₁, ΔX₂, ..., ΔXₙ) = ΔY

这个式子看着抽象,其实就是一句话:把一个数的变化,翻译成"谁贡献了多少”。翻译出来的结果必须能加回去——加回去等于原变化量,才叫"解释"了这次异动。

假设本月 GMV 涨了 5%,两种答法:

答法一:GMV 涨 5%,主要是服装品类销量和客单价上升导致。

答法二:GMV 涨 5%,其中服装品类贡献 4pp(销量 2.5pp、客单价 1.5pp),其余因素贡献 1pp。

答法一的问题不在于结论可能不对,而在于它无法被验证,也无法被排优先级。“主要是"是多少?另外 1pp 是什么?如果排查资源有限,该先看服装还是先看那 1pp?答法一回答不了。

答法二把"主要原因"变成了一个带数字的清单,每一项都能追责、能下单、能验收。定量归因的价值不在于结论更对,而在于结论可执行。

后面每一篇都会用到同一套记号,先在这里定死。

以「好物优选」这个电商 App 为例(后面 6 篇都用它),本月 GMV 从 1000 万涨到 1350 万,按渠道拆开:

渠道上月 GMV本月 GMVΔX绝对贡献 V
搜索400360−40−40
推荐300420+120+120
直播200380+180+180
私域100190+90+90
合计10001350+350+350

同一张表的两个比例口径:

渠道贡献度 C相对贡献 R
搜索−11.43%−4.00%
推荐+34.29%+12.00%
直播+51.43%+18.00%
私域+25.71%+9.00%
合计100%+35.00%

三个概念的定义和它们各自满足的恒等式:

概念记号定义恒等约束
绝对贡献Vᵢ因子 i 造成的绝对变化量ΣVᵢ = ΔY
贡献度Cᵢ因子 i 占这次变化的份额ΣCᵢ = 100%
相对贡献Rᵢ因子 i 的变化相当于基期大盘的多少ΣRᵢ = ΔY / Y⁰

三者的关系是 Vᵢ = Cᵢ × ΔY,Rᵢ = Vᵢ / Y⁰。对着上表验一遍:绝对贡献加起来 +350 = ΔGMV ✓;贡献度加起来 100% ✓;相对贡献加起来 35%,正好等于 GMV 的环比涨幅 350/1000 = 35% ✓。

方向约定:Cᵢ > 0 表示因子 i 与指标同向变动,Cᵢ < 0 表示反向。上表里搜索的 −11.43% 意思是"搜索拖了后腿”,它贡献的绝对贡献是 −40 万。

只看一个会误判。

Cᵢ(贡献度)回答的是"这次变化里,直播占多大份额”——适合回答"该盯谁"。但 Cᵢ 是无量纲的,一个占比 50% 的因子,可能对应的绝对变化只有几十块。

Vᵢ(绝对贡献)回答的是"直播到底带来了多少钱"——适合回答"值不值得投人投钱修"。

Rᵢ(相对贡献)回答的是"直播的变化相当于大盘多大比例"——适合跨期、跨业务线比较,因为它是相对于基期规模归一的。

实际汇报里最常见的错误,是拿贡献度去排资源优先级。搜索贡献度 −11.43%、私域 +25.71%,看起来私域是正向主力;但如果私域的绝对贡献只有 +90 万,而它对应的运营人力是直播的三分之一,那么"该投谁"的答案可能完全不同。三个口径要用,但不混用。

同样是"按维度拆开",能不能直接把各维度的值加起来,取决于指标在这个维度上的性质。这一节是选型的真正依据。

GMV 按省份拆开、订单量按渠道拆开,各部分互不重叠(MECE),加起来等于整体。这类指标用Delta 法直接拆,干净利落。上一节的表格就是。

活跃用户数按渠道拆开就不行——一个用户可能今天来过搜索、也来过推荐,各渠道 UV 加起来远大于总 UV。

处理半可加指标有两条路:

路线一:唯一化。 让每个用户只属于一个维度值。常见做法是首次触点归因(用户第一次来算搜索的)或末次触点归因(最后一次来算推荐的)。做法简单,但会把功劳全压在漏斗两端——第一次和最后之间发生了什么,全部被抹平了。

路线二:允许重叠,但用数学修正。 让各维度的影响相互耦合地参与分解,用 Shapley 值这类方法处理重叠部分。这条路在 第五篇 展开。

判断口径:如果各维度值加起来明显超过总量,就是半可加。

转化率、ROI、ARPU 这类比率型指标,在任何维度上直接相加都是错的——各分区的转化率加起来不等于整体转化率。

比率指标不能直接拆,但可以换表示。整体转化率其实是各人群转化率按人数加权的平均:

整体转化率 = Σ(人群 i 的转化率 × 人群 i 的占比)

这个式子里有两样东西会动:人群自己的转化率(自身性变化),人群占比(结构性变化)。把这两者分开量化,就是组间组内拆解法,第三篇 专门讲。

性质判断方法典型指标处理方式
可加各部分相加 = 整体GMV、订单量Delta 法直接拆
半可加各部分相加 > 整体跨渠道 UV唯一化,或 Shapley 修正
不可加各部分相加 ≠ 整体,且无意义转化率、ROI先换表示,再拆

这一步做错,后面全白干。 拿转化率套 Delta 法,会算出一个自相矛盾的结果——各人群转化率的贡献加起来,居然不等于整体转化率的变化。很多"归因结果对不上"的工单,根因就在这里。

拿到一个异动,第一反应不该是"开始拆",而是"先确认这确实是个需要解释的异动"。标准动作是五步,顺序不能换:

flowchart TB
    A["发现指标异动"] --> B["① 底层数据问题?
ETL 延迟 · 埋点丢失 · 上游表错位"] B -->|"是"| B1["找上游修复
归因到此结束"] B -->|"否"| C["② 口径变更?
定义调整 · 去重规则 · 统计范围"] C -->|"是"| C1["回溯口径生效时间
重算受影响区间"] C -->|"否"| D["③ 场外因素?
大促 · 节假日 · 舆情 · 竞对动作"] D -->|"是"| D1["拉长周期对比
量化外部影响"] D -->|"否"| E["④ 场内归因
按指标形态选方法"] E --> F["⑤ 结论与行动项
量化 · 到人 · 到周"]

①和②是最容易被跳过、也最致命的两步。 一次埋点字段改名,能让某渠道的 UV 凭空少 30%;一次"订单"改成"支付订单"的口径切换,能让 GMV 环比多出 8%。如果直接进入第 ④ 步,你会为一个不存在的问题做出一份看起来非常专业的归因报告——而且归因方法越高级,这份报告越有说服力,危害越大。

③场外因素要靠拉长周期来判断。如果把对比周期从"环比"换成"同比",异动消失了,那大概率是大促、节假日这类外部因素,不是场内出了问题。

⑤要给到人和动作。 “推荐渠道转化率下降"不是结论,“推荐渠道的详情页加载 P95 从 800ms 涨到 2.3s,定位到移动端首屏资源包未分包,建议 X 团队本周内出方案"才是结论。归因的价值在第 ⑤ 步兑现,前四步只是路径。

有一种情况容易被漏掉:指标持平,但底下的因子已经天翻地覆。

GMV 这月和上月都是 1000 万,看起来一切正常。但拆开看:客单价从 200 涨到 250(涨了 25%),销量从 5000 掉到 4000(跌了 20%)。两个一正一负刚好抵消。

这种"对冲型异动"更危险——因为大盘看起来正常,监控不会告警,但客单价涨 25% 通常意味着促销力度加大,销量跌 20% 说明需求透支了。指标异动的监控只盯着总量,会系统性地漏掉这一类。

所以归因不只在告警之后做,定期做。哪怕总量没动,拆解结果的剧烈变化本身也是信号。

到这里,框架已经齐了。落地时的问题是:手上这个指标,该用哪把刀?

方法适用指标形态可加性前提主要输出详见
Delta 法加法型可加各维度贡献度第二篇
LMDI 法乘法型可写成乘积各因子贡献度,无残差第二篇
定基代替 / 泰勒展开非线性有显式表达式边际贡献,含残差第二篇
组间组内拆解比率型不可加,需换表示自身性变化 + 结构性变化第三篇
链式拆解漏斗型乘法型特例各环节贡献度第四篇
Shapley 值多因素叠加允许重叠/交互各因素边际贡献第五篇
多触点权重路径型需唯一化渠道权重分配第五篇
马尔科夫链路径型需完整路径环节移除效应第六篇
Adtributor维度型(异常搜索)可加意外性排序 + 解释力第七篇

还有一张更快的速查表,按手上问题的形态查:

你手上的问题用什么
一个绝对量(GMV、订单量)掉了,想知道是哪个维度掉的Delta 法
一个乘积型指标(UV × 转化率 × 客单价)掉了LMDI
一个比率(转化率、ROI)掉了组间组内拆解
一个漏斗整体掉了,想知道哪一环链式拆解
几个活动同时在跑,想知道各自贡献Shapley 值
一个用户先搜后看评价再问客服,想知道各环节价值马尔科夫链
有几百个维度,想找出反常的那个(而不是贡献最大的)Adtributor
#篇目这一篇讲什么
01指标异动归因全景就是本文。框架、词汇、选型地图
02指标分解模型:加法、乘法与残差Delta、LMDI、定基代替,以及残差从哪来
03比率指标归因:组间组内拆解与辛普森悖论转化率、ROI 这类指标怎么拆
04漏斗拆解:定位是哪一环坏了贡献度和优化优先级不是一回事
05多因素叠加归因:Shapley 值与多触点权重多个因素同时作用,怎么分功劳
06路径归因:从首触末触到马尔科夫链用户走过的路,每一步值多少钱
07异常维度定位:Adtributor 的意外性与解释力在几百个维度里找到真正反常的那个

建议按顺序读一遍。第 02 篇是全系列的地基——贡献度怎么算、残差怎么处理,后面几篇都要用。

**归因分析的本质,是把 ΔY 拆成一组加起来等于 ΔY 的数。**拆完还要记得换算成"该找谁、该做什么”。

如果只能带走三句话:

  1. **先排除数据问题和口径变更,再谈归因。**顺序反了,你就是在给一个 bug 写一份很专业的分析报告。
  2. **指标能不能加,决定了用哪套方法。**比率指标套 Delta 法,结果必然对不上。
  3. **贡献度排序 ≠ 优化优先级。**前者回答"谁造成的变化大”,后者回答"该往哪投人",两者经常给出相反的答案——第四篇会用一个漏斗算例把这个差别量化出来。

相关内容