関連性の高いアプリ インストール広告をサポートする Protected App Signals

この提案は、プライバシー サンドボックスの登録プロセスと構成証明の対象となります。証明書について詳しくは、提供されている証明書のリンクをご覧ください。この提案が更新された際に、このシステムへのアクセス要件について説明します。

モバイルアプリ インストール広告(ユーザー獲得広告とも呼ばれます)は、モバイル広告の一種で、ユーザーにモバイルアプリのダウンロードを促します。通常、これらの広告はユーザーの興味や属性に基づいて配信され、ゲーム、ソーシャル メディア、ニュースアプリなどの他のモバイルアプリによく表示されます。ユーザーがアプリ インストール広告をクリックすると、アプリストアに直接移動し、アプリをダウンロードできます。

たとえば、米国で新しいモバイル フード デリバリー アプリの新規インストールを促進しようとしている広告主は、以前に他のフード デリバリー アプリを利用したことのある米国在住のユーザーを広告のターゲットとします。

これは通常、広告テクノロジー間にコンテキスト シグナル、ファースト パーティ シグナル、サードパーティ シグナルを組み込んで、広告 ID に基づいてユーザー プロファイルを作成することで実装されます。広告テクノロジーの機械学習モデルは、この情報を入力として使用し、ユーザーとの関連性が高く、コンバージョンにつながる可能性が最も高い広告を選択します。

クロスパーティのユーザー ID への依存をなくすことでユーザーのプライバシーを向上させる効果的なアプリ インストール広告をサポートするために、次の API が提案されています。

  1. Protected App Signals API: ユーザーの潜在的関心を表す、広告テクノロジーによりエンジニアリングされた特徴量の保存と作成に重点を置いています。広告テクノロジーは、アプリのインストール、初回起動、ユーザー アクション(ゲーム内レベルアップ、実績)、購入アクティビティ、アプリ内滞在時間など、アプリごとの独自のイベントシグナルを保存します。シグナルはデータ漏洩を防ぐためにデバイスに書き込まれ、保存されます。シグナルは、安全な環境で実行される Protected Auction 中に特定のシグナルを保存した広告テクノロジー ロジックにのみ使用できます。
  2. Ad Selection API: 高信頼実行環境(TEE)で実行される Protected Auction を構成して実行するための API です。広告テクノロジーが Protected App Signals とパブリッシャー提供のリアルタイムのコンテキスト情報の両方を使用して、広告候補の取得、推論の実行、入札単価の計算、スコアリングを行い、「落札」広告を選択します。
保護されたシグナルを使用したアプリのインストール フローを示す図。
Android 版プライバシー サンドボックスにおける Protected App Signals と広告選択のワークフローを示すフローチャート。

ここでは、Protected App Signals が関連するアプリ インストール広告をサポートする仕組みの概要を説明します。以降のセクションでは、これらの各ステップについて詳しく説明します。

  • シグナルのキュレーション: ユーザーがモバイルアプリを使用する際、広告テクノロジーは、Protected App Signals API を使用して関連性の高い広告を配信するために、広告テクノロジーで定義されたアプリイベントを保存することでシグナルをキュレートします。これらのイベントは、カスタム オーディエンスと同様に保護されたデバイス上のストレージに保存され、デバイスから送信される前に暗号化されます。これにより、適切なセキュリティとプライバシー管理を備えた信頼実行環境内で実行される入札とオークションのサービスのみが、広告の入札とスコアリングのために復号できます。
  • シグナルのエンコード: カスタム広告テクノロジー ロジックによって、スケジュールされた頻度でシグナルが準備されます。Android のバックグラウンド ジョブがこのロジックを実行してデバイス上でエンコードを行い、Protected App Signals のペイロードを生成します。このペイロードは、後で、Protected Auction 中の広告の選択にリアルタイムで使用されます。ペイロードは、オークションに送信されるまでデバイスに安全に保存されます。
  • 広告の選択: ユーザーに関連性の高い広告を選択するために、販売者の SDK は Protected App Signals の暗号化されたペイロードを送信し、Protected Auction を設定します。オークションでは、購入者のカスタム ロジックが、パブリッシャー提供のコンテキスト データ(通常は Open-RTB 広告リクエストで共有されるデータ)とともに Protected App Signals を準備し、広告の選択(広告の取得、推論、入札生成)を目的とした特徴量をエンジニアリングします。Protected Audience と同様、購入者は、Protected Auction での最終的なスコアリングのために販売者に広告を提出します。
    • 広告の取得: 購入者は、Protected App Signals とパブリッシャー提供のコンテキスト データを使用して、ユーザーの興味に関連する特徴量エンジニアリングを行います。これらの特徴量は、ターゲティング条件を満たす広告のマッチングに使用されます。予算内に収まらない広告は除外されます。上位 k 個の広告が入札対象として選択されます。
    • 入札: 購入者のカスタム入札ロジックが、パブリッシャー提供のコンテキスト データと Protected App Signals を準備し、特徴量のエンジニアリングを行います。特徴量は、信頼できるプライバシー保護境界内で広告候補を推論し、入札するための購入者の機械学習モデルへの入力として使用されます。次に、購入者は、選択した広告を販売者に返します。
    • 販売者のスコアリング: 販売者のカスタム スコアリング ロジックは、参加している購入者から送信された広告をスコアリングし、落札広告を選択し、レンダリングのためにアプリに送り返します。
  • レポート: オークションの参加者は、該当する落札レポートと落札失敗レポートを受け取ります。Google では、落札レポートにモデル トレーニングのデータを含めるためのプライバシー保護メカニズムを検討しています。

タイムライン

デベロッパー プレビュー ベータ版
機能 2023 Q4 2024 Q1 2024 Q2 2024 Q3
Signal Curation API デバイス上のストレージの API デバイス上の保存容量ロジック

