Giới thiệu về K-anonymity

Bảo mật dữ liệu và Ẩn danh trong Python

Rebeca Gonzalez

Data engineer

Vì sao k-anonymity quan trọng?

Bên trái là thống đốc Massachusetts, dòng chữ "Xác định danh tính thống đốc Massachusetts" và bên phải là Giáo sư Harvard Latanya Sweeney

Bảo mật dữ liệu và Ẩn danh trong Python

Vì sao quan trọng?

  • Sáu người có cùng ngày sinh
  • Chỉ ba người là nam
  • Ông ấy là người duy nhất trong ZIP code của mình

Sơ đồ giao nhau của hai tập dữ liệu: dữ liệu y tế và danh sách cử tri, phần giao là zip code, ngày sinh và giới tính

Bảo mật dữ liệu và Ẩn danh trong Python

Ngăn chặn tấn công này thế nào?

Chỉ một bản ghi có giá trị nhân khẩu học của thống đốc.

Xóa hết thông tin nhân khẩu học sẽ làm dữ liệu vô dụng cho phân tích.

Có giải pháp trung hòa để các giá trị này không còn độc nhất trong dữ liệu không?

Bảo mật dữ liệu và Ẩn danh trong Python

Định nghĩa k-anonymity

$$ $$ $$ $$ $$ $$ Ít nhất k cá nhân trong bộ dữ liệu chia sẻ tập thuộc tính có thể dùng để nhận dạng mỗi người.

Bảo mật dữ liệu và Ẩn danh trong Python

Định nghĩa k-anonymity

Một nhóm đông người băng qua đường

Bảo mật dữ liệu và Ẩn danh trong Python

Bộ dữ liệu k-anonymous

2-anonymous:

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

Mọi tổ hợp giá trị của các cột nhận dạng trong dữ liệu xuất hiện ở ít nhất k bản ghi.

Không 2-anonymous:

     ZIP code    Age
0    4217        34
1    4217        34
2    1742        77
3    1743        77
Bảo mật dữ liệu và Ẩn danh trong Python

K-anonymity: Thuật ngữ

Sơ đồ các thuật ngữ: định danh trực tiếp, bán định danh và thuộc tính nhạy cảm

Bảo mật dữ liệu và Ẩn danh trong Python

Bộ dữ liệu y tế

# 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
Bảo mật dữ liệu và Ẩn danh trong Python

Thuộc tính riêng tư

Thuộc tính riêng tư:

  • Định danh: ví dụ SSN, số ID.
  • Bán định danh: Tuổi và phòng ban trong dữ liệu
  • Nhạy cảm: Tình trạng bệnh trong dữ liệu
Bảo mật dữ liệu và Ẩn danh trong Python

Khám phá tổ hợp bán định danh duy nhất

# Tính số tổ hợp duy nhất của Age và 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
Bảo mật dữ liệu và Ẩn danh trong Python

Cách làm: khái quát hóa

# Khái quát hóa Age bằng 4 khoảng
medical_df['Age_group'] = pd.cut(medical_df['Age'], bins=4)


# Xem dữ liệu với các khoảng 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]
Bảo mật dữ liệu và Ẩn danh trong Python

Cách làm: khái quát hóa

# Tính số tổ hợp duy nhất của Age và 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
Bảo mật dữ liệu và Ẩn danh trong Python

Cách làm: khái quát hóa

# Đặt k = 2 để có bộ dữ liệu 2-anonymous
k = 2


# Tính số tổ hợp duy nhất của Age và Department df_count = medical_df.groupby(['Age_group','Department']).size().reset_index(name='Count')
# Lọc các hàng có Count < k df_count[df_count['Count'] < k]
    Age_group    Department    Count
Bảo mật dữ liệu và Ẩn danh trong Python

Hãy k-anonymize!

Bảo mật dữ liệu và Ẩn danh trong Python

Preparing Video For Download...