差分プライバシー対応の機械学習モデル

Pythonで学ぶデータプライバシーと匿名化

Rebeca Gonzalez

Data Engineer

安全なデータ共有

類似データを持つ企業が、製品・サービス向上のために情報を共有。
  • 機械学習(ML)モデルも含む

データチャートを閲覧する人物の画像

Pythonで学ぶデータプライバシーと匿名化

差分プライバシー対応の機械学習モデル

  • 複数のオンラインストアと提携する SaaS 企業
  • 新規パートナーは十分なデータ収集までに数か月かかることがある
  • DP により、データ共有を促進できる

ノートPCを持ち、画面からロケットが飛び出す男性のイラスト

$$ $$ 複数パートナーを示す人物とアイコンのイラスト

Pythonで学ぶデータプライバシーと匿名化

機械学習とプライバシー

  • データセットには機微情報が含まれる
  • 攻撃者は機械学習の出力を悪用し得る
Pythonで学ぶデータプライバシーと匿名化

機械学習とプライバシー

差分プライバシー対応の機械学習モデル

  • 元のデータ分布に従う
  • 個人のプライバシーを保証できる
Pythonで学ぶデータプライバシーと匿名化

差分プライバシー対応の分類モデル

# scikit-learn のナイーブベイズ分類器をインポート
from sklearn.naive_bayes import GaussianNB


# 差分プライバシー対応のナイーブベイズ分類器をインポート from diffprivlib.models import GaussianNB
Pythonで学ぶデータプライバシーと匿名化

非プライベートな分類器

from sklearn.naive_bayes import GaussianNB

# 非プライベートな分類器を作成 nonprivate_clf = GaussianNB()
# 学習データで学習 nonprivate_clf.fit(X_train, y_train)
print("The accuracy of the non-private model is ", nonprivate_clf.score(X_test, y_test))
The accuracy of the non-private model is  0.8333333333333334
Pythonで学ぶデータプライバシーと匿名化

差分プライバシー対応の分類器

from diffprivlib.models import GaussianNB as dp_GaussianNB

# 既定設定でプライベートな分類器を作成 private_clf = dp_GaussianNB()
# 学習し、スコアを確認 private_clf.fit(X_train, y_train)
print("The accuracy of the private model is ", private_clf.score(X_test, y_test))
The accuracy of the private model is  0.7
PrivacyLeakWarning: Bounds have not been specified and will be calculated 
  on the data provided. This will result in additional privacy leakage.
  To ensure differential privacy and no additional privacy leakage, specify bounds for each dimension.
  "privacy leakage, specify bounds for each dimension.", PrivacyLeakWarning)
Pythonで学ぶデータプライバシーと匿名化

プライバシー漏えいを防ぐ

データ漏えいを避けるには、bounds 引数で最小・最大値を指定します。 指定方法:

  • 形式 (min, max) のタプル
    • データ全体の最小/最大を含む整数
      • 例:
        (0,100)
        
    • 各列の最小・最大の配列
      • 例:
        ([0,1,0,2],[10,80,5,70])
        
Pythonで学ぶデータプライバシーと匿名化

プライバシー漏えいを防ぐ

# 最小・最大を十分に覆うように bounds を設定
bounds = (X_train.min(axis=0) - 1, X_train.max(axis=0) + 1)

# epsilon=0.5 で分類器を作成 dp_clf = dp_GaussianNB(epsilon=0.5, bounds=bounds)
# 学習し、スコアを確認 dp_clf.fit(X_train, y_train) print("The accuracy of the private model is ", private_clf.score(X_test, y_test))
The accuracy of the private model is  0.807000
Pythonで学ぶデータプライバシーと匿名化

bounds の追加について

# random モジュールをインポート
import random
# データの bounds の最小・最大に少しノイズを加える
bounds = (X_train.min(axis=0) - random.sample(range(0, 30), 12), 
          X_train.max(axis=0) + random.sample(range(0, 30), 12))


# epsilon=0.5 で分類器を作成 dp_clf = dp_GaussianNB(epsilon=0.5, bounds=bounds)
# 学習し、スコアを確認 dp_clf.fit(X_train, y_train) print("The accuracy of private classifier with bounds is ", dp_clf.score(X_test, y_test))
The accuracy of private classifier with bounds is 0.7544444444
Pythonで学ぶデータプライバシーと匿名化

さまざまな epsilon 値

異なる epsilon 値での精度比較プロット

Pythonで学ぶデータプライバシーと匿名化

プライバシー保護モデルを作ろう!

Pythonで学ぶデータプライバシーと匿名化

Preparing Video For Download...