บทนำสู่ K-anonymity

ความเป็นส่วนตัวของข้อมูลและการทำให้ข้อมูลไม่ระบุตัวตนด้วย Python

Rebeca Gonzalez

Data engineer

ทำไม k-anonymity จึงสำคัญ?

ภาพแสดงผู้ว่าการรัฐแมสซาชูเซตส์ทางซ้าย ข้อความระบุว่า "Identifying the governor of Massachusetts" และศาสตราจารย์ Latanya Sweeney จากมหาวิทยาลัยฮาร์วาร์ดทางขวา

ความเป็นส่วนตัวของข้อมูลและการทำให้ข้อมูลไม่ระบุตัวตนด้วย Python

เหตุใดจึงสำคัญ?

  • มีคน 6 คนที่มีวันเกิดเดียวกันกับเขา
  • ในนั้นเป็นผู้ชายเพียง 3 คน
  • เขาเป็นคนเดียวในรหัสไปรษณีย์นั้น

ไดอะแกรมแสดงจุดตัดระหว่างสองชุดข้อมูล ได้แก่ ข้อมูลทางการแพทย์และรายชื่อผู้มีสิทธิ์เลือกตั้ง โดยจุดตัดคือรหัสไปรษณีย์ วันเกิด และเพศ

ความเป็นส่วนตัวของข้อมูลและการทำให้ข้อมูลไม่ระบุตัวตนด้วย Python

จะป้องกันการโจมตีนี้ได้อย่างไร?

มีเพียงระเบียนเดียวที่มีค่าข้อมูลประชากรตรงกับผู้ว่าการรัฐ

การลบข้อมูลประชากรทั้งหมดออกจะทำให้ข้อมูลไม่มีประโยชน์สำหรับการวิเคราะห์

จะมีทางสายกลางที่ทำให้ค่าข้อมูลประชากรไม่ unique ในชุดข้อมูลอีกต่อไปได้หรือไม่?

ความเป็นส่วนตัวของข้อมูลและการทำให้ข้อมูลไม่ระบุตัวตนด้วย Python

นิยามของ k-anonymity

$$ $$ $$ $$ $$ $$ มีอย่างน้อย k รายการในชุดข้อมูล ที่มีชุดแอตทริบิวต์เหมือนกัน ซึ่งอาจกลายเป็นตัวระบุตัวตนของแต่ละบุคคลได้

ความเป็นส่วนตัวของข้อมูลและการทำให้ข้อมูลไม่ระบุตัวตนด้วย Python

นิยามของ k-anonymity

กลุ่มคนจำนวนมากกำลังข้ามถนน

ความเป็นส่วนตัวของข้อมูลและการทำให้ข้อมูลไม่ระบุตัวตนด้วย Python

ชุดข้อมูลแบบ K-anonymous

2-anonymous:

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

ทุกชุดค่าของคอลัมน์ที่ใช้ระบุตัวตนในชุดข้อมูลจะปรากฏอย่างน้อย k ระเบียน

ไม่ใช่ 2-anonymous:

     ZIP code    Age
0    4217        34
1    4217        34
2    1742        77
3    1743        77
ความเป็นส่วนตัวของข้อมูลและการทำให้ข้อมูลไม่ระบุตัวตนด้วย Python

K-anonymity: คำศัพท์

ไดอะแกรมแสดงคำศัพท์ได้แก่ direct identifiers, quasi-identifiers และ sensitive attributes

ความเป็นส่วนตัวของข้อมูลและการทำให้ข้อมูลไม่ระบุตัวตนด้วย Python

ชุดข้อมูลทางการแพทย์

# 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

แอตทริบิวต์ด้านความเป็นส่วนตัว

แอตทริบิวต์ด้านความเป็นส่วนตัว:

  • ระบุตัวตนโดยตรง: เช่น หมายเลข SSN และหมายเลข ID
  • Quasi-identifying: อายุและแผนกจากชุดข้อมูลของเรา
  • ข้อมูลอ่อนไหว: สภาวะทางการแพทย์จากชุดข้อมูลของเรา
ความเป็นส่วนตัวของข้อมูลและการทำให้ข้อมูลไม่ระบุตัวตนด้วย Python

สำรวจชุดค่าผสมที่ไม่ซ้ำกันของ quasi-identifiers

# 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

แนวทาง: การทำ generalization

# 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

แนวทาง: การทำ generalization

# 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

แนวทาง: การทำ generalization

# 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

มาฝึกกันเถอะ!

ความเป็นส่วนตัวของข้อมูลและการทำให้ข้อมูลไม่ระบุตัวตนด้วย Python

Preparing Video For Download...