🙈

BigQuery の differential privacy がプレビューになりました

2023/06/13に公開

はじめに

こんにちは、クラウドエース データML ディビジョン所属の松本です。
クラウドエースのITエンジニアリングを担うシステム開発部の中で、特にデータ基盤構築・分析基盤構築からデータ分析までを含む一貫したデータ課題の解決を専門とするのがデータML ディビジョンです。

データML ディビジョンでは活動の一環として、毎週Google Cloud の新規リリースを調査・発表し、データ領域のプロダクトのキャッチアップをしています。その中でも重要と考えるリリースを本ページ含め記事として公開しています。

今回紹介するリリースは、BigQueryの「differential privacy」についてです。
このリリースにより、差分プライバシー(処理の出力によって明らかにされる個人情報を保護する)の機能を使用できるようになりました。
なお、この機能はプレビュー段階になります。

BigQuery の概要

BigQuery は、Google Cloud が提供するフルマネージドでサーバーレスなデータウェアハウスになります。
SQLによる操作で、大規模なデータを処理することができ、コストパフォーマンスが高いという特徴があります。

今回のリリースについて

今回ご紹介するのは、2023年5月8日付に発表された BigQuery の differential privacy という機能についてです。

該当リリースノート:BigQuery release notes

リリース概要

BigQuery の differential privacy を使うことによって、差分プライバシーに関する以下の集計関数に適用して、結果を匿名化することができます。

  • AVG
  • COUNT
  • SUM
  • PERCENTILE_CONT

差分プライバシーとは

差分プライバシーは、統計量や機械学習モデルなど、データに対して処理を行なった結果を保護する、プライバシー保護の手法の1つです。

例えば、Aさんの年収を知りたい攻撃者が存在するとします。
下図のように、Aさんが所属している会社は平均年収を統計量として公開している場合、Aさんの在籍時の平均年収・在籍人数、退職時の平均年収・在籍人数が分かれば、Aさんの年収を推定できてしまうケースがあります。

平均年収からAさんの年収を推定

このような統計データに対してノイズを加えることによって、統計データの有用性を維持したまま、プライバシーを保護する方法が差分プライバシーになります。
BigQuery の differential privacy では、このような統計データに対してノイズを加えることによる、プライバシー保護が必要な場合に利用します。

※プライバシーの保護を強化するほど、統計データの有用性は低下していきますので、統計データの有用性に対するニーズとのバランスを取る必要があります。

差分プライバシー クエリ構文

差分プライバシー クエリ構文として、以下のようにWITH DIFFERENTIAL_PRIVACY OPTIONS( privacy_parameters ) を追加することで差分プライバシーを利用できます。

-- 差分プライバシーのクエリ例
SELECT
  WITH DIFFERENTIAL_PRIVACY
    OPTIONS(epsilon=1e20, delta=.01, max_groups_contributed=2, privacy_unit_column=id)
    item,
    AVG(quantity, contribution_bounds_per_group => (0,100)) average_quantity
FROM table
GROUP BY item;

尚、OPTIONS の内容は以下の通りです。

  • epsilon:結果に追加されるノイズの量を制御します。イプシロンが高いほどノイズが少ないことを意味します。
  • delta:プライバシーが漏洩したと判断される確率を指定します。epsilonが一定の場合、deltaが小さいほど、プライバシーが強化されます。
  • max_groups_contributed:クエリの結果に含まれるグループの最大数を制限し、プライバシーが強化されます。
  • privacy_unit_column:クエリの実行に使用されるデータセットの列を指定する必要があります。この列は、プライバシーレベルを制御するために使用されるプライバシーユニット(保護したいプライバシーデータが一意となるキー列)を指定する必要があります。

また、差分プライベートの各集計関数(AVG, COUNT, SUM, PERCENTILE_CONT)の詳細は、差分プライベート集計関数を参照ください。

注意点

差分プライベート クエリは、エンティティごとの集計が行われ、max_groups_contributed の制限が適用されるため、標準クエリよりも実行速度が遅くなります。

料金

差分プライバシーを使用するための追加料金はありませんが、分析に標準の BigQuery 料金が適用されます。

試してみた

BigQuery で differential privacy を実際に試してみます。

1. サンプルデータを作成

以下のクエリでサンプルデータを作成します。

-- 「professors」テーブルを作成する
CREATE OR REPLACE TABLE project.dataset.professors AS (
  SELECT 101 id, "pencil" item, 24 quantity UNION ALL
  SELECT 123, "pen", 16 UNION ALL
  SELECT 123, "pencil", 10 UNION ALL
  SELECT 123, "pencil", 38 UNION ALL
  SELECT 101, "pen", 19 UNION ALL
  SELECT 101, "pen", 23 UNION ALL
  SELECT 130, "scissors", 8 UNION ALL
  SELECT 150, "pencil", 72);

2. 差分プライベート クエリによりノイズを追加(ノイズが多い場合)

以下のクエリで差分プライベート クエリにノイズを追加します。
こちらは、epsilon が低いため、ノイズが多い状態になります。

※尚、以下の出力結果はクエリを実行するたびに変化します。
以下の出力結果では、scissors グループが削除されていますが、削除されないケースもあります。

SELECT
  WITH DIFFERENTIAL_PRIVACY
    OPTIONS(epsilon=10, delta=.01, max_groups_contributed=2, privacy_unit_column=id)
    item,
    AVG(quantity, contribution_bounds_per_group => (0,100)) average_quantity
FROM project.dataset.professors
GROUP BY item;

/*----------+------------------*
 | item     | average_quantity |
 +----------+------------------+
 | pencil   | 38.5038356810269 |
 | pen      | 13.4725028762032 |
 *----------+------------------*/

3. 差分プライベート クエリによりノイズを追加(ノイズが少ない場合)

以下のクエリでは、epsilon が高いため、ノイズが少ない状態になります。

SELECT
  WITH DIFFERENTIAL_PRIVACY
    OPTIONS(epsilon=1e20, delta=.01, max_groups_contributed=2, privacy_unit_column=id)
    item,
    AVG(quantity, contribution_bounds_per_group => (0,100)) average_quantity
FROM project.dataset.professors
GROUP BY item;

/*----------+------------------*
 | item     | average_quantity |
 +----------+------------------+
 | pencil   | 40               |
 | pen      | 18.5             |
 | scissors | 8                |
 *----------+------------------*/

まとめ

今回の記事では BigQuery の differential privacy についてご紹介しました。
このリリースにより、差分プライバシーをクエリによって利用できるようになりました。
プレビュー段階ではありますが、プライバシー保護の考慮や強化が必要な場合に、是非ご利用ください。

関連記事

Discussion