渠道归因(二)基于马尔可夫链的渠道归因
在应用当中,序列中的每个点通常映射为一个广告触点,每个触点都有一定概率变成真正的转化。通过这种建模,可以选择最有效,概率最高的触点路径。这种方法需要较多的数据,计算也比较复杂。本文主要参考自python实现马尔可夫链归因。
马尔可夫链是一个过程,它映射运动并给出概率分布,从一个状态转移到另一个状态。马尔可夫链由三个属性定义:
- 状态空间:处理可能存在的所有状态的集合
- 转移概率:从一个状态转移到另一个状态的概率
- 当前状态分布 :在过程开始时处于任何一个状态的概率分布
那么用户行为路径中的每个渠道可以看作这里的每个状态。在知道状态空间的情况下,所求的渠道贡献率就是每条路径的转移概率。所以马尔可夫链模型可以用来做归因分析。
MarkovAttribution方法
# pip install MarkovAttribution
import pandas as pd
from markovattribution import MarkovAttribution
本文所有数据如果有需要的同学可关注公众号HsuHeinrich,回复【数据挖掘-渠道归因】自动获取~
# 读取数据
df = pd.read_csv('./Markov/paths.csv')
df.head()
这个方法对数据格式有自己的要求
最后一列为是否转化,列名固定为
conv_flag
,枚举值为(‘null’ or 空【即NaN】、‘conv’)首列至倒数第二列为渠道流转路径,缺失为空
# 模型拟合
attribution = MarkovAttribution()
ma = attribution.fit(df)
# 输出结果
for key, value in ma['Markov Values'].items():
print (key.ljust(15), round(value,2))
EMAIL 56.31
SOCIAL 57.56
PROGRAMMATIC 50.55
YOUTUBE 32.08
SEM 48.49
ChannelAttribution方法
# pip install Cython
# pip install ChannelAttribution
import pandas as pd
from ChannelAttribution import *
Data = pd.read_csv('./Markov/Data.csv',sep=";")
Data.head()
数据格式要求:
path:转化路径,以
>
连接total_conversions:累计转化次数
total_conversion_value:累计转化收益
total_null:累计未转化次数
# markov算法计算各渠道转化次数和转化收益
auto_markov_model(Data, "path", "total_conversions", "total_null", var_value='total_conversion_value')
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
方法。
共勉~