Differentiellt privata maskininlärningsmodeller

Dataintegritet och anonymisering i Python

Rebeca Gonzalez

Data Engineer

Dela data på ett säkert sätt

Företag med liknande data delar information för att förbättra produkter och tjänster.
  • Inklusive maskininlärningsmodeller (ML)

Bild på en person som tittar på datadiagram

Dataintegritet och anonymisering i Python

Differentiellt privata maskininlärningsmodeller

  • SaaS-företag med flera onlinebutiker som partners.
  • När en ny partner ansluter kan det ta månader innan tillräckligt med data samlas in
  • Med DP kan SaaS-företaget uppmuntra partners att dela data

Teckning av en man med en bärbar dator och en raket från skärmen

$$ $$ Teckning av en man med flera personikoner under sig, som representerar flera partners

Dataintegritet och anonymisering i Python

Maskininlärning och integritet

  • Datamängder innehåller känslig information
  • Angripare kan utnyttja utdata från maskininlärningsalgoritmer
Dataintegritet och anonymisering i Python

Maskininlärning och integritet

Differentiellt privata maskininlärningsmodeller

  • Följer motsvarande datafördelningar
  • Kan garantera integritet för enskilda individer
Dataintegritet och anonymisering i Python

Differentiellt privata klassificeringsmodeller

# 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
Dataintegritet och anonymisering i Python

Icke-privat klassificerare

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
Dataintegritet och anonymisering i Python

Differentiellt privat klassificerare

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)
Dataintegritet och anonymisering i Python

Undvik integritetsläckage

För att undvika dataläckage kan vi ersätta min- och maxvärden genom att skicka ett bounds-argument. Det kan vara:

  • En tupel på formen (min, max)
    • Heltal som täcker min/max för hela datamängden
      • Exempel:
        (0,100)
        
    • Arrayer med min- och maxvärden för varje kolumn i datamängden.
      • Exempel:
        ([0,1,0,2],[10,80,5,70])
        
Dataintegritet och anonymisering i Python

Undvik integritetsläckage

# 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
Dataintegritet och anonymisering i Python

Mer om att lägga till gränser

# 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
Dataintegritet och anonymisering i Python

Olika epsilon-värden

Graf som jämför noggrannhet för olika epsilon-värden

Dataintegritet och anonymisering i Python

Nu kör vi en övning!

Dataintegritet och anonymisering i Python

Preparing Video For Download...