跨天归因模型详解

归因是增长分析里最容易踩坑、也最容易讲出差异化的话题。本文从理想汽车的实际问题出发,系统讲解四种归因模型及其选择逻辑。


什么是跨天归因

归因要解决的问题:一笔转化(下单、成交、激活),应该"归功"于哪个渠道或触点?

之所以叫"跨天归因",是因为用户从第一次接触到最终转化,往往跨越多天甚至多周。这段时间里,用户可能接触了多种渠道:

这笔订单,应该归给广告、好友分享,还是 Push?不同的归因模型给出不同答案,进而影响渠道预算分配和运营策略优化方向。


理想汽车的场景

汽车购买决策周期普遍在 3-6 个月,理想 L6/L7/L9 的主要客群决策周期甚至更长。

一个典型路径:

  1. 2 月:用户在抖音刷到理想 L7 广告,点了进来(曝光触点 #1)
  2. 3 月:用户参加成都车展,扫码留资(线下触点 #2)
  3. 4 月:销售打了 3 次电话邀约,用户到店试驾(线下触点 #3/#4/#5)
  4. 5 月初:用户点击微信公众号推文后成交(线上触点 #6)

这笔订单:


四种归因模型对比

模型 1:末次触达归因 (Last Touch)

规则:转化前最后一次触点获得 100% 归因。

优点

缺点

适用场景

-- 末次触达归因核心逻辑
ROW_NUMBER() OVER (
    PARTITION BY user_id, order_id
    ORDER BY event_time DESC  -- 最近的触点排第 1
) AS touch_rank
-- WHERE touch_rank = 1 即末次触达

模型 2:首次触达归因 (First Touch)

规则:转化前第一次触点获得 100% 归因。

优点

缺点

适用场景

ROW_NUMBER() OVER (
    PARTITION BY user_id, order_id
    ORDER BY event_time ASC  -- 最早的触点排第 1
) AS touch_rank
-- WHERE touch_rank = 1 即首次触达

模型 3:线性归因 (Linear)

规则:所有触点平均分配归因权重,每个触点得到 1/N 的功劳。

优点

缺点

适用场景

-- 线性归因:每个触点权重 = 1 / 触点总数
1.0 / COUNT(*) OVER (PARTITION BY user_id, order_id) AS linear_weight

模型 4:时间衰减归因 (Time Decay)

规则:越接近转化的触点,获得越高的归因权重。通常使用指数衰减,半衰期可配置(常用 7 天)。

权重计算

weight = (0.5) ^ (days_before_conversion / half_life)

如果半衰期 = 7 天:

每个订单的所有触点权重归一化后,分配对应比例的 GMV。

优点

缺点

适用场景

-- 时间衰减归因:指数衰减权重
POW(0.5, DATEDIFF(order_date, event_date) / 7.0) AS decay_weight
-- 归一化后用于分配 GMV

四种模型结果对比示例

以下面这个路径为例:

| 触点 | 渠道 | 距下单天数 | |---|---|---| | Touch 1 | 抖音广告 | 第 -20 天 | | Touch 2 | 社交分享 | 第 -10 天 | | Touch 3 | Push | 第 -1 天 |

| 模型 | 抖音广告 | 社交分享 | Push | |---|---|---|---| | 末次触达 | 0% | 0% | 100% | | 首次触达 | 100% | 0% | 0% | | 线性归因 | 33.3% | 33.3% | 33.3% | | 时间衰减(7天) | 7.7% | 22.3% | 70% |

时间衰减下,Push 权重最高(70%),但抖音广告和社交分享也获得了一定归因,不会被完全忽略。


归因窗口的选择

归因窗口 = "从触点到转化,最多算多少天内的触点"。

| 业务类型 | 建议归因窗口 | 理由 | |---|---|---| | 快消品 / 日用品 | 7-14 天 | 决策快,窗口长了引入噪音 | | 服装 / 数码 | 30 天 | 中等决策周期 | | 汽车 / 房产 | 90-180 天 | 长决策周期,短窗口会漏掉早期触点 | | SaaS B2B | 60-90 天 | 企业采购周期长 |

在理想,我们用的是 90 天归因窗口,因为很多用户是 2 月看广告、5 月成交的。如果用 30 天窗口,就完全无法衡量品牌广告的长期价值。


归因的边界:什么不能归因

归因模型只能处理有记录的触点。以下情况是归因的盲区:

1. 线下触点缺失:用户在线下看到户外广告、在朋友口头推荐下来购买,这些触点没有数字记录,无法纳入归因。在汽车行业这是常态,所以数字归因结果往往高估线上渠道的价值。

2. 跨设备身份断裂:用户在手机上看了广告,在 PC 端下单,但两个设备没有登录同一账号,触点和转化无法关联。

3. 有效触点和无效曝光的区分:广告展示给用户但用户根本没看到(广告位在首屏外),算不算触点?通常用"Viewable Impression"代替"Impression"作为触点标准,但实现成本高。


实际工作中如何选归因模型

不存在"最正确"的归因模型,只有"最适合你业务问题"的模型。

选择框架:

  1. 决策周期 < 7 天:末次触达足够,简单清晰,沟通成本低
  2. 决策周期 7-30 天:时间衰减是较好的默认选项
  3. 决策周期 > 30 天:线性或时间衰减(长半衰期),且需要更长的归因窗口
  4. 评估品牌广告投入:首次触达,因为品牌广告的价值在于"打开认知"
  5. 评估转化促进效果:末次触达,聚焦于"临门一脚"的渠道

实践建议:同时跑两种模型(如末次 + 时间衰减),对比结论是否一致。如果两种模型下渠道排名一致,结论更可信;如果排名出现大反转,说明不同渠道扮演不同角色,需要深入分析。


跨天归因的 SQL 实现要点

完整的 SQL 实现见 workflow/attribution-sql-cookbook.md,这里只说关键逻辑点:

1. JOIN 方向:从订单出发往前找触点(而不是从触点出发往后找订单),可以保证每笔订单都有归因结果。

2. 时间过滤event_time <= order_date 确保只看下单前的触点,避免把下单后的行为当成触点。

3. 去重:同一用户同一天在同一渠道的多次触点,通常只算一次(避免重复刷广告被当成多个触点)。

4. NULLIF 保护:权重归一化时,如果某笔订单的触点权重之和为 0,会触发除零错误,需要 NULLIF(sum_weight, 0) 保护。


求职视角:这段经验为何有价值

| JD 要求 | 归因经验如何覆盖 | |---------|---------------| | 深度参与公司核心业务,协同业务经营目标 | 归因模型直接影响渠道预算分配——选错模型=每年几十万的投放预算投错地方 | | 将业务语言转化为数据与AI解决方案 | 归因是典型的"业务直觉("抖音广告有用")→ 数据验证("首次触达贡献了 40% 转化")" | | 推动数据在业务中的实际落地 | 归因模型的结果直接指导投放团队的出价策略和渠道配比 |

面试叙事

在理想汽车,我们面对的核心问题是:用户从看广告到买车可能花 6 个月,中间经过抖音广告、车展留资、销售电话、到店试驾、公众号推文等 5-10 个触点。如果用常见的 30 天末次触达归因,品牌广告的价值会被完全低估。

我推动将归因窗口从 30 天扩展到 90 天,并引入时间衰减模型(半衰期 30 天),让早期品牌触点和晚期转化触点都能获得合理的功劳分配。这个改动直接影响了千万级投放预算的渠道分配决策。

这段经历让我掌握了归因模型的选择逻辑——不是找一个"最准确"的模型,而是选择最匹配业务特征(决策周期、触点密度、数据完整度)的模型,并用两种模型的交叉验证来提高结论可信度。

延伸阅读