デバイス上のカスタム ロジックの日次更新
なし T 以降のデバイスの 1% が対象
TEE 内の広告取得サーバー MVP GCP で利用可能

Top-K のサポート
UDF の本番環境への移行
AWS で利用可能

同意を得たデバッグ、指標、モニタリング
TEE の推論サービス

TEE での ML モデルの実行および入札での使用をサポート
開発中 GCP で利用可能

Tensorflow と PyTorch を使用した静的 ML モデルのデプロイとプロトタイプ作成が可能
AWS で利用可能

本番稼働モデルのデプロイ(Tensorflow と PyTorch のモデル向け)

テレメトリー、同意を得たデバッグ、モニタリング
TEE での入札とオークションのサポート

GCP で利用可能 PAS-B&A と TEE 広告検索の統合(gRPC と TEE<>TEE 暗号化を使用)

コンテキスト パスによる広告取得のサポート(TEE での B&A<>K/V のサポートを含む)
AWS で利用可能

デバッグ レポート

同意を得たデバッグ、指標、モニタリング

Protected App Signals をキュレートする

シグナルは、関連する広告の配信に有用であると広告テクノロジーによって判断される、アプリでのさまざまなユーザー インタラクションを表します。アプリまたは統合された SDK は、アプリの起動、実績、購入アクティビティ、アプリ内滞在時間などのユーザー アクティビティに基づいて、広告テクノロジーで定義された Protected App Signals を保存または削除する場合があります。Protected App Signals はデバイス上に安全に保存され、デバイスから送信される前に暗号化されます。これにより、適切なセキュリティとプライバシー管理を備えた信頼実行環境内で実行される入札とオークションのサービスのみが、広告の入札とスコアリングのために復号できます。Custom Audience API と同様に、デバイスに保存されているシグナルをアプリや SDK で読み取ったり検査したりすることはできません。シグナル値を読み取るための API はなく、API はシグナルの漏洩を防ぐように設計されています。広告テクノロジーのカスタム ロジックは、Protected Auction の広告の選択のベースとなる特徴量をエンジニアリングするために、キュレートされたシグナルに保護されたアクセスを行えます。

Protected App Signals API

Protected App Signals API は、カスタム オーディエンスに使用されるのと同様の委任メカニズムを使用したシグナルの管理をサポートしています。Protected App Signals API を使用すると、単一のスカラー値または時系列の形式でシグナルを保存できます。時系列シグナルは、ユーザー セッション継続時間などを保存するために使用できます。時系列シグナルを使用すると、先入れ先出しのエビクション ルールを使用して特定の長さを強制できます。スカラー シグナルのデータ型、または時系列シグナルの各要素は、バイト配列です。各値は、シグナルを保存したアプリのパッケージ名と、ストアシグナルの API 呼び出しの作成タイムスタンプで強化できます。この追加情報には、シグナル エンコード JavaScript を使用できます。次の例は、特定の広告テクノロジーが所有するシグナルの構造を示しています。

次の例は、adtech1.com に関連付けられたスカラー シグナルと時系列シグナルを示しています。

  • Base64 値のキー「A1c」と値「c12Z」のスカラー シグナル。2023 年 6 月 1 日に、com.google.android.game_app によってシグナルストアがトリガーされました。
  • 2 つの異なるアプリによって作成された、キー「dDE」を持つシグナルのリスト。

広告テクノロジーには、デバイスにシグナルを保存するための一定のスペースが割り当てられます。シグナルには最大 TTL があります。この TTL は未定です。

生成されたアプリがアンインストールされた場合、Protected App Signals API の使用がブロックされた場合、またはアプリデータがユーザーによって消去された場合、Protected App Signals はストレージから削除されます。

Protected App Signals API は、次の要素で構成されています。

  • シグナルを追加、更新、削除する Java と JavaScript API。
  • 高信頼実行環境(TEE)で行われる Protected Auction 中に、永続的なシグナルを処理して、その後の特徴量エンジニアリングのためにリアルタイムで準備する JavaScript API。

シグナルを追加、更新、削除する

広告テクノロジーは、fetchSignalUpdates() API を使用してシグナルを追加、更新、削除できます。この API は、Protected Audience のカスタム オーディエンスの委任と同様の委任をサポートしています。

アプリに SDK がない購入者の広告テクノロジーがシグナルを追加するには、モバイル測定パートナー(MMP)やサプライサイド プラットフォーム(SSP)などのデバイス上のプレゼンスがある広告テクノロジーと連携する必要があります。Protected App Signals API は、Protected App Signals の管理に柔軟なソリューションを提供することで、こうした広告テクノロジーをサポートすることを目的としています。この API は、デバイス上の呼び出し元が購入者に代わって Protected App Signals の作成を呼び出せるようにします。委任と呼ばれるこのプロセスは、fetchSignalUpdates() API を利用します。fetchSignalUpdates() は URI を受け取り、シグナルの更新のリストを取得します。たとえば、fetchSignalUpdates() は指定された URI に GET リクエストを発行し、ローカルのシグナル ストレージに適用する更新のリストを取得します。購入者が所有する URL エンドポイントは、コマンドの JSON リストで応答します。

