Модели машинного обучения с дифференциальной приватностью

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

Rebeca Gonzalez

Data Engineer

Безопасный обмен данными

Компании со схожими данными обмениваются информацией для улучшения продуктов и услуг.
  • В том числе моделями машинного обучения (МО)

Изображение человека, просматривающего графики данных

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

Модели МО с дифференциальной приватностью

  • SaaS-компания, у которой несколько интернет-магазинов являются партнёрами.
  • Новому партнёру может понадобиться несколько месяцев для накопления достаточного объёма данных.
  • С помощью DP компания может стимулировать партнёров к обмену данными.

Иллюстрация: мужчина с ноутбуком, из экрана которого взлетает ракета

$$ $$ Иллюстрация: мужчина, ниже которого расположены значки нескольких людей, символизирующие партнёров

Конфиденциальность данных и анонимизация в 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)
    • Целые числа, охватывающие 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

Подробнее о задании границ

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