ACP pour l'anonymisation

Confidentialité des données et anonymisation en Python

Rebeca Gonzalez

Data engineer

Analyse en composantes principales (ACP)

$$ $$ Méthode de réduction de dimension souvent utilisée pour réduire la dimensionnalité de grands ensembles de données.

Confidentialité des données et anonymisation en Python

Masquage des données avec l'ACP

  • L'ACP crée de nouvelles « composantes principales » à partir de transformations linéaires des variables d'origine.

  • Dans un ensemble de données sur les bières, l'ACP construit de nouvelles variables. Par exemple :

$$ 2\times AlcoholicVolume - BitternessLevel$$

Confidentialité des données et anonymisation en Python

Masquage des données avec l'ACP

Nouvelles projections des données

Gif représentant les différentes façons dont l'ACP peut projeter les données en effectuant des opérations linéaires sur les données

Confidentialité des données et anonymisation en Python

Masquage des données avec l'ACP

ACP sans réduction de dimension

$$

  • Ce n'est qu'une rotation de l'espace original de l'ensemble de données.
  • Les distances sont donc préservées.
  • Un avantage pour les tâches et algorithmes prédictifs.
Confidentialité des données et anonymisation en Python

Masquage des données avec l'ACP

  • Si ces valeurs produites sont publiées sans explication, on peut quand même entraîner des algorithmes dessus et obtenir des prédictions exactes.
  • Les adversaires ne sauraient pas comment interpréter ces valeurs masquées.
Confidentialité des données et anonymisation en Python

Masquage des données avec l'ACP

# Explorer l'ensemble de données
heart_df.head()

    age    sex    cp    trestbps    chol    fbs    restecg    thalach    exang    oldpeak    slope   ca   thal   target
0    63    1      3     145         233     1      0          150        0        2.3        0       0    1      1
1    37    1      2     130         250     0      1          187        0        3.5        0       0    2      1
2    41    0      1     130         204     0      0          172        0        1.4        2       0    2      1
3    56    1      1     120         236     0      1          178        0        0.8        2       0    2      1
4    57    0      0     120          354     0      1          163        1        0.6        2       0    2      1
Confidentialité des données et anonymisation en Python

Masquage des données avec l'ACP et Scikit-learn

# Obtenir les données sans la colonne cible
x_data = df.drop(['target'], axis = 1)

# Colonne cible sous forme de tableau de valeurs y = df.target.values
Confidentialité des données et anonymisation en Python

Masquage des données avec l'ACP et Scikit-learn

# Importer PCA de Scikit-learn
from sklearn.decomposition import PCA

# Initialiser l'ACP avec un nombre de composantes égal au nombre de colonnes pca = PCA(n_components=len(x_data.columns))
# Appliquer l'ACP aux données x_data_pca = pca.fit_transform(x_data)
Confidentialité des données et anonymisation en Python

Masquage des données avec l'ACP et Scikit-learn

# Voir les données
x_data_pca
array([[-1.22673448e+01,  2.87383781e+00,  1.49698788e+01, ...,
         7.31102828e-01, -2.90393586e-01,  5.12575925e-01],
       [ 2.69013712e+00, -3.98713736e+01,  8.77882303e-01, ...,
         4.04206943e-01, -4.25920179e-01, -1.48124511e-01],
       [-4.29502141e+01, -2.36368199e+01,  1.75944589e+00, ...,
        -9.15397287e-01,  2.17828257e-01,  7.97593843e-02],
       ...,
Confidentialité des données et anonymisation en Python

Masquage des données avec l'ACP et Scikit-learn

# Créer un DataFrame à partir des données transformées par l'ACP
df_x_data_pca = pd.DataFrame(x_data_pca)


# Examiner la dimension de l'ensemble de données df_x_data_pca.shape
(1213, 13)
Confidentialité des données et anonymisation en Python

Utilité des données après masquage par ACP

  • Effectuer une classification par régression logistique et vérifier la perte de justesse en comparant les données originales et celles obtenues.

$$

  • La régression logistique est un algorithme de classification qui prédit une issue binaire à partir de variables indépendantes.
Confidentialité des données et anonymisation en Python

Utilité des données après masquage par ACP

Effectuer une classification par régression logistique et vérifier la perte de justesse.

# Diviser l'ensemble obtenu en données d'entraînement et de test
x_train, x_test, y_train, y_test = train_test_split(x_data_pca, y, test_size=0.2)


# Créer le modèle lr = LogisticRegression(max_iter=200)
# Entraîner le modèle lr.fit(x_train,y_train)
# Exécuter le modèle et prédire pour obtenir le score de justesse acc = lr.score(x_test, y_test) * 100 print("Test Accuracy is ", acc)
Test Accuracy is 85.24590163934425
Confidentialité des données et anonymisation en Python

Utilité des données avant masquage par ACP

Effectuer une classification par régression logistique et consulter le score avec les données originales

# Diviser l'ensemble obtenu en données d'entraînement et de test
x_train, x_test, y_train, y_test = train_test_split(x_data.to_numpy(),y,test_size = 0.2)

# Créer le modèle
lr = LogisticRegression(max_iter=200)

# Entraîner le modèle
lr.fit(x_train,y_train)

# Exécuter le modèle et prédire pour obtenir le score de justesse
acc = lr.score(x_test,y_test) * 100
print("Test Accuracy is ", acc)
Test Accuracy is 85.24590163934425
Confidentialité des données et anonymisation en Python

Passons à la pratique !

Confidentialité des données et anonymisation en Python

Preparing Video For Download...