환자 데이터를 연구자에게 넘기기 전, k-익명성과 l-다양성으로 재식별 위험을 얼마나 줄일 수 있나

k-익명성·l-다양성·차등프라이버시·연합학습을 결합한 프라이버시 보존형 AI 파이프라인과 재식별 위험 감소 수치 정리

2026-08-12 · 최초 발행 2025-12-13

비식별화만으로는 끝나지 않는 이유

병원이 임상 데이터를 외부 연구자에게 넘길 때 흔히 저지르는 실수는 이름과 주민등록번호만 지우고 "비식별화 완료"라고 판단하는 것이다. 나이와 우편번호 세 자리만 남아도 조합에 따라 개인이 특정될 수 있다. k-익명성(k-Anonymity)은 이 문제를 정면으로 다루는 모델이다. 각 레코드가 동일한 준식별자 집합을 가진 최소 k개의 레코드 집합에 속하도록 일반화·억제 처리하는 방식인데, 동질성 공격과 배경지식 공격에는 취약하다는 한계가 있다. 그래서 각 동등 클래스(equivalence class)의 민감 속성 값이 최소 l개의 다양한 의미를 갖도록 보장하는 l-다양성(l-Diversity)을 함께 쓴다. l-다양성은 동질성 공격을 방어하지만 전체 분포를 왜곡하면 정보 손실이 커지므로 t-근접성(t-closeness)으로 분포를 보존하며 보완하는 경우가 많다.

Privacy-Preserving AI는 이 비식별화 기법을 포함해, 데이터나 모델에서 개별 식별 위험을 억제하면서 학습·추론 성능을 확보하는 방법론 전체를 가리킨다. 연합학습(Federated Learning), 차등프라이버시(Differential Privacy), 안전한 연산(Secure MPC/HE)이 대표 기술이고, 목표는 프라이버시 예산 관리와 재식별 위험 최소화, 규제 준수를 동시에 달성하는 것이다.

파이프라인의 구성 층위

데이터 비식별화 파이프라인은 준식별자 탐지(규칙·ML·DLP)부터 시작해 일반화(버킷팅)·억제(suppression)·노이즈 주입 순으로 처리하며, 메타데이터(데이터 사전, 민감도 등급) 기반 자동화가 권장된다. k-익명성을 만족하지 못하면 단계적으로 재일반화하면서 정보손실 함수를 최적화해 손실을 최소화하는 지점을 찾는다.

프라이버시 모델과 검증 지표 층위에서는 k, l, t-근접성 지표와 재식별 위험 추정(Risk ≤ θ)을 병행하고, 데이터 유틸리티 지표(분포 왜곡, 분산 보존율, 모델 성능 변화)를 동시에 모니터링한다. 프라이버시 예산(ε, δ)은 대시보드로 관리하며 릴리스 단위·기간별 누적 예산을 추적해야 한다.

학습 아키텍처는 연합학습(클라이언트 측 로컬 학습, 서버 측 안전 집계)과 DP-SGD(그래디언트 클리핑+노이즈)를 결합하고, 필요하면 안전 집계(Secure Aggregation)나 TEE를 적용한다. 모델 서빙 단계에서는 멤버십 추론 공격을 방어하기 위해 수치 클리핑과 온도 스케일링으로 출력 민감도를 관리한다.

거버넌스 층위에서는 데이터 카탈로그·라인리지, 접근 제어(ABAC/RBAC), 불변(append-only) 감사 로그를 확보하고 프라이버시 영향평가(PIA/DPIA)를 정례화한다. GDPR, CCPA, 개인정보보호법 같은 규제 요구사항을 매핑하고 보존 주기·목적 제한 정책을 자동 집행하는 것도 이 층위의 일이다.

현장에서의 적용

헬스케어 임상 데이터 공유는 준식별자 표준화 후 k-익명성(k=10 권장)과 l-다양성(l≥2)을 적용하고 위험 평가를 거쳐 연구자에게 제공하는 순서를 따른다. 여기에 결과 테이블 단위로 DP 집계(ε=1~3)를 병행하면 재식별 리스크를 한 번 더 낮출 수 있다. 금융 신용평가 모델링에서는 고객 로그·거래 데이터에 k-익명성 전처리를 적용한 뒤 연합학습으로 지점 단위 로컬 학습을 진행하고 서버에서 안전 집계한다. 데이터 이동이 최소화되고 규제 준수가 향상되지만, 성능 저하를 완화하려면 클라이언트 샘플 균형과 통신 압축이 필요하다. 공공데이터 개방은 비식별화 카탈로그 기반 템플릿 처리 후 k/l 검증을 자동화하고, 공개 전에 샘플링 기반 재식별 시뮬레이션을 돌린다. 배포 전에는 멤버십 추론·링크 공격 같은 모의 공격 평가로 잔여 위험을 점검하는 절차를 운영에 포함시켜야 한다.

처리 흐름

입력 검증/스키마 검사 실패거부·정제 큐로 이동k-익명성/l-다양성 검증위험 임계값 θ위험 임계값 θ안전 집계/모델 검증감사 로그 커밋/정책 검토 통과정책 위반 또는 테스트 실패재시도 완료원천 데이터 수집(스키마,민감도 등급)비식별화처리(일반화/억제/노이즈)재식별 위험 평가(Risk θ)학습 파이프라인시작(연합학습+DP-SGD)산출물 생성(모델, 집계 통계)배포(레포트/모델)롤백/경보/튜닝 재시도

