原文链接:http://tecdat.cn/?p=5383

原文出处:拓端数据部落公众号

介绍

在这篇文章中,我们看看什么是渠道归因,以及它如何与马尔可夫链的概念联系起来。我们还将通过一个电子商务公司的案例研究来理解这个概念如何在理论上和实践上运作(使用R)。

什么是渠道归因?

Google Analytics为归因建模提供了一套标准规则。根据Google的说法,“归因模型是决定销售和转化如何分配给转化路径中的接触点的规则或一组规则。例如,Google Analytics中的最后一次互动模型会为紧接销售或转化之前的最终接触点(即,点击次数)分配100%的功劳。相比之下,第一个互动模型为启动转化路径的接触点分配100%的功劳。“

我们将在本文后面看到最后一个交互模型和第一个交互模型。在此之前,让我们举一个小例子,进一步了解渠道归因。假设我们有一个转换图,如下所示:

在上述情况下,客户可以通过渠道'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

马尔可夫链

马尔可夫链是一个过程,它映射活动并给出概率分布,从一个状态转移到另一个状态。马尔可夫链由三个属性定义:

状态空间 - 处理可能存在的所有状态的集合

转换操作 - 从一个状态转移到另一个状态的概率

当前状态概率分布 - 在过程开始时处于任何一个状态的概率分布

我们知道我们可以通过的阶段,从每条路径移动的概率以及我们知道当前状态的可能性。这看起来与马尔可夫链相似。

事实上,这是一个马尔可夫链的应用。如果我们要弄清楚渠道1在我们的客户从始至终转换的过程中的贡献,我们将使用去除效果的原则。去除效果原则说,如果我们想要在客户过程中找到每个渠道的贡献,我们可以通过删除每个渠道并查看在没有该渠道的情况下发生了多少次转化。

例如,我们假设我们必须计算通道C1的贡献。我们将从模型中删除通道C1,并查看图片中没有C1的情况下发生了多少次转换,即所有渠道完好无损时的总转换次数。我们计算渠道C1:

P(去除C1后的转换)= P(C2→C3→转换)

= 0.5 * 1 * 0.6

= 0.3

30%的客户互动可以在没有C1渠道的情况下进行转换; 而C1完好无损,45%的互动可以转换。所以,C1的去除效果是

0.3 / 0.45 = 0.666。

C2和C3的去除效果为1(您可以尝试计算,但直觉地认为,如果我们要删除或者C2或C3,我们将能够完成任何转换?)。

这是马尔可夫链的一个非常有用的应用。在上述情况下,所有渠道--C1,C2,C3(在不同阶段)被称为转换状态 ; 而从一个渠道移动到另一个渠道的概率称为转移概率。

客户旅程是一系列渠道,可以看作是一个有向马尔可夫图中的一个链,其中每个顶点都是一个状态(渠道/接触点),每条边表示从一个状态移动到另一个状态的转移概率。由于到达状态的概率仅取决于之前的状态,因此可以将其视为无记忆马尔可夫链。

电子商务公司案例研究

让我们进行真实案例研究,看看我们如何实施渠道归因建模。

一家电子商务公司进行了一项调查并收集了客户的数据。这可以被认为是具有代表性的人群。在调查中,公司收集了有关客户访问各种触点的数据,最终在其网站上购买该产品。

总共有19个渠道,客户可以遇到产品或产品广告。在19个渠道之后,还有三种情况:

#20 - 客户决定购买哪种设备;

#21 - 客户已经做出最终购买;

#22 - 客户尚未决定。

渠道的总体分类如下:

类别 渠道
网站(1,2,3) 公司的网站或竞争对手的网站
研究报告(4,5,6,7,8) 行业咨询研究报告
在线/评论(9,10) 自然搜索,论坛
价格比较(11) 聚合渠道
朋友(12,13) 社交网络
专家(14) 在线或离线专家
零售店(15,16,17) 实体店
其他 (18,19) 其他,例如在各地的促销活动

现在,我们需要帮助电子商务公司确定投资营销渠道的正确策略。应该关注哪些渠道?公司应该投资哪些渠道?我们将在下一节中使用R来解决这个问题。

使用R的实现

我们读取数据,尝试在R中实现并检查结果。

> head(channel)

输出:

R05A.01  R05A.02 R05A.03 R05A.04 ….. R05A.18 R05A.19 R05A.20
16  4   3   5       NA  NA  NA
2   1   9   10      NA  NA  NA
9   13  20  16      NA  NA  NA
8   15  20  21      NA  NA  NA
16  9   13  20      NA  NA  NA
1   11  8   4       NA  NA  NA

我们将进行一些数据处理,将其带入一个阶段,我们可以将其用作模型中的输入。然后,我们将确定哪些客户已进行最终转换。

