Python으로 배우는 데이터 프라이버시와 익명화
Rebeca Gonzalez
Data engineer
데이터 값을 덜 정밀한 값으로 바꾸는 기법입니다.
식별자를 일부 제거하면서 분석 유용성은 유지합니다.
데이터 값을 덜 정밀한 값으로 대체합니다: "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
# 원본 데이터
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
# 일반화된 데이터: 나이 구간화, SSN 마스킹
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-**-****
34세는 30~50 구간에 배정됩니다. 이를 구간화(binning)라고 합니다.

# 데이터셋 탐색
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
# age 변수의 히스토그램 탐색
df_medical['age'].hist(bins=15)

# 이진 데이터로 변환하여 일반화 적용 df_medical['age'] = df_medical['age'].apply(lambda x:">=40" if x>=40 else "<40" )# 결과 확인 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
# age 변수의 히스토그램 탐색
df_medical['age'].hist(bins=15)

# 영향받은 행 필터링
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
# age 상한을 55로 코딩 df_medical.loc[df_medical['age'] > 55, 'age'] = 55# 영향받은 행 필터링 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
# age 변수의 히스토그램 탐색
df_medical['age'].hist(bins=15)

# age 하한을 25로 코딩 df_medical.loc[df['age'] < 25, 'age'] = 25# age 변수의 히스토그램 탐색 df_medical['age'].hist(bins=15)

K-익명성과 같은 개인정보 보호 모델을 따르며 억제(suppression), 마스킹과 함께 쓰면 더 효과적입니다.
공개 위험을 통제하기 위해 데이터셋이 충족해야 할 조건을 지정합니다.
다음 장에서 이 모델 구현을 학습하겠습니다!
Python으로 배우는 데이터 프라이버시와 익명화