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

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

Ads Data Hub のプライバシー機能の概要は以下のとおりです。詳細については、後述のセクションをご覧ください。

  • 静的チェック: クエリ内のステートメントを調べ、プライバシーに関する明らかで直接的な懸念がないか確認します。
  • データアクセス予算: 特定のデータにアクセスできる回数の上限が指定されています。
  • 集計チェック: 各行に含まれるユーザー数をしきい値以上にすることで、エンドユーザーのプライバシーを保護します。
  • 差分チェック (または「差分チェック」): 結果セットを比較することで、集計要件を満たした複数のユーザーセットのデータを比較することで、個々のユーザーに関する情報が収集されるのを防ぐのに役立ちます。
  • ノイズ インジェクション: 差分チェックの代替手段として使用されます。 クエリの集計 SELECT 句にランダムノイズを追加することで、ユーザーのプライバシーを保護しつつ、ある程度の正確な結果を得ることができます。この方法を使用する場合は、差分チェックを使用する必要がなくなり、出力に必要な集計しきい値を引き下げることが可能になります。

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

静的チェック

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

データアクセス予算

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

集計の要件

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

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

次の例では、キャンペーン 125 を含む行は最終結果から除外されます。これは、48 人のユーザーの結果を集計しているため、下限の 50 人を下回っているためです。

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

プライバシー モード

Ads Data Hub には、差分チェックノイズ インジェクションの 2 つのプライバシー モードがあります。以降のセクションでは、これらのモードについて説明し、比較します。

差分チェックを使用する

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

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

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

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

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

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

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

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

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

ノイズ インジェクションを使用する

ノイズ インジェクションは、データベースにクエリを実行する際にユーザーのプライバシーを保護するために使用される技術です。これは、クエリの集計 SELECT 句にランダムノイズを追加することで機能します。このノイズによりユーザーのプライバシーが保護される一方で、ある程度の正確な結果が得られ、差分チェックの必要性がなくなり、出力に必要な集計しきい値が削減されます。いくつかの制限があるものの、既存のクエリのほとんどはノイズモードで実行できます。ノイズモードの詳細と、ノイズ インジェクションがプライバシー要件に与える影響については、ノイズ インジェクションをご覧ください。

差分チェックとノイズ インジェクションを比較する

実際のデータ
キャンペーン ID インプレッション数
101 35
102 63
201 142
202 21
301 56
302 99
差分チェックを使用した結果
キャンペーン ID インプレッション数
101 35
102 63
201 142
202 21
301 56
302 99
ノイズ インジェクションを使用した結果
キャンペーン ID インプレッション数
101 37.8373
102 60.9104
201 182.0955
202 26.2332
301 58.0871
302 97.5018
ノイズモードのキャンペーン 101 の例
キャンペーン ID 実際のインプレッション 追加されたノイズ 返されたインプレッション(ANON_COUNT
101 35 2.8373 37.8373

フィルタされた行の概要

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

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

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

サンプル ユースケース:

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

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

このセクションの書き換え例では、次の処理を行います。

  1. 各 Google サービスに個別にクエリを実行し、各中間結果セットに明示的にプライバシー チェックを適用します。
  2. 各 Google サービス(YouTube、Gmail、ネットワーク)のプライバシー チェック済み結果に対して、個別の一時テーブルを作成します。
  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. プライバシー上の制限によってできない場合(フィルタされた行の概要のユーザー数が集計要件を満たしていない場合など)を除きます。