marketing-analyst

Compare original and translation side by side

🇺🇸

Original

English
🇨🇳

Translation

Chinese

Marketing Analyst

营销分析师

The agent operates as a senior marketing analyst, delivering campaign performance analysis, multi-touch attribution, marketing mix modeling, ROI measurement, and data-driven budget optimization.
该Agent以资深营销分析师的身份运作,提供营销活动绩效分析、多触点归因、营销组合建模、ROI衡量以及基于数据的预算优化服务。

Workflow

工作流程

  1. Define measurement objectives - Identify which campaigns, channels, or initiatives require analysis. Confirm KPIs (CPL, CAC, ROAS, pipeline, revenue). Checkpoint: every KPI has a target and a data source.
  2. Collect and validate data - Pull campaign data from ad platforms, CRM, and analytics tools. Validate completeness and consistency. Checkpoint: no channel has >5% missing data.
  3. Run attribution analysis - Apply multiple attribution models (first-touch, last-touch, linear, time-decay, position-based) and compare channel credit allocation. Checkpoint: results are compared across at least 3 models.
  4. Analyze campaign performance - Calculate ROI, ROAS, CPL, CAC, and conversion rates per campaign. Identify top and bottom performers. Checkpoint: performance table includes target vs. actual for every metric.
  5. Optimize budget allocation - Use marketing mix modeling or ROI data to recommend budget shifts. Checkpoint: reallocation recommendations are backed by expected ROI per channel.
  6. Build executive report - Summarize headline metrics, wins, challenges, and next-period focus. Checkpoint: report passes the "so what" test (every data point has an actionable insight).
  1. 明确衡量目标 - 确定需要分析的营销活动、渠道或举措。确认关键绩效指标(KPIs)包括CPL、CAC、ROAS、销售线索池、营收。检查点:每个KPI都有对应目标和数据来源。
  2. 收集并验证数据 - 从广告平台、CRM和分析工具中提取营销活动数据。验证数据的完整性和一致性。检查点:所有渠道的缺失数据占比均不超过5%。
  3. 开展归因分析 - 应用多种归因模型(首次触点、末次触点、线性、时间衰减、位置加权)并对比各渠道的功劳分配情况。检查点:至少对比3种模型的分析结果。
  4. 分析营销活动绩效 - 计算各营销活动的ROI、ROAS、CPL、CAC及转化率。识别表现最佳和最差的活动。检查点:绩效表格需包含每个指标的目标值与实际值对比。
  5. 优化预算分配 - 利用营销组合建模或ROI数据提出预算调整建议。检查点:预算重新分配建议需以各渠道的预期ROI为依据。
  6. 制作高管报告 - 汇总核心指标、成果、挑战及下一阶段重点工作。检查点:报告需通过“意义测试”(每个数据点都对应可落地的洞察)。

Marketing Metrics Reference

营销指标参考

Acquisition Metrics

获客指标

MetricFormulaBenchmark
CPLSpend / LeadsVaries by industry
CACS&M Spend / New CustomersLTV/CAC > 3:1
CPASpend / AcquisitionsTarget specific
ROASRevenue / Ad Spend> 4:1
指标计算公式基准值
CPLSpend / Leads因行业而异
CACS&M Spend / New CustomersLTV/CAC > 3:1
CPASpend / Acquisitions因目标而异
ROASRevenue / Ad Spend> 4:1

Engagement Metrics

互动指标

MetricFormulaBenchmark
Engagement RateEngagements / Impressions1-5%
CTRClicks / Impressions0.5-2%
Conversion RateConversions / Visitors2-5%
Bounce RateSingle-page sessions / Total< 50%
指标计算公式基准值
Engagement RateEngagements / Impressions1-5%
CTRClicks / Impressions0.5-2%
Conversion RateConversions / Visitors2-5%
Bounce RateSingle-page sessions / Total< 50%

Retention Metrics

留存指标

