IT/영어 공부노트
가명처리 기법 - 라플라스를 이용한 임의 잡음 추가 본문
여러 가명처리 기법 중, 마스킹의 일부인 잡음 추가(Noise addtion)에 대해 정리하고, 이를 파이썬으로 어떻게 구현하는지 라플라스 기법을 사용하여 알아보자!
잡음추가란?
정보에 임의의 숫자 등의 잡음을 추가하는 방법이다.
지정된 평균과 분산의 범위 내에서 잡음이 추가되어 분포도와 같은 유용성은 해치지 않는다! 하지만 잡음값은 데이터 값과 무관하기에 주의해야한다. 이는 주로 수치형 데이터에 사용된다.
잡음의 크기(=scale)가 증가할 수록 데이터 값에 대한 왜곡이 커진다. 스케일이 작을수록 데이터와 잡음의 차이가 작아지고, 스케일이 클수록 데이터와 잡음의 차이가 커진다. 데이터의 왜곡 정도를 조절하기 위해 적절한 스케일 값을 선택하는 게 중요하다. 목적에 따라서!
그래서 임의 잡음 추가는 어떻게 해야하는거지? 싶어서 칭구칭긔지피티 한테 물어봤더니 라플라스 잡음이 제일 대표적인 방법이라고 한다!
라플라스 알고리즘
라플라스 분포를 사용하여 원본 데이터에 잡음을 추가하는 방법이다.
import numpy as np
def add_laplace_noise(data, column_name, scale):
noise = np.random.laplace(0, scale, len(data))
data[column_name] += noise
add_laplace_noise 함수는 라플라스 잡음을 생성하고 데이터에 해당 잡음을 추가하는 과정이다.
함수를 호출할 때 data는 데이터프레임 객체, column_name은 잡음을 추가할 열 이름, scale은 잡음의 크기를 결정하는 매개변수다. scale 값이 커질수록 추가되는 잡음의 크기도 커지게 된다.
라플라스 분포는 중앙값을 중심으로 하며 급격한 꼬리를 가지는 확률 분포다. 잡음은 이 분포를 따르는 난수로 생성된다. 라플라스 분포의 배개변수는 위치 매개변수와 스케일 매개변수 두가지이다.
- 위치 매개변수 = 분포의 중앙값
- 스케일 매개변수 = 분포의 폭 조절
예제 - 월급 데이터에 scale이 1000인 잡음 추가하는 알고리즘
import pandas as pd
import numpy as np
# 라플라스 잡음을 데이터에 추가하는 함수
def add_laplace_noise(data, column_name, scale):
noise = np.random.laplace(0, scale, len(data))
data[column_name] += noise
# 데이터 불러오기 (예시 데이터)
data = pd.DataFrame({'이름': ['Alice', 'Bob', 'Charlie'],
'월급': [3000, 5000, 4000]})
# '월급' 열에 라플라스 잡음 추가
scale = 1000 # 잡음의 크기를 조절합니다
add_laplace_noise(data, '월급', scale)
print("데이터 수정 완료:")
print(data)
원본 데이터
잡음 추가 후 데이터(scale=1000)
라플라스는 데이터 개별 값들이 완전히 변형되어 개인정보 보호가 강화되면서도, 일부 통계 정보를 유지한다는 장점이 있다.
여기서 유지된다는 통계 정보가 무엇일까?
이는 잡음을 추가하더라도 데이터의 전반적인 분포나 특성이 크게 변하지 않는다는 것을 나타낸다. 이로 인해 데이터가 변형되어도 유용성이 남아있다는 것이다.
1. 평균 유지 - 전 후 데이터의 평균값이 비슷한가?
2. 분포 유사성 - 전 후 데이터의 분포가 유사한가?
3. 상관관계 유지 - 두 변수 간의 상관관계가 잡음 추가 후에도 비슷한가? (ex. 입원일, 퇴원일)
4. 데이터 범위 유사성 - 데이터의 최솟값과 최댓값이 유사하게 유지되나?
5. 변동성 유지 - 데이터의 변동성(표준편차 등)이 비슷하게 유지되나?
예로 위의 예시의 월급의 경우, 원본 데이터의 평균값은 4000, 잡음 추가 후의 평균값은 3995.7로 거의 동일하다!
이렇게 잡음추가 기법 알아보기 끝~
참조
개인정보위원회 - 가명정보처리가이드라인
그리고 ,, 내친구 챗지피티 허허