数据, 术→技巧

Python市场渠道归因包ChannelAttribution

钱魏Way · · 77 次浏览
!文章内容如有错误或排版问题,请提交反馈,非常感谢!

Channel Attribution 简介

Channel Attribution 是一个用于解决市场营销渠道归因问题的 Python 包。它通过数据驱动的方法(如马尔可夫链模型)和启发式模型(如首次点击、末次点击)来量化不同营销渠道对转化的贡献,帮助优化广告预算分配。

主要功能

  • 启发式模型(Heuristic Models)
    • 首次点击(First-Touch):将转化功劳全部归于用户路径中的第一个渠道。
    • 末次点击(Last-Touch):将转化功劳全部归于路径中的最后一个渠道。
    • 线性归因(Linear):平均分配功劳给路径中的所有渠道。
    • 时间衰减(Time Decay):根据渠道的时间远近按权重分配功劳。
  • 马尔可夫链模型(Markov Model)
    • 基于概率论,通过移除每个渠道并计算转化概率的变化来评估其贡献,更精准地反映渠道的真实影响。

应用场景

  • 广告预算优化:根据渠道贡献分配预算。
  • 用户行为分析:识别高影响力渠道,优化用户旅程。
  • A/B 测试支持:评估渠道调整后的效果变化。

使用案例

电商行业:优化广告预算分配

  • 场景:分析用户从广告点击到购买的路径(如 Google Ads > Email > Direct)。
  • 步骤:
    • 使用马尔可夫模型计算各渠道的边际贡献。
    • 对比启发式模型结果,识别被低估的渠道(如中间触点的社交广告)。
  • 输出:将预算倾斜至高贡献渠道(如首触渠道+中间交互渠道)。

SaaS 产品:免费试用转化归因

  • 场景:用户通过内容营销→产品试用→客服沟通→付费订阅。
  • 分析:
    • 马尔可夫模型可能显示“客服沟通”对转化的关键作用。
    • 线性归因可能低估客服的贡献。
  • 行动:加强客服团队培训或优化用户教育流程。

游戏行业:用户留存渠道分析

  • 场景:玩家通过社交广告→应用商店→游戏内活动持续活跃。
  • 模型应用:
    • 时间衰减模型可能高估末次触点(应用商店)。
    • 马尔可夫模型揭示社交广告的长期留存价值。

Channel Attribution 实现原理

Channel Attribution 的实现原理主要基于两类模型:启发式模型(规则模型)马尔可夫链模型。以下从数学基础、数据处理和算法逻辑三方面详细解释其工作原理。

启发式模型(Heuristic Models)

核心思想

通过预设规则分配转化功劳,简单直观但依赖人工经验。常见规则包括:

  • 首次点击(First-Touch):将 100% 功劳归于路径的第一个渠道。
  • 末次点击(Last-Touch):将 100% 功劳归于路径的最后一个渠道。
  • 线性归因(Linear):平均分配功劳给路径中所有渠道。
  • 时间衰减(Time Decay):按时间远近加权分配(越接近转化的渠道权重越高)。

实现步骤

  • 路径拆分:将每条路径按分隔符(如 >)拆分为渠道序列。
  • 权重分配
    • 首次/末次点击:取首尾渠道,直接累加总转化次数/收益。
    • 线性归因:对每个渠道分配权重 1/N(N 为路径长度),例如路径 A > B > C 中每个渠道权重为 1/3。
    • 时间衰减:权重按指数衰减,例如路径 A > B > C 的权重可能为 2, 0.3, 0.5(总和为 1)。

数学公式(以线性归因为例)

每条路径的总转化值 V 分配给 k 个渠道,每个渠道的贡献为:贡献 = V/k

所有路径的贡献按渠道累加,得到最终结果。

马尔可夫链模型(Markov Model)

核心思想

