Marketing Analyst

by borghei

skill

Expert marketing analytics covering campaign analysis, attribution modeling, marketing mix modeling, ROI measurement, and performance reporting.

Skill Details

Repository Files

1 file in this skill directory


name: marketing-analyst description: Expert marketing analytics covering campaign analysis, attribution modeling, marketing mix modeling, ROI measurement, and performance reporting. version: 1.0.0 author: Claude Skills category: marketing-growth tags: [analytics, attribution, roi, campaigns, reporting]

Marketing Analyst

Expert-level marketing analytics for data-driven decisions.

Core Competencies

  • Campaign performance analysis
  • Attribution modeling
  • Marketing mix modeling
  • ROI measurement
  • Customer analytics
  • Channel optimization
  • Forecasting
  • Reporting and visualization

Marketing Metrics Framework

Acquisition Metrics

Metric Formula Benchmark
CPL (Cost per Lead) Spend / Leads Varies by industry
CAC (Customer Acquisition Cost) S&M Spend / New Customers LTV/CAC > 3:1
CPA (Cost per Acquisition) Spend / Acquisitions Target specific
ROAS (Return on Ad Spend) Revenue / Ad Spend > 4:1

Engagement Metrics

Metric Formula Benchmark
Engagement Rate Engagements / Impressions 1-5%
Click-Through Rate Clicks / Impressions 0.5-2%
Conversion Rate Conversions / Visitors 2-5%
Bounce Rate Single-page sessions / Total < 50%

Retention Metrics

Metric Formula Benchmark
Churn Rate Lost Customers / Total < 5% monthly
Retention Rate 1 - Churn Rate > 95% monthly
NRR (Net Revenue Retention) (MRR - Churn + Expansion) / MRR > 100%
LTV (Lifetime Value) ARPU × Gross Margin × Lifetime 3x+ CAC

Attribution Modeling

Model Comparison

import pandas as pd

def calculate_attribution(touchpoints, model='linear'):
    """
    Calculate attribution credit for each touchpoint

    touchpoints: List of touchpoint events
    model: 'first', 'last', 'linear', 'time_decay', 'position'
    """

    n = len(touchpoints)
    credits = {}

    if model == 'first':
        credits[touchpoints[0]] = 1.0

    elif model == 'last':
        credits[touchpoints[-1]] = 1.0

    elif model == 'linear':
        credit = 1.0 / n
        for tp in touchpoints:
            credits[tp] = credits.get(tp, 0) + credit

    elif model == 'time_decay':
        # More recent = more credit
        decay_rate = 0.7
        total_weight = sum([decay_rate ** i for i in range(n)])
        for i, tp in enumerate(reversed(touchpoints)):
            weight = (decay_rate ** i) / total_weight
            credits[tp] = credits.get(tp, 0) + weight

    elif model == 'position':
        # 40% first, 40% last, 20% middle
        if n == 1:
            credits[touchpoints[0]] = 1.0
        elif n == 2:
            credits[touchpoints[0]] = 0.5
            credits[touchpoints[-1]] = 0.5
        else:
            credits[touchpoints[0]] = 0.4
            credits[touchpoints[-1]] = 0.4
            middle_credit = 0.2 / (n - 2)
            for tp in touchpoints[1:-1]:
                credits[tp] = credits.get(tp, 0) + middle_credit

    return credits

Attribution Report

┌─────────────────────────────────────────────────────────────┐
│               Attribution Analysis - [Period]                │
├─────────────────────────────────────────────────────────────┤
│  Model Comparison (Revenue Attribution)                      │
│                                                              │
│  Channel      First    Last    Linear   Position  Data-Driven│
│  Paid Search  $250K    $180K   $210K    $220K     $215K      │
│  Email        $120K    $200K   $160K    $165K     $170K      │
│  Social       $80K     $50K    $65K     $60K      $58K       │
│  Organic      $150K    $170K   $165K    $155K     $157K      │
├─────────────────────────────────────────────────────────────┤
│  Avg Touches to Conversion: 4.2                              │
│  Avg Days to Conversion: 18                                  │
│  Most Common Path: Paid → Email → Organic → Direct           │
└─────────────────────────────────────────────────────────────┘