サポートされている JSON コマンドは次のとおりです。

  • put: 指定されたキーのスカラー値を挿入またはオーバーライドします。
  • put_if_not_present: 値がまだ保存されていない場合に、指定されたキーにスカラー値を挿入します。このオプションは、たとえば、特定のユーザーのテスト ID を設定する際に、別のアプリによってすでに ID が設定されている場合にはその ID をオーバーライドしないために役立ちます。
  • append: 指定されたキーに関連付けられた時系列に要素を追加します。maxSignals パラメータは、時系列内のシグナルの最大数を指定します。サイズを超えると、古い要素が削除されます。キーにスカラー値が含まれている場合、キーは自動的に時系列に変換されます。
  • remove: 指定したキーに関連付けられているコンテンツを削除します。
{
   "put": {
    "A1c": "c12Z",
    "dDE": "d23d",
  },
  "put_if_not_present": {
    "aA9": "a1zfC3"
  }
  "append": {
    "bB1": {"values": ["gh12D", "d45g"], "maxSignals": 20}
  },
  "remove": ["c0D"]
}

すべてのキーと値は Base64 で表されます。

上記のコマンドは、スカラー シグナルのセマンティクスを挿入、上書き、削除し、時系列シグナルの挿入、追加、完全なシリーズの上書きを行うことを目的としています。時系列シグナルの特定の要素に対する削除と上書きのセマンティクスは、エンコードと圧縮の処理中に管理する必要があります。たとえば、エンコード中に、より新しいものによって置き換えまたは修正された時系列の値を無視し、それらを圧縮プロセス中に削除します。

保存されたシグナルは、フェッチ リクエストを実行するアプリケーション、リクエストのレスポンダ(登録された広告テクノロジーの「site」または「origin」)、およびリクエストの作成時刻に自動的に関連付けられます。すべてのシグナルは、プライバシー サンドボックスに登録済みの広告テクノロジーに代わって保存されます。URI「site」/「origin」は登録済みの広告テクノロジーのデータと一致する必要があります。リクエスト元の広告テクノロジーが登録されていない場合、リクエストは拒否されます。

保存容量の割り当てとエビクション

各広告テクノロジーには、シグナルを保存するためのユーザー デバイス上のスペースが限られています。この割り当ては広告テクノロジーごとに定義されるため、さまざまなアプリからキュレートされたシグナルが割り当てを共有します。割り当てを超えた場合、システムは先入れ先出しで古いシグナル値を削除することで空き容量を増やします。エビクションが頻繁に実行されないように、システムにはバッチ処理ロジックが実装されています。このロジックでは、割り当てから限定量の超過引き出しを許容して、エビクション ロジックのトリガー時に追加のスペースを解放します。

データ送信用のオンデバイス エンコード

広告選択用のシグナルを準備するため、購入者ごとのカスタム ロジックは、保存されたアプリごとのシグナルとイベントに保護されたアクセスを行えます。Android システムのバックグラウンド ジョブは 1 時間ごとに実行され、デバイスにダウンロードされた購入者ごとのカスタム エンコード ロジックを実行します。購入者ごとのカスタム エンコード ロジックは、アプリごとの信号をエンコードし、購入者ごとの割り当てに準拠するペイロードにアプリごとの信号を圧縮します。ペイロードは、保護されたデバイス ストレージの境界内で暗号化され、入札およびオークション サービスに送信されます。

広告テクノロジーは、独自のカスタム ロジックによって処理されるシグナル処理のレベルを定義します。たとえば、ソリューションをインストルメント化して以前のシグナルを破棄し、異なるアプリケーションからの類似または強化シグナルを集約して、より少ないスペースを使用する新しいシグナルにできます。

購入者がシグナル エンコーダを登録していない場合、シグナルは準備されず、デバイス上でキュレートされたシグナルは入札およびオークション サービスに送信されません。

ストレージ、ペイロード、リクエストの割り当ての詳細については、今後のアップデートでお知らせします。また、カスタム関数を提供する方法についても詳しく説明します。

広告選択ワークフロー

このプロポーザルでは、広告テクノロジーのカスタムコードは、TEE で実行されている Protected Auction(Ad Selection API)内の Protected App Signals にのみアクセスできます。アプリ インストールのユースケースのニーズをさらにサポートするため、Protected Auction で広告候補がリアルタイムでフェッチされます。これは、オークション前に候補広告を把握しているリマーケティングのユースケースとは対照的です。

このプロポーザルでは、Protected Audience のプロポーザルと同様の広告選択ワークフローが使用され、アプリ インストールのユースケースに対応するための更新が行われています。特徴量エンジニアリングとリアルタイムの広告選択のコンピューティング要件をサポートするには、TEE で実行される入札サービスおよびオークション サービスでアプリ インストール広告のオークションを実施する必要があります。Protected Auction 中の Protected App Signals へのアクセスは、デバイス上のオークションではサポートされていません。

広告選択ワークフローの説明図。
Android 版プライバシー サンドボックスの広告選択ワークフロー

広告選択ワークフローは次のとおりです。

  1. 販売者の SDK が、Protected App Signals のデバイス上で暗号化されたペイロードを送信します。
  2. 販売者のサーバーがオークション構成を作成し、それを暗号化されたペイロードとともに販売者の信頼できる入札およびオークション サービスに送信し、広告選択ワークフローを開始します。
  3. 販売者の入札およびオークション サービスは、参加している信頼できる購入者のフロントエンド サーバーにペイロードを渡します。
  4. 購入者の入札サービスがバイサイド広告選択ロジックを実行します。
    1. バイサイド広告取得ロジックの実行
    2. バイサイド入札ロジックの実行
  5. セルサイド スコアリング ロジックが実行されます
  6. 広告がレンダリングされ、レポートが開始されます。

広告選択ワークフローを開始する

アプリで広告を表示する準備が整うと、広告テクノロジー SDK(通常は SSP)は、パブリッシャーからの関連するコンテキスト データと購入者ごとの暗号化されたペイロードを、Protected Auction に送信されるリクエストに含めて getAdSelectionData 呼び出しを使用して送信することにより、広告選択ワークフローを開始します。この API はリマーケティング ワークフローで使用されるものと同じ API で、Android 向けの入札とオークションの統合に関するプロポーザルで説明されています。

