前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >渠道归因(二)基于马尔可夫链的渠道归因

渠道归因(二)基于马尔可夫链的渠道归因

作者头像
HsuHeinrich
发布2023-08-10 11:05:43
3690
发布2023-08-10 11:05:43
举报
文章被收录于专栏:HsuHeinrichHsuHeinrich

渠道归因(二)基于马尔可夫链的渠道归因

在应用当中,序列中的每个点通常映射为一个广告触点,每个触点都有一定概率变成真正的转化。通过这种建模,可以选择最有效,概率最高的触点路径。这种方法需要较多的数据,计算也比较复杂。本文主要参考自python实现马尔可夫链归因[1]

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

  • 状态空间:处理可能存在的所有状态的集合
  • 转移概率:从一个状态转移到另一个状态的概率
  • 当前状态分布 :在过程开始时处于任何一个状态的概率分布

那么用户行为路径中的每个渠道可以看作这里的每个状态。在知道状态空间的情况下,所求的渠道贡献率就是每条路径的转移概率。所以马尔可夫链模型可以用来做归因分析。

MarkovAttribution方法

代码语言:javascript
复制
# pip install MarkovAttribution
代码语言:javascript
复制
import pandas as pd
from markovattribution import MarkovAttribution

本文所有数据如果有需要的同学可关注公众号HsuHeinrich,回复【数据挖掘-渠道归因】自动获取~

代码语言:javascript
复制
# 读取数据
df = pd.read_csv('./Markov/paths.csv')
df.head()

image-20230206154250062

这个方法对数据格式有自己的要求

  • 最后一列为是否转化,列名固定为conv_flag,枚举值为('null' or 空【即NaN】、'conv')
  • 首列至倒数第二列为渠道流转路径,缺失为空
代码语言:javascript
复制
# 模型拟合
attribution = MarkovAttribution()
ma = attribution.fit(df)
代码语言:javascript
复制
# 输出结果
for key, value in ma['Markov Values'].items():
    print (key.ljust(15), round(value,2))
代码语言:javascript
复制
EMAIL           56.31
SOCIAL          57.56
PROGRAMMATIC    50.55
YOUTUBE         32.08
SEM             48.49

ChannelAttribution方法

代码语言:javascript
复制
# pip install Cython
# pip install ChannelAttribution
代码语言:javascript
复制
import pandas as pd
from ChannelAttribution import *
代码语言:javascript
复制
Data = pd.read_csv('./Markov/Data.csv',sep=";")
Data.head() 

image-20230206154344119

数据格式要求: path:转化路径,以>连接 total_conversions:累计转化次数 total_conversion_value:累计转化收益 total_null:累计未转化次数

代码语言:javascript
复制
# markov算法计算各渠道转化次数和转化收益
auto_markov_model(Data, "path", "total_conversions", "total_null", var_value='total_conversion_value')
代码语言:javascript
复制
Suggested order: 4
Number of simulations: 100000 - Convergence reached: 3.69% < 5.00%
Percentage of simulated paths that successfully end before maximum number of steps (67) is reached: 99.99%

channel_name

total_conversions

total_conversion_value

0

eta

3440.255709

13711.503304

1

iota

3732.042103

14535.970443

2

alpha

5821.609182

19315.152418

3

beta

2386.059705

10133.518357

4

theta

1783.661989

7115.975460

5

lambda

1167.145576

4696.185913

6

kappa

305.905090

1126.342986

7

zeta

291.786394

1093.572697

8

epsilon

635.341342

2280.694761

9

gamma

216.486679

777.796200

10

delta

4.706232

16.259047

11

mi

0.000000

0.000000

总结

如果能计算出每个流转路径历史所有的转化次数和未转化次数,个人更建议ChannelAttribution方法。

共勉~

参考资料

[1]

python实现马尔可夫链归因: https://mattzheng.blog.csdn.net/article/details/117296062

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-07-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 HsuHeinrich 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 渠道归因(二)基于马尔可夫链的渠道归因
    • MarkovAttribution方法
      • ChannelAttribution方法
        • 总结
          • 参考资料
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档