> ## Documentation Index
> Fetch the complete documentation index at: https://adcp-docs-ja.pier1.co.jp/llms.txt
> Use this file to discover all available pages before exploring further.

# コンバージョントラッキングと最適化ゴール

> AdCP のコンバージョントラッキング — sync_event_sources でピクセルとイベントソースを設定し、log_event でコンバージョンイベントを送信し、キャンペーン配信に最適化ゴールを設定します。

AdCP のコンバージョントラッキングは、広告費と事業成果を結びつける。ライフサイクルを管理するタスクは2つある。[`sync_event_sources`](/docs/media-buy/task-reference/sync_event_sources) はイベントの収集元を設定し、[`log_event`](/docs/media-buy/task-reference/log_event) はイベント自体を送信します。

イベントデータは配信レポート（コンバージョン数、ROAS、獲得単価）にフィードされ、メディアバイパッケージの最適化ゴールを有効にします。

## フロー

```mermaid theme={null}
sequenceDiagram
    participant B as Buyer
    participant S as Seller

    rect rgb(240, 248, 255)
        Note over B,S: Setup
        B->>S: sync_event_sources (configure sources)
        S->>B: Setup instructions (snippets, pixel URLs)
        B->>B: Install snippets on site/app
    end

    rect rgb(240, 255, 240)
        Note over B,S: Event collection
        B->>S: log_event (send conversions)
        S->>S: Match users, attribute conversions
    end

    rect rgb(255, 248, 240)
        Note over B,S: Optimization
        B->>S: create_media_buy (with optimization_goals)
        S->>S: Optimize delivery toward conversions
        B->>S: get_media_buy_delivery
        S->>B: Conversion metrics (ROAS, CPA)
    end
```

これは推奨される順序を示しています。実際には、イベントが流れる前にメディアバイを作成することもできます。セラーは十分なイベント履歴が蓄積されてから最適化を開始します。

## イベントソース

イベントソースは、コンバージョンイベントを収集するチャネルを表します。ウェブサイトピクセル、モバイル SDK、サーバー間連携、CRM インポートなどがあります。

[`sync_event_sources`](/docs/media-buy/task-reference/sync_event_sources) でイベントソースを設定します。`event_source_id`、任意の `name`、`event_types`、`allowed_domains` を指定します。レスポンスには各ソースの追加フィールドが含まれます。