広告選択を開始するために、販売者は参加している購入者のリストとデバイス上の Protected App Signals の暗号化されたペイロードを渡します。この情報を使用して、セルサイド広告サーバーは信頼できる SellerFrontEnd サービス用に SelectAdRequest を準備します。

販売者は以下を設定します。

バイサイド広告選択ロジックの実行

大まかに言うと、購入者のカスタム ロジックは、パブリッシャーから提供されたコンテキスト データと Protected App Signals を使用して、広告リクエストに関連する広告を選択し、入札単価を適用します。このプラットフォームでは、購入者は多数の広告の選択肢の中から、最も関連性の高い広告(上位 k 件)に絞り込めます。それらの入札単価が計算されてから、最終的な選択のために広告が販売者に返されます。

バイサイド広告選択実行ロジックの説明図。
Android 版プライバシー サンドボックスにおけるバイサイド広告選択の実行ロジック。

入札前に、購入者は多数の広告の選択肢からスタートします。広告ごとに入札単価を計算するには時間がかかりすぎるため、購入者はまず多数の選択肢から上位 k 個の候補を選択する必要があります。次に、購入者は上位 k 個の候補ごとに入札単価を計算する必要があります。その後、最終的な選択のために、それらの広告と入札単価が販売者に返されます。

  1. BuyerFrontEnd サービスが広告リクエストを受信します。
  2. BuyerFrontEnd サービスは、購入者の入札サービスにリクエストを送信します。購入者の入札サービスは、prepareDataForAdRetrieval() という UDF を実行します。これは、広告取得サービスから上位 k 個の候補を取得するリクエストを作成します。入札サービスは、構成された取得サーバー エンドポイントにこのリクエストを送信します。
  3. 広告取得サービスは getCandidateAds() UDF を実行します。これにより、上位 k 個の広告候補が絞り込まれ、購入者の入札サービスに送信されます。
  4. 購入者の入札サービスが generateBid() UDF を実行し、最適な候補を選択し、入札単価を計算して、BuyerFrontEnd サービスに返します。
  5. BuyerFrontEnd サービスが、広告と入札単価を販売者に返します。

このフローにはいくつかの重要な詳細があります。特に、各部分が相互に通信する方法と、上位 k 個の広告を取得し、入札単価の計算を行うための機械学習予測能力などの機能がプラットフォームでどのように提供されるかに関してです。

詳細を説明する前に、上の図の TEE に関するアーキテクチャ上の重要な注意事項をいくつか示します。

購入者の入札サービスには、内部的に推論サービスが含まれています。広告テクノロジーは、購入者の入札サービスに機械学習モデルをアップロードできます。購入者の入札サービスで実行されている UDF 内から、広告テクノロジーが予測を行ったり、これらのモデルからエンベディングを生成したりするための JavaScript API が提供されます。広告取得サービスとは異なり、購入者の入札サービスには、広告メタデータを保存する Key-Value サービスがありません

広告取得サービスには、内部に Key-Value サービスが含まれています。広告テクノロジーは、プライバシー境界の外側にある独自のサーバーから、このサービスに Key-Value ペアを実体化できます。広告取得サービスで実行されている UDF 内から、広告テクノロジーがこの Key-Value サービスを読み取るための JavaScript API が提供されます。購入者の入札サービスとは異なり、広告取得サービスには推論サービスは含まれません

この設計で対処する重要な問題の一つは、取得時間と入札時間の予測をどのように行うかです。どちらについても、モデル分解と呼ばれるソリューションで解決できます。

モデル分解

モデル分解は、1 つのモデルを複数の部分に分割し、それらの部分を予測に組み合わせることができる手法です。アプリ インストールのユースケースでは、多くの場合、モデルはユーザーデータ、コンテキスト データ、広告データの 3 種類のデータを利用します。

非分解の場合、1 つのモデルが 3 種類のデータすべてでトレーニングされます。分解の場合、モデルは複数の部分に分割され、ユーザーデータが含まれる部分のみが機密となります。つまり、購入者の入札サービスの推論サービスでは、信頼境界内で実行する必要があるのは、ユーザー部分を含むモデルだけです。

これにより、次のような設計が可能になります。

  1. モデルを非公開な部分(ユーザーデータ)と 1 つ以上の非公開ではない部分(コンテキストと広告データ)に分割します。
  2. 必要に応じて、非公開ではない部分の一部またはすべてを、予測を行う必要がある UDF に引数として渡します。たとえば、コンテキスト エンベディングは per_buyer_signals で UDF に渡されます。
  3. 必要に応じて、広告テクノロジーは非公開ではない部分のモデルを作成し、それらのモデルのエンベディングを広告取得サービスの Key-Value ストアに実体化できます。広告取得サービスの UDF は、実行時にこれらのエンベディングをフェッチできます。
  4. UDF の実行中に予測を行うには、推論サービスからの非公開エンベディングを、UDF 関数の引数または Key-Value ストアの非公開ではないエンベディングと、ドット積などの演算で組み合わせます。これが最終的な予測です。

それを踏まえて、各 UDF を詳しく見ていきましょう。その機能、統合方法、上位 k 個の広告の選択と入札単価の計算に必要な予測方法について説明します。

prepareDataForAdRetrieval() UDF

購入者の入札サービスで実行される prepareDataForAdRetrieval() は、上位 k 個の広告候補をフェッチするために広告取得サービスに送信されるリクエスト ペイロードを作成します。

prepareDataForAdRetrieval() は次の情報を取得します。

  • getAdSelectionData から受信した購入者ごとのペイロード。このペイロードには、Protected App Signals が含まれています。
  • コンテキスト シグナルの auction_signalsオークションの情報用)と buyer_signals購入者のシグナル フィールド用)。