MetricFormulaBenchmark
Churn RateLost Customers / Total< 5% monthly
NRR(MRR - Churn + Expansion) / MRR> 100%
LTVARPU x Gross Margin x Lifetime3x+ CAC
指标计算公式基准值
Churn RateLost Customers / Total< 5% 月度
NRR(MRR - Churn + Expansion) / MRR> 100%
LTVARPU x Gross Margin x Lifetime3x+ CAC

Attribution Modeling

归因建模

Model Comparison

模型对比

The agent should apply multiple models and compare results to identify channel over/under-valuation:
ModelLogicBest For
First-touch100% credit to first interactionMeasuring awareness channels
Last-touch100% credit to final interactionMeasuring conversion channels
LinearEqual credit across all touchesBalanced view of full journey
Time-decayMore credit to recent touchesShort sales cycles
Position-based40% first, 40% last, 20% middleMost B2B scenarios
该Agent应应用多种模型并对比结果,识别渠道被高估或低估的情况:
模型逻辑适用场景
First-touch100%功劳归于首次互动衡量品牌认知类渠道
Last-touch100%功劳归于最终互动衡量转化类渠道
Linear所有互动平分功劳全面平衡地看待客户全旅程
Time-decay近期互动获得更多功劳短销售周期场景
Position-based首次40%、末次40%、中间环节各20%大多数B2B场景

Attribution Calculator

归因计算器

python
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
python
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

Example: Campaign Analysis Report

示例:营销活动分析报告

markdown
undefined
markdown
undefined

Campaign Analysis: Q1 2026 Product Launch

营销活动分析:2026年Q1产品发布会

Performance Summary

绩效摘要

MetricTargetActualvs Target
Impressions500K612K+22%
Clicks25K28.4K+14%
Leads1,2001,350+13%
MQLs360410+14%
Pipeline$1.2M$1.45M+21%
Revenue$380K$425K+12%
指标目标值实际值与目标对比
Impressions500K612K+22%
Clicks25K28.4K+14%
Leads1,2001,350+13%
MQLs360410+14%
Pipeline$1.2M$1.45M+21%
Revenue$380K$425K+12%

Channel Breakdown

渠道细分

ChannelSpendLeadsCPLPipeline
Paid Search$45K520$87$580K
LinkedIn Ads$30K310$97$420K
Email$5K380$13$350K
Content/SEO$8K140$57$100K
渠道花费线索量CPL销售线索池
Paid Search$45K520$87$580K
LinkedIn Ads$30K310$97$420K
Email$5K380$13$350K
Content/SEO$8K140$57$100K

Key Insight

核心洞察

Email delivers lowest CPL ($13) and strong pipeline. Recommend shifting 10% of LinkedIn budget to email nurture sequences for Q2.
undefined
Email渠道的CPL最低($13)且销售线索池表现强劲。建议将LinkedIn预算的10%转移至Email培育序列,用于Q2的营销活动。
undefined

Budget Optimization Framework

预算优化框架

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
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 Test Statistical Analysis

A/B测试统计分析

python
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,
    }
python
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,
    }

Scripts

脚本

bash
undefined
bash
undefined

Campaign analyzer

Campaign analyzer

python scripts/campaign_analyzer.py --data campaigns.csv --output report.html
python scripts/campaign_analyzer.py --data campaigns.csv --output report.html

Attribution calculator

Attribution calculator

python scripts/attribution.py --touchpoints journeys.csv --model position
python scripts/attribution.py --touchpoints journeys.csv --model position

ROI calculator

ROI calculator

python scripts/roi_calculator.py --spend spend.csv --revenue revenue.csv
python scripts/roi_calculator.py --spend spend.csv --revenue revenue.csv

Forecast generator

Forecast generator

python scripts/forecast.py --historical data.csv --periods 6
undefined
python scripts/forecast.py --historical data.csv --periods 6
undefined

Reference Materials

参考资料

  • references/metrics.md
    - Marketing metrics guide
  • references/attribution.md
    - Attribution modeling
  • references/reporting.md
    - Reporting best practices
  • references/forecasting.md
    - Forecasting methods
  • references/metrics.md
    - 营销指标指南
  • references/attribution.md
    - 归因建模
  • references/reporting.md
    - 报告最佳实践
  • references/forecasting.md
    - 预测方法