marketing-analyst について
キャンペーン測定、アトリビューション、ROI、予算計画を扱うマーケティング分析スキルです。入力を確認し、複数のモデルを比較して実行可能なレポートを作成します。
主な機能
- 01キャンペーン KPI 分析
- 02マルチタッチアトリビューション比較
- 03ROI と ROAS の測定
- 04予算配分の提案
- 05エグゼクティブレポート
- 06リテンションと予測の分析
活用シーン
- 01モデル間でチャネル貢献度を比較
- 02KPI 目標に対するキャンペーン評価
- 03ROI に基づくチャネル予算の調整
- 04月次マーケティングレポートの作成
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ borghei/ claude-skills --skill marketing-analystインストール後、Claude Code で/marketing-analystを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
scripts/channel_mix_optimizer.pycohort_analyzer.pymarketing_forecast_generator.py詳細
マーケティングアナリスト
エージェントはシニアマーケティングアナリストとして、キャンペーンのパフォーマンス分析、マルチタッチアトリビューション、マーケティングミックスモデリング、ROI測定、データに基づく予算最適化を行います。
まず確認すること
分析を実行する前に、以下の入力を確認してください。不明または曖昧な項目があれば、推測せずに質問してください。
- 対象となるキャンペーン/チャネル — 対象のキャンペーンまたはチャネルと日付範囲(データセットとレポートの対象範囲を定義します)
- KPIと目標値 — CPL、CAC、ROAS、パイプライン、売上について、それぞれ目標値とデータソースを確認します(目標値と実績のパフォーマンス表を作成するために必要です)
- セールスサイクルの長さ — B2Bのセールスサイクルが短いか長いか(アトリビューションモデルと、パイプラインと成約売上のどちらを報告するかを決定します)
- レポートの対象者 — 経営陣向けの要約か、オペレーションの詳細分析か(レポートの詳細度と、特に重要なセクションを決定します)
停止ルール:出力に最も影響する2~3項目だけを質問してください。ユーザーが「とにかく下書きを作成して」と言った場合は、そのまま進め、成果物の冒頭に前提条件を記載してください。
ワークフロー
- 測定目標を定義する - 分析が必要なキャンペーン、チャネル、施策を特定します。KPI(CPL、CAC、ROAS、パイプライン、売上)を確認します。確認ポイント:すべてのKPIに目標値とデータソースが設定されています。
- データを収集して検証する - 広告プラットフォーム、CRM、分析ツールからキャンペーンデータを取得します。完全性と一貫性を検証します。確認ポイント:欠損データが5%を超えるチャネルはありません。
- アトリビューション分析を実行する - 複数のアトリビューションモデル(ファーストタッチ、ラストタッチ、線形、時間減衰、ポジションベース)を適用し、チャネルへの貢献度配分を比較します。確認ポイント:少なくとも3つのモデルで結果を比較しています。
- キャンペーンのパフォーマンスを分析する - キャンペーンごとにROI、ROAS、CPL、CAC、コンバージョン率を計算します。最も成果の高いものと低いものを特定します。確認ポイント:パフォーマンス表に、すべての指標の目標値と実績値が含まれています。
- 予算配分を最適化する - マーケティングミックスモデリングまたはROIデータを用いて、予算の再配分を提案します。確認ポイント:再配分の提案には、チャネルごとの期待ROIの根拠があります。
- 経営陣向けレポートを作成する - 主要指標、成果、課題、次の期間に注力する項目をまとめます。確認ポイント:レポートが「つまり何が言えるのか」という基準を満たしています(すべてのデータポイントに実行可能なインサイトがあります)。
マーケティング指標リファレンス
獲得指標
| 指標 | 計算式 | ベンチマーク |
|---|---|---|
| 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% |
| LTV | ARPU 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 |