prepareDataForAdRetrieval() は次の 2 つの処理を行います。

  • 特徴量化: 取得時間の推論が必要な場合、受信シグナルを特徴量に変換します。この特徴量は、推論サービスの呼び出し時に使用し、取得用のプライベート エンベディングを入手します。
  • 取得用のプライベート エンベディングの計算: 取得予測が必要な場合は、上記の特徴量を使用して推論サービスに対して呼び出しを行い、取得時間予測用の非公開エンベディングを取得します。

prepareDataForAdRetrieval() の戻り値:

  • Protected App Signals: 広告テクノロジーによってキュレートされたシグナルのペイロード。
  • オークション固有のシグナル: プラットフォーム固有のセルサイド シグナルと、SelectAdRequest からの auction_signalsper_buyer_signals(コンテキスト エンベディングを含む)などのコンテキスト情報。これは、Protected Audience と同様です。
  • 追加のシグナル: 推論サービスから取得した非公開エンベディングのような追加情報。

このリクエストは広告取得サービスに送信されます。広告取得サービスは候補のマッチングを行ってから、getCandidateAds() UDF を実行します。

getCandidateAds() UDF

getCandidateAds() は広告取得サービスで実行されます。購入者の入札サービスで prepareDataForAdRetrieval() によって作成されたリクエストを受け取ります。このサービスは getCandidateAds() を実行します。これは、リクエストを一連のクエリに変換し、データをフェッチし、カスタム ビジネス ロジックとその他のカスタム取得ロジックを実行することで、入札の上位 k 個の候補をフェッチします。

getCandidateAds() は次の情報を取得します。

  • Protected App Signals: 広告テクノロジーによってキュレートされたシグナルのペイロード。
  • オークション固有のシグナル: プラットフォーム固有のセルサイド シグナルと、SelectAdRequest からの auction_signalsper_buyer_signals(コンテキスト エンベディングを含む)などのコンテキスト情報。これは、Protected Audience と同様です。
  • 追加のシグナル: 推論サービスから取得した非公開エンベディングのような追加情報。

getCandidateAds() によって、次の処理が行われます。

  1. 広告候補の初期セットのフェッチ: 言語、地域、広告タイプ、広告サイズ、予算などのターゲティング条件を使用してフェッチし、広告候補をフィルタします。
  2. 取得用エンベディングのフェッチ: 上位 k 個の選択の取得時間を予測するために Key-Value サービスからのエンベディングが必要な場合は、Key-Value サービスから取得する必要があります。
  3. 上位 k 個の候補の選択: Key-Value ストアからフェッチした広告メタデータと、購入者の入札サービスから送信された情報に基づいて、フィルタされた広告候補セットの軽量スコアを計算します。そのスコアに基づいて上位 k 個の候補が選ばれます。スコアの例には、広告に表示されたアプリをインストールする確率があります。
  4. 入札エンベディングのフェッチ: 入札時間を予測するために、入力コードが Key-Value サービスからのエンベディングを必要とする場合、Key-Value サービスから取得できます。

広告のスコアは、たとえば、ユーザーがアプリをインストールする確率を予測する予測モデルの出力である場合があります。この種のスコア生成には、一種のモデル分解が含まれます。getCandidateAds() は広告取得サービスで実行されるため、また広告取得サービスには推論サービスがないため、予測は以下を組み合わせて生成されます。

  • オークション固有のシグナル入力を使用して渡されるコンテキスト エンベディング。
  • 追加のシグナル入力を使用して渡される非公開エンベディング。
  • 非公開ではないエンベディング広告テクノロジーは、サーバーから広告取得サービスの Key-Value サービスに実体化されています。

なお、購入者の入札サービスで実行される generateBid() UDF は、独自のモデル分解を適用して入札の予測を行うこともできます。これを行うために Key-Value サービスからのエンベディングを必要とする場合は、この時点でフェッチする必要があります。

getCandidateAds() の戻り値:

  • 広告候補: generateBid() に渡される上位 k 個の広告。各広告は以下で構成されます。
    • レンダリング URL: 広告クリエイティブをレンダリングするためのエンドポイント。
    • メタデータ: バイサイド広告テクノロジー固有の広告メタデータ。たとえば、広告キャンペーンに関する情報や、地域や言語などのターゲティング条件が含まれる場合があります。メタデータには、入札時に推論を行うためにモデル分解が必要な場合に使用するエンベディング(オプション)を含めることができます。
  • 追加のシグナル: 必要に応じて、広告取得サービスには、generateBid() で使用される追加のエンベディングやスパムシグナルなどの追加情報を含めることができます。

Google では、SelectAdRequest 呼び出しの一部として提供するなど、スコアリング対象の広告を提供する他の方法を検討しています。これらの広告は、RTB 入札リクエストを使用して取得できます。そのような場合は、Protected App Signals を使用せずに広告を取得する必要があります。広告テクノロジーは、最適なオプションを選択する前に、レスポンス ペイロード サイズ、レイテンシ、費用、シグナルの可用性などのトレードオフを評価することが予想されます。

generateBid() UDF

取得時に候補広告とエンベディングのセットを取得したら、購入者の入札サービスで実行される入札に進むことができます。このサービスは、購入者提供generateBid() UDF を実行して、入札する広告を上位 k 個から選択し、その広告の入札単価を返します。

generateBid() は次の情報を取得します。

  • 候補広告: 取得広告の取得サービスから返された上位 k 個の広告。
  • オークション固有のシグナル: プラットフォーム固有のセルサイド シグナルと、SelectAdRequest からの auction_signalsper_buyer_signals(コンテキスト エンベディングを含む)などのコンテキスト情報。
  • その他のシグナル: 入札時に使用する追加情報。

