Skip to main content
パフォーマンスの成果をパブリッシャーと共有し、データドリブンな最適化や配信改善を可能にします。 応答時間: 約 5 秒(データ取り込み) リクエストスキーマ: https://adcontextprotocol.org/schemas/v2/media-buy/provide-performance-feedback-request.json レスポンススキーマ: https://adcontextprotocol.org/schemas/v2/media-buy/provide-performance-feedback-response.json

リクエストパラメーター

ParameterTypeRequiredDescription
media_buy_idstringYesパブリッシャー側のメディアバイ ID
measurement_periodobjectYesパフォーマンス測定期間
performance_indexnumberYes正規化されたスコア(0.0 = 価値なし、1.0 = 想定どおり、>1.0 = 想定超え)
package_idstringNoメディアバイ内の特定パッケージ(パッケージ単位のフィードバックの場合)
creative_idstringNo特定クリエイティブ(クリエイティブ単位のフィードバックの場合)
metric_typestringNo測定しているビジネスメトリクス(デフォルト: “overall_performance”)
feedback_sourcestringNoパフォーマンスデータのソース(デフォルト: “buyer_attribution”)

レスポンス(メッセージ)

レスポンスには人間が読めるメッセージが含まれ、次を行います。
  • フィードバックの受領を確認
  • 提供されたパフォーマンス水準の要約
  • フィードバックの最適化への活用方法を説明
  • 次のアクションや推奨事項を提示
メッセージの戻し方はプロトコルごとに異なります。
  • MCP: JSON レスポンスの message フィールドとして返却
  • A2A: アーティファクト内のテキストパートとして返却

レスポンス(ペイロード)

{
  "success": "boolean",
  "message": "string"
}

フィールド説明

  • success: パフォーマンスフィードバックの受領に成功したか
  • message: フィードバック処理に関する任意のメッセージ

プロトコル別の例

AdCP のペイロードはプロトコル間で同一です。リクエスト/レスポンスのラッパーのみが異なります。

MCP リクエスト

{
  "tool": "provide_performance_feedback",
  "arguments": {
    "media_buy_id": "gam_1234567890",
    "measurement_period": {
      "start": "2024-01-15T00:00:00Z",
      "end": "2024-01-21T23:59:59Z"
    },
    "performance_index": 1.35,
    "metric_type": "conversion_rate"
  }
}

MCP レスポンス

{
  "message": "Performance feedback received for campaign gam_1234567890. The 35% above-expected conversion rate will be used to optimize future delivery. Next optimization cycle runs tonight at midnight UTC.",
  "success": true
}

A2A リクエスト

自然言語での呼び出し

await a2a.send({
  message: {
    parts: [{
      kind: "text",
      text: "The campaign gam_1234567890 had a conversion rate 35% above expectations for the week of January 15-21. Please use this to optimize future delivery."
    }]
  }
});

スキルを明示して呼び出す

await a2a.send({
  message: {
    parts: [{
      kind: "data",
      data: {
        skill: "provide_performance_feedback",
        parameters: {
          media_buy_id: "gam_1234567890",
          measurement_period: {
            start: "2024-01-15T00:00:00Z",
            end: "2024-01-21T23:59:59Z"
          },
          performance_index: 1.35,
          metric_type: "conversion_rate"
        }
      }
    }]
  }
});

A2A レスポンス

A2A では結果をアーティファクトとして返します。
{
  "artifacts": [{
    "artifactId": "artifact-perf-feedback-abc789",
    "name": "performance_feedback_confirmation",
    "parts": [
      {
        "kind": "text",
        "text": "Performance feedback received for campaign gam_1234567890. The 35% above-expected conversion rate will be used to optimize future delivery. Next optimization cycle runs tonight at midnight UTC."
      },
      {
        "kind": "data",
        "data": {
          "success": true
        }
      }
    ]
  }]
}

主な違い

  • MCP: 引数付きのツール呼び出しを行い、フラットな JSON を返す
  • A2A: スキル呼び出しで入力を渡し、テキストとデータのパートを持つアーティファクトとして返す
  • ペイロード: A2A の input フィールドは MCP の arguments と同一構造

シナリオ

例 1: キャンペーンレベルのフィードバック

リクエスト

{
  "media_buy_id": "gam_1234567890",
  "measurement_period": {
    "start": "2024-01-01T00:00:00Z",
    "end": "2024-01-31T23:59:59Z"
  },
  "performance_index": 0.85,
  "metric_type": "brand_lift",
  "feedback_source": "third_party_measurement"
}

レスポンス - 想定未達

Message: “Performance feedback received for campaign gam_1234567890. The 15% below-expected brand lift suggests targeting refinement is needed. Our optimization algorithms will reduce spend on underperforming segments starting with the next cycle.” Payload:
{
  "success": true,
  "message": "Performance feedback processed successfully. Optimization algorithms updated."
}

例 2: パッケージ単位のフィードバック

リクエスト

{
  "media_buy_id": "meta_9876543210",
  "package_id": "pkg_social_feed",
  "measurement_period": {
    "start": "2024-02-01T00:00:00Z",
    "end": "2024-02-07T23:59:59Z"
  },
  "performance_index": 2.1,
  "metric_type": "click_through_rate",
  "feedback_source": "buyer_attribution"
}

レスポンス - 卓越した成果

