1. 马尔可夫链
马尔可夫链是一个过程,它映射运动并给出概率分布,从一个状态转移到另一个状态。马尔可夫链由三个属性定义:
- 状态空间:处理可能存在的所有状态的集合
- 转移概率:从一个状态转移到另一个状态的概率
- 当前状态分布 - 在过程开始时处于任何一个状态的概率分布
那么用户行为路径中的每个渠道可以看作这里的每个状态。在知道状态空间的情况下,所求的渠道贡献率就是每条路径的转移概率。所以马尔可夫链模型可以用来做归因分析。
2. 基于马尔可夫链的归因分析原理

图 1 启发式归因方法
马尔科夫模型确定用户从序列A转换到序列B的概率。这些序列的内容由马尔科夫阶数决定,马尔科夫阶数从 0 到 4。以下面的例子为例:
- 0 阶:不知道用户来自哪里,也不知道用户的步骤,只知道访问任何页面的概率。
- 1 阶:返回0步。用户现在在 A。去任何地方的概率基于在那个步骤。
- 2 阶:向后一个阶段。用户来自 A,目前处于 B。去任何地方的概率取决于用户在哪个阶段。
- 3 阶:向后两个阶段。用户来自 A > B,目前处于 C。去任何地方的概率取决于用户在哪个阶段。
- 4 阶:返回三个阶段。用户来自于 A > B > C,现在是 D。
假设用户X的步骤如下:A > B > C > D > E > F > G. 4 阶马尔可夫模型会显示用户 X 来自 A(A> B > C > D),然后经过序列 B (B > C > D > E),再到序列 C (C > D > E > F),等等,直到用户 X 退出或转换。马尔可夫模型这里的阶数参数决定了用户现在的状态或所处阶段是由过去几个阶段决定的。但是这里决定阶数比较困难,一种方法是通过将设置多个阶数模型来绘制训练模型的误差,选取误差小的模型,从而确定模型的阶数。

图 2 用户路径
在上述情况下,客户可以通过渠道 'C1' 或渠道 'C2' 开始他们的路径。以 C1 或 C2 开始的概率为 50%(或0.5)。我们首先计算转换的总体概率,然后进一步查看每个渠道的影响。
P(转换)= P(C1→C2→C3→转换)+ P(C2→C3→转换)
= 0.5 * 0.5 * 1 * 0.6 + 0.5 * 1 * 0.6
= 0.15 + 0.3
= 0.45
如果要弄清楚渠道 C1 在用户转化路径中的贡献,使用移除效应原则。即如果想要在用户路径中找到某个渠道的贡献,可以通过删除该渠道并查看在没有该渠道的情况下发生了多少次转化。
P(去除C1后的转换)= P(C2→C3→转换)
= 0.5 * 1 * 0.6
= 0.3
30% 的用户互动可以在没有渠道 C1 的情况下进行转换; 而 C1 完好无损,45% 的互动可以转换。所以,C1的移除效应是0.3 /0.45= 0.67。C2 和 C3 的移除效应可以直接得出为 1。那么渠道 C1 贡献度为 0.67/(0.67+1+1)=25%, 同理 C2=C3=37.5%。
这是马尔可夫链的一个非常有用的应用。在上述情况下,所有渠道 C1,C2,C3(在不同阶段)被称为转换状态 ; 而从一个渠道转移到另一个渠道的概率称为转移概率。用户路径是由一系列渠道组成的,可以看作是一个有向马尔可夫图中的一个链,其中每个顶点都是一个状态(渠道),每条边表示从一个状态移动到另一个状态的转移概率(渠道转化率)。由于到达状态的概率仅取决于以前的k阶状态,因此可以将其视为无记忆马尔可夫链。
上面每条路径中的具体转化率怎么通过由用户路径和转化数据计算得到的呢?比如有以下的用户转化路径,那么在这个马尔可夫链中,START、A、B 和 CONVERSION 为状态空间。

