Modele de machine learning cu confidențialitate diferențială

Confidențialitatea datelor și anonimizarea în Python

Rebeca Gonzalez

Data Engineer

Partajarea securizată a datelor

Companii cu date similare care partajează informații pentru a-și îmbunătăți produsele și serviciile.
  • Inclusiv modele de Machine Learning (ML)

Imagine cu cineva care vizualizează grafice de date

Confidențialitatea datelor și anonimizarea în Python

Modele de machine learning cu confidențialitate diferențială

  • Companie SaaS cu mai multe magazine online partenere.
  • Când un partener nou se alătură, colectarea suficientelor date poate dura luni
  • Cu DP, compania SaaS poate încuraja partenerii să partajeze date

Desen cu un bărbat ținând un laptop cu o rachetă pe ecran

$$ $$ Desen cu un bărbat și mai multe pictograme de persoane dedesubt, reprezentând mai mulți parteneri

Confidențialitatea datelor și anonimizarea în Python

Machine learning și confidențialitate

  • Seturile de date conțin informații sensibile
  • Adversarii pot exploata rezultatele algoritmilor de machine learning
Confidențialitatea datelor și anonimizarea în Python

Machine learning și confidențialitate

Modele de machine learning cu confidențialitate diferențială

  • Urmează distribuțiile de date corespunzătoare
  • Pot garanta confidențialitatea persoanelor
Confidențialitatea datelor și anonimizarea în Python

Modele de clasificare cu confidențialitate diferențială

# Import the scikit-learn naive Bayes classifier
from sklearn.naive_bayes import GaussianNB


# Import the differentially private naive Bayes classifier from diffprivlib.models import GaussianNB
Confidențialitatea datelor și anonimizarea în Python

Clasificator fără confidențialitate

from sklearn.naive_bayes import GaussianNB

# Built the non-private classifier nonprivate_clf = GaussianNB()
# Fit the model to the data 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
Confidențialitatea datelor și anonimizarea în Python

Clasificator cu confidențialitate diferențială

from diffprivlib.models import GaussianNB as dp_GaussianNB

# Build the private classifier with empty constructor private_clf = dp_GaussianNB()
# Fit the model to the data and see the score 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)
Confidențialitatea datelor și anonimizarea în Python

Evitarea scurgerilor de confidențialitate

Pentru a evita scurgerea de date, înlocuiți valorile min și max prin argumentul bounds. Poate fi:

  • Un tuplu de forma (min, max)
    • Numere întregi care acoperă min/max din întregul set de date
      • Exemplu:
        (0,100)
        
    • Tablouri pentru valorile min și max ale fiecărei coloane.
      • Exemplu:
        ([0,1,0,2],[10,80,5,70])
        
Confidențialitatea datelor și anonimizarea în Python

Evitarea scurgerilor de confidențialitate

# Set the bounds to cover at least the min and max values 
bounds = (X_train.min(axis=0) - 1, X_train.max(axis=0) + 1)

# Built the classifier with epsilon of 0.5 dp_clf = dp_GaussianNB(epsilon=0.5, bounds=bounds)
# Fit the model to the data and see the score 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
Confidențialitatea datelor și anonimizarea în Python

Mai multe despre adăugarea limitelor

# Import random module
import random
# Set the min and max of bounds in the data plus some noise
bounds = (X_train.min(axis=0) - random.sample(range(0, 30), 12), 
          X_train.max(axis=0) + random.sample(range(0, 30), 12))


# Build the classifier with epsilon of 0.5 dp_clf = dp_GaussianNB(epsilon=0.5, bounds=bounds)
# Fit the model to the data and see the score 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
Confidențialitatea datelor și anonimizarea în Python

Valori diferite ale epsilon

Grafic care compară acuratețea pentru diferite valori epsilon

Confidențialitatea datelor și anonimizarea în Python

Să creăm modele care protejează confidențialitatea!

Confidențialitatea datelor și anonimizarea în Python

Preparing Video For Download...