Campaign Analysis

Campaign Performance Template

# Campaign Analysis: [Campaign Name]

## Overview
- Type: [Type]
- Duration: [Dates]
- Budget: $[Amount]
- Spend: $[Amount]

## Performance Summary

| Metric | Target | Actual | vs Target |
|--------|--------|--------|-----------|
| Impressions | X | Y | +/-% |
| Clicks | X | Y | +/-% |
| Leads | X | Y | +/-% |
| MQLs | X | Y | +/-% |
| Pipeline | $X | $Y | +/-% |
| Revenue | $X | $Y | +/-% |

## Channel Breakdown

| Channel | Spend | Leads | CPL | Pipeline |
|---------|-------|-------|-----|----------|
| [Channel] | $X | Y | $Z | $W |

## Creative Performance

| Variant | Impressions | CTR | Conv Rate |
|---------|-------------|-----|-----------|
| A | X | Y% | Z% |
| B | X | Y% | Z% |

## Audience Insights

### Top Performing Segments
1. [Segment]: [Performance]
2. [Segment]: [Performance]

### Underperforming Segments
1. [Segment]: [Performance]

## Key Learnings
- [Learning 1]
- [Learning 2]

## Recommendations
1. [Recommendation]
2. [Recommendation]

A/B Test Analysis

from scipy import stats
import numpy as np

def analyze_ab_test(control_conversions, control_total,
                    treatment_conversions, treatment_total,
                    alpha=0.05):
    """
    Analyze A/B test results for statistical significance
    """
    # Conversion rates
    p_control = control_conversions / control_total
    p_treatment = treatment_conversions / treatment_total

    # Pooled probability
    p_pool = (control_conversions + treatment_conversions) / \
             (control_total + treatment_total)

    # Standard error
    se = np.sqrt(p_pool * (1 - p_pool) *
                 (1/control_total + 1/treatment_total))

    # Z-score
    z = (p_treatment - p_control) / se

    # P-value
    p_value = 2 * (1 - stats.norm.cdf(abs(z)))

    # Lift
    lift = (p_treatment - p_control) / p_control

    return {
        'control_rate': p_control,
        'treatment_rate': p_treatment,
        'lift': lift,
        'lift_pct': lift * 100,
        'z_score': z,
        'p_value': p_value,
        'significant': p_value < alpha,
        'confidence': 1 - alpha
    }

Marketing Mix Modeling

MMM Framework

SALES = β₀ + β₁(TV) + β₂(Digital) + β₃(Print) + β₄(Seasonality) + ε

Components:
- Base: Organic demand without marketing
- TV: Television advertising impact
- Digital: Digital channels (paid, social)
- Print: Print advertising impact
- Seasonality: Time-based patterns
- Carryover: Delayed effects (adstock)

Outputs:
- Channel contribution to sales
- ROI by channel
- Optimal budget allocation

Budget Optimization

┌─────────────────────────────────────────────────────────────┐
│            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            │
└─────────────────────────────────────────────────────────────┘

Reporting

Marketing Dashboard

┌─────────────────────────────────────────────────────────────┐
│              Marketing Performance - [Month]                 │
├─────────────────────────────────────────────────────────────┤
│  ACQUISITION                                                 │
│  Visitors: 125K (+12%)   Leads: 5.2K (+8%)   CAC: $145 (-5%)│
├─────────────────────────────────────────────────────────────┤
│  PIPELINE                                                    │
│  MQLs: 823    SALs: 495    SQLs: 198    Pipeline: $2.4M     │
│  Conv: 15.8%  Conv: 60.1%  Conv: 40.0%  vs Goal: +108%      │
├─────────────────────────────────────────────────────────────┤
│  REVENUE                                                     │
│  Marketing Revenue: $580K    ROI: 5.2x    vs Goal: +115%    │
├─────────────────────────────────────────────────────────────┤
│  CHANNEL PERFORMANCE                                         │
│  [Bar chart by channel showing leads and pipeline]          │
├─────────────────────────────────────────────────────────────┤
│  TRENDS                                                      │
│  [Line chart showing key metrics over time]                 │
└─────────────────────────────────────────────────────────────┘