创建一个特定格式的变量'路径',可以作为模型的输入。另外,我们将使用“dplyr”包找出每条路径的总发生次数。

路径转变

路径 转换
1 > 1 > 1 > 20 1
1 > 1 > 12 > 12 1
1 > 1 > 14 > 13 > 12 > 20 1
1 > 1 > 3 > 13 > 3 > 20 1
1 > 1 > 3 > 17 > 17 1
> 1 > 6 > 1 > 12 > 20 > 12 1
> channel_fin = ddply(channel_fin,~path,summarise, conversion= sum(convert))
> head(channel_fin)

输出:

路径转变

路径 转换
1 > 1 > 1 > 20 1
1 > 1 > 12 > 12 1
1 > 1 > 14 > 13 > 12 > 20 1
1 > 1 > 3 > 13 > 3 > 20 1
1 > 1 > 3 > 17 > 17 1
1 > 1 > 6 > 1 > 12 > 20 > 12 1

现在,我们将创建一个启发式模型和一个马尔科夫模型,将两者结合起来,然后检查最终结果。

输出:

Output:

渠道名称 首次接触转换 ….. 线性接触转换 线性接触值
1 130 73.773661 73.773661
20 0 473.998171 473.998171
12 75 76.127863 76.127863
14 34 56.335744 56.335744
13 320 204.039552 204.039552
3 168 117.609677 117.609677
17 31 76.583847 76.583847
6 50 54.707124 54.707124
8 56 53.677862 53.677862
10 547 211.822393 211.822393
11 66 107.109048 107.109048
16 111 156.049086 156.049086
2 199 94.111668 94.111668
4 231 250.784033 250.784033
7 26 33.435991 33.435991
5 62 74.900402 74.900402
9 250 194.07169 194.07169
15 22 65.159225 65.159225
18 4 5.026587 5.026587
19 10 12.676375 12.676375

输出:

:

渠道名称 总体转换 总体转换值
1 82.482961 82.482961
20 432.40615 432.40615
12 83.942587 83.942587
14 63.08676 63.08676
13 195.751556 195.751556
3 122.973752 122.973752
17 83.866724 83.866724
6 63.280828 63.280828
8 61.016115 61.016115
10 209.035208 209.035208
11 118.563707 118.563707
16 158.692238 158.692238
2 98.067199 98.067199
4 223.709091 223.709091
7 41.919248 41.919248
5 81.865473 81.865473
9 179.483376 179.483376
15 70.360777 70.360777
18 5.950827 5.950827
19 15.545424 15.545424

在进一步讨论之前,我们先来了解一下我们上面看到的一些术语的含义。

第一次接触转换:当该渠道是客户的第一个触点时,通过渠道进行的转换。第一个触点获得100%的功劳。

上次接触转换:当该渠道是客户的最后一个接触点时,通过渠道发生的转化。100%功劳给予最后的接触点。

回到R代码,让我们合并这两个模型,并以可视化方式表示输出。

# 绘制总转换
ggplot(R1, aes(channel_name, value, fill = variable)) +geom_bar(stat='identity', position='dodge') +

从上图中可以清楚地看到结果。从第一次接触转换角度来看,渠道10,渠道13,渠道2,渠道4和渠道9非常重要; 而从最后接触的角度来看,第20渠道是最重要的(因为在我们的例子中客户决定购买哪种产品)。就线性接触转换而言,渠道20、渠道4和渠道9是重要的。从总转换角度来看,渠道10,13,20,4和9非常重要。

结束

在上面的图表中,我们已经能够找出哪些是我们关注的重要渠道,哪些可以被忽略或忽视。这种情况使我们对客户分析领域马尔可夫链模型的应用有了很好的了解。电子商务公司现在可以更准确地创建他们的营销策略,并使用数据驱动的见解分配他们的营销预算。


最受欢迎的见解

1.用R语言模拟混合制排队随机服务排队系统

2.R语言中使用排队论预测等待时间

3.R语言中实现马尔可夫链蒙特卡罗MCMC模型

4.R语言中的马尔科夫机制转换(Markov regime switching)模型

5.matlab贝叶斯隐马尔可夫hmm模型

6.用R语言模拟混合制排队随机服务排队系统

7.Python基于粒子群优化的投资组合优化

8.R语言马尔可夫转换模型研究交通伤亡人数事故预测

9.用机器学习识别不断变化的股市状况——隐马尔可夫模型的应用

