데이터 일반화로 익명화하기

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
Python으로 배우는 데이터 프라이버시와 익명화

데이터 일반화

# 원본 데이터
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)라고 합니다.

Python으로 배우는 데이터 프라이버시와 익명화

데이터 집계

왼쪽에 직업 목록, 오른쪽에 상위 일반 카테고리를 보여주는 이미지.

Python으로 배우는 데이터 프라이버시와 익명화

의료 데이터셋

# 데이터셋 탐색
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
Python으로 배우는 데이터 프라이버시와 익명화

의료 데이터셋

# age 변수의 히스토그램 탐색
df_medical['age'].hist(bins=15)

데이터셋의 age 속성으로 hist 메서드로 생성한 히스토그램

Python으로 배우는 데이터 프라이버시와 익명화

일반화

# 이진 데이터로 변환하여 일반화 적용
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
Python으로 배우는 데이터 프라이버시와 익명화

상·하한 코딩

# age 변수의 히스토그램 탐색
df_medical['age'].hist(bins=15)

데이터셋의 age 속성으로 hist 메서드로 생성한 히스토그램

  • 25세 미만과 55세 초과가 소수입니다
  • 이 경계에 상한·하한을 적용해 재식별 위험을 낮춥니다
  • 범주 내 관측치가 매우 적을 때, 특히 분포의 꼬리에서 효과적입니다
Python으로 배우는 데이터 프라이버시와 익명화

상한 코딩

# 영향받은 행 필터링
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
Python으로 배우는 데이터 프라이버시와 익명화

상한 코딩 적용

# 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
Python으로 배우는 데이터 프라이버시와 익명화

하한 코딩

# age 변수의 히스토그램 탐색
df_medical['age'].hist(bins=15)

상한 코딩 적용 후 데이터셋의 age 속성 히스토그램. 오른쪽(최댓값) 바깥값이 보이지 않음

Python으로 배우는 데이터 프라이버시와 익명화

하한 코딩 적용

# age 하한을 25로 코딩
df_medical.loc[df['age'] < 25, 'age'] = 25


# age 변수의 히스토그램 탐색 df_medical['age'].hist(bins=15)

상·하한 코딩 적용 후 데이터셋의 age 속성 히스토그램. 바깥값이 보이지 않음

Python으로 배우는 데이터 프라이버시와 익명화

데이터 일반화와 프라이버시 모델

K-익명성과 같은 개인정보 보호 모델을 따르며 억제(suppression), 마스킹과 함께 쓰면 더 효과적입니다.

공개 위험을 통제하기 위해 데이터셋이 충족해야 할 조건을 지정합니다.

다음 장에서 이 모델 구현을 학습하겠습니다!

Python으로 배우는 데이터 프라이버시와 익명화

연습해 볼 시간입니다!

Python으로 배우는 데이터 프라이버시와 익명화

Preparing Video For Download...