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é

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

Image de quelqu'un regardant 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.
  • À l'arrivée d'un nouveau partenaire, des mois peuvent être nécessaires pour collecter assez de données
  • Avec la DP, l'entreprise SaaS peut encourager le partage de données

Dessin d'un homme tenant un ordinateur portable d'où sort une fusée

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

Confidentialité des données et anonymisation en Python

Machine Learning et vie privée

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

Machine Learning et vie privée

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

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

Modèles de classification 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

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

Classificateur différentiellement privé

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)
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 via l'argument bounds. Il peut s'agir :

  • D'un tuple de la forme (min, max)
    • Entiers couvrant les 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)

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


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

Différentes valeurs d'epsilon

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

Confidentialité des données et anonymisation en Python

Créons des modèles respectueux de la confidentialité !

Confidentialité des données et anonymisation en Python

Preparing Video For Download...