马尔可夫链归因分析:评估各渠道转化贡献
马尔可夫链归因分析:精准量化渠道转化贡献
在数字营销中,了解每个渠道对最终转化的真实贡献,是优化预算分配的关键。传统的“最后点击归因”等方法往往扭曲了渠道价值,而马尔可夫链归因提供了一种基于数据驱动、考虑用户完整旅程的解决方案。本教程将从零开始,带你深入理解并实操这一强大模型。
什么是营销归因?为什么需要它?
营销归因是指将转化(下单、注册、订阅等)的功劳分配给转化路径上各个触达点的过程。每个用户的购买前通常会经历多个渠道:社交广告点击、搜索引擎自然访问、邮件优惠券、直接输入网址等。合理分配功劳,才能正确评估ROI。
核心矛盾:如果一个用户先后通过“展示广告 → 付费搜索 → 邮件”后转化,功劳该给谁?
传统归因模型及其致命缺陷
最常见的几种规则归因模型,都有明显的归因偏差:
| 模型 | 逻辑 | 致命问题 |
|---|---|---|
| 首次互动归因 | 功劳100%归给第一个渠道 | 完全忽略后续助推作用,高估顶部渠道 |
| 最后互动归因 | 功劳100%归给转化前最后一个渠道 | 忽略认知与培育渠道,大部分误归因给品牌词/直接访问 |
| 线性归因 | 平均分配功劳 | 无差别对待,无法反映渠道真实影响力 |
| 时间衰减归因 | 越靠近转化,权重越大 | 人为设定衰减函数,缺乏数据支撑 |
| 基于位置归因 | 40%给首次和末次,20%均分给中间 | 依然是主观权重 |
共同弊病:这些模型完全忽略了路径中渠道之间的先后关系与转化概率变化。当用户走了“A → B → C”这样一个序列,移除A是否会影响最终转化?传统模型无法回答。
马尔可夫链归因:从概率视角看转化路径
基础概念:什么是马尔可夫链?
马尔可夫链描述了一个状态序列,其中每个状态转移的概率仅依赖于当前状态,而不依赖于过去的历史(无记忆性)。
在营销语境中,我们将“渠道接触”视为状态,用户可以在这两种特殊状态间转移:
- 转化(Conversion)
- 未转化 / 流失(Null / Drop-off)
所有用户路径最终都会进入这两个吸收状态之一。
一条典型的用户路径序列:
"开始" → 展示广告 → 付费搜索 → 邮件 → 转化
马尔可夫模型会从所有历史路径数据中,学习出渠道之间的转移概率矩阵。
模型构建三步法
-
收集所有转化与非转化路径
从原始Web/App日志中提取每个用户的触达序列,包括最终是否转化。例如:路径1: 社交 → 自然搜索 → 直接访问 → 转化路径2: 展示广告 → 流失路径3: 邮件 → 社交 → 转化
注意:通常将连续相同渠道合并,并对路径设置最大长度限制。
-
计算转移概率
统计每个状态(渠道)转移到下一个状态(包含转化/流失)的次数,计算概率。
例如,从“付费搜索”出发,出现100次,其中40次下一步去“直接访问”,30次去“流失”,30次去“转化”,则:- P(直接访问 | 付费搜索) = 0.4
- P(流失 | 付费搜索) = 0.3
- P(转化 | 付费搜索) = 0.3
-
构建概率图和转移矩阵
得到一个包含所有渠道节点、转化节点、流失节点以及它们之间的有向边和概率的图。
核心理念:移除效应(Removal Effect)计算渠道贡献
传统归因只数发生次数,马尔可夫链直接衡量如果一个渠道完全从用户旅程中抹去,整体转化率会下降多少。这就是移除效应。
具体算法步骤
-
计算原始总转化概率
在完整模型中,从开始状态出发,最终到达“转化”吸收态的概率。可通过求解吸收马尔可夫链的线性方程组得到,或者模拟随机游走。 -
逐个移除渠道
假设渠道C被移除,所有进入和离开C的边全部删除,重构转移矩阵。计算此时的新转化概率。 -
移除效应公式
渠道i的移除效应 = 1 - (移除i后的转化概率 / 原始总转化概率)
这个值介于0到1之间,数值越大说明该渠道越关键。 -
归一化为归因权重
将所有渠道的移除效应求和,每个渠道的归因权重 = 该渠道移除效应 / 所有渠道移除效应之和。
这样权重之和为1,可直接乘以总转化数或总转化价值,得到渠道贡献。
实战案例演示
假设我们有如下简化的用户路径数据(均已归并连续重复渠道):
开始 → 展示广告 → 自然搜索 → 转化(发生100次)开始 → 展示广告 → 流失(发生150次)开始 → 自然搜索 → 邮件 → 转化(发生80次)开始 → 自然搜索 → 流失(发生200次)开始 → 邮件 → 展示广告 → 自然搜索 → 转化(发生50次)开始 → 邮件 → 流失(发生120次)
第一步:构建转移次数矩阵
| 从 \ 到 | 展示广告 | 自然搜索 | 邮件 | 转化 | 流失 |
|---|---|---|---|---|---|
| 开始 | 100+150=250 | 80+200=280 | 50+120=170 | 0 | 0 |
| 展示广告 | 0 | 100 | 0 | 0 | 150 |
| 自然搜索 | 0 | 0 | 80 | 100+50=150 | 200 |
| 邮件 | 50 | 0 | 0 | 0 | 120 |
“开始”是虚拟起始节点,路径中每个渠道首次出现都由“开始”进入。
第二步:计算转移概率矩阵
将上面每个非零格除以该行总和:
-
开始总出发 250+280+170 = 700- P(展示广告|开始) = 250/700 ≈ 0.357
- P(自然搜索|开始) = 280/700 = 0.4
- P(邮件|开始) = 170/700 ≈ 0.243
-
展示广告总出发 100+150 = 250- P(自然搜索|展示广告) = 100/250 = 0.4
- P(流失|展示广告) = 150/250 = 0.6
-
自然搜索总出发 80+150+200 = 430- P(邮件|自然搜索) = 80/430 ≈ 0.186
- P(转化|自然搜索) = 150/430 ≈ 0.349
- P(流失|自然搜索) = 200/430 ≈ 0.465
-
邮件总出发 50+120 = 170- P(展示广告|邮件) = 50/170 ≈ 0.294
- P(流失|邮件) = 120/170 ≈ 0.706
第三步:计算原始转化率(模拟或求解)
吸收链中,可通过求解线性方程组 P_convert[start] 获得精确值。简化的近似方法:模拟100万次随机游走。
计算结果(示例):原始转化概率 ≈ 0.253。
第四步:计算移除效应
以移除 自然搜索 为例:删除所有与自然搜索相关的边。调整后的概率矩阵中,展示广告不能去自然搜索,自然搜索不能去邮件或转化等。重新计算得到新转化概率 ≈ 0.112。
移除效应(自然搜索) = 1 - 0.112/0.253 ≈ 0.557
类似地:
- 移除 展示广告:新转化率 0.174 → 移除效应 = 1 - 0.174/0.253 ≈ 0.312
- 移除 邮件:新转化率 0.208 → 移除效应 = 1 - 0.208/0.253 ≈ 0.178
第五步:归因权重分配
移除效应总和 = 0.557 + 0.312 + 0.178 = 1.047
- 自然搜索:0.557 / 1.047 ≈ 53.2%
- 展示广告:0.312 / 1.047 ≈ 29.8%
- 邮件:0.178 / 1.047 ≈ 17.0%
对比传统模型:最后点击归因会将大部分功劳给到直接转化前的渠道,而这里自然搜索和展示广告的真实推力被充分体现。
模型优势与局限
为什么选择马尔可夫链归因?
- 数据驱动,无主观偏见:仅基于实际路径和概率流转。
- 体现渠道相互作用:非线性,考虑了漏斗中渠道的序列依赖。
- 规避重复计算:通过概率图自动处理用户多次交互同一渠道。
- 科学衡量“助攻”渠道:展示广告虽不常直接转化,但移除后整体转化骤降,证明其价值。
需要注意的局限及应对方案
- 路径长度截断:过长的路径会使数据稀疏,通常限制在5-10步内。可结合业务设定。
- 小渠道冷启动:稀疏数据会导致转移概率不可靠,可采用贝叶斯方法加入先验或合并小渠道。
- 忽略时间衰减:标准马尔可夫链不考虑两次接触的时间间隔。可将时间分箱构造高阶模型,或后续用移除效应乘以时间衰减权重作为补充。
- 计算资源:渠道数量较大(>1000)时矩阵求解较慢,可用Google Analytics 4这类内置算法,或使用Python的
ChannelAttribution库优化。 - 路径定义:需要仔细清洗数据,定义会话、渠道分组逻辑,否则“直接访问”“付费搜索”等边界模糊会影响结果。
如何在实际项目中落地?
- 数据准备:从数据仓库提取用户级时间序列的渠道触碰数据,每条记录包含用户ID、时间戳、渠道、转化标志。形成序列后,组织为模型输入格式。
- 工具选择:
- R语言:
ChannelAttribution包提供了markov_model()函数。 - Python:
ChannelAttribution的Python版,或自行用numpy构建转移矩阵并求解吸收概率。 - 云端方案:Google Analytics 360中的“数据驱动归因”底层即为马尔可夫链变体。
- R语言:
- 调参与验证:处理缺失路径、测试不同归因窗口、移除效应归一化后定期与业务团队复盘,确保结果合理。
- 与业务结合:归因结果乘以收入,按周期生成渠道贡献报告,反哺预算优化。
马尔可夫链归因将转化路径从“功劳分配游戏”升维为概率因果推断。掌握它,你将告别拍脑袋的归因权重,用真实数据驱动增长。