基于概率论,通过计算每个渠道对整体转化概率的边际贡献(移除效应),动态评估其价值。核心步骤如下:

  • 构建状态转移矩阵:统计所有渠道之间的转移概率。
  • 计算基准转化率:基于完整路径的转化概率。
  • 模拟移除单个渠道:计算移除该渠道后的转化率变化。
  • 归因分数:变化值即为该渠道的贡献。

关键概念

  • 状态(States):每个渠道视为一个状态,加上起始状态(start)和转化状态(conversion)。
  • 转移概率矩阵(Transition Matrix):记录从状态 i 到状态 j 的概率:$P(i \to j) = \frac{\text{从 i 转移到 j 的次数}}{\text{从 i 转移出去的总次数}}$
  • 吸收状态(Absorbing State):conversion 是吸收状态,一旦进入则路径终止。

移除效应计算

  • 原始转化率(R):从 start 到 conversion 的总概率。
  • 模拟移除渠道C:在转移矩阵中删除所有与 C 相关的转移(进入、离开)。
  • 新转化率($R_{-C}$):计算移除 C 后的转化概率。
  • 渠道C的贡献:$\text{贡献}_C = R – R_{-C}$

数学推导(简化版)

假设用户路径为 A → B → C → conversion,完整转化概率为:

$$R = P(\text{start} \to A) \times P(A \to B) \times P(B \to C) \times P(C \to \text{conversion})$$

若移除渠道 B,路径可能变为 A → C → conversion,此时:

$$R_{-B} = P(\text{start} \to A) \times P(A \to C) \times P(C \to \text{conversion})$$

贡献值为 $R – R_{-B}$,但实际计算需遍历所有可能路径。

数据处理与算法优化

输入数据预处理

  • 路径标准化:统一渠道命名(如大小写、空格处理)。
  • 过滤无效路径:如空路径或单渠道路径(对马尔可夫模型无意义)。

马尔可夫链的阶数(Order)

  • 一阶马尔可夫(order=1):仅考虑当前状态,忽略历史路径(默认)。
  • 高阶马尔可夫:考虑多个历史状态(如二阶模型需记录 A → B 后转移到 C 的概率),计算复杂度指数级增长,实际中较少使用。

计算效率

  • 路径概率计算:采用动态规划或矩阵乘法优化。
  • 稀疏矩阵处理:对大规模渠道场景使用稀疏矩阵存储转移概率。

优缺点对比

模型类型 优点 缺点
启发式模型 计算快,易于解释 依赖人工规则,忽略渠道协同效应
马尔可夫模型 数据驱动,精准量化渠道贡献 计算复杂,需大量数据支持

示例说明

场景数据

  • 路径1:A > B > C,转化次数=2
  • 路径2:B > D,转化次数=3

马尔可夫模型计算步骤

  • 统计转移概率
    • start → A: 1 次
    • A → B: 1 次
    • B → C: 1 次, B → D: 1 次
    • C → conversion: 1 次
    • D → conversion: 1 次
  • 构建转移矩阵
From \ To A B C D conversion
start 1 0 0 0 0
A 0 1 0 0 0
B 0 0 0.5 0.5 0
C 0 0 0 0 1
D 0 0 0 0 1
  • 计算原始转化率R
    • start → A → B → C → conversion 的概率 = 1 × 1 × 0.5 × 1 = 0.5
    • start → B → D → conversion 的概率 = 0(因为 start 无法直接到 B)
    • 总转化率 R = 0.5(仅路径1有效)。
  • 移除渠道B

后的转化率$R_{-B}$

  • 路径1失效(A无法转移到C),路径2失效(start无法到D)。
  • 新转化率$R_{-B}$=0。
  • 贡献值B=0.5-0=0.5。

ChannelAttribution使用教程

安装ChannelAttribution

通过 pip 安装最新版本:pip install ChannelAttribution

数据准备

归因分析需要特定格式的数据,通常包含用户转化路径(path)和转化结果(conversion或conversion_value)。

示例数据结构

