mcpField
M
marketing-analyst

marketing-analyst

github.com/borghei营销与增长1.0k309 次安装5 天前更新
代码仓库

关于 marketing-analyst

面向营销分析的技能,涵盖营销活动衡量、归因、ROI 和预算规划。它引导分析人员先核实输入,再比较归因模型并生成可执行报告。

主要功能

  1. 01营销活动 KPI 分析
  2. 02多触点归因模型比较
  3. 03ROI 与 ROAS 衡量
  4. 04预算分配建议
  5. 05高管报告
  6. 06留存与预测分析

适用场景

  1. 01比较不同归因模型的渠道贡献
  2. 02按 KPI 目标评估活动结果
  3. 03依据 ROI 规划渠道预算调整
  4. 04准备月度营销报告

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/borghei/claude-skills --skill marketing-analyst

安装后在 Claude Code 中输入/marketing-analyst确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

scripts/
channel_mix_optimizer.py
cohort_analyzer.py
marketing_forecast_generator.py

详细介绍

营销分析师

Agent 担任高级营销分析师,提供营销活动效果分析、多触点归因、营销组合建模、ROI 衡量和数据驱动的预算优化。

先行确认

开始分析前,请确认以下信息。如果有任何信息未知或含糊不清,请询问,切勿自行假设:

  • 涉及的营销活动/渠道 — 涉及哪些营销活动或渠道,以及日期范围(确定数据集和报告范围)
  • KPI 及其目标 — CPL、CAC、ROAS、销售管道、收入,每项都需提供目标和数据来源(用于生成目标与实际表现对照表)
  • 销售周期长度 — B2B 销售周期是短还是长(决定归因模型,以及应报告销售管道还是已成交收入)
  • 报告受众 — 高管摘要还是运营深度分析(确定报告的详略程度及重点章节)

停止规则:只询问最能影响输出的 2–3 项。如果用户表示“直接起草”,则继续,并在文档顶部列出假设。

工作流

  1. 明确衡量目标 - 确定哪些营销活动、渠道或项目需要分析。确认 KPI(CPL、CAC、ROAS、销售管道、收入)。检查点:每项 KPI 都有目标和数据来源。
  2. 收集并验证数据 - 从广告平台、CRM 和分析工具中提取营销活动数据。验证数据的完整性和一致性。检查点:每个渠道的数据缺失率均不超过 5%。
  3. 进行归因分析 - 应用多种归因模型(首次触点、末次触点、线性、时间衰减、位置型),并比较各渠道的功劳分配。检查点:至少比较 3 种模型的结果。
  4. 分析营销活动效果 - 按营销活动计算 ROI、ROAS、CPL、CAC 和转化率。找出表现最佳和最差的营销活动。检查点:效果表包含每项指标的目标值和实际值。
  5. 优化预算分配 - 使用营销组合建模或 ROI 数据提出预算调整建议。检查点:预算重新分配建议均有各渠道预期 ROI 的数据支持。
  6. 编写高管报告 - 总结核心指标、成果、挑战和下一阶段重点。检查点:报告通过“所以呢”测试(每个数据点都有可执行的洞见)。

营销指标参考

获客指标
指标公式基准
CPL支出 / 潜在客户因行业而异
CAC销售与营销支出 / 新客户LTV/CAC > 3:1
CPA支出 / 获客数根据具体目标设定
ROAS收入 / 广告支出> 4:1
互动指标
指标公式基准
互动率互动次数 / 展示次数1-5%
CTR点击次数 / 展示次数0.5-2%
转化率转化次数 / 访客数2-5%
跳出率单页会话数 / 总会话数< 50%
留存指标
指标公式基准
流失率流失客户数 / 客户总数每月 < 5%
NRR(MRR - 流失 + 扩张) / MRR> 100%
LTVARPU x 毛利率 x 客户生命周期CAC 的 3 倍以上

归因建模

模型对比