| フィールド           | 型                               | 説明                                                         |
| --------------- | ------------------------------- | ---------------------------------------------------------- |
| `seller_id`     | string                          | セラーの広告プラットフォームが割り当てた識別子                                    |
| `action`        | string                          | 発生したこと: `created`、`updated`、`unchanged`、`deleted`、`failed` |
| `managed_by`    | string                          | `buyer`（自分が設定した）または `seller`（常時オン、セラー管理）                   |
| `action_source` | [ActionSource](#action-sources) | イベントソースの種類（ウェブサイトピクセル、アプリ SDK など）                          |
| `setup`         | object                          | 実装の詳細 — スニペットコード、スニペットタイプ、手順                               |

### バイヤー管理 vs セラー管理

**バイヤー管理**ソースは `sync_event_sources` を通じて自分が設定するものです。イベントタイプ、ドメイン、ライフサイクルを自分で管理します。

**セラー管理**ソースは常時オンで、レスポンスに `managed_by: "seller"` として現れる。これはコマースメディアでよく見られ、リテーラーが組み込みアトリビューション（例：自社プラットフォームでの購入トラッキング）を提供する場合に使われます。`conversion_tracking.platform_managed: true` を持つプロダクトは、セラーがこれらのソースを提供することを示しています。

アカウント上のすべてのソース（セラー管理のものを含む）を検出するには、`event_sources` 配列を指定せずに `sync_event_sources` を呼び出す。

```json theme={null}
{
  "$schema": "https://adcontextprotocol.org/schemas/v3/media-buy/sync-event-sources-request.json",
  "account": { "account_id": "acct_12345" }
}
```

## イベント

イベントは、購入、リード送信、ページビュー、アプリインストール、その他の[標準イベントタイプ](#event-types)といったユーザーアクションを表します。

[`log_event`](/docs/media-buy/task-reference/log_event) でイベントを送信します。

```json theme={null}
{
  "$schema": "https://adcontextprotocol.org/schemas/v3/core/event.json",
  "event_id": "evt_purchase_12345",
  "event_type": "purchase",
  "event_time": "2026-01-15T14:30:00Z",
  "action_source": "website",
  "event_source_url": "https://www.example.com/checkout/confirm",
  "user_match": {
    "hashed_email": "a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2",
    "click_id": "abc123def456",
    "click_id_type": "gclid"
  },
  "custom_data": {
    "value": 149.99,
    "currency": "USD",
    "order_id": "order_98765",
    "num_items": 3
  }
}
```

| フィールド               | 型                               | 必須  | 説明                                                            |
| ------------------- | ------------------------------- | --- | ------------------------------------------------------------- |
| `event_id`          | string                          | Yes | 重複排除のための一意識別子（event\_type + event\_source\_id のスコープ）。最大256文字。 |
| `event_type`        | [EventType](#event-types)       | Yes | 標準イベントタイプ                                                     |
| `event_time`        | date-time                       | Yes | イベント発生時刻の ISO 8601 タイムスタンプ                                    |
| `user_match`        | [UserMatch](#user-match)        | No  | アトリビューションマッチングのためのユーザー識別子                                     |
| `custom_data`       | [CustomData](#custom-data)      | No  | イベント固有のデータ（value、currency、items）                              |
| `action_source`     | [ActionSource](#action-sources) | No  | イベントが発生した場所                                                   |
| `event_source_url`  | uri                             | No  | イベントが発生した URL（action\_source が `website` の場合は必須）              |
| `custom_event_name` | string                          | No  | カスタムイベントの名前（event\_type が `custom` の場合）                       |

イベントは `event_id` + `event_type` + `event_source_id` で重複排除されます。同じイベントを複数回送信しても安全です。

## ユーザーマッチ

ユーザー識別子により、セラーはコンバージョンを広告インプレッションにアトリビュートできます。利用可能な最も強力な識別子を提供すること。識別子が多いほどマッチ率が高くなります。

```json theme={null}
{
  "$schema": "https://adcontextprotocol.org/schemas/v3/core/user-match.json",
  "hashed_email": "a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2",
  "uids": [
    { "type": "uid2", "value": "AbC123XyZ..." }
  ],
  "click_id": "abc123def456",
  "click_id_type": "gclid"
}
```

少なくとも1つの識別子が必要です。強いものから弱いものへの順序:

| フィールド               | 型      | マッチ品質 | 説明                                                         |
| ------------------- | ------ | ----- | ---------------------------------------------------------- |
| `uids`              | UID\[] | 確定的   | ユニバーサル ID の値（`rampid`、`id5`、`uid2`、`euid`、`pairid`、`maid`） |
| `hashed_email`      | string | 確定的   | 小文字・トリム済みメールアドレスの SHA-256 ハッシュ（64文字の16進数）                  |
| `hashed_phone`      | string | 確定的   | E.164 形式の電話番号の SHA-256 ハッシュ（64文字の16進数）                     |
| `click_id`          | string | 確定的   | プラットフォームのクリック識別子（fbclid、gclid、ttclid など）                   |
| `click_id_type`     | string | —     | クリック識別子の種類                                                 |
| `client_ip`         | string | 確率的   | クライアント IP アドレス（`client_user_agent` が必要）                    |
| `client_user_agent` | string | 確率的   | クライアントユーザーエージェント（`client_ip` が必要）                          |

**ハッシュ化**: ハッシュ前に正規化すること。メールアドレスは小文字にして空白をトリムし、電話番号は E.164 形式（例: `+12065551234`）にします。SHA-256 でハッシュ化し、64文字の小文字16進数として出力します。

利用可能な場合は複数の識別子タイプを送信すること。セラーは最善のマッチを使用します。

## カスタムデータ

アトリビューションとレポートのためのイベント固有データ。購入イベントでは、ROAS レポートを有効にするために常に `value` と `currency` を含めること。

```json theme={null}
{
  "$schema": "https://adcontextprotocol.org/schemas/v3/core/event-custom-data.json",
  "value": 149.99,
  "currency": "USD",
  "order_id": "order_98765",
  "content_ids": ["SKU-1234", "SKU-5678"],
  "num_items": 3,
  "contents": [
    { "id": "SKU-1234", "quantity": 2, "price": 49.99, "brand": "Acme" },
    { "id": "SKU-5678", "quantity": 1, "price": 50.01, "brand": "Nova" }
  ]
}
```

| フィールド              | 型          | 説明                                             |
| ------------------ | ---------- | ---------------------------------------------- |
| `value`            | number     | イベントの金銭的価値                                     |
| `currency`         | string     | ISO 4217 通貨コード（例: `USD`、`EUR`、`GBP`）           |
| `order_id`         | string     | 一意の注文または取引識別子                                  |
| `content_ids`      | string\[]  | 商品またはコンテンツの識別子                                 |
| `content_type`     | string     | コンテンツのカテゴリー（product、service など）                |
| `content_name`     | string     | 商品またはコンテンツの名前                                  |
| `content_category` | string     | 商品またはコンテンツのカテゴリー                               |
| `num_items`        | integer    | イベントのアイテム数                                     |
| `search_string`    | string     | 検索クエリ（検索イベントの場合）                               |
| `contents`         | Content\[] | アイテムごとの詳細: `id`（必須）、`quantity`、`price`、`brand` |

## イベントタイプ

IAB ECAPI に準拠した標準マーケティングイベントタイプ:

| イベントタイプ                 | 説明                                   |
| ----------------------- | ------------------------------------ |
| `page_view`             | ユーザーがページを閲覧した                        |
| `view_content`          | ユーザーが特定のコンテンツ（商品、記事など）を閲覧した          |
| `select_content`        | ユーザーがコンテンツを選択またはクリックした               |
| `select_item`           | ユーザーがリストから特定の商品またはアイテムを選択した          |
| `search`                | ユーザーが検索を実行した                         |
| `share`                 | ユーザーがソーシャルまたはメッセージングでコンテンツをシェアした     |
| `add_to_cart`           | ユーザーがカートにアイテムを追加した                   |
| `remove_from_cart`      | ユーザーがカートからアイテムを削除した                  |
| `viewed_cart`           | ユーザーがショッピングカートを閲覧した                  |
| `add_to_wishlist`       | ユーザーがウィッシュリストにアイテムを追加した              |
| `initiate_checkout`     | ユーザーがチェックアウトプロセスを開始した                |
| `add_payment_info`      | ユーザーが支払い情報を追加した                      |
| `purchase`              | ユーザーが購入を完了した                         |
| `refund`                | 購入が全額または一部払い戻された（ROAS を調整します）        |
| `lead`                  | ユーザーが関心を示した（フォーム送信、サインアップなど）         |
| `qualify_lead`          | リードが営業またはスコアリング基準で適格とされた             |
| `close_convert_lead`    | リードが顧客に転換したまたはディールがクローズした            |
| `disqualify_lead`       | リードが不適格とされたまたは見込みなしとマークされた           |
| `complete_registration` | ユーザーがアカウント登録を完了した                    |
| `subscribe`             | ユーザーがサービスまたはニュースレターを購読した             |
| `start_trial`           | ユーザーが無料トライアルを開始した                    |
| `app_install`           | ユーザーがアプリケーションをインストールした               |
| `app_launch`            | ユーザーがアプリケーションを起動した                   |
| `contact`               | ユーザーが連絡を開始した（電話、メッセージなど）             |
| `schedule`              | ユーザーが予約またはイベントをスケジュールした              |
| `donate`                | ユーザーが寄付をした                           |
| `submit_application`    | ユーザーが申し込みを送信した（ローン、求人など）             |
| `custom`                | カスタムイベントタイプ（`custom_event_name` で指定） |

## アクションソース

コンバージョンイベントの発生元:

| アクションソース           | 説明                          |
| ------------------ | --------------------------- |
| `website`          | ウェブサイト上でイベントが発生した           |
| `app`              | モバイルまたはデスクトップアプリ内でイベントが発生した |
| `offline`          | オフラインでイベントが発生した（インポートデータ）   |
| `phone_call`       | 電話から発生したイベント                |
| `chat`             | チャット会話から発生したイベント            |
| `email`            | メールのインタラクションから発生したイベント      |
| `in_store`         | 実店舗でイベントが発生した               |
| `system_generated` | 自動化システムによって生成されたイベント        |
| `other`            | その他のソース（`ext` で指定）          |

## イベントサーフェス

`action_source` は互換性のため意図的にフラットなままです。最適化に関連するソースがより多くの構造を必要とする場合——特に自社プラットフォームのプロパティにおけるクリエイターやコンテンツのエンゲージメント——には `surface` を使います。

```json theme={null}
{
  "$schema": "https://adcontextprotocol.org/schemas/v3/core/event-surface.json",
  "category": "owned_property",
  "property_type": "channel",
  "namespace": "video_platform",
  "property_id": "channel_123"
}
```

| Field           | Type   | Description                                                                                                             |
| --------------- | ------ | ----------------------------------------------------------------------------------------------------------------------- |
| `category`      | enum   | 閉じた汎用カテゴリ: `owned_property`、`website`、`app`、`offline`、`phone_call`、`chat`、`email`、`in_store`、`system_generated`、`other` |
| `property_type` | string | プロパティ種別のオープンな語彙。`channel`、`profile`、`feed`、`list`、`podcast`、`playlist`、`newsletter` など                                  |
| `namespace`     | string | 自由形式のプラットフォーム、パブリッシャー、システムの名前空間。`video_platform`、`short_video_app`、`audio_service` など。列挙ではありません                         |
| `property_id`   | string | `namespace` 内のプロパティの任意の識別子                                                                                              |

`owned_property` では `property_type` と `namespace` の両方を設定し、プラットフォームが安定したプロパティ識別子を公開している場合は常に `property_id` を含めてください。

`surface.category` が `action_source` の値と一致する場合、プロデューサーは `action_source` を同じ値に設定すべきです。`owned_property` では、古いコンシューマーのために最も近い互換のフラット値を保ちます——プラットフォームネイティブなイベントでは一般に `system_generated`、より近い値がない場合は `other`。生のコンバージョン起点のようなプラットフォームネイティブの詳細は引き続き `ext` に載せられますが、共有される最適化の意味は `event_type`、`action_source`、`surface` に属します。

## イベントソースの健全性

イベントソースの品質を評価するセラーは、[`sync_event_sources`](/docs/media-buy/task-reference/sync_event_sources) のレスポンスで各ソースに `health` オブジェクトを含めます。これは、Snap の Event Quality Score（EQS）や Meta の Event Match Quality（EMQ）のようなプラットフォーム固有の品質スコアの AdCP における等価物です。

`status` フィールドが AdCP 標準のスコアです——すべてのセラー間で比較可能です:

| Status         | Meaning                              |
| -------------- | ------------------------------------ |
| `insufficient` | セットアップ未完了、またはイベント品質が低すぎる——最適化を実行できない |
| `minimum`      | 機能はするが、データ品質が最適化の有効性を制限する            |
| `good`         | ほとんどの最適化目標について品質閾値を満たす               |
| `excellent`    | すべての次元で品質閾値を上回る                      |

バイヤーエージェントは、`detail` ではなく `status` に基づいて判断すべきです。任意の `detail` オブジェクトは、人間向けダッシュボードや高度な診断のためにセラー固有のスコアリング（例: Snap の 0〜10 の EQS、Meta の 0〜10 の EMQ）を含みますが、スケールはセラーによって異なり、プラットフォーム間で比較できません。

| Field                 | Type      | Description                                                                                            |
| --------------------- | --------- | ------------------------------------------------------------------------------------------------------ |
| `status`              | string    | AdCP 標準の健全性レベル。セラー横断の判断に使用します。                                                                         |
| `detail`              | object    | セラー固有の `score`、`max_score`、任意の `label`。セラーがネイティブな品質スコアを持つ場合にのみ存在します。                                   |
| `match_rate`          | number    | 広告インタラクションに一致したイベントの割合（0.0〜1.0）。低い率は user\_match 識別子が弱いことを示します。マッチ率を計算するセラー（Snap、Meta）からのみ利用可能。        |
| `last_event_at`       | date-time | 受信した最新イベントのタイムスタンプ。                                                                                    |
| `evaluated_at`        | date-time | この健全性評価が計算された時刻。古い評価の検出に使用します。                                                                         |
| `events_received_24h` | integer   | 過去 24 時間に受信したイベント数。                                                                                    |
| `issues`              | array     | `severity` と `message` を持つ実行可能な問題。セラーは最も実行可能な上位 3〜5 件に限定すべきです。バイヤーエージェントは配列の位置に頼らず severity でソートすべきです。 |

健全性はアカウント単位ではなく、イベントソース単位で報告されます。健全なウェブサイトピクセルと壊れたアプリ SDK を持つバイヤーは、それぞれで異なる健全性を見ます。

**`health` が不在の場合**、セラーはイベントソースの品質を評価していません。バイヤーエージェントは健全性によるゲーティングなしで進めるべきです——セラーが内部で品質を扱います。不在の健全性を `insufficient` として扱わないでください。

### セラーによる健全性の計算方法

ネイティブな API アクセス可能の品質スコア（Snap EQS、Meta EMQ）を持つセラーは、それらを `status` と `detail` で直接中継します。ほとんどのセラーはネイティブスコアを持たず、運用メトリクスから `status` を導出します:

* **`insufficient`**: タグが非アクティブ、または `events_received_24h` が 0
* **`minimum`**: タグはアクティブだが、低ボリュームまたは高エラー率
* **`good`**: 安定して発火、妥当なボリューム、コアイベントタイプをカバー
* **`excellent`**: 高ボリューム、低エラー、拡張マッチングが有効

セラーがレポートデータから健全性を計算する場合、`evaluated_at` のタイムスタンプが評価の鮮度をバイヤーに伝えます。24 時間より古い評価は、タグ設定やイベントボリュームの最近の変更を反映していない可能性があります。これらのセラーでは `detail` オブジェクトは不在です——中継すべきネイティブスコアがありません。

**スキーマ**: [`/schemas/v3/core/event-source-health.json`](https://adcontextprotocol.org/schemas/v3/core/event-source-health.json)

## 計測レディネス

イベントベースの最適化をサポートするプロダクトは、[`get_products`](/docs/media-buy/task-reference/get_products) のレスポンスに `measurement_readiness` オブジェクトを含められます。これは、バイヤーのイベント設定がそのプロダクトが効果的に最適化するのに十分かどうかを伝えます。

| Field                  | Type         | Description                                              |
| ---------------------- | ------------ | -------------------------------------------------------- |
| `status`               | string       | AdCP 標準のレベル: `insufficient`、`minimum`、`good`、`excellent` |
| `required_event_types` | EventType\[] | このプロダクトが必要とするイベントタイプ                                     |
| `missing_event_types`  | EventType\[] | バイヤーが設定していない必須タイプ                                        |
| `issues`               | array        | `severity` と `message` を持つ実行可能な問題                        |
| `notes`                | string       | セラーの説明または推奨事項                                            |

計測レディネスは、バイヤーのアカウントのコンテキストでプロダクトごとに評価されます。同じプロダクトでも、イベントソースの設定に応じてバイヤーごとに異なるレディネスを示します。

**`measurement_readiness` が不在の場合**、そのプロダクトはイベントベースの最適化を使わない（CTV の認知、保証付きディスプレイ）か、セラーがレディネス評価を提供していないかのいずれかです。どちらの場合も、バイヤーエージェントはそのプロダクトを実行可能として扱うべきです。不在のレディネスを `insufficient` として扱わないでください。

イベントソースの健全性と異なり、計測レディネスには `evaluated_at` タイムスタンプがありません——バイヤーの現在のイベントソース設定を使って、`get_products` の呼び出しごとに新しく評価されます。

### セラー横断のバイヤーエージェントのパターン

複数のセラーと対話するバイヤーエージェントは、どこでも機能する一組のルールを書きます。`insufficient` 以外のステータスは、そのプロダクトが最適化できることを意味します——問題はどれだけうまくやれるかです。標準化された `status` フィールドにより、セラーごとの統合コードは不要です:

```javascript test=false theme={null}
// Works across all sellers — no seller-specific logic
for (const seller of sellers) {
  const sources = await seller.syncEventSources({ account: seller.account });

  // Surface issues from any seller — sort by severity, don't rely on array position
  for (const source of sources.event_sources) {
    if (source.health?.status === "insufficient") {
      surfaceIssues(source.health.issues ?? []);
    }
  }

  const products = await seller.getProducts({
    account: seller.account,
    buying_mode: "brief",
    brief: campaign.brief,
  });

  for (const product of products.products) {
    const mr = product.measurement_readiness;

    // Absent = no event-based optimization needed (CTV, awareness), treat as viable
    if (!mr) {
      viable.push(product);
      continue;
    }

    // For DR products, require good or better
    if (campaign.goal === "conversions" && mr.status === "minimum") {
      warnings.push({ product, reason: "Event setup is functional but limits optimization" });
      viable.push(product); // Still viable, but flag it
    } else if (mr.status !== "insufficient") {
      viable.push(product);
    } else {
      skipped.push({ product, issues: mr.issues });
    }
  }
}
```

**スキーマ**: [`/schemas/v3/core/measurement-readiness.json`](https://adcontextprotocol.org/schemas/v3/core/measurement-readiness.json)

### 信頼境界

`issues[].message`、`measurement_readiness.notes`、`detail.label` の各フィールドはセラー提供の自由テキストです。バイヤーエージェントはこれらを信頼できないコンテンツとして扱うべきです——信頼境界なしに LLM のシステムプロンプトへ直接渡したり、意思決定の入力として使ったりしないでください。人間に表示したり、情報提供のコンテキストに含めたりするのは安全ですが、エージェントの制御フローに影響を与えるべきではありません。

## 最適化ゴール

最適化ゴールは、セラーに対して何に向けて配信を最適化するかを伝える。[`create_media_buy`](/docs/media-buy/task-reference/create_media_buy#campaign-with-conversion-optimization) のパッケージに設定します。パッケージはゴールの配列を受け付け、各ゴールにはオプションの `priority`（1が最高）を指定できます。プロダクトは、パッケージが持てるゴール数を制限する場合に `max_optimization_goals` を宣言する（ほとんどのソーシャルプラットフォームは1つのみ受け付ける）。

**スキーマ**: [`/schemas/v3/core/optimization-goal.json`](https://adcontextprotocol.org/schemas/v3/core/optimization-goal.json)

ゴールは `kind` で識別される2種類があります。

* **`kind: "metric"`** — セラーがトラッキングする配信メトリクス（クリック、ビュー、エンゲージメントなど）に向けて最適化します。イベントソースやコンバージョントラッキングの設定は不要です。プロダクトはサポートするメトリクスを `metric_optimization` で宣言します。
* **`kind: "event"`** — 広告主がトラッキングするコンバージョンイベントに向けて最適化します。`sync_event_sources` で登録されたイベントソースが必要です。プロダクトはサポートを `conversion_tracking` で宣言します。

### kind: event

広告主がトラッキングするコンバージョンイベントに向けて最適化します。`event_sources` 配列は、このゴールにフィードするソースとタイプのペアを定義します。セラーが `multi_source_event_dedup`（[`get_adcp_capabilities`](/docs/protocol/get_adcp_capabilities) で宣言）をサポートしている場合、すべてのエントリを通じて `event_id` で重複排除します。複数のソースから報告された同じビジネスイベントは1回としてカウントされ、最初にマッチしたエントリの `value_field` と `value_factor` が使用されます。`multi_source_event_dedup` が存在しないまたは false の場合、バイヤーはゴールごとに1つのイベントソースを使用すべきです。

**コンバージョン単価**（単一ソース）:

```json theme={null}
{
  "kind": "event",
  "event_sources": [
    { "event_source_id": "website_pixel", "event_type": "lead" }
  ],
  "target": { "kind": "cost_per", "value": 25.00 },
  "priority": 1
}
```

**広告費用対効果**（返金を含む複数ソース）:

```json theme={null}
{
  "kind": "event",
  "event_sources": [
    { "event_source_id": "web_pixel", "event_type": "purchase", "value_field": "order_total" },
    { "event_source_id": "app_sdk", "event_type": "purchase", "value_field": "order_total" },
    { "event_source_id": "web_pixel", "event_type": "refund", "value_field": "refund_amount", "value_factor": -1 }
  ],
  "target": { "kind": "per_ad_spend", "value": 4.0 },
  "attribution_window": { "post_click": { "interval": 28, "unit": "days" }, "post_view": { "interval": 1, "unit": "days" } },
  "priority": 1
}
```

`per_ad_spend` ターゲットでは、各イベントソースエントリに `value_field`（`custom_data` のどのフィールドが金銭的価値を持つか）とオプションの `value_factor`（乗数、デフォルトは1）を指定します。セラーは重複排除されたすべてのイベントに対して `sum(value_field * value_factor) / spend` を計算します。

**コンバージョン価値の最大化**（特定の ROAS ターゲットなし）:

```json theme={null}
{
  "kind": "event",
  "event_sources": [
    { "event_source_id": "web_pixel", "event_type": "purchase", "value_field": "value" }
  ],
  "target": { "kind": "maximize_value" },
  "priority": 1
}
```

`maximize_value` ターゲットは、特定のリターン比率にコミットせずに高価値コンバージョンに向けて支出を誘導します。少なくとも1つのイベントソースエントリに `value_field` が必要です。

| フィールド                               | 型                                                      | 必須                                             | 説明                                                                                                                                                                      |
| ----------------------------------- | ------------------------------------------------------ | ---------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `kind`                              | `"event"`                                              | Yes                                            | 識別子                                                                                                                                                                     |
| `event_sources`                     | array                                                  | Yes                                            | このゴールにフィードするソースとタイプのペア。セラーはエントリを通じて `event_id` で重複排除します。同じ `event_id` が異なる `value_field` を持つ複数のソースから届いた場合、セラーはこの配列の最初にマッチしたエントリの `value_field` と `value_factor` を使用します。 |
| `event_sources[].event_source_id`   | string                                                 | Yes                                            | イベントソース（`sync_event_sources` で設定済みであること）                                                                                                                                |
| `event_sources[].event_type`        | [EventType](#event-types)                              | Yes                                            | 含めるイベントタイプ（例: `purchase`、`lead`、`refund`）                                                                                                                               |
| `event_sources[].custom_event_name` | string                                                 | event\_type が `custom` の場合                     | プラットフォーム固有のカスタムイベント名                                                                                                                                                    |
| `event_sources[].value_field`       | string                                                 | ターゲットが `per_ad_spend` または `maximize_value` の場合 | `custom_data` のどのフィールドが金銭的価値を持つか。セラーはこれを価値の抽出と集計に使用しなければなりません。基盤となるプラットフォーム API に直接渡されるわけではありません。                                                                       |
| `event_sources[].value_factor`      | number                                                 | No                                             | セラーが集計前に `value_field` に適用しなければなりません乗数（デフォルト1）。返金には -1、センティーム（1/100）には 0.01、カウントには含めながら価値の貢献をゼロにするには 0 を使用します。                                                          |
| `target.kind`                       | `"cost_per"` \| `"per_ad_spend"` \| `"maximize_value"` | No                                             | ターゲットタイプ。省略した場合、セラーは予算内でコンバージョン数を最大化します。                                                                                                                                |
| `target.value`                      | number                                                 | Yes（ターゲット設定時）                                  | 購入通貨でのイベント単価、またはリターン比率（例: 4.0 = $1 の支出に対して $4）                                                                                                                          |
| `attribution_window`                | object                                                 | No                                             | クリックスルーとビュースルーのウィンドウ。省略した場合、セラーはデフォルトを使用します。                                                                                                                            |
| `priority`                          | integer                                                | No                                             | 1が最高優先度。省略した場合、セラーは配列の順序を使用します。                                                                                                                                         |

### kind: metric

セラーがトラッキングする配信メトリクスに向けて最適化します。イベントソースは不要です。セラーはこれらをネイティブにトラッキングします。プロダクトはサポートするメトリクスを `metric_optimization.supported_metrics` で宣言します。

**クリック数の最大化**（ターゲットなし — セラーが予算内でボリュームを最適化）:

```json theme={null}
{
  "kind": "metric",
  "metric": "clicks"
}
```

**クリック単価**:

```json theme={null}
{
  "kind": "metric",
  "metric": "clicks",
  "target": { "kind": "cost_per", "value": 2.00 },
  "priority": 2
}
```

**最低クリック率**:

```json theme={null}
{
  "kind": "metric",
  "metric": "clicks",
  "target": { "kind": "threshold_rate", "value": 0.001 },
  "priority": 2
}
```

**特定ベンダーからの最低アテンション**（`kind: "metric"` における `attention_seconds` / `attention_score` の列挙値は非推奨です——ベンダーによって実証されるメトリクスは代わりに `kind: "vendor_metric"` を使い、ゴールを特定の計測ベンダーに結び付けます）:

```json theme={null}
{
  "kind": "vendor_metric",
  "vendor": { "domain": "adelaidemetrics.com" },
  "metric_id": "attention_score",
  "target": { "kind": "threshold_rate", "value": 70 },
  "priority": 3
}
```

**エンゲージメントの最大化**（ソーシャルリアクション、コメント、シェア、ストーリー開封、オーバーレイタップ）:

```json theme={null}
{
  "kind": "metric",
  "metric": "engagements"
}
```

**再生時間しきい値付きの完了ビュー**（TikTok での6秒ビュー）:

```json theme={null}
{
  "kind": "metric",
  "metric": "completed_views",
  "view_duration_seconds": 6,
  "target": { "kind": "cost_per", "value": 0.02 },
  "priority": 1
}
```

| フィールド                   | 型                                  | 必須            | 説明                                                                                                                                                                                                               |
| ----------------------- | ---------------------------------- | ------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `kind`                  | `"metric"`                         | Yes           | 識別子                                                                                                                                                                                                              |
| `metric`                | string                             | Yes           | セラーネイティブのメトリクス（下記のメトリクス表を参照）                                                                                                                                                                                     |
| `view_duration_seconds` | number                             | No            | `completed_views` イベントとして認定される最低動画再生時間（秒単位）。メトリクスが `completed_views` の場合にのみ適用されます。省略した場合、セラーはプラットフォームのデフォルトを使用します。プロダクトの `metric_optimization.supported_view_durations` に記載された値でなければなりません。セラーはサポートされていない値を拒否します。 |
| `target.kind`           | `"cost_per"` \| `"threshold_rate"` | No            | ターゲットタイプ。省略した場合、セラーは予算内でメトリクスのボリュームを最大化します。                                                                                                                                                                      |
| `target.value`          | number                             | Yes（ターゲット設定時） | 購入通貨でのメトリクス単位あたりのコスト、またはインプレッションごとの最低値                                                                                                                                                                           |
| `priority`              | integer                            | No            | 1が最高優先度。省略した場合、セラーは配列の順序を使用します。                                                                                                                                                                                  |

**メトリクス**:

| メトリクス               | 単位           | `threshold_rate` の例 | 説明                                                                                                                             |
| ------------------- | ------------ | ------------------- | ------------------------------------------------------------------------------------------------------------------------------ |
| `clicks`            | 回数/インプレッション  | 0.001（0.1% CTR）     | 離脱するリンクのクリック、スワイプスルー、CTA タップ                                                                                                   |
| `views`             | 回数/インプレッション  | 0.70（70% ビューアビリティ）  | 視認可能なインプレッション                                                                                                                  |
| `completed_views`   | 回数/インプレッション  | 0.85（85% VCR）       | 動画または音声の完了。`view_duration_seconds` で認定しきい値を制御する（例: 2秒、6秒、15秒）。                                                                 |
| `viewed_seconds`    | 秒/インプレッション   | 3.0（3秒表示）           | インプレッションごとの表示時間。`viewability.viewed_seconds` でレポートされ、ビューアビリティの `standard`（MRC しきい値）に準拠します。                                     |
| `attention_seconds` | 秒/インプレッション   | —                   | **非推奨** — 業界で認定された定義がありません。代わりに `kind: "vendor_metric"` と `vendor` + `metric_id: "attention_seconds"` を使用してください。               |
| `attention_score`   | スコア/インプレッション | —                   | **非推奨** — 業界で認定された定義がありません。代わりに `kind: "vendor_metric"` と `vendor` + `metric_id: "attention_score"` を使用してください。                 |
| `engagements`       | 回数/インプレッション  | —                   | 閲覧を超えた直接インタラクション — ソーシャルリアクション/コメント/シェア、ストーリー/ユニット開封、CTV のインタラクティブオーバーレイタップ、音声のコンパニオンバナーインタラクション                               |
| `follows`           | 回数/インプレッション  | —                   | 新規フォロワー、ページいいね、アーティスト/ポッドキャスト/チャンネルのフォロー、または無料のチャンネル/フィード購読                                                                    |
| `saves`             | 回数/インプレッション  | —                   | 保存、ブックマーク、プレイリスト追加、ピン — 再訪意図のシグナル                                                                                              |
| `profile_visits`    | 回数/インプレッション  | —                   | ブランドのプラットフォーム内ページへのアクセス — プロフィール、アーティストページ、チャンネル、ストアフロント。外部ウェブサイトのクリックは含まない（その場合は `clicks` を使用）。                               |
| `reach`             | ユニーク数/ウィンドウ  | —                   | フリークエンシーウィンドウ内のユニークオーディエンスリーチ。`reach_unit`（例: `households`、`individuals`）が必要。最適化のフリークエンシーバンドを設定するには `target_frequency` を使用します。 |

### kind: vendor\_metric

業界で認定された定義を持たない、ベンダーによって実証される計測——アテンション（DoubleVerify、IAS、Adelaide、TVision、Lumen）、パネルベースのブランドリフト（Kantar、Upwave、Cint）、排出量（Scope3、Good-Loop——後述の極性に関する注意を参照）、リテールメディアのパートナーメトリクス——では、ゴールが特定のベンダー + `metric_id` をエンドツーエンドで結び付けます。セラーの入札スタックはそのベンダーの計測に向けて誘導し、デリバリーは同じ `(vendor, metric_id)` のキーで `vendor_metric_values[]` を通じて値をレポートします。

**方向の極性**（このマイナーバージョンでは上向きの押し上げのみ）。`cost_per` と `threshold_rate` は上向きに押し上げるターゲットです——セラーはより高いメトリクス値、または最低しきい値の充足に向けてデリバリーを誘導します。バイヤーが*最小化*したいメトリクス（排出量、IVT、レイテンシ）は、現時点ではベンダーのメトリクス定義に沿ったセラー側の極性解釈に依存します。ファーストクラスの最小化セマンティクス（ゴール上の `direction: "minimize"` フィールド、または `target.kind: "ceiling_rate"`）は WG で議論中です——[#4644](https://github.com/adcontextprotocol/adcp/issues/4644) を参照してください。

```json theme={null}
{
  "kind": "vendor_metric",
  "vendor": { "domain": "adelaidemetrics.com" },
  "metric_id": "attention_score",
  "target": {
    "kind": "threshold_rate",
    "value": 70
  },
  "priority": 1
}
```

| Field          | Type                               | Required      | Description                                                                                                                                                                                                                  |
| -------------- | ---------------------------------- | ------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `kind`         | `"vendor_metric"`                  | Yes           | 判別子                                                                                                                                                                                                                          |
| `vendor`       | BrandRef                           | Yes           | このメトリクスを定義し計算するベンダー。ベンダーの `brand.json` の `agents[type='measurement']` に紐づきます。`vendor_metric_values`、`reporting_capabilities.vendor_metrics`、`committed_metrics`（ベンダースコープのエントリ）、`performance_standards.vendor` で使われるのと同じ形状です。 |
| `metric_id`    | string                             | Yes           | ベンダーの語彙における識別子（例: `attention_score`、`awareness_lift`、`gco2e_per_impression`）。ベンダーが公開する `measurement.metrics[]` カタログに含まれていなければなりません（MUST）。                                                                                    |
| `target.kind`  | `"cost_per"` \| `"threshold_rate"` | No            | ターゲットの種別。省略した場合、セラーは予算内でメトリクス値を最大化します。                                                                                                                                                                                       |
| `target.value` | number                             | Yes（ターゲット設定時） | メトリクス単位あたりのコスト（通貨）、またはインプレッションごとの最低値。単位はベンダーが定義します。                                                                                                                                                                          |
| `priority`     | integer                            | No            | 1 が最高優先度。省略した場合、セラーは配列の位置を使用します。                                                                                                                                                                                             |

**ゴール受理のための三つの前提条件**。セラーは、ケイパビリティまたはレポーティング整合性の前提条件を満たさない `vendor_metric` ゴールを拒否しなければなりません（MUST）。ディスカバリーの前提条件は検証すべきです（SHOULD）:

1. **ディスカバリー**（このマイナーでは SHOULD、次のマイナーでは MUST）— `metric_id` がベンダーの公開する `measurement.metrics[]` カタログに含まれること（ベンダーの `brand.json` の計測エージェントに問い合わせます）。AdCP 準拠のケイパビリティ公開に対する計測ベンダーの対応が追いつくまでの間 SHOULD に緩和されており、2 社以上のベンダーが準拠エージェントを提供した時点で MUST に強化されます。
2. **ケイパビリティ** — `(vendor, metric_id)` のペアがプロダクトの `vendor_metric_optimization.supported_metrics[]` に含まれ、かつゴールの `target.kind` が該当エントリの `supported_targets` に含まれること。
3. **レポーティング整合性** — パッケージの `committed_metrics[]` に、対応する `{ scope: "vendor", vendor, metric_id }` エントリが含まれること。**コミットされたレポーティングのない最適化は検証不能です**——セラーが契約上値を埋める義務を負わないゴールに対して、バイヤーはパフォーマンスを評価できません。この前提条件こそがゴールを意味あるものにします。セラーは、同じパッケージでレポーティングにもコミットされていないメトリクスのゴールを（`TERMS_REJECTED` で）拒否しなければなりません（MUST）。

**`metric` 種別との違い**。`metric` 種別は、ベンダーの結び付けが不要なセラーネイティブの計測（clicks、views、completed\_views、reach、engagements など）向けです——セラーがそのメトリクスをネイティブに計測します。`vendor_metric` 種別は、同じメトリクス名がベンダーによって異なる意味を持ち、特定のソースに突き合わせる必要がある、ベンダー実証の計測向けです。`metric` 種別の列挙にある非推奨の `attention_seconds` / `attention_score` の値はこの分割より前のものであり、今後は `vendor_metric` を経由します。

**完全なライフサイクルのリファレンス**。標準メトリクスとベンダーメトリクスの両方のフローにまたがる、ケイパビリティ → コミットメント → 最適化 → デリバリーの全体像については[メトリクスのライフサイクル](/docs/media-buy/media-buys/optimization-reporting#メトリクスのライフサイクル)を参照してください。

### ターゲットの種類

三つのゴール種別にまたがるすべてのターゲット種類:

| `target.kind`    | メトリクスゴール       | ベンダーメトリクスゴール             | イベントゴール        | 説明                                        |
| ---------------- | -------------- | ------------------------ | -------------- | ----------------------------------------- |
| `cost_per`       | クリック/ビューなどの単価  | ベンダーメトリクス単位あたりのコスト       | コンバージョンイベント単価  | `spend / count`                           |
| `threshold_rate` | インプレッションごとの最低値 | インプレッションごとのベンダーメトリクスの最低値 | —              | `インプレッションごとに少なくとも X`                      |
| `per_ad_spend`   | —              | —                        | ターゲット広告費用対効果   | `sum(value_field * value_factor) / spend` |
| `maximize_value` | —              | —                        | 総コンバージョン価値の最大化 | 高価値コンバージョンに向けて支出を誘導します。`value_field` が必要。 |

### 戦略の選択

| ゴール                    | 使用場面                                  | 設定内容                                                                                                                                                 |
| ---------------------- | ------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------- |
| コンバージョン数の最大化           | 予算内でできるだけ多くのコンバージョン                   | `kind: "event"` + イベントソース、ターゲットなし。`value_field` はレポーティングのために存在してもよいが、目的関数は変わりません。                                                                    |
| ターゲットコンバージョン単価         | イベントごとの特定のコスト                         | `kind: "event"` + `target: { kind: "cost_per", value: 25.0 }`                                                                                        |
| ターゲット広告費用対効果           | イベント価値に対する特定のリターン比率                   | `kind: "event"` + ソースの `value_field` + `target: { kind: "per_ad_spend", value: 4.0 }`                                                                |
| コンバージョン価値の最大化          | ROAS ターゲットなしで高価値コンバージョンに誘導            | `kind: "event"` + ソースの `value_field` + `target: { kind: "maximize_value" }`                                                                          |
| クリック数の最大化              | 予算内でクリックを最大化                          | `kind: "metric"`、`metric: "clicks"`、ターゲットなし                                                                                                          |
| ターゲットクリック単価            | 特定のクリック単価                             | `kind: "metric"`、`metric: "clicks"` + `target: { kind: "cost_per", value: 2.0 }`                                                                     |
| ターゲット CTR              | 最低クリック率                               | `kind: "metric"`、`metric: "clicks"` + `target: { kind: "threshold_rate", value: 0.001 }`                                                             |
| ターゲットビューアビリティ          | 最低ビューアビリティ率                           | `kind: "metric"`、`metric: "views"` + `target: { kind: "threshold_rate", value: 0.70 }`                                                               |
| ターゲットアテンション（ベンダー結び付け）  | 特定ベンダーからの最低アテンション                     | `kind: "vendor_metric"`、`vendor: { domain: "adelaidemetrics.com" }`、`metric_id: "attention_score"` + `target: { kind: "threshold_rate", value: 70 }` |
| ターゲットブランドリフト（ベンダー結び付け） | 特定のパネル提供者からの認知リフトを最大化                 | `kind: "vendor_metric"`、`vendor: { domain: "kantar.com" }`、`metric_id: "awareness_lift"`、ターゲットなし（最大化）                                                |
| ターゲット VCR              | 最低動画完了率                               | `kind: "metric"`、`metric: "completed_views"` + `target: { kind: "threshold_rate", value: 0.85 }`                                                     |
| 再生時間付き完了ビュー            | 特定の再生時間しきい値付きの動画ビュー                   | `kind: "metric"`、`metric: "completed_views"` + `view_duration_seconds: 6`                                                                            |
| エンゲージメントの最大化           | 予算内でソーシャルインタラクションを最大化                 | `kind: "metric"`、`metric: "engagements"`、ターゲットなし                                                                                                     |
| フォロワーの最大化              | 新規フォロワー、ページいいね、または無料のチャンネル/フィード購読を最大化 | `kind: "metric"`、`metric: "follows"`、ターゲットなし                                                                                                         |
| 保存数の最大化                | 保存/ブックマーク/プレイリスト追加を最大化                | `kind: "metric"`、`metric: "saves"`、ターゲットなし                                                                                                           |
| プロフィール訪問の最大化           | ブランドページ/プロフィールへのトラフィックを誘導             | `kind: "metric"`、`metric: "profile_visits"`、ターゲットなし                                                                                                  |
| 最大ユニークリーチ              | 予算内でユニークオーディエンスを最大化                   | `kind: "metric"`、`metric: "reach"` + `reach_unit: "households"`、ターゲットなし                                                                              |
| フリークエンシー付きリーチ          | 週1〜3回のフリークエンシーバンドでリーチ                 | `kind: "metric"`、`metric: "reach"` + `reach_unit` + `target_frequency: { min: 1, max: 3, window: "7d" }`                                             |

### 複数ゴールと優先度

パッケージは複数のゴールを持てる。優先度はセラーがどれをメインとして扱うかを制御します。よくあるパターンは、イベントデータが少ない場合にメトリクスゴールをプロキシシグナルとして使用することです。

```json theme={null}
"optimization_goals": [
  {
    "kind": "metric",
    "metric": "clicks",
    "target": { "kind": "cost_per", "value": 2.00 },
    "priority": 2
  },
  {
    "kind": "event",
    "event_sources": [
      { "event_source_id": "mobile_sdk", "event_type": "app_install" },
      { "event_source_id": "mmp_adjust", "event_type": "app_install" }
    ],
    "target": { "kind": "cost_per", "value": 10.00 },
    "priority": 1
  }
]
```

セラーは `priority: 1` のゴール（SDK と MMP をまたいで重複排除した \$10 インストール単価）に注力し、インストールデータが蓄積されるまでクリックをプロキシシグナルとして使用します。

### イベントゴールのデフォルト動作

イベントゴールから `target` を省略した場合、セラーは予算内でコンバージョン数を最大化します。これは、イベントソースに `value_field` があるかどうかに関わらず当てはまります——明示的な価値志向のターゲットを伴わない `value_field` はレポーティング（デリバリーレポートの conversion\_value、ROAS）を有効にしますが、最適化の目的関数は変えません。

| `target`         | `value_field` | セラーの動作                                                  |
| ---------------- | ------------- | ------------------------------------------------------- |
| 省略               | 省略            | 予算内でイベント数を最大化                                           |
| 省略               | あり            | 予算内でイベント数を最大化。価値はレポーティングでのみ利用可能。                        |
| `cost_per`       | いずれでも         | コンバージョン単価をターゲットにする。価値は存在すればレポーティングに使用。                  |
| `per_ad_spend`   | あり            | 広告費用対効果をターゲットにする。                                       |
| `per_ad_spend`   | **なし**        | **バリデーションエラー** — セラーは拒否しなければなりません。リターンを計算する価値の次元がありません。 |
| `maximize_value` | あり            | 高価値のコンバージョンに向けて誘導する。                                    |
| `maximize_value` | **なし**        | **バリデーションエラー** — セラーは拒否しなければなりません。最大化する価値の次元がありません。     |

### ゴールのブレンドとシーケンス

`value_factor` と `priority` はどちらも「イベントタイプ A はイベントタイプ B より重要である」を表現しますが、セラーの最適化にとっての意味は異なります:

* **`value_factor`** は複数のイベントソースを**単一の目的関数**にブレンドします。単一のゴールの `event_sources` 配列*内*のイベントソースエントリごとに設定します。セラーは、複合的な価値シグナルを持つ一つのゴールを見ます。購入とページビューを明示的な相対的重み付けで一緒に最適化すべき場合に使用します。
* **`priority`** は**独立したゴール**をシーケンスします。`optimization_goals` 配列内の別々のゴールオブジェクトに設定します。セラーはまずゴール 1 を最適化し、ゴール 2 は二次的な目的であって、ブレンドはされません。ゴールが概念的に別物である場合（例: まず CPA ターゲットを達成し、次に残りの予算でリーチを最大化する）に使用します。

ブレンドするには `value_factor` を、シーケンスするには `priority` を使用してください。これらを取り違えると、微妙に誤った最適化——シーケンスすべきものがブレンドされたゴール、またはブレンドすべきものがシーケンスされたゴール——が生じ、その影響はデリバリーレポートでは検出しにくいものになります。

### イベントタイプの極性

ほとんどのイベントタイプは正のシグナルです——購入、リード、インストールは、バイヤーがより多く欲しいものです。一部のイベントタイプは、単独の最適化ターゲットにすべきでない観測シグナルです:

| 極性       | イベントタイプ                                                                                                                                                                                                            | 注記                                                                    |
| -------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | --------------------------------------------------------------------- |
| 正        | `purchase`、`lead`、`qualify_lead`、`close_convert_lead`、`app_install`、`complete_registration`、`subscribe`、`follow`、`content_view`、`watch_milestone`、`start_trial`、`contact`、`schedule`、`donate`、`submit_application` | イベントに十分なボリュームがあり、それがバイヤーの望む結果である場合、単独の最適化ターゲットとして安全                   |
| アッパーファネル | `page_view`、`view_content`、`select_content`、`select_item`、`search`、`add_to_cart`、`viewed_cart`、`add_to_wishlist`、`initiate_checkout`、`add_payment_info`、`share`、`app_launch`                                       | 有効な最適化ターゲットだが、ローワーファネルのデータが乏しい場合に通常はプロキシシグナル（`priority: 2`）として使用される   |
| 観測       | `refund`、`remove_from_cart`、`disqualify_lead`                                                                                                                                                                      | アトリビューションの精度と ROAS の調整のために `event_sources` に含めるものであり、単独の最適化ターゲットにはしない |

`custom` イベントはここで分類されません——その極性はバイヤーの定義に依存します。バイヤーエージェントは、カスタムイベントが単独のターゲットとして安全かどうかを選ぶ際に、同じ考え方を適用すべきです。

観測イベントは複合ゴールの内側では有用です——`refund` に `value_factor: -1` を設定すると ROAS が下方に調整され、これはまさに望ましい挙動です。リスクは、`refund` や `remove_from_cart` の数に向けて最適化する単独のゴールを作ってしまう、設定を誤ったバイヤーエージェントです。これはバイヤーエージェントの実装上の懸念であり、プロトコルの制約ではありません——プロトコルは意図的に、どのイベントタイプを最適化ターゲットにできるかを制限しません。

### `value_factor` によるボリュームの正規化

異なるボリューム規模のイベントソースを組み合わせる場合（例: `page_view` は数万、`purchase` は数百）、明示的な重み付けがなければ `sum(value_field * value_factor) / spend` における集計値は最もボリュームの大きいタイプに支配されます。バイヤーは、ソース間の相対的な重みを表現するために `value_factor` を使用すべきです:

```json theme={null}
{
  "kind": "event",
  "event_sources": [
    { "event_source_id": "web_pixel", "event_type": "page_view", "value_field": "value", "value_factor": 0.01 },
    { "event_source_id": "web_pixel", "event_type": "purchase", "value_field": "value", "value_factor": 1 }
  ],
  "target": { "kind": "per_ad_spend", "value": 4.0 }
}
```

ここでは `page_view` は額面価値の 1% しか寄与しないため、`purchase` より約 100 倍多く発生するにもかかわらず、ROAS の計算を支配することを防ぎます。

自動的な正規化は意図的にスコープ外です——セラーが持っていないかもしれないイベント履歴が必要になり、ROAS の式を不透明にしてしまうためです。イベントタイプをまたいで正規化したいバイヤーエージェントは、`value_factor` を設定する前に自分たちの側で行うべきです。

### 価格モデルと最適化ゴール

価格モデル（CPC、CPM、CPA など）はバイヤーが支払う対象を決める。最適化ゴールはセラーがどのようにインプレッションを配分するかを決める。これらは独立しています。パッケージは CPM 価格を使いながら CPA ターゲットに向けて最適化したり、CPA 価格を使いながら ROAS に向けて最適化したりできます。請求の詳細については[価格モデル](/docs/media-buy/advanced-topics/pricing-models)を参照。

### リーチとフリークエンシー

リーチベースの最適化は `metric: "reach"` と2つの追加フィールドを使用します。

* **`reach_unit`**（必須）: 測定単位 — プロダクトの `metric_optimization.supported_reach_units` で宣言された値でなければなりません（例: `households`、`individuals`）。
* **`target_frequency`**（任意）: 最適化を誘導するフリークエンシーバンド。セラーは未リーチのエンティティへのインプレッションを高価値として、すでに飽和したエンティティへのインプレッションを低価値として扱います。`min`、`max`、`window`（例: `"7d"`、`"campaign"`）を含みます。省略した場合、セラーはユニークリーチを最大化します。

```json theme={null}
{
  "kind": "metric",
  "metric": "reach",
  "reach_unit": "households",
  "target_frequency": { "min": 1, "max": 3, "window": "7d" },
  "priority": 1
}
```

GRP ベースのバイには [CPP 価格](/docs/media-buy/advanced-topics/pricing-models#cpp-cost-per-point)を使用します。最適化とは独立したハードなフリークエンシー制限には、パッケージの `frequency_cap` を使用します。リーチとフリークエンシーのメトリクスは [`get_media_buy_delivery`](/docs/media-buy/task-reference/get_media_buy_delivery) の配信レポートで確認できます。

### 前提条件

**メトリクスゴール**（`kind: "metric"`）の場合:

1. **プロダクトのサポートを確認する** — プロダクトは `metric_optimization` で目的のメトリクスを `supported_metrics` に宣言していなければなりません。イベントソースやコンバージョントラッキングの設定は不要です。
2. **ターゲットのサポートを確認する** — ターゲットを設定する場合は、ターゲットの種類が `metric_optimization.supported_targets` に記載されていることを確認すること。
3. **再生時間を確認する** — `view_duration_seconds` 付きの `completed_views` を使用する場合は、その値が `metric_optimization.supported_view_durations` に記載されていることを確認すること。

**イベントゴール**（`kind: "event"`）の場合:

1. **イベントソースを設定する** — [`sync_event_sources`](/docs/media-buy/task-reference/sync_event_sources) を呼び出して、`event_sources` で参照するイベントソースをセットアップします。
2. **プロダクトのサポートを確認する** — プロダクトは `conversion_tracking` で目的のターゲット種類を `supported_targets` に宣言していなければなりません。
3. **重複排除のサポートを確認する** — ゴールごとに複数のイベントソースを使用する場合は、セラーが [`get_adcp_capabilities`](/docs/protocol/get_adcp_capabilities) で `multi_source_event_dedup` をサポートしていることを確認すること。サポートされていない場合は、ゴールごとに1つのイベントソースを使用すること。
4. **イベントを送信する** — [`log_event`](/docs/media-buy/task-reference/log_event) を使用してコンバージョンデータを送信します。セラーが効果的に最適化するにはイベント履歴が必要です。

### アトリビューションウィンドウ

アトリビューションウィンドウは、セラーがコンバージョンに広告インプレッションをクレジットするためにどれだけ遡るかを制御します。一般的なオプション:

| ウィンドウ                                      | 意味                  |
| ------------------------------------------ | ------------------- |
| `post_click: {interval: 7, unit: "days"}`  | クリックから7日以内のコンバージョン  |
| `post_click: {interval: 28, unit: "days"}` | クリックから28日以内のコンバージョン |
| `post_view: {interval: 1, unit: "days"}`   | 広告視聴から1日以内のコンバージョン  |
| `post_view: {interval: 7, unit: "days"}`   | 広告視聴から7日以内のコンバージョン  |

値はセラーの `conversion_tracking.attribution_windows` ケーパビリティのオプションと一致しなければなりません。省略した場合、セラーはデフォルトのウィンドウを適用します。

## 配信レポートとの連携

イベントソースが設定されてイベントが流れ始めると、[`get_media_buy_delivery`](/docs/media-buy/task-reference/get_media_buy_delivery) のレスポンスにコンバージョンメトリクスが表示されます。

* **`conversions`** — キャンペーンにアトリビュートされたポストクリックまたはポストビューのコンバージョン
* **`conversion_value`** — アトリビュートされたコンバージョンの金銭的価値
* **`roas`** — 広告費用対効果（conversion\_value / spend）
* **`cost_per_acquisition`** — コンバージョン単価（spend / conversions）

これらのメトリクスは、パッケージに `optimization_goals` が設定されている場合にパッケージごとにレポートされます。`by_action_source` ブレークダウンをサポートするセラーは、コンバージョンをソース別（website、app、in\_store など）に分けて表示できます。

## カタログアイテムのアトリビューション

カタログドリブンのパッケージでは、コンバージョンイベントに関連するカタログアイテムを識別する `content_ids` が含まれます。カタログの `content_id_type` は期待される識別子タイプ（`sku`、`gtin`、`job_id` など）を宣言します。

アトリビューションは意図的に幅広く設計されています。ユーザーがあるアイテム（求人 A）をクリックして別のアイテム（求人 B に応募）でコンバージョンする場合もあります。イベントはクリックされたアイテムではなく、コンバージョンの実際の `content_id` で発火します。アイテムごとのクリックからコンバージョンまでのパス分析はプラットフォームの最適化の問題であり、プロトコルの問題ではありません。

[`get_media_buy_delivery`](/docs/media-buy/task-reference/get_media_buy_delivery) の `by_catalog_item` ブレークダウンは、アイテムごとのメトリクス（インプレッション、支出、クリック、コンバージョン）を表示します。

## 関連ドキュメント

* [`sync_event_sources`](/docs/media-buy/task-reference/sync_event_sources) — イベントソースの設定
* [`log_event`](/docs/media-buy/task-reference/log_event) — コンバージョンイベントの送信
* [`create_media_buy`](/docs/media-buy/task-reference/create_media_buy#campaign-with-conversion-optimization) — パッケージへの最適化ゴールの設定
* [`get_media_buy_delivery`](/docs/media-buy/task-reference/get_media_buy_delivery) — コンバージョンメトリクスの監視
* [価格モデル](/docs/media-buy/advanced-topics/pricing-models#cpa-cost-per-acquisition) — CPA 請求（コンバージョン単価課金）
