Modele uczenia maszynowego z prywatnością różnicową

Prywatność danych i anonimizacja w Pythonie

Rebeca Gonzalez

Data Engineer

Bezpieczne udostępnianie danych

Firmy z podobnymi danymi, dzielące się informacjami w celu doskonalenia produktów i usług.
  • W tym modeli uczenia maszynowego (ML)

Obraz osoby przeglądającej wykresy danych

Prywatność danych i anonimizacja w Pythonie

Modele uczenia maszynowego z prywatnością różnicową

  • Firma SaaS współpracująca z wieloma sklepami internetowymi.
  • Nowy partner może potrzebować miesięcy na zebranie wystarczającej ilości danych
  • Dzięki DP firma SaaS może zachęcać partnerów do dzielenia się danymi

Rysunek mężczyzny z laptopem, z którego ekranu wystrzeliwuje rakieta

$$ $$ Rysunek mężczyzny z ikonami wielu osób poniżej, symbolizującymi partnerów

Prywatność danych i anonimizacja w Pythonie

Uczenie maszynowe a prywatność

  • Zbiory danych zawierają wrażliwe informacje
  • Atakujący mogą wykorzystywać wyniki algorytmów uczenia maszynowego
Prywatność danych i anonimizacja w Pythonie

Uczenie maszynowe a prywatność

Modele uczenia maszynowego z prywatnością różnicową

  • Odpowiadają rozkładom danych
  • Mogą gwarantować prywatność jednostek
Prywatność danych i anonimizacja w Pythonie

Modele klasyfikacji z prywatnością różnicową

# 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
Prywatność danych i anonimizacja w Pythonie

Klasyfikator bez ochrony prywatności

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
Prywatność danych i anonimizacja w Pythonie

Klasyfikator z prywatnością różnicową

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)
Prywatność danych i anonimizacja w Pythonie

Unikanie wycieku prywatności

Aby uniknąć wycieku danych, można zastąpić wartości min i max, przekazując argument bounds. Może to być:

  • Krotka w postaci (min, max)
    • Liczby całkowite obejmujące min/max całego zbioru danych
      • Przykład:
        (0,100)
        
    • Tablice wartości min i max dla każdej kolumny.
      • Przykład:
        ([0,1,0,2],[10,80,5,70])
        
Prywatność danych i anonimizacja w Pythonie

Unikanie wycieku prywatności

# 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
Prywatność danych i anonimizacja w Pythonie

Więcej o dodawaniu granic

# 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
Prywatność danych i anonimizacja w Pythonie

Różne wartości epsilon

Wykres porównujący dokładność dla różnych wartości epsilon

Prywatność danych i anonimizacja w Pythonie

Stwórzmy modele chroniące prywatność!

Prywatność danych i anonimizacja w Pythonie

Preparing Video For Download...