归因分析

归因分析
数据分析
R语言
运用归因分析渠道贡献
作者

不止BI

发布于

2024年2月4日

当企业运用多元的在线营销渠道触及消费者时,理解各个渠道对营销成效的贡献至关重要。同样,当用户浏览APP时,分析哪些功能模块对促进用户转化有决定性影响也同样重要。这些分析被称为归因分析。

ChannelAttribution包提供了四种流行的归因模型:首次接触归因、最后接触归因、线性归因以及马尔可夫归因,帮助营销人员优化他们的营销策略。

代码
library(ChannelAttribution)
data("PathData")
# 简化问题仅取2条数据
PathData <- Data[c(4, 8), ]

PathData
path total_conversions total_conversion_value total_null
4 beta > eta 1 2.402 3
8 beta > iota > kappa 1 6.820 2

启发式模型

  • 首次归因:这个模型将全部功劳归于用户转化路径上的第一个接触点。它假设最初的接触点是最重要的,因为它引起了用户的兴趣。

  • 末次归因:与首次归因相反,末次归因模型将全部功劳归于转化前的最后一个接触点。这种模型认为,最后一个接触点是最关键的,因为它直接导致了转化。

  • 线性归因:线性归因模型将功劳平均分配给用户转化路径上的每一个接触点。这种模型认为,每个接触点都同等重要,对用户的转化都有贡献。

代码
H <- heuristic_models(
  Data = PathData, var_path = "path", var_conv = "total_conversions",
  var_value = "total_conversion_value", sep = ">"
)
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

马尔可夫归因

马尔可夫归因是一种多渠道归因分析方法,它使用马尔可夫链来模拟用户通过不同渠道或接触点的转化路径。在这个模型中,每个渠道被视为一个状态,而用户从一个状态转移到另一个状态的概率构成了转移概率矩阵。马尔可夫归因的核心思想是移除效应,即通过移除某个渠道来观察对整体转化率的影响,从而评估该渠道的贡献度。

马尔可夫归因分析的步骤通常包括:

  • 定义状态空间:确定所有可能的渠道状态。

  • 构建转移概率矩阵:计算用户从一个渠道状态转移到另一个状态的概率。

代码
# 转移矩阵
trans_matrix <- transition_matrix(
  Data = PathData, var_path = "path", var_conv = "total_conversions",
  var_null = "total_null",
  sep = ">", flg_equal = TRUE
)
[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对总转化订单的贡献

代码
markov_model(
  Data = PathData, var_path = "path", var_conv = "total_conversions",
  var_value = "total_conversion_value", var_null = "total_null",
  sep = ">"
)

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
回到顶部