Executive Summary Template

# Marketing Performance: [Period]

## Headline
[One sentence summary of performance]

## Key Metrics
| Metric | Actual | Goal | Status |
|--------|--------|------|--------|
| Leads | X | Y | 🟢/🟡/🔴 |
| MQLs | X | Y | 🟢/🟡/🔴 |
| Pipeline | $X | $Y | 🟢/🟡/🔴 |
| Revenue | $X | $Y | 🟢/🟡/🔴 |

## Wins
- [Win 1]
- [Win 2]

## Challenges
- [Challenge 1]
- [Challenge 2]

## Next Period Focus
- [Focus area 1]
- [Focus area 2]

Reference Materials

  • references/metrics.md - Marketing metrics guide
  • references/attribution.md - Attribution modeling
  • references/reporting.md - Reporting best practices
  • references/forecasting.md - Forecasting methods

Scripts

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

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

# ROI calculator
python scripts/roi_calculator.py --spend spend.csv --revenue revenue.csv

# Forecast generator
python scripts/forecast.py --historical data.csv --periods 6

Related Skills

Attack Tree Construction

Build comprehensive attack trees to visualize threat paths. Use when mapping attack scenarios, identifying defense gaps, or communicating security risks to stakeholders.

skill

Grafana Dashboards

Create and manage production Grafana dashboards for real-time visualization of system and application metrics. Use when building monitoring dashboards, visualizing metrics, or creating operational observability interfaces.

skill

Matplotlib

Foundational plotting library. Create line plots, scatter, bar, histograms, heatmaps, 3D, subplots, export PNG/PDF/SVG, for scientific visualization and publication figures.

skill

Scientific Visualization

Create publication figures with matplotlib/seaborn/plotly. Multi-panel layouts, error bars, significance markers, colorblind-safe, export PDF/EPS/TIFF, for journal-ready scientific plots.

skill

Seaborn

Statistical visualization. Scatter, box, violin, heatmaps, pair plots, regression, correlation matrices, KDE, faceted plots, for exploratory analysis and publication figures.

skill

Shap

Model interpretability and explainability using SHAP (SHapley Additive exPlanations). Use this skill when explaining machine learning model predictions, computing feature importance, generating SHAP plots (waterfall, beeswarm, bar, scatter, force, heatmap), debugging models, analyzing model bias or fairness, comparing models, or implementing explainable AI. Works with tree-based models (XGBoost, LightGBM, Random Forest), deep learning (TensorFlow, PyTorch), linear models, and any black-box model

skill

Pydeseq2

Differential gene expression analysis (Python DESeq2). Identify DE genes from bulk RNA-seq counts, Wald tests, FDR correction, volcano/MA plots, for RNA-seq analysis.

skill

Query Writing

For writing and executing SQL queries - from simple single-table queries to complex multi-table JOINs and aggregations

skill

Pydeseq2

Differential gene expression analysis (Python DESeq2). Identify DE genes from bulk RNA-seq counts, Wald tests, FDR correction, volcano/MA plots, for RNA-seq analysis.

skill

Scientific Visualization

Meta-skill for publication-ready figures. Use when creating journal submission figures requiring multi-panel layouts, significance annotations, error bars, colorblind-safe palettes, and specific journal formatting (Nature, Science, Cell). Orchestrates matplotlib/seaborn/plotly with publication styles. For quick exploration use seaborn or plotly directly.

skill

Skill Information

Category:Skill
Version:1.0.0
Last Updated:1/13/2026