Anonymisering med datageneralisering

Dataintegritet och anonymisering i Python

Rebeca Gonzalez

Data engineer

Datageneralisering

En teknik där datavärden ersätts med mindre precisa värden.

Syftet är att eliminera vissa identifierare och samtidigt bevara datats användbarhet för analys.

Ersätter ett datavärde med ett mindre precist: "Dansare" -> "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
Dataintegritet och anonymisering i Python

Datageneralisering

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

Den som är 34 år placeras i intervallet 30 till 50. Detta kallas även binning.

Dataintegritet och anonymisering i Python

Dataaggregering

Bild som visar en lista med yrkestitlar till vänster och övergripande kategorier till höger.

Dataintegritet och anonymisering i Python

Medicinsk datamängd

# 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
Dataintegritet och anonymisering i Python

Medicinsk datamängd

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

Genererat histogram över åldersattributet i datamängden, genererat med hist-metoden

Dataintegritet och anonymisering i Python

Generalisering

# 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
Dataintegritet och anonymisering i Python

Topp- och bottentrunkering

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

Genererat histogram över åldersattributet i datamängden, genererat med hist-metoden

  • Få personer är yngre än 25 eller äldre än 55
  • Tillämpa gränsvärden för att minska risken för återidentifiering av dessa individer i utliggarna
  • Bäst när det finns mycket få observationer i en kategori, särskilt i fördelningens svansar
Dataintegritet och anonymisering i Python

Topptrunkering

# 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
Dataintegritet och anonymisering i Python

Topptrunkering

# 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
Dataintegritet och anonymisering i Python

Bottentrunkering

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

Resulterande histogram över åldersattributet efter topptrunkering, genererat med hist-metoden. Visar inga utliggare på histogrammets högra sida motsvarande de högsta värdena

Dataintegritet och anonymisering i Python

Bottentrunkering

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

Resulterande histogram över åldersattributet efter topp- och bottentrunkering, genererat med hist-metoden. Visar inga utliggare

Dataintegritet och anonymisering i Python

Datageneralisering och integritetsmodeller

Fungerar bäst tillsammans med maskering och undertryckning enligt en integritetsmodell som K-anonymitet.

Ange villkor som datamängden måste uppfylla för att hålla röjanderisken under kontroll.

I nästa kapitel lär du dig hur du implementerar den här integritetsmodellen!

Dataintegritet och anonymisering i Python

Nu kör vi en övning!

Dataintegritet och anonymisering i Python

Preparing Video For Download...