Pengantar K-anonymity

Privasi Data dan Anonimisasi di Python

Rebeca Gonzalez

Data engineer

Mengapa k-anonymity penting?

Gambar gubernur Massachusetts di kiri, teks "Mengidentifikasi gubernur Massachusetts", dan Profesor Harvard Latanya Sweeney di kanan

Privasi Data dan Anonimisasi di Python

Mengapa ini penting?

  • Enam orang memiliki tanggal lahirnya
  • Hanya tiga yang laki-laki
  • Dia satu-satunya di ZIP code-nya

Diagram yang menunjukkan irisan dua dataset: data medis dan daftar pemilih, dengan irisan berupa kode pos, tanggal lahir, dan jenis kelamin

Privasi Data dan Anonimisasi di Python

Bagaimana mencegah serangan ini?

Hanya satu rekaman yang memiliki nilai demografis sang gubernur.

Menghapus semua info demografis membuat data tidak berguna untuk analisis.

Bagaimana jika ada jalan tengah agar nilai demografis tidak lagi unik dalam dataset?

Privasi Data dan Anonimisasi di Python

Definisi k-anonymity

$$ $$ $$ $$ $$ $$ Setidaknya k individu dalam dataset berbagi kumpulan atribut yang dapat menjadi pengenal untuk tiap individu.

Privasi Data dan Anonimisasi di Python

Definisi k-anonymity

Sekelompok besar orang menyeberang jalan

Privasi Data dan Anonimisasi di Python

Dataset k-anonymous

2-anonymous:

     ZIP code    Umur
0    4217        34
1    4217        34
2    1742        77
3    1742        77

Setiap kombinasi nilai untuk kolom pengidentifikasi muncul setidaknya pada k rekaman berbeda.

Bukan 2-anonymous:

     ZIP code    Umur
0    4217        34
1    4217        34
2    1742        77
3    1743        77
Privasi Data dan Anonimisasi di Python

K-anonymity: Terminologi

Diagram yang menampilkan istilah pengenal langsung, kuasi-pengenal, dan atribut sensitif

Privasi Data dan Anonimisasi di Python

Dataset data medis

# Explore DataFrame 
medical_df.head()
    Umur    Departemen   Kondisi
0    34    Pemasaran    Gangguan kecemasan
1    46    Keuangan      Flu
2    41    Keuangan      Flu
3    62    Pemasaran    Gangguan kecemasan
4    44    Pemasaran    Gangguan kecemasan
Privasi Data dan Anonimisasi di Python

Atribut privasi

Atribut privasi:

  • Pengidentifikasi: Bisa berupa SSN dan nomor ID.
  • Kuasi-pengenal: Umur dan departemen pada dataset kita
  • Sensitif: Kondisi medis pada dataset kita
Privasi Data dan Anonimisasi di Python

Menjelajah kombinasi unik kuasi-pengenal

# Hitung berapa banyak kombinasi unik untuk Umur dan Departemen
medical_df.groupby(['Age','Department']).size().reset_index(name='Count')
    Umur    Departemen    Jumlah
0    30    Produksi    2
1    31    Pemasaran     1
2    32    Pemasaran     1
3    32    Produksi    1
4    33    Produksi    1
5    34    Keuangan       1
6    34    Pemasaran     1
7    34    Produksi    1
8    35    Pemasaran     1
9    36    Keuangan       2
10    38    Keuangan      1
11    38    Produksi   1
Privasi Data dan Anonimisasi di Python

Pendekatan: generalisasi

# Generalkan Umur dengan membuat 4 kelompok interval
medical_df['Age_group'] = pd.cut(medical_df['Age'], bins=4)


# Jelajahi dataset dengan interval medical_df.head()
    Umur    Departemen    Kondisi            Kelompok_umur
0    34    Pemasaran     Gangguan kecemasan    (29.964, 39.0]
1    46    Keuangan       Flu                  (39.0, 48.0]
2    41    Keuangan       Flu                  (39.0, 48.0]
3    62    Pemasaran     Gangguan kecemasan    (57.0, 66.0]
4    44    Pemasaran     Gangguan kecemasan    (39.0, 48.0]
Privasi Data dan Anonimisasi di Python

Pendekatan: generalisasi

# Hitung berapa banyak kombinasi unik untuk Umur dan Departemen
medical_df.groupby(['Age_group','Department']).size().reset_index(name='Count')
     Kelompok_umur         Departemen    Jumlah
0    (29.964, 39.0]    Keuangan       4
1    (29.964, 39.0]    Pemasaran     4
2    (29.964, 39.0]    Produksi    6
3    (39.0, 48.0]      Keuangan       8
4    (39.0, 48.0]      Pemasaran     5
5    (39.0, 48.0]      Produksi    4
6    (48.0, 57.0]      Keuangan       3
7    (48.0, 57.0]      Pemasaran     2
8    (48.0, 57.0]      Produksi    4
Privasi Data dan Anonimisasi di Python

Pendekatan: generalisasi

# Tetapkan k = 2, untuk dataset 2-anonymous
k = 2


# Hitung berapa banyak kombinasi unik untuk Umur dan Departemen df_count = medical_df.groupby(['Age_group','Department']).size().reset_index(name='Count')
# Saring baris dengan jumlah kurang dari k df_count[df_count['Count'] < k]
    Kelompok_umur    Departemen    Jumlah
Privasi Data dan Anonimisasi di Python

Mari k-anonymize!

Privasi Data dan Anonimisasi di Python

Preparing Video For Download...