
聊聊多触点归因的 Poisson 过程模型:从入门到上手,其实没那么玄乎
说真的,每次跟人聊到“多触点归因”(Multi-Touch Attribution, MTA),我脑子里总会浮现出那种会议室里大家一脸严肃,PPT上全是复杂公式的场景。尤其是当“Poisson 过程”这个词一出来,很多人下意识就觉得:完了,这得是数学系博士才能碰的东西。
但咱们今天换个聊法。别紧张,咱不搞学术报告,就当是在咖啡馆里闲聊,我把我怎么理解这个模型、怎么一步步把它用起来的思路,掰开揉碎了讲给你听。这东西确实有门槛,但一旦你摸到门道,你会发现它对理解用户行为、优化营销预算的帮助,简直像是给你的营销策略装了个“高精度导航”。
先搞明白:我们到底在解决什么问题?
在聊模型之前,得先说清楚我们为啥需要它。传统的归因模型,比如“末次点击归因”(Last Click),大家都很熟悉吧?用户最后点哪个广告下单,功劳就全算给谁。这方法简单粗暴,但问题也显而易见:它完全忽略了用户在下单前可能看过的一系列内容——可能是一篇博主推荐、一条朋友圈广告、一次搜索结果。这些前期的“铺垫”工作,就这么被一笔勾销了。
反过来,“首次点击归因”(First Click)又只认第一个接触点。这也不公平,万一用户是第一次被你广告吸引,但中间看了好多竞品对比,最后才下决心买你呢?中间那些对比的内容就没功劳了?
所以,我们需要一个更公平、更接近真实决策过程的模型。多触点归因就是干这个的。而 Poisson 过程模型,就是实现这个目标的一个非常有力的数学工具。它不凭感觉,而是基于用户行为发生的“概率”和“时间间隔”来分配功劳。
Poisson 过程模型到底是个啥?用大白话翻译一下
咱们先忘掉那些复杂的数学定义。你想象一下,用户的行为——比如点击广告、浏览网站、加购、最终购买——就像是在一个时间轴上随机掉落的小石子。

Poisson 过程的核心思想,就是假设这些“石子”(事件)的出现不是杂乱无章的,而是遵循某种统计规律。具体来说,它有几个关键假设,虽然在现实中不完全成立,但作为模型起点已经足够好用:
- 独立性:用户在某个时间点点击广告,和他半小时后搜索关键词,这两个事件在模型眼里可以看作是相对独立的(当然,真实世界有连续性,但模型做了简化)。
- 平稳性:在任何相同长度的时间段内,用户发生某个行为(比如点击)的概率是恒定的。比如,早上10点到11点,和下午3点到4点,用户点击你广告的概率可能差不多(当然,实际情况会有波动,但模型先这么假设)。
- 无后效性:也就是“不记仇、不记恩”。用户刚点过一次广告,对他下一次点击的概率没有影响。这听起来反直觉,但对简化计算至关重要。
在归因模型里,我们通常把用户的购买行为看作是一个“终点事件”。而之前的所有营销触点,都是“过程事件”。Poisson 过程模型要做的,就是估算每个“过程事件”对最终“终点事件”发生的贡献概率。
举个例子:用户A的路径是 搜索广告 -> 看到博主视频 -> 点击信息流广告 -> 购买。模型会计算,如果没有“搜索广告”这个触点,用户最终购买的概率会降低多少?这个降低的部分,就是“搜索广告”的功劳。同理,再算“博主视频”的功劳……最后把所有触点的功劳加起来,应该等于100%。
核心步骤拆解:一步一步来,别慌
好了,理论铺垫得差不多了,咱们进入实操环节。这部分是重点,我会把整个应用步骤拆解成你能直接上手操作的样子。
第一步:数据准备——打好地基
任何模型都是垃圾进、垃圾出(Garbage In, Garbage Out)。Poisson 过程模型对数据的要求,比传统模型要高一些。你需要准备两样核心数据:

- 用户路径序列(User Journey Sequences):你需要把每个转化用户(最终购买或注册的人)在转化前的所有触点按时间顺序串起来。格式大概是这样:用户ID,触点1(时间戳),触点2(时间戳)……触点N(时间戳),最终转化(时间戳)。
- 触点类型定义:你需要明确把触点分类。比如:付费搜索(Paid Search)、自然搜索(Organic Search)、社交媒体广告(Social Ads)、邮件营销(Email)、直接访问(Direct)等等。分类越清晰,后面分析越有洞察。
一个常见的坑: 很多公司的数据是散落在不同部门的。广告数据在广告后台,网站数据在GA里,CRM数据在销售系统里。第一步最耗时的工作,就是把这些数据打通,拉到同一张表里。这活儿不酷,但躲不掉。
第二步:模型选择与简化——别从零造轮子
理论上,你可以用完整的、考虑时间间隔的 Poisson 过程模型。但在实际应用中,为了计算效率和稳定性,我们通常会用它的简化版本,或者叫“变种”。其中最常用、也最容易实现的是基于 马尔可夫链(Markov Chain) 的思想,它和 Poisson 过程在描述状态转移概率上是相通的。
不过,为了贴合我们今天的主题,我们还是聚焦在 Poisson 框架下的一个经典思路:基于事件发生率的贡献度计算。
核心逻辑是:假设每个触点类型都有一个“强度”(Intensity),这个强度决定了它推动用户向下一个状态(包括最终转化)转移的可能性。这个强度,就是我们要估计的参数。
第三步:参数估计——让数据说话
这是模型的“心脏”。我们需要根据准备好的用户路径数据,来估算每个触点类型的“强度”参数。
在 Poisson 模型里,一个关键的概念是 似然函数(Likelihood Function)。简单说,就是我们假设一套参数值,然后看这套参数值生成我们观测到的这些用户路径的概率有多大。我们想要找到那套参数,让这个概率最大。
具体操作上,通常会用到数值优化算法,比如 期望最大化算法(Expectation-Maximization, EM) 或者梯度下降。这部分听起来很技术,但现在很多数据分析软件(比如 Python 里的 scikit-learn 或者专门的 MTA 软件)已经封装好了这些算法。你要做的,是把数据喂给它,然后让它跑出来结果。
举个简化版的计算思路(非完整代码,只为说明逻辑):
# 伪代码思路
# 假设我们有用户路径数据 user_paths
# 1. 初始化每个触点类型的强度参数 lambda (随机猜一个初始值)
lambda_params = {'Paid Search': 0.5, 'Social Ads': 0.5, 'Email': 0.5}
# 2. 迭代优化
for i in range(num_iterations):
# 计算当前参数下,每个触点对转化的贡献概率
# 这里会用到 Poisson 分布的概率质量函数 P(k events in interval) = (lambda^k * e^-lambda) / k!
# 对于归因,我们更关心的是事件发生的速率 lambda
# 计算每个用户路径的似然值
# 对于路径 A -> B -> Convert,我们需要计算 P(A发生) * P(B在A后发生) * P(Convert在B后发生)
# 这些概率都和 lambda 有关
# 根据所有用户的路径数据,更新 lambda 参数
# 目标是让所有路径的总似然值最大化
new_lambda = update_step(data, lambda_params)
lambda_params = new_lambda
# 如果参数变化很小,就停止迭代
if converged:
break
# 3. 输出最终的强度参数
print(lambda_params)
跑完这一步,你会得到每个触点类型的一个“强度”值。这个值越大,说明它在推动用户转化上的“能力”越强。
第四步:归因权重分配——把功劳量化
有了上面估算出的“强度”参数,我们就可以给具体的用户路径分配权重了。
对于一个具体的用户路径,比如 触点A -> 触点B -> 触点C -> 购买,每个触点的功劳怎么算?
一个直观的思路是:触点的功劳,等于它“出现”并“推动”了后续转化的贡献。我们可以用条件概率来思考:
- 触点C的功劳:它最接近转化,所以它直接“触发”转化的概率很高。这个概率和它的强度 lambda_C 直接相关。
- 触点B的功劳:它不仅自己有强度 lambda_B,更重要的是,它把用户带到了触点C的状态。所以它的功劳是 lambda_B * (后续路径成功的概率)。
- 触点A的功劳:同理,它开启了整个链条,它的功劳是 lambda_A * (后续B和C都成功推动转化的概率)。
更严谨的 Poisson 过程模型会考虑时间间隔。两个触点之间的时间间隔越长,说明用户的“犹豫”或“思考”时间越长,前一个触点的“衰减”效应可能就越大。模型会通过时间差 t 来调整贡献度。比如,一个触点发生后,如果用户在很短时间内就发生了下一次触点或转化,说明这个触点的“推力”很强,权重就应该更高。
最终,对于每个触点,我们会计算出一个归因分数(Attribution Score)。所有触点的分数加起来,等于这次转化的总价值(比如1个订单)。
第五步:验证与迭代——模型不是一劳永逸的
模型跑出来了,别急着用。你得验证一下它靠不靠谱。
怎么验证?
- 回测(Backtesting):用一部分历史数据来训练模型,用另一部分历史数据来测试。看看模型预测的转化路径和实际发生的转化路径有多大差异。如果模型预测的“高贡献触点”和实际业务中你觉得重要的触点吻合,那说明模型有道理。
- 业务直觉:把模型算出来的权重,拿给你的市场同事、销售同事看。比如,模型说“邮件营销”的权重特别高,但你们明明觉得最近邮件效果一般。这时候别急着否定模型,先去查数据:是不是邮件数据追踪有误?或者模型捕捉到了某种你没注意到的规律(比如邮件唤醒了老用户)?
- A/B 测试:这是最硬核的验证。根据模型的洞察,调整预算分配。比如,模型说“社交媒体广告”在路径前端作用巨大,那你就把一部分预算从“末次点击”渠道挪到社交媒体上,然后看整体转化率是不是真的提升了。如果提升了,模型就验证成功了。
模型不是一次性的,用户行为在变,市场环境在变,你需要定期(比如每季度)用新数据重新训练模型,让它保持“新鲜度”。
一个具体的案例场景
假设你是一家在线教育公司的营销经理,卖一门 Python 编程课。
你发现,很多用户最终下单前,都经历了这样一个路径:看到信息流广告 -> 搜索品牌词 -> 看到再营销广告 -> 下单。
用末次点击归因,功劳全给了“再营销广告”。你觉得不对劲,因为“信息流广告”和“搜索品牌词”看起来也很重要。
你用 Poisson 过程模型分析后,得到了这样的结果:
| 触点类型 | 强度参数 (Lambda) | 归因权重 (示例) | 洞察 |
|---|---|---|---|
| 信息流广告 (Discovery) | 0.8 | 35% | 这是“点火者”,虽然不直接带来转化,但没有它,后续转化概率大幅下降。 |
| 搜索品牌词 (Consideration) | 0.6 | 25% | 用户主动搜索,说明兴趣浓厚,是关键的“意向确认”环节。 |
| 再营销广告 (Conversion) | 1.2 | 40% | 确实推动力最强,直接促成了转化。 |
有了这个结果,你的策略就清晰了:
- 不能砍掉信息流广告预算,虽然它直接转化率低,但它是整个转化漏斗的入口。
- 要优化品牌搜索词的落地页,因为用户到这里意向已经很高,别让页面拖后腿。
- 再营销广告的创意可以更激进一些,比如直接放优惠券,因为它是临门一脚。
写在最后的一些心里话
应用 Poisson 过程模型做多触点归因,技术上确实有挑战,尤其是数据准备和参数估计部分。但它的核心价值,不在于公式有多漂亮,而在于它强迫我们从“单点思维”转向“系统思维”。
它让我们看到,用户的决策是一个连续的、受多种因素影响的过程。每个触点,无论看起来多么微小,都在这个连续的“时间流”里扮演着自己的角色。Poisson 过程模型,就是帮我们把这个“时间流”里的贡献,用概率的语言翻译出来。
别指望一次建模就能一劳永逸。先从最简单的数据整理开始,哪怕先用个简化的加权模型,也比只看末次点击强。慢慢积累数据,慢慢迭代模型,你会发现,你对营销效果的理解,会越来越接近真相。
这事儿急不得,得有耐心,就像煲汤一样,火候到了,味道自然就出来了。









