K-anonimlik'e giriş

Python ile Veri Gizliliği ve Anonimleştirme

Rebeca Gonzalez

Data engineer

K-anonimlik neden önemli?

Solda Massachusetts valisini gösteren görsel, ortada "Massachusetts valisini tanımlamak" metni ve sağda Harvard Profesörü Latanya Sweeney

Python ile Veri Gizliliği ve Anonimleştirme

Neden önemli?

  • Doğum tarihini paylaşan altı kişi vardı
  • Sadece üçü erkekti
  • ZIP kodunda tek kişiydi

İki veri kümesinin (tıbbi veriler ve seçmen listesi) kesişimini gösteren diyagram; kesişim ZIP kodu, doğum tarihi ve cinsiyet

Python ile Veri Gizliliği ve Anonimleştirme

Bu saldırı nasıl önlenir?

Yalnızca bir kayıt valinin demografik değerlerine sahipti.

Tüm demografik bilgileri silmek veriyi analiz için işe yaramaz kılar.

Peki, demografik değerlerin veri kümesinde artık benzersiz olmamasını sağlayan bir orta yol var mı?

Python ile Veri Gizliliği ve Anonimleştirme

k-anonimlik tanımı

$$ $$ $$ $$ $$ $$ Veri kümesinde en az k kişi, her birey için tanımlayıcı olabilecek öznitelik kümesini paylaşır.

Python ile Veri Gizliliği ve Anonimleştirme

k-anonimlik tanımı

Bir caddeden geçen büyük bir insan kalabalığı

Python ile Veri Gizliliği ve Anonimleştirme

K-anonim veri kümesi

2-anonim:

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

Veri kümesindeki tanımlayıcı sütun değerlerinin her kombinasyonu en az k farklı kayıtta görünür.

2-anonim değil:

     ZIP code    Age
0    4217        34
1    4217        34
2    1742        77
3    1743        77
Python ile Veri Gizliliği ve Anonimleştirme

K-anonimlik: Terimler

Doğrudan tanımlayıcılar, yarı tanımlayıcılar ve hassas nitelimlerin terimlerini gösteren diyagram

Python ile Veri Gizliliği ve Anonimleştirme

Tıbbi veri kümesi

# Explore DataFrame 
medical_df.head()
    Age    Department   Condition
0    34    Marketing    Anxiety disorders
1    46    Finance      Flu
2    41    Finance      Flu
3    62    Marketing    Anxiety disorders
4    44    Marketing    Anxiety disorders
Python ile Veri Gizliliği ve Anonimleştirme

Gizlilik öznitelikleri

Gizlilik öznitelikleri:

  • Tanımlayıcı: SSN ve kimlik numaraları olabilir.
  • Yarı tanımlayıcı: Veri kümemizde yaş ve departman
  • Hassas: Veri kümemizde tıbbi durum
Python ile Veri Gizliliği ve Anonimleştirme

Yarı tanımlayıcıların benzersiz kombinasyonlarını inceleme

# Calculate how many unique combinations are for Age and Department
medical_df.groupby(['Age','Department']).size().reset_index(name='Count')
    Age    Department    Count
0    30    Production    2
1    31    Marketing     1
2    32    Marketing     1
3    32    Production    1
4    33    Production    1
5    34    Finance       1
6    34    Marketing     1
7    34    Production    1
8    35    Marketing     1
9    36    Finance       2
10    38    Finance      1
11    38    Production   1
Python ile Veri Gizliliği ve Anonimleştirme

Yaklaşım: genelleştirme

# Generalize Age by creating 4 groups of intervals
medical_df['Age_group'] = pd.cut(medical_df['Age'], bins=4)


# Explore the dataset with intervals medical_df.head()
    Age    Department    Condition            Age_group
0    34    Marketing     Anxiety disorders    (29.964, 39.0]
1    46    Finance       Flu                  (39.0, 48.0]
2    41    Finance       Flu                  (39.0, 48.0]
3    62    Marketing     Anxiety disorders    (57.0, 66.0]
4    44    Marketing     Anxiety disorders    (39.0, 48.0]
Python ile Veri Gizliliği ve Anonimleştirme

Yaklaşım: genelleştirme

# Calculate how many unique combinations are for Age and Department
medical_df.groupby(['Age_group','Department']).size().reset_index(name='Count')
     Age_group         Department    Count
0    (29.964, 39.0]    Finance       4
1    (29.964, 39.0]    Marketing     4
2    (29.964, 39.0]    Production    6
3    (39.0, 48.0]      Finance       8
4    (39.0, 48.0]      Marketing     5
5    (39.0, 48.0]      Production    4
6    (48.0, 57.0]      Finance       3
7    (48.0, 57.0]      Marketing     2
8    (48.0, 57.0]      Production    4
Python ile Veri Gizliliği ve Anonimleştirme

Yaklaşım: genelleştirme

# Set k to be 2, for a 2-anonymous dataset
k = 2


# Calculate how many unique combinations are for Age and Department df_count = medical_df.groupby(['Age_group','Department']).size().reset_index(name='Count')
# Filter the rows that have count less than k df_count[df_count['Count'] < k]
    Age_group    Department    Count
Python ile Veri Gizliliği ve Anonimleştirme

Hadi k-anonimleştirelim!

Python ile Veri Gizliliği ve Anonimleştirme

Preparing Video For Download...