Protected Audience のフリークエンシー キャップ

フリークエンシー キャップは、一定期間内にユーザーに表示される特定カテゴリの広告数を制限する広告手法です。フリークエンシー キャップにより、広告の印象が新鮮で興味をひくものとなり、エンドユーザー エクスペリエンスが向上します。また、広告主が広告費を管理しやすくなります。

このプロポーザルでは、Android 版 Protected Audience を使用して、正確かつプライバシーを保護した方法でフリークエンシー キャップ機能を実装する方法を紹介します。

Protected Audience は、広告固有のイベント用のカウンタのオンデバイス ストレージと、事前定義された一連のフィルタ方針に沿って広告をフィルタする機能の 2 つを組み合わせることで、フリークエンシー キャップを実装しています。フリークエンシー キャップにより、広告主は所定の期間におけるヒストグラム値の合計に対するカウンタしきい値を指定できます。

カウンタはデバイス プロファイル、広告テクノロジー、カウンタキーの組み合わせごとに一意です。各広告には、広告のビューまたはインプレッションが登録された場合に使用する一連のカウンタキーが含まれている必要があります。Protected Audience はキーごとに一連のカウンタを保存し、各カウンタは特定の時間間隔内に発生した広告固有のイベントを集計します。オンデバイス カウンタはインプレッションまたはビューが発生すると加算され、カウンタデータはデバイス上に保持されます。正確な保持時間は後ほど定義します。

Protected Audience の広告選択ワークフローの広告フィルタリング ロジックは、カウンタ、リマーケティング広告、コンテキスト広告にアクセスできるため、Protected Audience のフリークエンシー キャップは、こうした広告リクエストすべてに対応できます。

: 広告フィルタリングは、Android 版プライバシー サンドボックスでのみ利用可能です。Chrome の Protected Audience の実装には現在、コンテンツ ターゲットの Protected Audience 以外の広告をフィルタするメカニズムは実装されていません。このプロポーザルはバイサイド サポートのみを対象としています。需要があれば、セルサイド サポートを後日追加する予定です。

Protected Audience のフリークエンシー キャップは、次のような幅広い要件に対応しています。

  • オンデバイス カウンタの更新時にサーバーサイドの遅延が最小限に抑えられる、リアルタイム フィルタリング。
  • 個々の広告、キャンペーン、その他のグループを含む、キーの柔軟な階層構造。
  • 広告 ID に依存しない、他のフリークエンシー キャップ手法との整合性。
  • 特定のデバイス ユーザー プロファイルで、複数のアプリにわたって機能する。
  • 正確かつ完全なカウンタ。
  • ビューやインプレッションなど、広告イベントのカスタム定義のサポート。
  • リマーケティング広告とコンテキスト広告の両方に 1 つの機能で対応する。

フリークエンシー キャップをセットアップする手順は次のとおりです。

ステップ 1: 広告にフリークエンシー キャップの情報を追加する

コンテキスト広告とリマーケティング広告では、任意の整数のリストを含む ad_counter_keys フィールドを使用して、ビューまたはインプレッションの際に更新する関連ヒストグラム カウンタを指定します。このフィールドは、Protected Audience で解析されない metadata フィールドには含まれません。

次の例は、AdSelectionConfigadsData フィールドのデータ形式を示しています。リマーケティングの場合、所定のカスタム オーディエンスに対する広告リストの形式は、以下の例に示す ads フィールドの内容と一致します。

'adsData': [
  {
    "buyer": "ads.example.com",
    "ads": [
      {
        'render_url': 'exampleUrl',
        'metadata': {...},   /* metadata are opaque to Protected Audience are
                                required to be in valid JSON format */
        'ad_counter_keys': [1234, 5678]
      }]
  }]
}

ステップ 2: ビューまたはインプレッションを登録する

広告テクノロジーは updateAdCounterHistogram メソッドを呼び出して、フリークエンシー キャップに使用するイベントの発生を登録できます。メソッドは落札広告の eventType で指定されたキーに対し、同じイベントで繰り返し呼び出すことができます。

void updateAdCounterHistogram(@EventType eventType, long adSelectionId)

入力:

  • eventType: イベントが、ビュー、インプレッション、クリック、広告選択プロセスの落札のいずれでカウントされるのかを示します。
  • adSelectionId: selectAds 呼び出しによって返される AdSelectionOutcome オブジェクト内の ID 値。

updateAdCounterHistogram 呼び出しは、CustomAudience によって取得されたリマーケティング広告、または selectAdsAdSelectionConfig パラメータに含まれるコンテキスト広告の一部として定義された、一連のキーのヒストグラムを更新します。

ステップ 1 の広告が、id 値が 9999AdSelection 落札者であると仮定すると、updateAdCounterHistogram(FrequencyCapFilters.AD_EVENT_TYPE_VIEW, adSelectionId: 999) の呼び出しにより、次の 3 つの主キーのカウンタが加算されます。

  • {'ads.example.com', 1234, VIEW}
  • {'ads.example.com', 5678, VIEW}

広告テクノロジー名は、落札広告がどこからのものかに応じて、コンテキスト広告またはカスタム オーディエンスの購入者フィールドから取得されます。

Protected Audience for Android は、selectAds API 呼び出しによって返された広告のイベントタイプ FrequencyCapFilters.AD_EVENT_TYPE_WIN について、上記のすべてのカウンタを自動的に加算します。これは、Chrome の Protected Audience 実装で generateBidbrowser_signalsprev_wins 引数を追加した場合と機能的には同じです。

ステップ 3: フィルタによるフリークエンシー キャップ フィルタリングを実装する

