Anonimizarea prin generalizarea datelor

Confidențialitatea datelor și anonimizarea în Python

Rebeca Gonzalez

Data engineer

Generalizarea datelor

Tehnică ce permite înlocuirea valorilor din date cu unele mai puțin precise.

Scopul este eliminarea unor identificatori, păstrând utilitatea datelor pentru analiză.

Permite înlocuirea unei valori cu una mai generală: „Dansator" -> „Artist"

     name               location
0    Amanda Hooper      146 Rodgers Field\nGregoryview, MS 71630
1    Sarah Smith        817 Garcia Shoal\nJonesville, AR 30299
2    Sean Boyd III      1938 90th St\nDallas, TX 59715
     name               location
0    Amanda Hooper      998 Boone Estate\nReedborough, MS 71630
1    Sarah Smith        7255 Shelby Rapids Apt. 455\nKarenland, AK 30299
2    Sean Boyd III      791 Crist Parks\nGreenton, TX 59715
Confidențialitatea datelor și anonimizarea în Python

Generalizarea datelor

# Original data
df_employees.head()
     first name   last name    age   ssn
0    Amber        Brown        91    798-29-4785
1    William      Gibson       34    431-66-8381
2    Daniel       Lee          92    825-91-5550
3    Andrea       Stevenson    64    188-59-3544
4    Julie        Horn         35    020-60-6388
# Generalized data: Age in intervals and masked SSN
generalized_df.head()
    First name    Last name    Age        SSN
0    Amber        Brown        (80, 99]    798-**-****
1    William      Gibson       (30, 50]    431-**-****
2    Daniel       Lee          (80, 99]    825-**-****
3    Andrea       Stevenson    (60, 80]    188-**-****
4    Julie        Horn         (30, 50]    020-**-****

Cei cu 34 de ani vor fi plasați într-un interval de 30 până la 50. Aceasta se numește și grupare în intervale (binning).

Confidențialitatea datelor și anonimizarea în Python

Agregarea datelor

Imagine cu o listă de ocupații profesionale în stânga și categoriile generale corespunzătoare în dreapta.

Confidențialitatea datelor și anonimizarea în Python

Set de date medicale

# Explore the dataset
df_medical.head()
    age    gender    department    condition
0    30    F         Finance       Anxiety disorders
1    42    M         Production    Bronchitis
2    35    F         Marketing     Dysthymia
3    39    F         Production    Dysthymia
4    40    M         Marketing     Flu
Confidențialitatea datelor și anonimizarea în Python

Set de date medicale

# Explore the histogram of the age variable
df_medical['age'].hist(bins=15)

Histogramă generată a atributului vârstă din set de date, generată cu metoda hist

Confidențialitatea datelor și anonimizarea în Python

Generalizare

# Apply generalization by transforming to binary data
df_medical['age'] = df_medical['age'].apply(lambda x:">=40" if x>=40 else "<40" )


# See results df_medical.head()
    age    gender    department    condition
0    <40   F         Finance       Bronchitis
1    >=40  M         Production    Bronquitis
2    <40   F         Finance       Dysthymia
3    <40   F         Production    Dysthymia
4    >=40  M         Marketing     Flu
Confidențialitatea datelor și anonimizarea în Python

Codificare superioară și inferioară

# Explore the histogram of the age variable
df_medical['age'].hist(bins=15)

Histogramă generată a atributului vârstă din set de date, generată cu metoda hist

  • Puțini au sub 25 de ani și puțini au peste 55
  • Aplicați limite pentru a reduce riscul de re-identificare a valorilor extreme
  • Optim când există foarte puține observații într-o categorie, mai ales la extremele distribuției
Confidențialitatea datelor și anonimizarea în Python

Codificare superioară

# Filter to see rows affected
df_medical[df_medical['age'] >= 55]
      age   gender   department     condition
26    56    F        Production     Flu
65    55    M        Finance        Dysthymia
126   59    F        Production     Anxiety disorders
139   58    F        Finance        Dysthymia
142   59    M        Marketing      Flu
145   57    M        Marketing      Anxiety disorders
Confidențialitatea datelor și anonimizarea în Python

Cod superior

# Top code the age to 55
df_medical.loc[df_medical['age'] > 55, 'age'] = 55


# Filter to see rows affected df_medical[df_medical['age'] >= 55]
      age   gender   department     condition
26    55    F        Production     Flu
65    55    M        Finance        Dysthymia
126   55    F        Production     Anxiety disorders
139   55    F        Finance        Dysthymia
142   55    M        Marketing      Flu
145   55    M        Marketing      Anxiety disorders
Confidențialitatea datelor și anonimizarea în Python

Codificare inferioară

# Explore the histogram of the age variable
df_medical['age'].hist(bins=15)

Histogramă rezultată a atributului vârstă după aplicarea codificării superioare. Nu prezintă valori extreme în dreapta histogramei

Confidențialitatea datelor și anonimizarea în Python

Cod inferior

# Bottom code the age to 25
df_medical.loc[df['age'] < 25, 'age'] = 25


# Explore the histogram of the age variable df_medical['age'].hist(bins=15)

Histogramă rezultată a atributului vârstă după aplicarea codificării superioare și inferioare. Nu prezintă valori extreme

Confidențialitatea datelor și anonimizarea în Python

Generalizarea datelor și modele de confidențialitate

Optim când este combinat cu Supresie și Mascare, urmând un Model de confidențialitate precum K-anonimitate.

Specificați condiții pe care setul de date trebuie să le îndeplinească pentru a controla riscul de dezvăluire.

Vom vedea cum să implementăm acest model de confidențialitate în capitolul următor!

Confidențialitatea datelor și anonimizarea în Python

Timp pentru practică!

Confidențialitatea datelor și anonimizarea în Python

Preparing Video For Download...