Anonimização com generalização de dados

Privacidade de Dados e Anonimização em Python

Rebeca Gonzalez

Data engineer

Generalização de dados

Técnica que permite substituir valores por outros menos precisos.

O objetivo é remover alguns identificadores mantendo a utilidade dos dados para análise.

Permite trocar um valor por outro menos preciso: "Dancer" -> "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
Privacidade de Dados e Anonimização em Python

Generalização de dados

# 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
# Dados generalizados: idade em intervalos e SSN mascarado
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-**-****

Quem tem 34 anos entra no intervalo de 30 a 50. Isso também é chamado de binning.

Privacidade de Dados e Anonimização em Python

Agregação de dados

Imagem com lista de ocupações à esquerda e categorias gerais à direita.

Privacidade de Dados e Anonimização em Python

Conjunto de dados médico

# Explorar o conjunto de dados
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
Privacidade de Dados e Anonimização em Python

Conjunto de dados médico

# Explorar o histograma da variável age
df_medical['age'].hist(bins=15)

Histograma gerado do atributo age do conjunto de dados, criado com o método hist

Privacidade de Dados e Anonimização em Python

Generalização

# Aplicar generalização transformando em dados binários
df_medical['age'] = df_medical['age'].apply(lambda x:">=40" if x>=40 else "<40" )


# Ver resultados 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
Privacidade de Dados e Anonimização em Python

Top and bottom coding

# Explorar o histograma da variável age
df_medical['age'].hist(bins=15)

Histograma gerado do atributo age do conjunto de dados, criado com o método hist

  • Poucas pessoas têm menos de 25 e poucas têm mais de 55
  • Aplique limites para reduzir o risco de reidentificação desses outliers
  • Melhor quando há poucas observações em uma categoria, especialmente nas caudas da distribuição
Privacidade de Dados e Anonimização em Python

Top coding

# Filtrar para ver as linhas afetadas
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
Privacidade de Dados e Anonimização em Python

Top code

# Aplicar top code para 55 em age
df_medical.loc[df_medical['age'] > 55, 'age'] = 55


# Filtrar para ver as linhas afetadas 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
Privacidade de Dados e Anonimização em Python

Bottom coding

# Explorar o histograma da variável age
df_medical['age'].hist(bins=15)

Histograma resultante do atributo age após aplicar top coding. Não mostra outliers no lado direito (valores mais altos)

Privacidade de Dados e Anonimização em Python

Bottom code

# Aplicar bottom code para 25 em age
df_medical.loc[df['age'] < 25, 'age'] = 25


# Explorar o histograma da variável age df_medical['age'].hist(bins=15)

Histograma resultante do atributo age após aplicar top e bottom coding. Não mostra outliers

Privacidade de Dados e Anonimização em Python

Generalização de dados e modelos de privacidade

Funciona melhor com Supressão e Mascaramento seguindo um Modelo de Privacidade, como K-anonymity.

Especifique condições que o conjunto de dados deve cumprir para manter o risco de divulgação sob controle.

Vamos aprender a implementar esse modelo no próximo capítulo!

Privacidade de Dados e Anonimização em Python

Vamos praticar!

Privacidade de Dados e Anonimização em Python

Preparing Video For Download...