图 3 每个状态之间的转移次数
通过统计每个状态之间的转移次数,即可画出上一个例子中的转化图(下图左图)。计算移除效应,当去除渠道 A 时,无法转化,因此渠道 A 的移除效应为 1,而 B 的移除效应为 0.5(由下图左图简化为右图得出),因此 3 次转化结果中,渠道 A 贡献为 2 次转化,渠道 B 贡献转化 1 次。

图 4 转化图
3. R 语言实现营销渠道归因分析

图 5 转化行为路径
## markov_model attribution library(ChannelAttribution) library(reshape) library(ggplot2) # This loads the demo data. data(PathData) # 启发式模型 H <- heuristic_models(Data, 'path', 'total_conversions' , var_value='total_conversion_value') # 马尔可夫模型 M <- markov_model(Data, 'path', 'total_conversions' , var_value='total_conversion_value', order = 1) R <- merge(H, M, by='channel_name') # Selects only relevant columns R1 <- R[, (colnames(R)%in%c('channel_name' , 'first_touch_conversions' , 'last_touch_conversions' , 'linear_touch_conversions' , 'total_conversion'))] # Renames the columns colnames(R1) <- c('channel_name', 'first_touch' , 'last_touch', 'linear_touch', 'markov_model') R1 <- melt(R1, id='channel_name') ggplot(R1, aes(channel_name, value, fill = variable)) + geom_bar(stat='identity', position='dodge') + ggtitle('TOTAL CONVERSIONS') + theme(axis.title.x = element_text(vjust = -2)) + theme(axis.title.y = element_text(vjust = +2)) + theme(title = element_text(size = 16)) + theme(plot.title=element_text(size = 20)) + ylab("")

图 6 各模型总转化次数各渠道贡献情况
R2 <- R[, (colnames(R)%in%c('channel_name' , 'first_touch_value' , 'last_touch_value' , 'linear_touch_value' , 'total_conversion_value'))] colnames(R2) <- c('channel_name', 'first_touch' , 'last_touch', 'linear_touch', 'markov_model') R2 <- melt(R2, id='channel_name') ggplot(R2, aes(channel_name, value, fill = variable)) + geom_bar(stat='identity', position='dodge') + ggtitle('TOTAL VALUE') + theme(axis.title.x = element_text(vjust = -2)) + theme(axis.title.y = element_text(vjust = +2)) + theme(title = element_text(size = 16)) + theme(plot.title=element_text(size = 20)) + ylab("")
“转化价值”条形图展示了每个模型的每个渠道的转化价值收益(比如货币),紫色条形图为 markov model,其他三个为启发式算法模型。分析图形可以发现 markov model 得到的结果中 alpha 渠道的价值贡献上并没有像启发式算法分析得那么重要。而 epsilon、lambda、theta 和 zeta 比简单的启发式有更重要的价值贡献。

图 7 各模型转化价值各渠道贡献情况
最后得到转移矩阵,即第二点例子中的转化路径图,每个渠道的转化率即为转移概率,比如第一条路径从开始状态到渠道1(eta)的转化率为 0.157。将得到的转移矩阵再用来计算每个渠道的移除效应,也可得到每个渠道的贡献度。
# 转移概率矩阵 T <- transition_matrix(Data, 'path', 'total_conversions' , 'total_conversion_value', order=1, sep=">",flg_equal=TRUE)

图 8 各渠道转化贡献度
4. 学习资料
- 论文推荐:《Mapping the Customer Journey: A Graph-Based Framework for Online Attribution Modeling》一文直接全面清晰地讲解了马尔可夫链对营销渠道归因建模的原理和求解的过程。
- R语言ChannelAttribution库
- 参考博客:https://blog.csdn.net/qq_19600291/java/article/details/79531623
- https://www.slideshare.net/adavide1982/markov-model-for-the-multichannel-attribution-problem

评论