path conversion conversion_value
channel1>channel2 1 100
channel2>channel3 0 0
channel1 1 50
  • path:用户接触的渠道路径(按时间顺序排列,用>分隔)。
  • conversion:是否发生转化(1/0)。
  • conversion_value:转化带来的价值(可选)。

代码示例:生成模拟数据

import pandas as pd

data = {
"path": ["channel1>channel2", "channel2>channel3", "channel1", "channel3>channel2"],
"conversion": [1, 0, 1, 1],
"conversion_value": [100, 0, 50, 200]
}

df = pd.DataFrame(data)
print(df)

应用归因模型

ChannelAttribution提供启发式模型马尔可夫链模型

启发式模型(HeuristicModels)

包含首次点击、末次点击、线性归因等。

from ChannelAttribution import heuristic_models

# 应用启发式模型
heuristic_results = heuristic_models(
    df,
    var_path="path",
    var_conv="conversion",
    var_value="conversion_value", # 可选
    sep=">"
)

print(heuristic_results)

输出结果示例:

channel_name first_touch last_touch linear_touch
channel1 150 50 100
channel2 0 200 150
channel3 0 0 50
  • first_touch: 首次点击归因的转化价值。
  • last_touch: 末次点击归因的转化价值。
  • linear_touch: 线性归因(各渠道平均分配价值)。

马尔可夫链模型(Markov Model)

基于渠道转移概率计算贡献度。

from ChannelAttribution import markov_model

# 应用马尔可夫链模型
markov_results = markov_model(
    df,
    var_path="path",
    var_conv="conversion",
    var_value="conversion_value", # 可选
    sep=">",
    order=1 # 马尔可夫链阶数(默认为1)
)

print(markov_results)

输出结果示例:

channel_name total_conversion total_conversion_value
channel1 1.2 160
channel2 1.5 220
channel3 0.3 60
  • total_conversion: 渠道贡献的转化次数(加权)。
  • total_conversion_value: 渠道贡献的转化价值(加权)。

结果分析与可视化

归因结果对比

合并启发式模型和马尔可夫链结果:

combined_results = pd.merge(
    heuristic_results,
    markov_results,
    on="channel_name",
    how="outer"
)
print(combined_results)

可视化渠道贡献

使用 matplotlib 或 plotly 绘制柱状图:

import matplotlib.pyplot as plt

# 马尔可夫模型结果可视化
markov_results.plot(kind="bar", x="channel_name", y="total_conversion_value")
plt.title("Channel Contribution (Markov Model)")
plt.xlabel("Channel")
plt.ylabel("Conversion Value")
plt.show()

关键参数说明

参数 说明
var_path 数据中代表渠道路径的列名(默认”path”)
var_conv 转化标签列名(默认”conversion”)
var_value 转化价值列名(可选,如未提供则仅计算转化次数)
sep 路径分隔符(默认”>”,需与数据中的分隔符一致)
order 马尔可夫链阶数(默认为1,即仅考虑当前渠道与前一个渠道的关系)

注意事项

  • 数据预处理
    • 确保路径中的渠道名称统一(如大小写、空格)。
    • 过滤无效路径(如空值或单渠道路径)。
  • 模型选择
    • 马尔可夫模型更适合复杂路径分析,但计算量较大。
    • 启发式模型简单直观,适用于快速分析。
  • 结果解读
    • 马尔可夫模型的结果可能包含小数,表示概率贡献。
    • 对比不同模型的结果,结合业务背景调整策略。

常见问题

Q1: 如何处理长路径或稀疏路径?

  • 使用 max_steps 参数限制路径最大长度。
  • 过滤低频路径(如出现次数<5的路径)。

Q2: 马尔可夫模型结果不稳定?

  • 确保数据量足够大(建议至少10,000条转化路径)。
  • 调整马尔可夫链阶数(order),尝试 order=2。

Q3: 如何自定义归因模型?

  • ChannelAttribution 目前不支持自定义模型,但可通过结果加权组合实现。

参考链接

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注