Faker로 데이터 마스킹과 생성

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

Rebeca Gonzalez

Data engineer

준식별자

비민감 개인식별정보도 준식별자가 될 수 있습니다. "유럽의 정부 수반"과 생년월일 텍스트, Angela Merkel 얼굴을 가리키는 선

1 Angela Merkel 사진: Wikimedia Commons
Python으로 배우는 데이터 프라이버시와 익명화

준식별자

다른 준식별자와 결합되면 식별이 가능합니다.

  • 나이
  • 성별
  • 직업
  • 개인 날짜: 출생, 사망, 병원 입원, 방문 등

남성과 주변에 개인 정보로 보이는 팝업 그림

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

준식별자와 재식별 공격

두 데이터셋(의료 데이터, 유권자 명부) 교차 영역이 우편번호, 생일, 성별임을 보이는 다이어그램

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

추가 익명화 기법

데이터 공개 위험을 줄이는 준식별자 익명화 기법. 의료 및 개인 데이터의 두 표. 왼쪽은 원본, 오른쪽은 이름 속성을 제거한 결과 데이터셋

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

데이터 마스킹

원본 DataFrame

     name                phone
0    Cassandra Nelson    4399406975395
1    Brian Moss          0389407128613
2    Melody Gill         8283308773967
3    Sandra Huber        4366608954250
4    Patricia Webster    4466462475574

이름이 마스킹된 DataFrame

     name    phone
0    xxxx    4399406975395
1    xxxx    0389407128613
2    xxxx    8283308773967
3    xxxx    4366608954250
4    xxxx    4466462475574

민감 값을 "x"와 같은 문자로 대체하는 것을 데이터 마스킹이라 합니다.

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

데이터 마스킹

# DataFrame 살펴보기
df.head()
     country         card_number           email
0    Finland         3546746666030419      [email protected]
1    Belarus         4303032415762821      [email protected]
2    Turkmenistan    4536883671157         [email protected]
3    Puerto Rico     3568819286614160      [email protected]
4    Angola          2514167462583016      [email protected]
Python으로 배우는 데이터 프라이버시와 익명화

데이터 마스킹

# 카드 번호 열을 일괄 마스킹
df['card_number'] = '****'


# 결과 DataFrame 확인 df.head()
     country         card_number     email
0    Finland         ****            [email protected]
1    Belarus         ****            [email protected]
2    Turkmenistan    ****            [email protected]
3    Puerto Rico     ****            [email protected]
4    Angola          ****            [email protected]
Python으로 배우는 데이터 프라이버시와 익명화

부분 데이터 마스킹

Facebook 비밀번호 재설정 페이지의 이메일 부분 마스킹 스크린샷

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

부분 데이터 마스킹

# 이메일에서 사용자명 마스킹
df2['email'] = df2['email'].apply(lambda s: s[0] + '****' + s[s.find('@'):] )


# 결과 가명처리 데이터 확인 df2.head()
     country         card_number           email
0    Finland         3546746666030419      f****@gmail.com
1    Belarus         4303032415762821      m****@gmail.com
2    Turkmenistan    4536883671157         a****@gmail.com
3    Puerto Rico     3568819286614160      k****@gmail.com
4    Angola          2514167462583016      d****@gmail.com
Python으로 배우는 데이터 프라이버시와 익명화

합성 데이터 생성

왼쪽은 원본 데이터(카드 번호 포함), 오른쪽은 합성으로 생성된 새 카드 번호

  • 원본과 유사하게 새로 생성한 데이터로 민감 정보를 대체합니다.
Python으로 배우는 데이터 프라이버시와 익명화

합성 데이터 생성

# Faker 클래스 임포트
from faker import Faker


# 가짜 데이터 생성기 만들기 fake_data = Faker()
# 신용카드 번호 생성 fake_data.credit_card_number()
3542216874440804
Python으로 배우는 데이터 프라이버시와 익명화

합성 데이터 생성

# 람다로 새 데이터로 카드 번호 마스킹
df['card_number'] = df['card_number'].apply(lambda x: fake_data.credit_card_number())

# 결과 가명처리 데이터 확인 df.head()
     country         card_number            email
0    Finland         3596625386355448       [email protected]
1    Belarus         376297265347524        [email protected]
2    Turkmenistan    4377494880888682       [email protected]
3    Puerto Rico     30553931809810         [email protected]
4    Angola          4241735748382          [email protected]
Python으로 배우는 데이터 프라이버시와 익명화

다른 유형의 데이터 생성

fake_data.name()
'Kelly Clark'
fake_data.name_male()
'Antonio Henderson'
fake_data.name_female()
'Jennifer Ortega'
Python으로 배우는 데이터 프라이버시와 익명화

연습해 볼 시간입니다!

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

Preparing Video For Download...