購入者の generateBid() の実装では、次の 3 つの処理が行われます。

  • 特徴量化: 推論で使用する特徴量にシグナルを変換します。
  • 推論: 機械学習モデルを使用して予測を生成し、予測されるクリックスルー率やコンバージョン率などの値を計算します。
  • 入札: 推論値と他の入力値を組み合わせて、広告候補の入札単価を計算します。

generateBid() の戻り値:

  • 広告候補。
  • 算出された入札単価。

アプリ インストール広告で使用される generateBid() とリマーケティング広告で使用されるものは異なります。

以降のセクションでは、特徴量化、推論、入札について詳しく説明します。

特徴量化

オークション シグナルは、generateBid() で特徴量に準備できます。これらの特徴量は、推論時に、クリックスルー率やコンバージョン率などの予測に使用できます。また、モデル トレーニングで使用するために、落札レポートでその一部を転送するためのプライバシー保護メカニズムも検討しています。

推論

入札単価を計算する際は、1 つ以上の機械学習モデルに対して推論を行うのが一般的です。たとえば、有効 eCPM の計算では多くの場合、モデルを使用してクリックスルー率やコンバージョン率を予測します。

クライアントは、generateBid() 実装とともに複数の機械学習モデルを提供できます。また、クライアントが実行時に推論を実行できるように、generateBid() 内で JavaScript API を提供します。

推論は購入者の入札サービスで実行されます。これは、特に TEE でアクセラレータがまだ利用できないため、推論のレイテンシとコストに影響する可能性があります。クライアントによっては、購入者の入札サービスで実行される個々のモデルでニーズが満たされる場合もあります。たとえば、非常に大規模なモデルを扱うクライアントなど、一部のクライアントは、入札時の推論コストとレイテンシを最小限に抑えるためにモデル分解などのオプションを検討する場合があります。

サポートされているモデル形式や最大サイズなどの推論機能の詳細については、今後のアップデートでお知らせします。

モデル分解を実装する

モデル分解の説明は上記をご覧ください。入札時の具体的なアプローチは次のとおりです。

  1. 単一のモデルを非公開部分(ユーザーデータ)と 1 つ以上の非公開ではない部分(コンテキストと広告データ)に分割します。
  2. 非公開ではない部分を generateBid() に渡します。これらは、per_buyer_signals から取得するか、広告テクノロジーが外部で計算し、取得サービスの Key-Value ストアに実体化し、取得時にフェッチし、追加シグナルの一部として返すエンベディングから取得することもできます。非公開エンベディングはプライバシー境界の外部から提供できないため、これには含まれません。
  3. generateBid() で以下を実行します。
    1. モデルに対して推論を行い、非公開のユーザー エンベディングを取得します。
    2. ドット積などのオペレーションを使用して、非公開のユーザー エンベディングを、per_buyer_signals または非公開ではない広告からのコンテキスト エンベディング、および取得サービスからのコンテキスト エンベディングと組み合わせます。これは、入札単価の計算に使用できる最終的な予測です。

このアプローチを使用すると、通常は購入者の入札サービスで実行するには大きすぎるモデルや遅いモデルに対して、入札時に推論を実行できます。

セルサイド スコアリング ロジック

この段階で、参加しているすべての購入者による入札を受けた広告のスコアリングが行われます。generateBid() の出力は販売者のオークション サービスに渡されて scoreAd() が実行されます。この scoreAd() では一度に 1 つの広告のみが考慮されます。販売者はスコアに基づいて落札広告を選択し、レンダリングのためにデバイスに返します。

スコアリング ロジックは Protected Audience のリマーケティング フローで使用されたものと同じで、リマーケティングとアプリ インストールの候補から落札者を選択できます。この関数は、Protected Auction で送信された広告候補ごとに 1 回呼び出されます。詳しくは、入札とオークションの説明をご覧ください。

広告選択コード ランタイム

このプロポーザルでは、アプリ インストールの広告選択コードは、Protected Audience のリマーケティング フローと同じ方法で指定されます。詳しくは、入札とオークションの設定をご覧ください。入札コードは、リマーケティングに使用するのと同じクラウド ストレージのロケーションで利用できます。

レポート

このプロポーザルでは、Protected Audience レポートのプロポーザルと同じ Reporting API を使用します(販売者と購入者のレポートをプラットフォームが送信するようにトリガーする reportImpression() など)。

購入側でのレポートの一般的なユースケースの一つは、広告選択時に使用されるモデルのトレーニング データを取得することです。既存の API に加えて、プラットフォームから広告テクノロジー サーバーにイベントレベルのデータをエグジットするための特定のメカニズムも提供されます。これらの下り(外向き)ペイロードには、特定のユーザーデータが含まれる場合があります。

長期的には、TEE で実行されているサービス外にイベントレベルのユーザーデータを送信することなく、Protected Auction で使用されるデータを使用してモデル トレーニングを行うためのプライバシー保護ソリューションを検討しています。詳細については、今後のアップデートで説明します。

短期的には、ノイズが追加されたデータを generateBid() から外部に送信する一時的な方法を提供します。初期案は次のとおりです。業界からのフィードバックに応じて、下位互換性のない変更を含め、この案を進化させていきます。

技術的には、次のように機能します。

  1. 広告テクノロジーは、送信するデータのスキーマを定義します。
  2. generateBid() で、必要な下り(外向き)ペイロードを構築します。
  3. プラットフォームは、下り(外向き)ペイロードをスキーマと照らし合わせて検証し、サイズの上限を適用します。
  4. プラットフォームは下り(外向き)ペイロードにノイズを追加します。
  5. 下り(外向き)ペイロードは、ワイヤー形式で落札レポートに含まれ、広告テクノロジー サーバーで受信、デコードされ、モデルのトレーニングに使用されます。

