Modelos de Machine Learning com privacidade diferencial

Privacidade de Dados e Anonimização em Python

Rebeca Gonzalez

Data Engineer

Compartilhando dados com segurança

Empresas com dados semelhantes, compartilhando informações para melhorar produtos e serviços.
  • Inclusive modelos de Machine Learning (ML)

Imagem de alguém vendo gráficos de dados

Privacidade de Dados e Anonimização em Python

Modelos de Machine Learning com privacidade diferencial

  • Empresa SaaS com várias lojas online parceiras.
  • Quando um novo parceiro entra, pode levar meses até coletar dados suficientes
  • Com DP, a empresa SaaS pode incentivar parceiros a compartilhar dados

Desenho de um homem segurando um laptop com um foguete saindo da tela

$$ $$ Desenho de um homem com vários ícones de pessoas abaixo dele, representando múltiplos parceiros

Privacidade de Dados e Anonimização em Python

Machine Learning e privacidade

  • Conjuntos de dados contêm informações sensíveis
  • Adversários podem explorar a saída de algoritmos de Machine Learning
Privacidade de Dados e Anonimização em Python

Machine Learning e privacidade

Modelos de Machine Learning com privacidade diferencial

  • Seguem as distribuições correspondentes dos dados
  • Podem garantir privacidade aos indivíduos
Privacidade de Dados e Anonimização em Python

Modelos de classificação com privacidade diferencial

# 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
Privacidade de Dados e Anonimização em Python

Classificador não privado

from sklearn.naive_bayes import GaussianNB

# Construa o classificador não privado nonprivate_clf = GaussianNB()
# Treine o modelo nos dados 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
Privacidade de Dados e Anonimização em Python

Classificador com privacidade diferencial

from diffprivlib.models import GaussianNB as dp_GaussianNB

# Construa o classificador privado com construtor vazio private_clf = dp_GaussianNB()
# Treine o modelo nos dados e veja a pontuação 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)
Privacidade de Dados e Anonimização em Python

Evitar vazamento de privacidade

Para evitar vazamento de dados, podemos definir os valores mín. e máx. passando o argumento bounds. Pode ser:

  • Uma tupla no formato (min, max)
    • Inteiros cobrindo o mín./máx. de todos os dados
      • Exemplo:
        (0,100)
        
    • Arrays para os valores mín. e máx. de cada coluna dos dados.
      • Exemplo:
        ([0,1,0,2],[10,80,5,70])
        
Privacidade de Dados e Anonimização em Python

Evitar vazamento de privacidade

# Defina bounds para cobrir pelo menos os valores mín. e máx. 
bounds = (X_train.min(axis=0) - 1, X_train.max(axis=0) + 1)

# Construa o classificador com epsilon de 0.5 dp_clf = dp_GaussianNB(epsilon=0.5, bounds=bounds)
# Treine o modelo nos dados e veja a pontuação 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
Privacidade de Dados e Anonimização em Python

Mais sobre adicionar bounds

# Importe o módulo random
import random
# Defina os mín. e máx. de bounds nos dados com um pouco de ruído
bounds = (X_train.min(axis=0) - random.sample(range(0, 30), 12), 
          X_train.max(axis=0) + random.sample(range(0, 30), 12))


# Construa o classificador com epsilon de 0.5 dp_clf = dp_GaussianNB(epsilon=0.5, bounds=bounds)
# Treine o modelo nos dados e veja a pontuação 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
Privacidade de Dados e Anonimização em Python

Diferentes valores de epsilon

Gráfico comparando acurácia para diferentes valores de epsilon

Privacidade de Dados e Anonimização em Python

Vamos criar modelos que preservam a privacidade!

Privacidade de Dados e Anonimização em Python

Preparing Video For Download...