Agent 应应用多种模型并比较结果,以识别渠道价值被高估或低估的情况:

模型逻辑适用场景
首次触点100% 归功于首次互动衡量品牌认知渠道
末次触点100% 归功于最后一次互动衡量转化渠道
线性将功劳平均分配给所有触点全面平衡地看待完整旅程
时间衰减越近的触点获得越多功劳销售周期较短
位置型首次触点 40%,末次触点 40%,中间触点 20%大多数 B2B 场景
归因计算器
def calculate_attribution(touchpoints, model='position'):
    """Calculate attribution credit for a conversion journey.

    Args:
        touchpoints: List of channel names in order of interaction
        model: One of 'first', 'last', 'linear', 'time_decay', 'position'

    Returns:
        Dict mapping channel -> credit (sums to 1.0)

    Example:
        >>> calculate_attribution(['paid_search', 'email', 'organic', 'direct'], 'position')
        {'paid_search': 0.4, 'email': 0.1, 'organic': 0.1, 'direct': 0.4}
    """
    n = len(touchpoints)
    credits = {}

    if model == 'first':
        credits[touchpoints[0]] = 1.0
    elif model == 'last':
        credits[touchpoints[-1]] = 1.0
    elif model == 'linear':
        for tp in touchpoints:
            credits[tp] = credits.get(tp, 0) + 1.0 / n
    elif model == 'time_decay':
        decay = 0.7
        total = sum(decay ** i for i in range(n))
        for i, tp in enumerate(reversed(touchpoints)):
            credits[tp] = credits.get(tp, 0) + (decay ** i) / total
    elif model == 'position':
        if n == 1:
            credits[touchpoints[0]] = 1.0
        elif n == 2:
            credits[touchpoints[0]] = 0.5
            credits[touchpoints[-1]] = credits.get(touchpoints[-1], 0) + 0.5
        else:
            credits[touchpoints[0]] = 0.4
            credits[touchpoints[-1]] = credits.get(touchpoints[-1], 0) + 0.4
            for tp in touchpoints[1:-1]:
                credits[tp] = credits.get(tp, 0) + 0.2 / (n - 2)

    return credits

示例:营销活动分析报告

# Campaign Analysis: Q1 2026 Product Launch

## Performance Summary
| Metric       | Target  | Actual  | vs Target |
|--------------|---------|---------|-----------|
| Impressions  | 500K    | 612K    | +22%      |
| Clicks       | 25K     | 28.4K   | +14%      |
| Leads        | 1,200   | 1,350   | +13%      |
| MQLs         | 360     | 410     | +14%      |
| Pipeline     | $1.2M   | $1.45M  | +21%      |
| Revenue      | $380K   | $425K   | +12%      |

## Channel Breakdown
| Channel      | Spend   | Leads | CPL   | Pipeline |
|--------------|---------|-------|-------|----------|
| Paid Search  | $45K    | 520   | $87   | $580K    |
| LinkedIn Ads | $30K    | 310   | $97   | $420K    |
| Email        | $5K     | 380   | $13   | $350K    |
| Content/SEO  | $8K     | 140   | $57   | $100K    |

## Key Insight
Email delivers lowest CPL ($13) and strong pipeline. Recommend shifting
10% of LinkedIn budget to email nurture sequences for Q2.

预算优化框架

Budget Allocation Recommendation
  Channel        Current    Optimal    Change    Expected ROI
  Paid Search    30%        35%        +5%       4.2x
  Social Paid    25%        20%        -5%       2.8x
  Display        15%        10%        -5%       1.5x
  Email          10%        15%        +5%       8.5x
  Content        10%        12%        +2%       5.2x
  Events         10%        8%         -2%       2.2x

  Projected Impact: +15% pipeline with same budget

A/B 测试统计分析

from scipy import stats
import numpy as np