Message: “Outstanding performance feedback for package pkg_social_feed! The 110% above-expected click-through rate indicates this audience segment is highly engaged. We’ll increase allocation to similar inventory and audiences.” Payload:
{
  "success": true,
  "message": "Exceptional performance noted. Increasing allocation to similar segments."
}

例 3: クリエイティブ単位のフィードバック

リクエスト

{
  "media_buy_id": "ttd_5555555555",
  "creative_id": "creative_video_123",
  "measurement_period": {
    "start": "2024-02-01T00:00:00Z",
    "end": "2024-02-07T23:59:59Z"
  },
  "performance_index": 0.65,
  "metric_type": "completion_rate",
  "feedback_source": "verification_partner"
}

レスポンス - 低調なクリエイティブ

Message: “Creative creative_video_123 shows 35% below-expected completion rate. Consider creative refresh or A/B testing alternative versions.” Payload:
{
  "success": true,
  "message": "Creative performance feedback recorded. Consider creative optimization."
}

例 4: 複数メトリクス(今後実装予定)

リクエスト - バッチフィードバック(未実装)

{
  "media_buy_id": "ttd_5555555555",
  "measurement_period": {
    "start": "2024-02-01T00:00:00Z",
    "end": "2024-02-14T23:59:59Z"
  },
  "feedback_metrics": [
    {
      "metric_type": "viewability",
      "performance_index": 1.15
    },
    {
      "metric_type": "completion_rate",
      "performance_index": 0.92
    },
    {
      "metric_type": "brand_safety",
      "performance_index": 1.05
    }
  ],
  "feedback_source": "verification_partner"
}

パフォーマンスインデックスのスケール

パフォーマンスインデックスはビジネス成果を正規化して伝えるための指標です。
  • 0.0: 価値が確認できない
  • 0.5: 想定を大幅に下回る(-50%)
  • 1.0: 想定どおり(0% 乖離)
  • 1.5: 想定比 50% 上振れ
  • 2.0+: 非常に優れた成果(100% 以上の上振れ)

よく使われる metric_type

  • overall_performance: 全体的な成功度(デフォルト)
  • conversion_rate: ポストクリック/ポストビューのコンバージョン
  • brand_lift: ブランド認知・好意度向上
  • click_through_rate: クリエイティブへのエンゲージメント
  • completion_rate: 動画・音声の完了率
  • viewability: ビューアブルインプレッション率
  • brand_safety: ブランドセーフティの準拠状況
  • cost_efficiency: 目標成果あたりのコスト

feedback_source の例

  • buyer_attribution: バイヤー自身の計測・アトリビューション
  • third_party_measurement: 第三者の計測パートナー
  • platform_analytics: パブリッシャープラットフォームの分析
  • verification_partner: 検証ベンダー

パブリッシャーがフィードバックを活用する方法

パブリッシャーはパフォーマンスインデックスを以下に活用します。
  1. ターゲティング最適化: 高パフォーマンスのセグメント・オーディエンスへ配信をシフト
  2. インベントリ改善: 価値の高い掲載面を特定し優先度を上げる
  3. 価格調整: 実績に基づいて CPM を更新
  4. アルゴリズム強化: 実際の成果データで機械学習モデルを学習
  5. 商品開発: パフォーマンス傾向をもとにプロダクト定義を洗練

利用上の注意

  • パフォーマンスフィードバックは任意だが、最適化に大きく寄与する
  • フィードバックはキャンペーンまたはパッケージ単位で提供可能
  • 同一期間に複数のインデックスを共有できる(バッチ送信は将来対応予定)
  • 効果はパブリッシャーのアルゴリズム成熟度に依存
  • 処理は非同期で行われる。レスポンスでステータスを確認可能
  • 過去のフィードバックは将来の配信パフォーマンス向上に役立つ

プライバシーとデータ共有

  • フィードバックの共有は任意で、バイヤーが制御する
  • 集計されたパフォーマンス傾向はプラットフォーム全体の改善に利用される場合がある
  • 個別キャンペーンの詳細はバイヤーとパブリッシャーの関係に限定される
  • パブリッシャーは AdCP ドキュメントで明確なデータ利用ポリシーを提示すべき

実装ガイド

パフォーマンスインデックスの計算

def calculate_performance_index(actual_metric, expected_metric):
    """
    Calculate normalized performance index
    
    Args:
        actual_metric: Measured performance value
        expected_metric: Baseline or expected performance value
        
    Returns:
        Performance index (0.0 = no value, 1.0 = expected, >1.0 = above expected)
    """
    if expected_metric == 0:
        return 0.0
        
    return actual_metric / expected_metric

# Examples:
# CTR: 0.15% actual vs 0.12% expected = 1.25 performance index (25% above)
# Conversions: 45 actual vs 60 expected = 0.75 performance index (25% below)
# Brand lift: 8% actual vs 5% expected = 1.6 performance index (60% above)

metric_type の決定

キャンペーン目標に基づいて metric_type を選択します。
METRIC_TYPE_MAPPING = {
    'awareness': 'brand_lift',
    'consideration': 'brand_lift', 
    'traffic': 'click_through_rate',
    'conversions': 'conversion_rate',
    'sales': 'conversion_rate',
    'engagement': 'completion_rate',
    'reach': 'overall_performance'
}

def get_metric_type(campaign_objective):
    return METRIC_TYPE_MAPPING.get(campaign_objective, 'overall_performance')

関連ドキュメント