在数字广告领域,归因分析(Attribution Analysis)是衡量广告效果的关键技术。它帮助广告主理解不同广告渠道对最终转化的贡献,从而优化广告预算分配。传统的归因模型(如最后一次点击、线性归因)往往忽略了用户行为的复杂性和路径间的相互影响。马尔可夫链模型(Markov Chain Model)通过捕捉用户路径中的状态转移概率,提供了一种更科学的归因方法。本文将详细介绍马尔可夫链模型在广告转化路径中的应用,并结合代码示例展示其实现过程。
在广告投放过程中,用户通常会经历多个接触点(Touchpoints),例如:
传统的归因模型存在以下局限性:
马尔可夫链模型通过建模用户路径中的状态转移,能够有效解决上述问题。
马尔可夫链是一种随机过程,其核心假设是“未来状态只依赖于当前状态,而与过去状态无关”。在广告归因中,马尔可夫链模型将用户路径中的每个接触点视为一个状态,通过计算状态间的转移概率来量化各渠道的贡献。
转移概率矩阵描述了从一个状态到另一个状态的概率。例如:
首先,需要收集用户路径数据。每条路径包含用户接触的广告渠道序列以及是否转化。
用户ID | 路径 | 是否转化 |
|---|---|---|
1 | 展示广告 -> 搜索广告 -> 转化 | 是 |
2 | 视频广告 -> 空转化 | 否 |
3 | 展示广告 -> 直接访问 -> 转化 | 是 |
通过统计用户路径数据,计算状态间的转移概率。
import pandas as pd
from collections import defaultdict
# 示例数据
data = [
['展示广告', '搜索广告', '转化'],
['视频广告', '空转化'],
['展示广告', '直接访问', '转化']
]
# 统计转移次数
transition_counts = defaultdict(lambda: defaultdict(int))
for path in data:
for i in range(len(path) - 1):
current_state = path[i]
next_state = path[i + 1]
transition_counts[current_state][next_state] += 1
# 计算转移概率
transition_probabilities = defaultdict(dict)
for current_state, next_states in transition_counts.items():
total = sum(next_states.values())
for next_state, count in next_states.items():
transition_probabilities[current_state][next_state] = count / total
print(transition_probabilities){
'展示广告': {'搜索广告': 0.5, '直接访问': 0.5},
'搜索广告': {'转化': 1.0},
'视频广告': {'空转化': 1.0},
'直接访问': {'转化': 1.0}
}移除效应(Removal Effect)是马尔可夫链模型的核心思想。通过移除某个渠道,计算转化率的变化,从而量化该渠道的贡献。
def calculate_removal_effect(transition_probabilities, channel_to_remove):
# 复制转移概率矩阵
modified_probabilities = defaultdict(dict)
for current_state, next_states in transition_probabilities.items():
for next_state, prob in next_states.items():
if current_state != channel_to_remove and next_state != channel_to_remove:
modified_probabilities[current_state][next_state] = prob
# 计算原始转化率和移除后的转化率
original_conversion_rate = calculate_conversion_rate(transition_probabilities)
modified_conversion_rate = calculate_conversion_rate(modified_probabilities)
# 计算移除效应
removal_effect = original_conversion_rate - modified_conversion_rate
return removal_effect
def calculate_conversion_rate(probabilities):
# 假设开始状态为“开始”
conversion_rate = 0
stack = [('开始', 1.0)]
while stack:
current_state, current_prob = stack.pop()
if current_state == '转化':
conversion_rate += current_prob
else:
for next_state, prob in probabilities.get(current_state, {}).items():
stack.append((next_state, current_prob * prob))
return conversion_rate
# 计算“展示广告”的移除效应
removal_effect = calculate_removal_effect(transition_probabilities, '展示广告')
print(f"展示广告的移除效应: {removal_effect}")展示广告的移除效应: 0.5马尔可夫链模型为广告归因分析提供了一种科学、灵活的方法。通过建模用户路径中的状态转移,它能够准确量化各广告渠道的贡献,帮助广告主优化预算分配。未来,随着大数据和人工智能技术的发展,归因分析将变得更加智能化和精准化。