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

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

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

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

プライバシー チェックの結果が不合格だった場合、行がフィルタされたことを示すプライバシー メッセージが表示されます。フィルタによる除外の規模はさまざまで、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

プライバシー モード

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

差分チェックを使用する

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

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

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

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

ノイズ インジェクションは、データベースにクエリを実行する際にユーザーのプライバシーを保護するために使用される技術です。これは、クエリの集計 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. 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. プライバシー上の制限によってできない場合(フィルタされた行の概要のユーザー数が集計要件を満たしていない場合など)を除きます。