下り(外向き)ペイロードのスキーマを定義する

進化するプライバシー要件をプラットフォームで適用するには、下り(外向き)ペイロードをプラットフォームが理解できる方法で構造化する必要があります。広告テクノロジーは、スキーマ JSON ファイルを提供することで、下り(外向き)ペイロードの構造を定義します。このスキーマはプラットフォームによって処理され、UDF やモデルなどの他の広告テクノロジー リソースと同じメカニズムを使用して、入札サービスとオークション サービスによって機密性が保持されます。

その JSON の構造を定義する CDDL ファイルが提供されます。CDDL ファイルには、サポートされている特徴型のセット(ブール値、整数、バケットなどの特徴)が含まれます。CDDL ファイルと指定されたスキーマの両方にバージョニングが適用されます。

たとえば、単一のブール値特徴とサイズ 2 のバケット特徴で構成される下り(外向き)ペイロードは次のようになります。

egressPayload = {
  features : [
    {
      type: "boolean_feature",
      value: false
    },
    {
      type: "bucket_feature",
      size: 2,
      value: [
        {
          value: false
        },
        {
          value: true
        }
      ]
    }
  ]
}

サポートされている特徴量の詳細については、GitHub をご覧ください。

generateBid() で下り(外向き)ペイロードを作成する

特定のバイヤーのすべての Protected App Signals は、そのバイヤーの generateBid() UDF で使用できます。これらのデータが特徴量化されると、広告テクノロジーは JSON 形式でペイロードを作成します。この下り(外向き)ペイロードは、広告テクノロジー サーバーに送信される購入者の落札レポートに含まれます。

この設計の代替として、下り(外向き)ベクトルの計算を generateBid() ではなく reportWin() で行うこともできます。各アプローチにはトレードオフが伴います。Google は業界からのフィードバックに基づいて、この決定を最終決定します。

下り(外向き)ペイロードを検証する

プラットフォームは、広告テクノロジーによって作成された下り(外向き)ペイロードを検証します。検証により、特徴値がその型に対して有効であること、サイズの制約が満たされていること、悪意のある行為者が下り(外向き)ペイロードに追加情報をパックしてプライバシー管理を破ろうとしていないことを確認します。

下り(外向き)ペイロードが無効な場合、Win レポートに送信される入力からサイレントで破棄されます。これは、検証を回避しようとする不正な行為者にデバッグ情報を提供することを避けるためです。

広告テクノロジーが generateBid() で作成した下り(外向き)ペイロードがプラットフォームの検証に合格することを確認するための JavaScript API が提供されます。

validate(payload, schema)

この JavaScript API は、特定のペイロードがプラットフォームの検証に合格するかどうかを呼び出し元が判断するためのものです。悪意のある generateBid() UDF を防ぐには、実際の検証をプラットフォームで行う必要があります。

下り(外向き)ペイロードにノイズを追加する

プラットフォームは、下り(外向き)ペイロードをノイズ化してから、勝利レポートに含めます。初期のノイズしきい値は 1% ですが、この値は時間の経過とともに変化する可能性があります。プラットフォームは、特定の下り(外向き)ペイロードがノイズにさらされたかどうかを通知しません。

ノイズ追加方法は次のとおりです。

  1. プラットフォームは、下り(外向き)ペイロードのスキーマ定義を読み込みます。
  2. 下り(外向き)ペイロードの 1% がノイズ追加の対象になります。
  3. 下り(外向き)ペイロードを選択しない場合、元の値全体が保持されます。
  4. 下り(外向き)ペイロードを選択した場合、各特徴の値は、その特徴型の有効な値(ブール値の特徴の場合は 0 または 1 など)にランダムに置き換えられます。

モデル トレーニング用の下り(外向き)ペイロードの送信、受信、デコード

検証済みのノイズ追加された下り(外向き)ペイロードは、reportWin() の引数に含まれ、モデル トレーニングのためにプライバシー境界の外側にある購入者の広告テクノロジー サーバーに送信されます。下り(外向き)ペイロードはワイヤー形式になります。

すべての特徴タイプと下り(外向き)ペイロード自体のワイヤー形式の詳細については、GitHub をご覧ください。

下り(外向き)ペイロードのサイズを決定する

下り(外向き)ペイロードのサイズ(ビット単位)は、ユーティリティとデータの最小化のバランスを取ります。Google は業界と連携して、テストを通じて適切なサイズを決定します。これらのテストの実施中は、ビットサイズの制限なしでデータを一時的にエグジストします。ビットサイズの制限のない追加の下り(外向き)データは、テストが完了すると削除されます。

サイズを決定する方法は次のとおりです。

  1. 最初は、generateBid() で次の 2 つの下り(外向き)ペイロードがサポートされます。
    1. egressPayload: このドキュメントで説明したサイズ制限付き下り(外向き)ペイロード。最初、この下り(外向き)ペイロードのサイズは 0 ビットになります(つまり、検証中に常に削除されます)。
    2. temporaryUnlimitedEgressPayload: サイズのテスト用の一時的なサイズ無制限の下り(外向き)ペイロード。この下り(外向き)ペイロードのフォーマット設定、作成、処理には、egressPayload と同じメカニズムを使用します。
  2. これらの下り(外向き)ペイロードには、それぞれ独自のスキーマ JSON ファイル(egress_payload_schema.jsontemporary_egress_payload_schema.json)があります。
  3. さまざまな下り(外向き)ペイロード サイズ(5 ビット、10 ビットなど)でモデルの有用性を判断するためのテスト プロトコルと一連の指標が用意されています。
  4. テスト結果に基づいて、適切なユーティリティとプライバシーのトレードオフで下り(外向き)ペイロード サイズを決定します。
  5. egressPayload のサイズを 0 ビットから新しいサイズに設定します。
  6. 設定された移行期間が経過すると、temporaryUnlimitedEgressPayload が削除され、新しいサイズの egressPayload のみが残ります。

