Ads Data Hub のプライバシー チェック

Ads Data Hub が行うあらゆる処理はエンドユーザーのプライバシー保護を念頭に置いたものとなっており、プラットフォームそのものがプライバシー保護を基礎として構築されています。Google ではプライバシーを保護し、お客様の規制遵守をサポートするために、お客様がプラットフォームから取得するデータの中に個々のユーザーに関するデータ1が含まれないよう、一定のチェック機能と制限を設けています。

Ads Data Hub のプライバシー機能の概要は次のとおりです。詳細については、後述します。

  • 静的チェック: クエリ内のステートメントを調べ、プライバシーに関する明らかで直接的な懸念がないか確認します。
  • データアクセス予算: 特定のデータにアクセスできる回数の上限が指定されています。
  • 集計チェック: 各行に含まれるユーザー数をしきい値以上にすることで、エンドユーザーのプライバシーを保護します。
  • 差分チェック(または「差分チェック」)は、結果セットを比較して、複数のユーザーセットのデータを比較することで個々のユーザーに関する情報が収集されないようにします。
  • ノイズ インジェクション: 差分チェックの代替手段として使用されます。ノイズモードは、マーケター向け Ads Data Hub でのみ使用できます。ノイズ インジェクションについて詳しくは、マーケター向け Ads Data Hub のサイトのこちらのページをご覧ください。

プライバシー チェックの結果が不合格だった場合、行がフィルタされたことを示すプライバシー メッセージが表示されます。フィルタによる除外の規模はさまざまで、1 行の場合もあれば結果セット全体の場合もあります。フィルタされた行の概要を使用して2、除外された行のデータをカウントすることで、レポートの合計の精度を保つことができます。

静的チェック

静的チェック: クエリ内のステートメントを調べ、プライバシーに関する明らかで直接的な懸念がないか確認します。たとえば、ユーザー識別子のエクスポート、ユーザー識別子を使った関数、ユーザー単位のデータを含むフィールドにおける禁止されている関数の使用がないかを調べます。静的チェックによるクエリエラーを回避するには、ベスト プラクティスを確認し、許可される関数を理解してください。

データアクセス予算

データアクセス予算とは、同じデータにアクセスできる回数の上限を定めたものです。予算の終了が近づくと、DATA_ACCESS_BUDGET_IS_NEARLY_EXHAUSTED タイプのプライバシー メッセージで通知されます。予算は、データアクセス予算のエントリ ポイントを使用するか、管理画面で予算通知を確認することでモニタリングできます。

集計の要件

Ads Data Hub のプライバシー チェックでは、ユーザー集計のしきい値が基準となります。ほとんどのクエリでは、含まれるユーザーが 50 人未満の場合、レポートデータは取得できません。ただし、クリック数とコンバージョン数のみを参照するクエリの場合は、10 人以上であれば取得可能です。

  • ユーザー ID がゼロのイベントは、そのイベントを行った実際のユーザーの数にかかわらず、集計しきい値の 1 ユーザーとしてカウントされます。
  • ID が null のユーザーは、集計のしきい値にカウントされません。

ベスト プラクティス: 除外されたデータに関するレポートを作成するには、フィルタされた行の概要を設定します。これにより、レポートの基準を一定に保つことができます。

次の例では、キャンペーン 125 を含む行は最終結果からフィルタされます。48 人のユーザーからの結果を集計しており、ユーザー数 50 人の集計要件を下回っているためです。

キャンペーン ID ユーザー 表示回数
123 314 928
124 2,718 5,772
125 48 353

差分チェック

差分チェックは、以下の方法により集計要件を満たした複数のユーザーセットのデータを比較することで、個々のユーザーに関する情報が収集されるのを防ぐのに役立ちます。

  • 実行中のジョブの結果を以前の結果と比較します。
  • 同じ結果セット内の行を比較します。

2 つのジョブの間で基になるデータに差異があると、差分チェック違反が発生します。ジョブの結果を過去の結果と比較する際、Ads Data Hub は個々のユーザーのレベルで脆弱性がないか確認します。このため、過去のジョブと重複しているユーザーが多ければ、異なるキャンペーンについてのジョブや、含まれるユーザー数が同一のジョブであっても、結果がフィルタされる可能性があります。

一方、2 つの集計結果セットのユーザー数は同一に見えても、個々のユーザーが重複していない場合は、プライバシーが保護されるためフィルタされません。

新しい結果の脆弱性を確認する際は、過去の結果のデータが使用されるため、同じクエリを繰り返し実行すると、新しい結果の脆弱性を確認する際に差分チェックで使用されるデータが増えます。さらに、基になるデータが変化する可能性があるため、安定していると考えられるクエリでもプライバシー チェック違反が発生する場合があります。