最適なパフォーマンスを実現するために、フリークエンシー キャップ フィルタリング機能は AdServices 内で実行されます。Protected Audience は、AdsData オブジェクトの filters フィールドを読み取ることで、メッセージをフィルタする必要があるかどうかを判断します。フィルタのリストは frequency_cap で指定します。キー、event_typeinterval_in_seconds の値は、フィルタリングと Protected Audience に使用するイベントのヒストグラムを取得するために使用されます。

フィルタリング情報は、カスタム オーディエンスが提供するリマーケティング広告や、AdSelectionConfig オブジェクトの一部としてコンテキスト広告に対して指定できます。

フリークエンシー キャップ フィルタを使用したコンテキスト広告の場合、広告は AdSelectionConfig オブジェクトの ads フィールドを使用して渡されます。広告はフィルタされ、selectAds 呼び出しの結果として入札単価の最も高い広告が返されます。

フリークエンシー キャップ フィルタを使用したリマーケティング広告の場合、広告は購入者提供の JavaScript 関数 generateBid() が呼び出される前にフィルタされます。

次の例は、フリークエンシー キャップ フィルタリングを使用したメッセージを示しています。

{
  'render_url': 'url',
  'metadata': {...},   /* metadata are opaque to Protected Audience and assumed
                        to be in valid JSON format */

  'ad_counter_keys': [1234, 5678],

  "filters": {
    "frequency_cap": {
      "view": [
        {
          "ad_counter_key": 1234
          "max_count": 10,
          "interval_in_seconds": 86400
        },
        {
          "ad_counter_key": 5678
          "max_count": 10,
          "interval_in_seconds": 86400
        },
      ],
      "win": [
        {
          "ad_counter_key": 1234
          "max_count": 5,
          "interval_in_seconds": 604800
        },
        {
          "ad_counter_key": 5678
          "max_count": 5,
          "interval_in_seconds": 345600
        },
      ]
    },

  // This field is only required in contextual ads and is used in
  // reportImpression calls to fetch the reportWin function.
  'reportingJS': "https://ads.example.com?reportWin.js"
}

ステップ 4: 落札広告についてレポートする

広告選択プロセスが完了すると、renderUriadSelectionIdselectAds 呼び出しの数値 ID)を含む AdSelectionOutcome オブジェクトが返されます。この ID を使用して、イベントレベル レポートを現在サポートしている reportImpression API を呼び出すことができます。ベータ版 1 で、このメソッドはリマーケティング広告のレポートをサポートしています。今後のリリースでコンテキスト広告のレポートをサポートするように拡張される予定です。コンテキスト広告の場合、上記の例に示すように、購入者は広告構造内で reportingJS という追加フィールドを使用して、reportImpression 呼び出し中に reportWin 関数を取得できる場所を示す必要があります。

広告候補の選択に関するおすすめの方法

Protected Audience は、フリークエンシー キャップの適用をサーバーからデバイスに移行します。落札単価はプライバシー サンドボックスでレポートされますが、広告が表示されない理由をデベロッパーが知ることはできません。広告が表示されないのは、落札できなかったことが原因の場合もあれば、フリークエンシー キャップが原因の場合もあります。特定の広告が落札されない理由を完全には把握できないため、入札システムで最適な広告が配信されるよう、追加の作業が必要になります。Protected Audience で最適な広告配信を実現するには、以下のことをおすすめします。

十分なリマーケティング広告を送信する

リマーケティング広告をユーザーごとに最適化することはできません。カスタム オーディエンスから多数の広告がユーザーに表示され、広告の制限が低い場合、すべての広告がフィルタされる可能性があります。リマーケティング広告は定期的に更新されるため、リマーケティング広告が継続して配信されるようにするには、十分な広告枠がフリークエンシー キャップを通過する必要があります。そのためには、joinCustomAudience の呼び出し時と、カスタム オーディエンスの日次更新時に指定できる広告サイズの制限とのバランスを取る必要があります。購入者は、入札フェーズでの待ち時間が増える可能性があることを考慮する必要があります。これらの問題の影響を最小限に抑えるために、フリークエンシー キャップ フィルタリングは generateBid の呼び出しの前に実施されます。

コンテキスト カウンタをサーバーに保持する

サーバー側の推定により、デベロッパーはフリークエンシー キャップが有効になるタイミングを大まかに推定できます。この推定では、広告がフリークエンシー キャップのしきい値に達している可能性が高いことと、そのためより多くの広告候補とともに送信するか完全に排除する必要があることを示すことができます。

コンテキストに基づくレスポンスで複数の広告候補を送信する

Protected Audience オークションの前に、コンテキストに基づくレスポンスで複数の広告候補を送信する必要があります。これにより、複数の広告が除外されても、他の広告は引き続き表示されます。広告候補では、一部の広告がバックアップとして表示されるように優先度を設定できます。

実施には期限があるため、広告候補はオークションで落札できる可能性と、除外されない可能性に照らして選択する必要があります。

制限事項

Protected Audience のフリークエンシー キャップには、次のような制限事項があります。

  1. Protected Audience のフリークエンシー キャップは、デバイスのユーザー プロファイル レベルで動作します。他のデバイスや他のプロファイルで共有されるカウンタはありません。他のデバイスで表示される広告の追加は、必要に応じて手動で反映する必要があります。
  2. デバイス カウンタはデバイスに保存され、アクセスされます。サーバーサイドのカウンタは別途管理する必要があります。
  3. フリークエンシー キャップと関連する広告フィルタリングはデバイス上で処理されるため、広告テクノロジー プラットフォームはこうした操作を直接制御できません。デバイスのフリークエンシー キャップのしきい値をバイパスするために、広告テクノロジー プラットフォームは、異なるフィルタで複数の広告候補を送信できます。
  4. 記録頻度に基づく入札単価調整はサポートされていません。generateBid 関数は頻度カウンタを表示できません。