Modelli di machine learning con privacy differenziale

Riservatezza dei dati e anonimizzazione in Python

Rebeca Gonzalez

Data Engineer

Condividere dati in modo sicuro

Aziende con dati simili che condividono info per migliorare prodotti e servizi.
  • Inclusi i modelli di Machine Learning (ML)

Immagine di qualcuno che guarda grafici di dati

Riservatezza dei dati e anonimizzazione in Python

Modelli di machine learning con privacy differenziale

  • Azienda SaaS con più negozi online partner.
  • Quando arriva un nuovo partner, servono mesi per raccogliere dati a sufficienza
  • Con la DP, l’azienda può incoraggiare i partner a condividere dati

Disegno di un uomo con un laptop da cui parte un razzo dallo schermo

$$ $$ Disegno di un uomo con sotto più icone di persone, a rappresentare più partner

Riservatezza dei dati e anonimizzazione in Python

Machine learning e privacy

  • I dataset contengono dati sensibili
  • Un avversario può sfruttare l’output degli algoritmi di ML
Riservatezza dei dati e anonimizzazione in Python

Machine learning e privacy

Modelli di machine learning con privacy differenziale

  • Seguono le distribuzioni dei dati
  • Possono garantire privacy agli individui
Riservatezza dei dati e anonimizzazione in Python

Modelli di classificazione con privacy differenziale

# 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
Riservatezza dei dati e anonimizzazione in Python

Classificatore non privato

from sklearn.naive_bayes import GaussianNB

# Crea il classificatore non privato nonprivate_clf = GaussianNB()
# Allena il modello sui dati 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
Riservatezza dei dati e anonimizzazione in Python

Classificatore con privacy differenziale

from diffprivlib.models import GaussianNB as dp_GaussianNB

# Crea il classificatore privato con costruttore vuoto private_clf = dp_GaussianNB()
# Allena il modello e guarda lo 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)
Riservatezza dei dati e anonimizzazione in Python

Evita leakage di privacy

Per evitare leakage, possiamo sostituire min e max passando l’argomento bounds. Può essere:

  • Una tupla del tipo (min, max)
    • Interi che coprono min/max di tutto il dataset
      • Esempio:
        (0,100)
        
    • Array per i valori min e max di ogni colonna.
      • Esempio:
        ([0,1,0,2],[10,80,5,70])
        
Riservatezza dei dati e anonimizzazione in Python

Evita leakage di privacy

# Imposta bounds a coprire almeno min e max
bounds = (X_train.min(axis=0) - 1, X_train.max(axis=0) + 1)

# Crea il classificatore con epsilon 0.5 dp_clf = dp_GaussianNB(epsilon=0.5, bounds=bounds)
# Allena il modello e guarda lo 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
Riservatezza dei dati e anonimizzazione in Python

Altri dettagli sui bounds

# Importa il modulo random
import random
# Imposta i bounds con min e max dei dati più un po’ di rumore
bounds = (X_train.min(axis=0) - random.sample(range(0, 30), 12), 
          X_train.max(axis=0) + random.sample(range(0, 30), 12))


# Crea il classificatore con epsilon 0.5 dp_clf = dp_GaussianNB(epsilon=0.5, bounds=bounds)
# Allena il modello e guarda lo 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
Riservatezza dei dati e anonimizzazione in Python

Valori diversi di epsilon

Grafico che confronta l’accuratezza per diversi valori di epsilon

Riservatezza dei dati e anonimizzazione in Python

Creiamo modelli che preservano la privacy!

Riservatezza dei dati e anonimizzazione in Python

Preparing Video For Download...