ジョブレベルでは結果が十分に異なっていても、個々の行が前のジョブの行と類似している場合、その類似した行はフィルタされます。この例では、2 番目のジョブの結果のキャンペーン 123 を含む行は、前の結果とユーザー数が 1 人しか変わらないため、フィルタされます。

ジョブ 1
キャンペーン ID ユーザー数
123 400
124 569
ジョブ 2
キャンペーン ID ユーザー数
123 401
224 1,325

結果セットのすべての行のユーザー数の合計が前のジョブのユーザー数の合計と類似している場合、結果セット全体がフィルタされます。この例では、2 番目のジョブからすべての結果がフィルタされます。

ジョブ 1
キャンペーン ID ユーザー数
123 400
124 1367
ジョブ 2
キャンペーン ID ユーザー数
123 402
124 1367

フィルタされた行の概要

フィルタされた行の概要では、プライバシー チェックによって除外されたデータが集計されます。フィルタされた行のデータが合計され、キャッチオール行に追加されます。フィルタされたデータはこれ以上分析できませんが、結果から除外されたデータの量の概要を把握することができます。

明示的なプライバシー フィルタリング

クエリを分割する必要があるが、集計結果を結合する場合は、複数の小さなクエリにプライバシー チェックを明示的に適用し、プライバシーに配慮した方法でそれらの結果を集計できます。

ユースケースの例:

  • リンクされた Google 広告アカウント(EEA のデータを含む)で、アトリビューション イベント タイプ別のすべてのコンバージョンを確認したい広告主様。
  • リンクされた Google 広告アカウントで、アトリビューション イベントタイプ別のすべてのコンバージョンを探している測定パートナーである。

Google 広告アカウントのコンバージョンの合計を取得するには、OPTIONS(privacy_checked_export=TRUE) 句を使用してクエリを書き換え、各 Google サービスに個別にプライバシー チェックを適用します。

このセクションの例では、次のことを行います。

  1. 各 Google サービスに個別にクエリを実行し、各中間結果セットにプライバシー チェックを明示的に適用します。
  2. YouTube、Gmail、ネットワークの各 Google サービスのプライバシー チェック結果用に、個別の一時テーブルが作成されます。
  3. 一時テーブルからプライバシー チェック済みのコンバージョン数を集計して合計します。
CREATE TEMP TABLE youtube_agg OPTIONS(privacy_checked_export=TRUE) AS
SELECT
 impression_data.campaign_id,
 attribution_event_type,
 COUNT(1) AS num_convs
FROM adh.google_ads_conversions_policy_isolated_youtube
WHERE impression_data.campaign_id IN UNNEST(@campaign_ids)
 AND conversion_type IN UNNEST(@conversion_type_list)
GROUP BY campaign_id, attribution_event_type;

CREATE TEMP TABLE network_agg OPTIONS(privacy_checked_export=TRUE) AS
SELECT
 impression_data.campaign_id,
 attribution_event_type,
 COUNT(1) AS num_convs
FROM adh.google_ads_conversions_policy_isolated_network
WHERE impression_data.campaign_id IN UNNEST(@campaign_ids)
 AND conversion_type IN UNNEST(@conversion_type_list)
GROUP BY campaign_id, attribution_event_type;

CREATE TEMP TABLE gmail_agg OPTIONS(privacy_checked_export=TRUE) AS
SELECT
 impression_data.campaign_id,
 attribution_event_type,
 COUNT(1) AS num_convs
FROM adh.google_ads_conversions_policy_isolated_gmail
WHERE impression_data.campaign_id IN UNNEST(@campaign_ids)
 AND conversion_type IN UNNEST(@conversion_type_list)
GROUP BY campaign_id, attribution_event_type;

SELECT
 campaign_id,
 attribution_event_type,
 SUM(num_convs) AS num_convs
FROM (
 SELECT * FROM youtube_agg
 UNION ALL
 SELECT * FROM network_agg
 UNION ALL
 SELECT * FROM gmail_agg
)
GROUP BY campaign_id, attribution_event_type

このクエリでは、JOIN を使用してテーブル間でデータを直接結合するのではなく、まず各テーブルに対してクエリを実行し、各中間テーブルにプライバシー チェックを適用してから、UNION を使用してプライバシー チェック済みの値を合計します。

クエリ アドバイザー

有効な SQL であっても、過度のフィルタ処理を引き起こす可能性がある場合は、クエリ作成中にクエリ アドバイザーによる具体的なアドバイスが提供され、望ましくない結果を避けられるようになっています。

次のような場合に、アドバイスが提供されます。

クエリ アドバイザーを使用するには:

  • 管理画面。アドバイスは、クエリエディタ内のクエリテキストの上に表示されます。
  • APIcustomers.analysisQueries.validate メソッドを使用します。

  1. ユーザーが共有に同意したデータ(パネルメンバーの場合など)以外を指します。 

  2. プライバシー上の制限によってできない場合(フィルタされた行の概要のユーザー数が集計要件を満たしていない場合など)を除きます。