Modèles de Machine Learning différentiellement privés

Confidentialité des données et anonymisation en Python

Rebeca Gonzalez

Data Engineer

Partager des données en toute sécurité

Entreprises aux données similaires, qui partagent de l'information pour améliorer produits et services.
  • Y compris des modèles de Machine Learning (ML)

Image de quelqu'un consultant des graphiques de données

Confidentialité des données et anonymisation en Python

Modèles de Machine Learning différentiellement privés

  • Entreprise SaaS avec plusieurs boutiques en ligne partenaires.
  • Quand un nouveau partenaire arrive, il faut parfois des mois pour réunir assez de données
  • Avec la DP, l'entreprise SaaS peut encourager le partage de données

Dessin d'un homme tenant un portable avec une fusée sortant de l'écran

$$ $$ Dessin d'un homme avec plusieurs icônes de personnes en dessous, représentant plusieurs partenaires

Confidentialité des données et anonymisation en Python

Machine Learning et confidentialité

  • Les ensembles de données contiennent des informations sensibles
  • Des adversaires peuvent exploiter la sortie des algorithmes de Machine Learning
Confidentialité des données et anonymisation en Python

Machine Learning et confidentialité

Modèles de Machine Learning différentiellement privés

  • Suivent les distributions de données correspondantes
  • Peuvent garantir la confidentialité des individus
Confidentialité des données et anonymisation en Python

Classificateurs différentiellement privés

# 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
Confidentialité des données et anonymisation en Python

Classificateur non privé

from sklearn.naive_bayes import GaussianNB

# Construire le classificateur non privé nonprivate_clf = GaussianNB()
# Ajuster le modèle aux données 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
Confidentialité des données et anonymisation en Python

Classificateur différentiellement privé

from diffprivlib.models import GaussianNB as dp_GaussianNB

# Construire le classificateur privé avec un constructeur vide private_clf = dp_GaussianNB()
# Ajuster le modèle aux données et voir le 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)
Confidentialité des données et anonymisation en Python

Éviter les fuites de confidentialité

Pour éviter les fuites de données, remplacez les valeurs min et max en passant un argument bounds. Il peut s'agir :

  • D'un tuple de la forme (min, max)
    • Entiers couvrant le min/max de toutes les données
      • Exemple :
        (0,100)
        
    • De tableaux pour les min et max de chaque colonne des données.
      • Exemple :
        ([0,1,0,2],[10,80,5,70])
        
Confidentialité des données et anonymisation en Python

Éviter les fuites de confidentialité

# 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)

# Construire le classificateur avec epsilon de 0.5 dp_clf = dp_GaussianNB(epsilon=0.5, bounds=bounds)
# Ajuster le modèle aux données et voir le 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
Confidentialité des données et anonymisation en Python

Aller plus loin avec les bornes

# 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))


# Construire le classificateur avec epsilon de 0.5 dp_clf = dp_GaussianNB(epsilon=0.5, bounds=bounds)
# Ajuster le modèle aux données et voir le 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
Confidentialité des données et anonymisation en Python

Valeurs d'epsilon différentes

Diagramme comparant la précision selon différentes valeurs d'epsilon

Confidentialité des données et anonymisation en Python

Créons des modèles qui préservent la confidentialité !

Confidentialité des données et anonymisation en Python

Preparing Video For Download...