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. 02KPI 目標に対するキャンペーン評価
  3. 03ROI に基づくチャネル予算の調整
  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

詳細

マーケティングアナリスト

エージェントはシニアマーケティングアナリストとして、キャンペーンのパフォーマンス分析、マルチタッチアトリビューション、マーケティングミックスモデリング、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%
直帰率1ページのセッション数 / 合計セッション数< 50%
リテンション指標
指標計算式ベンチマーク
解約率失った顧客数 / 顧客総数月次 < 5%
NRR(MRR - 解約 + 拡大) / MRR> 100%
LTVARPU x 粗利益率 x 顧客継続期間CACの3倍以上

アトリビューションモデリング

モデルの比較

エージェントは複数のモデルを適用し、結果を比較して、チャネルの評価が過大または過小でないかを特定してください。

モデルロジック最適な用途
ファーストタッチ最初の接点に貢献度の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 skillを参照)、プロダクトアナリティクス(product-team skillsを参照)、マーケティング指標を超える財務モデリング(finance skillを参照)、データエンジニアリングとデータウェアハウスの管理。

制限事項: アトリビューションモデルは近似値であり、特に顧客接点の多い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

コメント