Anonimizacja przez uogólnianie danych

Prywatność danych i anonimizacja w Pythonie

Rebeca Gonzalez

Data engineer

Uogólnianie danych

Technika polegająca na zastępowaniu wartości danych mniej precyzyjnymi.

Celem jest usunięcie części identyfikatorów przy zachowaniu użyteczności danych do analizy.

Umożliwia zastąpienie wartości mniej precyzyjną: "Tancerz" -> "Artysta"

     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
Prywatność danych i anonimizacja w Pythonie

Uogólnianie danych

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

Osoby w wieku 34 lat zostaną umieszczone w przedziale od 30 do 50. Proces ten jest również znany jako binning.

Prywatność danych i anonimizacja w Pythonie

Agregacja danych

Obraz przedstawiający listę zawodów po lewej stronie i ogólne kategorie po prawej.

Prywatność danych i anonimizacja w Pythonie

Zbiór danych medycznych

# 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
Prywatność danych i anonimizacja w Pythonie

Zbiór danych medycznych

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

Wygenerowany histogram atrybutu age ze zbioru danych, utworzony metodą hist

Prywatność danych i anonimizacja w Pythonie

Uogólnianie

# 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
Prywatność danych i anonimizacja w Pythonie

Kodowanie górne i dolne

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

Wygenerowany histogram atrybutu age ze zbioru danych, utworzony metodą hist

  • Niewiele osób ma poniżej 25 i powyżej 55 lat
  • Zastosowanie granic zmniejsza ryzyko re-identyfikacji wartości odstających
  • Najlepsze rozwiązanie, gdy liczba obserwacji w kategorii jest bardzo mała, szczególnie na ogonach rozkładu
Prywatność danych i anonimizacja w Pythonie

Kodowanie górne

# 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
Prywatność danych i anonimizacja w Pythonie

Kod górny

# 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
Prywatność danych i anonimizacja w Pythonie

Kodowanie dolne

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

Histogram atrybutu age po zastosowaniu kodowania górnego, wygenerowany metodą hist. Nie widać wartości odstających po prawej stronie histogramu

Prywatność danych i anonimizacja w Pythonie

Kod dolny

# 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 atrybutu age po zastosowaniu kodowania górnego i dolnego, wygenerowany metodą hist. Brak wartości odstających

Prywatność danych i anonimizacja w Pythonie

Uogólnianie danych a modele prywatności

Najlepiej stosować łącznie z supresją i maskowaniem w ramach modelu prywatności, np. k-anonimowości.

Określa warunki, które zbiór danych musi spełniać, aby ryzyko ujawnienia pozostało pod kontrolą.

W następnym rozdziale omówimy implementację tego modelu prywatności!

Prywatność danych i anonimizacja w Pythonie

Czas na ćwiczenia!

Prywatność danych i anonimizacja w Pythonie

Preparing Video For Download...