差分プライバシー入門:LaplaceとGaussian機構でεと有用性を交換する
はじめに
匿名化した「つもり」では、プライバシーは守れません。名前を消しても、属性の組み合わせから個人が特定される例は数多く報告されています。統計や機械学習でデータを使う場面では、有用なデータが手元にあっても、個人が特定され得る以上、集計値の公開やモデルの学習にそのまま回せません。では、プライバシーを数学的に保証したうえでデータを使うには、どうすればよいのでしょうか。
その答えが差分プライバシー(DP)です。今回、ある集計クエリ(1000人のうち条件を満たす人数、真の値は319)にDPのノイズを加え、プライバシー予算εと精度の交換を測りました。強い保証(ε=0.1)ではLaplace機構の誤差はRMSEで約14、真値の4.4%に達します。保証を緩めてε=1.0にすると誤差は1.4、0.4%まで下がります。プライバシーと有用性は、このεというつまみ一つで連続的にトレードオフします。この記事では、DPの定義から基本メカニズム、そして予算がクエリを重ねるごとに消費される様子までを実装で確かめます。
対象読者:
- 合成データ・統計公開・プライバシー保護に関わる方
- εという言葉は聞くが、中身を知りたい方
- 有用性とプライバシーのトレードオフを定量化したい方
記事のポイント:
- 差分プライバシーの定義(隣接データセットとε, δ)を理解する
- Laplace機構・Gaussian機構がなぜ保証を満たすか(感度とノイズ量)を理解する
- εを動かして有用性がどう変わるか、合成則で予算がどう減るかを確かめる
なぜ「匿名化」では不十分か
匿名化の問題は、消したはずの情報が他の属性から復元されてしまう点にあります。生年月日・性別・郵便番号のような一見無害な組み合わせだけで、多くの人が一意に特定できることが知られています。外部データと突き合わせるリンク攻撃も同じ原理です。個々の属性を消す発想には限界があります。
差分プライバシーは発想を変えます。守るべきは「ある個人がデータに含まれているかどうかで、出力の分布がほとんど変わらないこと」だと定義します。あなたのデータが含まれていても含まれていなくても、分析結果がほぼ同じなら、その結果からあなたの情報は漏れません。これがメンバーシップ推論のような攻撃に対する、原理的な防御になります。
差分プライバシーの定義
1レコードだけ違う2つのデータセットを隣接データセット と呼びます。メカニズム が -差分プライバシーを満たすとは、任意の出力集合 について次が成り立つことです。
が小さいほど、 と の出力分布が近く、保証が強くなります。 は、この保証がまれに破れることを許す小さな確率で、通常は 程度に取ります。 なら純粋な -DPです。
基本メカニズム
保証を作る鍵は感度です。感度とは、レコードを1件変えたときに、クエリの出力が最大どれだけ動くかを表します。今回のカウントクエリなら、1人の増減で結果は最大1しか動かないので、感度は1です。
Laplace機構は、L1感度をεで割ったスケールのラプラスノイズを加え、-DPを満たします。Gaussian機構は、L2感度に比例するガウスノイズを加え、-DPを満たします。ノイズ量はそれぞれ次のとおりです。
def laplace_noise(eps, size):
return np.random.laplace(0, SENS / eps, size) # eps-DP
def gaussian_sigma(eps, delta=1e-5):
return SENS * np.sqrt(2 * np.log(1.25 / delta)) / eps # (eps, delta)-DP
もう一つ重要な性質が合成則です。同じデータに複数のクエリを投げると、εは足し上がっていきます。プライバシーは使うほど減っていく予算のようなもので、この予算管理が実務のDP運用の中心になります。
カウントクエリで試す
1000人のデータに対するカウントクエリ(真値319)に、Laplace機構とGaussian機構でノイズを加えます。εを動かして誤差を測り、合成則で予算がどう消費されるかを見ます。乱数シードは42に固定しました。
εと誤差の関係を両対数で見ると、ほぼ反比例になります。εを小さくするほど、つまり保証を強くするほど、誤差は増えます。

ノイズ入り推定の分布を3つのεで並べると、保証の強さがそのまま散らばりに表れます。ε=0.1では真値319の周りに±80ほど広がり、ε=10ではほぼ真値に張り付きます。

| ε | Laplace RMSE | Gaussian RMSE | 相対誤差(Laplace) |
|---|---|---|---|
| 0.1 | 14.1 | 48.5 | 4.4% |
| 1.0 | 1.4 | 4.8 | 0.4% |
| 10 | 0.14 | 0.48 | 0.04% |
単一クエリではLaplaceのほうが誤差が小さく出ました。Gaussianは の余地を確保するぶん、余分にノイズを乗せるためです。ではGaussianはいつ有利になるのでしょうか。答えは合成則にあります。予算を固定して多数のクエリに分ける場合、基本合成ではノイズがクエリ数 に比例して増えますが、Gaussian機構をRDP(Rényi差分プライバシー)で解析する高度な合成では でしか増えません。

εと機構の選び方
まず、εは有用性との交換レートだという点です。両対数のトレードオフ曲線が示すとおり、誤差はεに反比例します。ε=0.1で相対誤差4.4%、ε=1.0で0.4%と、ひと桁のεの違いがそのままひと桁の誤差の違いになります。「どのεを選ぶか」は「どれだけの誤差を許すか」と同義で、この対応を数字で示せることがDPの実務的な価値です。
次に、機構の選び方です。単一のクエリや少数のクエリならLaplaceが単純で誤差も小さい。一方、多数のクエリを重ねるなら、今回の設定では約12クエリを境にGaussianと高度な合成が有利になりました。機械学習の学習(DP-SGD)のように勾配へのアクセスを何千回も繰り返す場面では、この の効きが決定的で、GaussianとRDPが標準的に使われます。クエリ数の見込みから機構を選ぶ、というのが設計の分かれ目です。
εの選び方そのものには定説がありません。ε=1が強いのか緩いのかは、データの機微さや攻撃者の想定に依存し、一意の正解はありません。実務では、まず守りたい対象と許容できる誤差を決め、そこからεの範囲を絞り込みます。加えて、感度の見積もり誤りや浮動小数の実装リークなど、理論の外側にある落とし穴にも注意が要ります。感度を過小に見積もれば、保証は紙の上だけのものになります。
まとめ
プライバシーは「程度」として定量化でき、εというつまみで有用性と交換できます。今回の実験では、カウントクエリの相対誤差がε=0.1で4.4%、ε=1.0で0.4%と、保証の強さに応じて連続的に変化しました。単一クエリではLaplace、多数のクエリを重ねるならGaussianと高度な合成、という使い分けも数値で確認できました。手元のデータにDPを導入するなら、まず各クエリの感度を正しく見積もり、総クエリ数の見込みから機構を選び、許容できる誤差から逆算してεの予算を配分する、という順で設計に落とし込むのが現実的です。