【PYTHON实践案例】流量渠道归因与ROI评估
业务痛点: “我的市场预算花在了十几个渠道,有搜索引擎、社交媒体、KOL推广等,但到底哪个渠道来的用户质量最高?哪笔钱花得最值?” 这就是流量归因要解决的问题。
- 核心概念:
- 归因模型 (Attribution Model): 简单来说,就是决定把用户转化的功劳分给哪个渠道。最常用的是末次点击归因 (Last-Click Attribution) ,即功劳全部归于用户下单前的最后一个渠道。虽然不完美,但简单、易于实现,是分析的起点。
- ROI (Return on Investment): 投资回报率。在渠道分析中,
ROI = (渠道带来的收入-渠道花费) / 渠道花费。ROI > 0 说明这个渠道是盈利的。 - CAC (Customer Acquisition Cost): 用户获取成本。
CAC = 渠道花费 / 渠道带来的新用户数。这个指标越低越好。
- 分析思路:
- 数据整合: 将各渠道的广告花费数据与网站/APP的用户行为及订单数据关联起来。关键是UTM参数。
- 分组计算: 按渠道(
utm_source)分组。 - 指标聚合: 计算每个渠道的总花费、总收入、带来的用户数。
- 价值评估: 计算每个渠道的ROI和CAC,横向对比,找出“明星渠道”和“问题渠道”。
实践案例:评估不同广告渠道的投放效果
python复制
# 导入所需库
import pandas as pd
# --- 1. 数据准备 ---
# 模拟一份广告投放和用户订单的整合数据
# 在真实场景中,这份数据需要由数据工程师从广告平台后端和公司订单数据库中提取、关联而成。
data = {
'date': ['2023-01-01', '2023-01-01', '2023-01-02', '2023-01-02', '2023-01-03', '2023-01-03', '2023-01-04', '2023-01-05'],
'channel': ['weibo_kol', 'douyin_ads', 'weibo_kol', 'baidu_sem', 'douyin_ads', 'baidu_sem', 'weibo_kol', 'douyin_ads'],
'cost': [5000, 8000, 5200, 3000, 8500, 3100, 4800, 9000],
'new_users': [200, 500, 210, 80, 550, 85, 190, 600],
'total_revenue': [8000, 15000, 8500, 5000, 17000, 5200, 7800, 18000]
}
df = pd.DataFrame(data)
print("--- 原始数据 ---")
print(df)
# --- 2. 按渠道分组聚合 ---
# 使用groupby对渠道进行分组,然后使用agg聚合计算每个渠道的总花费、总收入和总新用户数
channel_performance = df.groupby('channel').agg(
total_cost=('cost', 'sum'),
total_revenue=('total_revenue', 'sum'), # 修复列名错误
total_new_users=('new_users', 'sum')
).reset_index()
# --- 3. 计算ROI和CAC ---
# ROI = (总收入 - 总花费) / 总花费
channel_performance['ROI'] = (channel_performance['total_revenue'] - channel_performance['total_cost']) / channel_performance['total_cost']
# CAC = 总花费 / 总新用户数
channel_performance['CAC'] = channel_performance['total_cost'] / channel_performance['total_new_users']
# 格式化输出,方便阅读
channel_performance['ROI'] = channel_performance['ROI'].apply(lambda x: f'{x:.2%}')
print("\n--- 各渠道投放效果分析报告 ---")
print(channel_performance.sort_values(by='ROI', ascending=False))
# --- 4. 业务结论 ---
print("\n--- 分析结论 ---")
print("1. 抖音广告(douyin_ads)的ROI最高,投资回报最好,且CAC相对较低,是我们的'明星渠道',可以考虑追加预算。")
print("2. 百度搜索(baidu_sem)的ROI也不错,CAC最低,说明通过搜索来的用户意图明确,转化效率高。")
print("3. 微博KOL(weibo_kol)的ROI最低,且CAC最高,需要复盘KOL选择、内容策略是否存在问题,或者考虑缩减此渠道预算。")
