Anonimiseren met datageneralisatie

Dataprivacy en anonimisering in Python

Rebeca Gonzalez

Data engineer

Datageneralisatie

Techniek om gegevens te vervangen door minder precieze waarden.

Doel: enkele identificatoren verwijderen en toch bruikbaarheid voor analyse behouden.

Vervang een waarde door een minder precieze: "Danser" -> "Kunstenaar"

     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
Dataprivacy en anonimisering in Python

Datageneralisatie

# Originele 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
# Gegeneraliseerde data: leeftijd in intervallen en gemaskeerd 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-**-****

Mensen van 34 jaar vallen in de range 30–50. Dit heet ook binning.

Dataprivacy en anonimisering in Python

Data-aggregatie

Afbeelding met links een lijst van beroepen en rechts de algemene categorieën.

Dataprivacy en anonimisering in Python

Medische dataset

# Verken de 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
Dataprivacy en anonimisering in Python

Medische dataset

# Bekijk het histogram van de variabele age
df_medical['age'].hist(bins=15)

Gegenereerd histogram van het kenmerk age uit de dataset, gemaakt met de hist-methode

Dataprivacy en anonimisering in Python

Generalisatie

# Pas generalisatie toe door te binaire data te transformeren
df_medical['age'] = df_medical['age'].apply(lambda x:">=40" if x>=40 else "<40" )


# Bekijk de resultaten 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
Dataprivacy en anonimisering in Python

Top- en bottom-coding

# Bekijk het histogram van de variabele age
df_medical['age'].hist(bins=15)

Gegenereerd histogram van het kenmerk age uit de dataset, gemaakt met de hist-methode

  • Weinig mensen jonger dan 25 en weinig ouder dan 55
  • Stel grenzen in om heridentificatie te verkleinen voor deze outliers
  • Werkt best als er zeer weinig observaties per categorie zijn, vooral in de staarten
Dataprivacy en anonimisering in Python

Top-coding

# Filter om getroffen rijen te zien
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
Dataprivacy en anonimisering in Python

Top-code

# Top-code age naar 55
df_medical.loc[df_medical['age'] > 55, 'age'] = 55


# Filter om getroffen rijen te zien 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
Dataprivacy en anonimisering in Python

Bottom-coding

# Bekijk het histogram van de variabele age
df_medical['age'].hist(bins=15)

Resulterend histogram van het kenmerk age na top-coding. Geen outliers rechts bij hoogste waarden

Dataprivacy en anonimisering in Python

Bottom-code

# Bottom-code age naar 25
df_medical.loc[df['age'] < 25, 'age'] = 25


# Bekijk het histogram van de variabele age df_medical['age'].hist(bins=15)

Resulterend histogram van het kenmerk age na top- en bottom-coding. Geen outliers

Dataprivacy en anonimisering in Python

Datageneralisatie en privacymodellen

Werkt beter samen met Suppression en Masking volgens een privacy­model zoals k-anonimiteit.

Stel voorwaarden waaraan de dataset moet voldoen om onthullingsrisico te beheersen.

We leren dit privacy­model in het volgende hoofdstuk implementeren!

Dataprivacy en anonimisering in Python

Laten we oefenen!

Dataprivacy en anonimisering in Python

Preparing Video For Download...