기법별로 트레이드오프가 다르다

기술 성능 확장성 일관성(통계 보존) 안정성(공격 내성) 운영 편의
k-Anonymity 정보 손실에 비례한 모델 성능 저하 가능 전처리 최적화 시 대규모 처리 가능 준식별자 분포 보존 양호하나 과도 일반화 시 왜곡 동질성/배경지식 공격 취약 구현 용이, 규칙 기반 자동화 가능
l-Diversity 추가 제약으로 유틸리티 더 감소 가능 k와 동일 수준 민감값 다양성 확보로 정보 보존 향상 동질성 공격 방어 강화, 스키닝 취약성 감소 k와 병행 시 관리 복잡도 증가
Differential Privacy 노이즈로 1~5%p 성능 저하 사례 빈번(모델/ε 의존) 배치/스트리밍 모두 가능 요약 통계 왜곡 가능, ε 설정 민감 멤버십 추론 등 강한 방어 예산 관리·튜닝 복잡
Federated Learning 통신/지연 증가로 학습 시간 1.3~3배 클라이언트 수 증가 대응 필요 데이터 분포 이질성으로 드리프트 가능 데이터 미이동 장점, 공격 표면 분산 오케스트레이션·클라이언트 품질 관리 필요

표의 값은 환경에 따라 달라지므로 보수적으로 해석하는 편이 안전하다.

재식별 위험도는 k=10, l=2를 적용했을 때 링크 공격 추정 위험이 5090% 감소하는데(데이터 구조 의존), DP(ε≈2)를 적용하면 멤버십 추론 AUC가 0.10.2 하락한다. 자동 검증 파이프라인을 도입하면 데이터 배포 승인 시간이 30~60% 단축되는 효과도 관찰된다. 이 수치들과 함께 규제 준수·감사 대응력, 데이터 공유·재사용 활성화 같은 정성적 효과도 따라온다.

설계에서 운영까지

위협 모델(공격자 배경지식, 접근 경로)을 먼저 정의하고 용도·보존기간에 따라 민감도 등급을 매긴 뒤, k, l, ε/δ와 유틸리티 임계값(예: AUC 손실 2%p 이하)을 목표 지표로 설정하는 순서가 안전하다. 데이터 처리 단계에서는 준식별자를 DLP·정규식·ML로 자동 탐지하되 수기 검토를 병행하고, 정보손실 함수(Discernibility, NCP)를 최소화하는 방향으로 탐색한다. l-다양성은 엔트로피 기반의 의미적 다양성을 권장하며 소규모 집단은 suppression 예외로 처리한다. 모델 학습에서는 DP-SGD의 클리핑 노름을 신중히 선택하고 모멘트 회계법으로 매 스텝 ε을 회계하며, 연합학습은 클라이언트 샘플 균형과 드리프트 제어가 관건이다. 안전 집계(암호화 합계)를 적용하고 부분 참여 클라이언트 처리 로직도 설계해야 한다. 운영 단계에서는 프라이버시 예산 대시보드를 릴리스별로 누적 관리하고 감사 로그를 Write-Once로 불변 저장하며, 데이터·모델 접근에 RBAC·ABAC와 HSM/Cloud KMS 키 관리, TEE 검토를 적용한다. 결국 강한 프라이버시(큰 k, 작은 ε)는 성능·유틸리티 손실과 맞바꾸는 관계이므로 비즈니스 임계값과 규제 리스크를 함께 최적화하는 수밖에 없다.

코드로 확인하는 k-익명성과 DP

아래는 Python 3.10, pandas 2.x, numpy 1.26+, diffprivlib 0.6 환경을 가정한 예시다. k-익명성 검증과 재일반화, 차등프라이버시 집계 평균을 함께 보여준다.

# pip install pandas numpy diffprivlib
import pandas as pd
import numpy as np
from diffprivlib.mechanisms import Laplace

# 예시 데이터
df = pd.DataFrame({
    "age": [23, 24, 24, 31, 35, 35, 42, 42, 42, 42],
    "zip3": ["123","123","123","124","124","124","125","125","125","125"],
    "disease": ["A","B","B","A","C","A","A","B","C","A"]
})

# 1) 간단 k-익명성 확인(k=3) 및 재일반화(버킷팅) 예시
def check_k_anonymity(data, quasi_cols, k=3):
    counts = data.groupby(quasi_cols).size().reset_index(name="cnt")
    merged = data.merge(counts, on=quasi_cols, how="left")
    return (merged["cnt"] >= k).all()

qids = ["age", "zip3"]
if not check_k_anonymity(df, qids, k=3):
    # 나이 버킷팅으로 일반화
    df["age_bucket"] = pd.cut(df["age"], bins=[0,29,39,120], labels=["0-29","30-39","40+"])
    qids = ["age_bucket", "zip3"]

print("k-anonymous:", check_k_anonymity(df, qids, k=3))

# 2) 차등프라이버시 집계 평균(ε=1.0) 예시
values = df["age"].to_numpy()
sensitivity = (values.max() - values.min()) / len(values)  # 평균의 L1 민감도 상한
mech = Laplace(epsilon=1.0, sensitivity=sensitivity)
private_mean = mech.randomise(values.mean())
print("DP mean(age):", private_mean)

실제 배포 전에는 재식별 위험 추정, 정보손실 평가, ε 회계, 로깅·감사 같은 절차가 코드 밖에서 추가로 필요하다.

프라이버시 보존형 AIk-익명성l-다양성차등프라이버시연합학습