拓端tecdat|R语言使用马尔可夫链对营销中的渠道归因建模相关推荐

  1. 拓端tecdat|R语言逻辑回归(Logistic回归)模型分类预测病人冠心病风险

    最近我们被客户要求撰写关于冠心病风险的研究报告,包括一些图形和统计输出. 相关视频:R语言逻辑回归(Logistic回归)模型分类预测病人冠心病风险 逻辑回归Logistic模型原理和R语言分类预测冠 ...

  2. 拓端tecdat|R语言用LOESS(局部加权回归)季节趋势分解(STL)进行时间序列异常检测

    最近我们被客户要求撰写关于LOESS(局部加权回归)的研究报告,包括一些图形和统计输出. 这篇文章描述了一种对涉及季节性和趋势成分的时间序列的中点进行建模的方法.我们将对一种叫做STL的算法进行研究, ...

  3. 拓端tecdat|R语言向量误差修正模型 (VECMs)分析长期利率和通胀率影响关系

    最近我们被客户要求撰写关于向量误差修正模型的研究报告,包括一些图形和统计输出. 向量自回归模型估计的先决条件之一是被分析的时间序列是平稳的.但是,经济理论认为,经济变量之间在水平上存在着均衡关系,可以 ...

  4. 拓端tecdat|R语言线性回归和时间序列分析北京房价影响因素可视化案例

    最近我们被客户要求撰写关于北京房价影响因素的研究报告,包括一些图形和统计输出. 目的 房价有关的数据可能反映了中国近年来的变化: 人们得到更多的资源(薪水),期望有更好的房子 人口众多 独生子女政策: ...

  5. 拓端tecdat荣获掘金社区入驻新人奖

    2021年7月,由掘金发起了"入驻成长礼"颁奖活动.本次活动邀请到知名开发者.服务机构代表等业界人士. 据了解,掘金社区"新入驻创作者礼"主要对已经积累了一定历 ...

  6. 拓端tecdat荣获2022年度51CTO博主之星

    相信技术,传递价值,这是51CTO每一个技术创作者的动力与信念,2022 年度,拓端tecdat 作为新锐的数据分析咨询公司,在51CTO平台上,不断的输出优质的技术文章,分享前沿创新技术,输出最佳生 ...

  7. R语言计算资本资产定价模型(CAPM)中的Beta值和可视化

    原文链接:http://tecdat.cn/?p=22588 今天我们将计算投资组合收益的CAPM贝塔.这需要拟合一个线性模型,得到可视化,从资产收益的角度考虑我们的结果的意义. 简单的背景介绍,资本 ...

  8. R语言str_trim函数去除字符串中头部和尾部的空格

    R语言str_trim函数去除字符串中头部和尾部的空格 目录 R语言str_trim函数去除字符串中头部和尾部的空格 #导入包和库 #仿

  9. R语言ggplot2可视化:ggplot2中使用element_text函数设置轴标签文本粗体字体(bold text,只设置x轴的标签文本使用粗体字体)

    R语言ggplot2可视化:ggplot2中使用element_text函数设置轴标签文本粗体字体(bold text,只设置x轴的标签文本使用粗体字体) 目录

  10. R语言ggplot2在可视化图像中添加横线并在横线中添加文本、为横线中添加的文本添加文本框、自定义文本框的填充色(background color for a text annotation)

    R语言ggplot2在可视化图像中添加横线并在横线中添加文本.为横线中添加的文本添加文本框.自定义文本框的填充色(background color for a text annotation) 目录

最新文章

  1. Django整理(二) - 视图和模板的初步使用
  2. PicCompress一个精简的图片压缩工具
  3. 【Linux】一步一步学Linux——bc命令(233)
  4. 【SpringMVC】登录状态验证
  5. .NET和Java之争
  6. 160 - 29 cosh.3
  7. [数据结构与算法] : 栈的链式实现
  8. c语言语句大全ppt,C语言基本语句.ppt
  9. 菜单、toast、对话框的使用
  10. *第十五周*数据结构实践项目三【B-树的基本操作】
  11. rest framework 权限
  12. 【Android】安卓闪电复习
  13. PS三种切图方式,干货满满,不看绝对后悔
  14. namesilo如何使用BTC支付:
  15. 手游创业是新的风口吗
  16. webrtc入门:13.pion webrtc开源的webrtc框架
  17. 区块链学习—通证经济学的诺奖理论基础
  18. Annotation-specified bean name.. for bean class ...
  19. IKAnalyzer中文分词分析内容目录
  20. android用户苹果手表,Android分析苹果手表成功原因

热门文章

  1. win32 sdk绘制ListBox控件
  2. 【TDA4系列】通过MCU域的R5F1_0启动全部核心MAIN域核心(R5F DSP A73)
  3. 23 模块代码编写基础
  4. 六、基于UDP的服务器端/客户端
  5. 安装tensorflow时候报错ImportError: DLL load failed: 找不到指定的模块。Failed to load the native TensorFlow runtime.
  6. 最优化方法:拉格朗日乘数法(转)
  7. 重读你不知道的JS (上) 第一节五章
  8. SecureCRT 颜色
  9. [译] 为什么给设计定义 UX、UI、CX、IA、IxD 和其他类型的头衔是愚蠢的行为
  10. 为什么要在主线程更新UI?