Google では、この変更を管理するための追加の技術的なガイドライン(サイズを 0 ビットから増やすときに egressPayload を暗号化するなど)を調査しています。これらの詳細と、テストのタイミングと temporaryUnlimitedEgressPayload の削除については、今後のアップデートで説明する予定です。

次に、egressPayload のサイズを確定するためのテスト プロトコルについて説明します。Google の目標は、業界と連携して、有用性とデータの最小化のバランスが取れたサイズを見つけることです。これらのテストで生成されるアーティファクトはグラフで、x 軸はトレーニング ペイロードのサイズ(ビット単位)、y 軸はサイズ無制限のベースラインと比較した、そのサイズのモデルによって生成された収益の割合です。

ここでは、pInstall モデルをトレーニングし、トレーニング データのソースとしてログと、オークションで落札したときに受け取る temporaryUnlimitedegressPayload の内容を使用します。広告テクノロジーのプロトコルでは、まずオフライン テストが実施されます。

  1. Protected App Signals で使用するモデルのアーキテクチャを決定します。たとえば、モデル分解を使用するかどうかを決定する必要があります。
  2. モデルの品質を測定する指標を定義します。推奨される指標は、AUC 損失とログ損失です。
  3. モデルのトレーニング中に使用する特徴セットを定義します。
  4. そのモデル アーキテクチャ、品質指標、トレーニング機能セットを使用して、アブレーション スタディを実行し、PAS で使用する各モデルのビットあたりの有用性を決定します。アブレーション スタディに推奨されるプロトコルは次のとおりです。
    1. すべての特徴量を使用してモデルをトレーニングし、有用性を測定します。これが比較のベースラインです。
    2. ベースラインの生成に使用した特徴ごとに、その特徴を除くすべての特徴を使用してモデルをトレーニングします。
    3. 結果として得られる有用性を測定する。差分を特徴のサイズ(ビット単位)で割ります。これが、その特徴のビットあたりの期待ユーティリティです。
  5. テストに使用するトレーニング ペイロードのサイズを決定します。[5、10、15、...、size_of_all_training_features_for_baseline] ビットを使用することをおすすめします。これらはそれぞれ、テストで評価される egressPayload の可能なサイズを表します。
  6. 可能なサイズごとに、アブレーション スタディの結果を使用して、ビットあたりの有用性を最大化するそのサイズ以下の特徴セットを選択します。
  7. 可能なサイズごとにモデルをトレーニングし、その有用性を、すべての特徴でトレーニングされたベースライン モデルの有用性の割合として評価します。
  8. 結果をグラフにプロットします。x 軸はトレーニング ペイロードのサイズ(ビット単位)、y 軸はベースラインと比較したそのモデルによって生成された収益の割合です。

次に、広告テクノロジーは、temporaryUnlimitedEgressPayload 経由で送信された特徴量データを使用して、実際のトラフィック テストの手順 5 ~ 8 を繰り返します。広告テクノロジーは、オフライン トラフィックとライブ トラフィックのテスト結果をプライバシー サンドボックスと共有して、egressPayload のサイズに関する意思決定に役立てることができます。

これらのテストのタイムラインと、egressPayload のサイズを結果の値に設定するタイムラインは、このドキュメントの範囲外であり、今後のアップデートで説明します。

データ保護対策

下り(外向き)データには、次のような保護対策が適用されます。

  1. egressPayloadtemporaryUnlimitedEgressPayload の両方にノイズが追加されます。
  2. データの最小化と保護のため、temporaryUnlimitedEgressPayload はサイズ テストの期間中のみ使用できます。この期間中に egressPayload の適切なサイズが決定されます。

権限

ユーザー コントロール

  • このプロポーザルの目的は、Protected App Signals またはカスタム オーディエンスを 1 つ以上保存しているインストール済みアプリのリストをユーザーが確認できるようにすることです。
  • ユーザーはこのリストからアプリをブロックしたり削除したりできます。ブロックと削除では、次の処理が行われます。
    • アプリに関連付けられているすべての Protected App Signals とカスタム オーディエンスを消去します。
    • アプリが新しい Protected App Signals とカスタム オーディエンスを保存しないようにします。
  • ユーザーは Protected App Signals と Protected Audience API を完全にリセットできます。リセットを行うと、デバイス上の既存の Protected App Signals とカスタム オーディエンスはすべて消去されます。
  • ユーザーは、Android 版プライバシー サンドボックス(Protected App Signals API と Protected Audience API を含む)を完全にオプトアウトできます。この場合、Protected Audience API と Protected App Signals API は標準の例外メッセージ SECURITY_EXCEPTION を返します。

アプリの権限とコントロール

このプロポーザルは、アプリが Protected App Signals を管理できるようにすることを目的としています。

  • アプリは、Protected App Signals との関連付けを管理できます。
  • アプリは、サードパーティの広告テクノロジー プラットフォームに、アプリに代わって Protected App Signals を管理する権限を付与できます。

広告テクノロジー プラットフォームによるコントロール

このプロポーザルでは、広告テクノロジーが Protected App Signals を制御する方法の概要を説明します。

  • すべての広告テクノロジーは、プライバシー サンドボックスに登録し、Protected App Signals のすべての URL と一致する「site」または「origin」ドメインを指定する必要があります。
  • 広告テクノロジーは、アプリや SDK と連携して、Protected App Signals の作成の確認に使用される確認トークンを提供できます。このプロセスがパートナーに委任された場合、Protected App Signals の作成は、広告テクノロジーによる承認を必要とするように構成できます。