Android 版プライバシー サンドボックス ベータ版がリリースされました。ご利用方法についてご確認のうえ、引き続きフィードバックをお寄せください。

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

コレクションでコンテンツを整理 必要に応じて、コンテンツの保存と分類を行います。

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

この提案では、Android 版 FLEDGE を使用して、正確かつプライバシーを重視した方法でフリークエンシー キャップ機能を実装する方法を紹介します。

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

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

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

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

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

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

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

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

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

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

'adsData': [
  {
    "buyer": "ads.example.com",
    "ads": [
      {
        'render_url': 'exampleUrl',
        'metadata': {...},   /* metadata are opaque to FLEDGE and
                                just required to be in valid JSON
                                format */
        'on_device_counters_keys': [
          'campaign_id:1234',
          'campaign_id:1234+adgroup_id:5678'
        ]
      }]
  }]
}

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

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

void updateEventHistogram(@EventType eventType, long adSelectionId)

入力:

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

updateEventHistogram 呼び出しは、CustomAudience によって取得されたリマーケティング広告か、selectAdsAdSelectionConfig パラメータに含まれるコンテキスト広告の一部として定義された、一連のキーのヒストグラムを更新します。この呼び出しは、on_device_counters_keys のキーに加えて、広告の render_url 値で識別されるカウンタのヒストグラムも更新します。

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

  • {'ads.example.com', 'campaign_id:1234', VIEW}
  • {'ads.example.com', 'campaign_id:1234+adgroup_id:5678', VIEW}
  • {'ads.example.com', 'exampleUrl', VIEW}

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

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

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

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

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

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

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

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

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

  'on_device_counters_keys': [
    'campaign_id:1234',
    'campaign_id:1234+adgroup_id:5678'
  ],

  "filters": {
    "frequency_cap": {
      "view": {
        "campaign_id:1234": {
          "cap": 10,
          "interval_seconds": 86400
        },
        "adgroup_id:5678": {
          "cap": 10,
          "interval_seconds": 86400
        },
      },
      "win": {
        "campaign_id:1234": {
          "cap": 5,
          "interval_seconds": 604800
        },
        "adgroup_id:5678": {
          "cap": 5,
          "interval_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 関数を取得できる場所を示す必要があります。

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

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

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

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

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

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

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

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

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

制限事項

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

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