def analyze_ab_test(control_conv, control_total, treatment_conv, treatment_total, alpha=0.05):
    """Analyze A/B test for statistical significance.

    Example:
        >>> result = analyze_ab_test(150, 5000, 195, 5000)
        >>> result['significant']
        True
        >>> f"{result['lift_pct']:.1f}%"
        '30.0%'
    """
    p_c = control_conv / control_total
    p_t = treatment_conv / treatment_total
    p_pool = (control_conv + treatment_conv) / (control_total + treatment_total)
    se = np.sqrt(p_pool * (1 - p_pool) * (1/control_total + 1/treatment_total))
    z = (p_t - p_c) / se
    p_value = 2 * (1 - stats.norm.cdf(abs(z)))

    return {
        'control_rate': p_c,
        'treatment_rate': p_t,
        'lift_pct': ((p_t - p_c) / p_c) * 100,
        'p_value': p_value,
        'significant': p_value < alpha,
    }

故障排查

症状可能原因解决方案
各归因模型分配的渠道贡献差异很大没有任何单一模型能反映全部事实;每种模型都有结构性偏差运行 3 种以上模型(首次触点、末次触点、基于位置),并进行比较;对于 B2B,默认使用基于位置的模型
ROAS 计算结果很好看,但销售管道没有增长收入归因统计了现有客户,而非新的销售管道将新业务归因与扩展业务归因分开;将销售管道与收入分开报告
营销报告和销售报告中的潜在客户数量不同营销在填写表单时统计 MQL,销售则在 CRM 中录入时按不同标准统计统一定义:在共享 SLA 中记录 MQL、SQL 和商机的具体标准
预测持续高估 20% 以上模型使用线性外推,未考虑季节性或饱和效应对较长期预测应用折减系数;使用集成方法(线性 + 增长率 + 移动平均)
每月构建高管仪表板耗时过长从 5 个以上架构各异的平台手动提取数据自动化数据收集;统一 UTM 和命名规范,确保跨平台分析一致
渠道 ROI 为负,但仍在产生销售管道B2B 销售周期较长,收入归因尚未跟上支出对销售周期为 3 个月以上的渠道使用基于销售管道的归因,而非已成交收入

成功标准

  • 部署多触点归因模型,比较 3 种以上模型,并记录渠道贡献差异
  • 在月末后的 3 个工作日内提交月度营销报告
  • 根据各渠道 ROI 数据提出预算重新分配建议,并按季度实施
  • 3 个月预测的准确率与实际值相差不超过 15%
  • 营销活动绩效报告针对每项 KPI 纳入目标值与实际值
  • 高管报告中的每个数据点都包含可执行的洞察(通过“那又怎样”测试)
  • 渠道数据完整度超过 95%(每个渠道的缺失数据不超过 5%)

范围与限制

范围内: 营销活动绩效分析、多触点归因建模、营销组合优化、ROI/ROAS 计算、预算分配建议、高管报告、群组留存分析、营销预测。

范围外: 分析实施与跟踪设置(请参阅 analytics-tracking 技能)、产品分析(请参阅 product-team 技能)、超出营销指标范围的财务建模(请参阅 finance 技能)、数据工程与数据仓库管理。

限制: 归因模型都是近似值——没有任何模型能完美反映买家旅程,尤其是高接触度 B2B 销售。预测基于历史数据外推并应用折减;不会考虑市场冲击或竞争对手的举措。预算优化假设渠道可线性扩量;大多数渠道在规模扩大时会出现边际收益递减。


脚本

脚本用途用法
scripts/channel_mix_optimizer.py分析渠道绩效并建议最佳预算分配python scripts/channel_mix_optimizer.py channels.json --budget 100000 --demo
scripts/cohort_analyzer.py按群组分析用户留存,识别趋势以及表现最佳和最差的群组python scripts/cohort_analyzer.py cohort_data.json --demo
scripts/marketing_forecast_generator.py使用线性、增长率和集成方法生成营销预测python scripts/marketing_forecast_generator.py historical.json --periods 6

评论

支持 Markdown