Диференційно приватні моделі машинного навчання

Конфіденційність даних і анонімізація в Python

Rebeca Gonzalez

Data Engineer

Безпечний обмін даними

Компанії з подібними даними діляться інформацією, щоб покращувати продукти й послуги.
  • Зокрема моделі машинного навчання (ML)

Зображення людини, що переглядає діаграми даних

Конфіденційність даних і анонімізація в Python

Диференційно приватні моделі машинного навчання

  • Компанія SaaS має кількох партнерів — інтернет‑крамниць.
  • Коли приєднується новий партнер, можуть минути місяці, перш ніж він збере достатньо даних
  • Завдяки DP компанія SaaS може заохочувати партнерів ділитися даними

Малюнок чоловіка з ноутбуком, з екрана вилітає ракета

$$ $$ Малюнок чоловіка з піктограмами людей під ним, що символізують кількох партнерів

Конфіденційність даних і анонімізація в Python

Машинне навчання та приватність

  • Набори даних містять чутливу інформацію
  • Зловмисники можуть використати вихід алгоритмів машинного навчання
Конфіденційність даних і анонімізація в Python

Машинне навчання та приватність

Диференційно приватні моделі машинного навчання

  • Відповідають відповідним розподілам даних
  • Гарантують приватність для окремих осіб
Конфіденційність даних і анонімізація в Python

Диференційно приватні моделі класифікації

# 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
Конфіденційність даних і анонімізація в Python

Неприватний класифікатор

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
Конфіденційність даних і анонімізація в Python

Диференційно приватний класифікатор

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)
Конфіденційність даних і анонімізація в Python

Уникайте витоку приватності

Щоб уникнути витоку даних, можна задати мінімальні та максимальні значення через аргумент bounds. Це може бути:

  • Кортеж вигляду (min, max)
    • Цілі числа, що охоплюють мін/макс усіх даних
      • Приклад:
        (0,100)
        
    • Масиви мінімумів і максимумів для кожного стовпця даних.
      • Приклад:
        ([0,1,0,2],[10,80,5,70])
        
Конфіденційність даних і анонімізація в Python

Уникайте витоку приватності

# 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
Конфіденційність даних і анонімізація в Python

Більше про встановлення меж (bounds)

# 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
Конфіденційність даних і анонімізація в Python

Різні значення epsilon

Графік, що порівнює точність для різних значень epsilon

Конфіденційність даних і анонімізація в Python

Створімо моделі, що зберігають приватність!

Конфіденційність даних і анонімізація в Python

Preparing Video For Download...