代码
library(ChannelAttribution)
data("PathData")
# 简化问题仅取2条数据
<- Data[c(4, 8), ]
PathData
PathData
path | total_conversions | total_conversion_value | total_null | |
---|---|---|---|---|
4 | beta > eta | 1 | 2.402 | 3 |
8 | beta > iota > kappa | 1 | 6.820 | 2 |
不止BI
2024年2月4日
当企业运用多元的在线营销渠道触及消费者时,理解各个渠道对营销成效的贡献至关重要。同样,当用户浏览APP时,分析哪些功能模块对促进用户转化有决定性影响也同样重要。这些分析被称为归因分析。
ChannelAttribution包提供了四种流行的归因模型:首次接触归因、最后接触归因、线性归因以及马尔可夫归因,帮助营销人员优化他们的营销策略。
path | total_conversions | total_conversion_value | total_null | |
---|---|---|---|---|
4 | beta > eta | 1 | 2.402 | 3 |
8 | beta > iota > kappa | 1 | 6.820 | 2 |
首次归因:这个模型将全部功劳归于用户转化路径上的第一个接触点。它假设最初的接触点是最重要的,因为它引起了用户的兴趣。
末次归因:与首次归因相反,末次归因模型将全部功劳归于转化前的最后一个接触点。这种模型认为,最后一个接触点是最关键的,因为它直接导致了转化。
线性归因:线性归因模型将功劳平均分配给用户转化路径上的每一个接触点。这种模型认为,每个接触点都同等重要,对用户的转化都有贡献。
channel_name | first_touch_conversions | first_touch_value | last_touch_conversions | last_touch_value | linear_touch_conversions | linear_touch_value |
---|---|---|---|---|---|---|
beta | 2 | 9.222 | 0 | 0.000 | 0.8333333 | 3.474333 |
eta | 0 | 0.000 | 1 | 2.402 | 0.5000000 | 1.201000 |
iota | 0 | 0.000 | 0 | 0.000 | 0.3333333 | 2.273333 |
kappa | 0 | 0.000 | 1 | 6.820 | 0.3333333 | 2.273333 |
马尔可夫归因是一种多渠道归因分析方法,它使用马尔可夫链来模拟用户通过不同渠道或接触点的转化路径。在这个模型中,每个渠道被视为一个状态,而用户从一个状态转移到另一个状态的概率构成了转移概率矩阵。马尔可夫归因的核心思想是移除效应,即通过移除某个渠道来观察对整体转化率的影响,从而评估该渠道的贡献度。
马尔可夫归因分析的步骤通常包括:
定义状态空间:确定所有可能的渠道状态。
构建转移概率矩阵:计算用户从一个渠道状态转移到另一个状态的概率。
[1] "*** Looking to run more advanced attribution? Try ChannelAttribution Pro for free! Visit https://channelattribution.io/product"
channel_map <- setNames(trans_matrix$channels$channel_name, trans_matrix$channels$id)
channel_map <- c(c("(start)" = "(start)", "(conversion)" = "(conversion)", "(null)" = "(null)"), channel_map)
trans_matrix_maped <- trans_matrix$transition_matrix
trans_matrix_maped$channel_from <- channel_map[trans_matrix_maped$channel_from]
trans_matrix_maped$channel_to <- channel_map[trans_matrix_maped$channel_to]
library(visNetwork)
nodes <- data.frame(id = channel_map, label = channel_map)
edges <- data.frame(
from = trans_matrix_maped$channel_from, to = trans_matrix_maped$channel_to,
label = sprintf("%.2f%%", trans_matrix_maped$transition_probability * 100)
)
visNetwork(nodes, edges, width = "100%") |>
visEdges(arrows = "to")
整体转化率为\(100.0\%*57.14\%*25.00\% + 100.0\%*42.86\%*100.0\%*33.33\% =28.57\%\)
计算移除效应:移除某个渠道,观察转化率的变化,以评估渠道贡献。移除beta转化率为0,beta的移除效应为1;移除eta后转化率为14.28%,移除eta的移除效应为1-(14.28524%/28.57%) = 0.5067356;移除iota和kappa的移除效应均为1 - (14.285%/28.57%) = 0.5
计算渠道贡献度:基于移除效应,分配转化功劳给各个渠道。beta的渠道贡献度为 1 / (1 + 0.5067356 + 0.5 + 0.5 ) = 0.3989252,再乘上总转化订单2单,就可以得到beta对总转化订单的贡献
Number of simulations: 100000 - Convergence reached: 1.94% < 5.00%
Percentage of simulated paths that successfully end before maximum number of steps (4) is reached: 99.99%
[1] "*** Looking to run more advanced attribution? Try ChannelAttribution Pro for free! Visit https://channelattribution.io/product"
channel_name | total_conversion | total_conversion_value |
---|---|---|
beta | 0.7978504 | 3.3599393 |
eta | 0.3935511 | 0.8578179 |
iota | 0.4042993 | 2.5021214 |
kappa | 0.4042993 | 2.5021214 |