LabHub
배우기 러닝패스 코스

보험 도메인 심화 · 누구인지 모르게 내보내기 · 실습

청구 자료를 내보내되 누구인지 모르게

LabHub 에서 이어서 보기

목표

합성 실손 청구 자료를 분석용으로 내보낸다. 직접 식별자를 걷어 내고 날짜를 일반화하고 작은 지역과 드문 값을 눌러 담아 k를 5 이상으로 올린 뒤, 재식별을 직접 시도해 보고 반출 기록을 남긴다.

왜 중요한가

이름과 회원번호를 지워도 생년월일·성별·우편번호가 붙어 있으면 대부분의 사람은 자기 줄을 찾아낼 수 있다. 준식별자 조합이 몇 명을 가리키는지(k) 세기 전에는 아무것도 증명되지 않았다.
k를 올리는 방법은 값을 뭉개거나 줄을 빼는 것뿐이고, 순서를 거꾸로 하면 버리는 줄이 눈덩이처럼 늘어난다. 그래서 일반화를 먼저 하고 억제는 마지막에 한다.
점검 목록의 본보기로는 미국 HIPAA 의 45 CFR 164.514 Safe Harbor 18가지를 쓰지만, 이 규정은 한국 보험사에 그대로 적용되지 않습니다. 국내 기준은 개인정보 보호법이고 건강 정보는 민감정보로 더 엄하게 다룹니다.

단계

1. /root/deid/gen_claims.py 를 만들어 실행해 /root/deid/claims.csv(700건 이상, 회원 300명 이상)와 /root/deid/zip_pop.csv 를 만든다. 90세를 넘긴 가입자의 청구 5건 이상, 빈도 5회 미만인 진단코드 3종 이상, 인구 20000명 이하 지역 2곳 이상을 넣는다.
2. /root/deid/strip.py 로 직접 식별자를 걷어 내 /root/deid/stripped.csv 를 만든다. rec_id 는 원본 순서대로 R-000001 부터 붙인다.
3. /root/deid/kcount.py 로 준식별자 조합의 k를 세어 /root/deid/k_before.json 에 적는다(qi·rows·groups·k_min·unique_rows·lt5_rows).
4. /root/deid/generalize.py 로 날짜를 일반화해 /root/deid/generalized.csv 를 만든다. 생년월일은 연도만, 기준 연도 2026 으로 잰 나이가 89 를 넘으면 연도까지 지우고 age_over_89 를 Y 로 둔다. 청구일은 연도만 남기고 입원일은 뺀다.
5. /root/deid/suppress.py/root/deid/suppressed.csv 를 만든다. 우편번호는 앞 세 자리만 남기되 인구 20000명 이하 지역은 000 으로, 빈도 5회 미만 진단코드는 RARE 로 바꾸고 도시 이름은 뺀다.
6. /root/deid/kanon.py 로 조합이 5건 미만인 줄을 억제해 /root/deid/export.csv/root/deid/k_after.json 을 만든다. 남는 줄이 70% 이상이어야 한다.
7. /root/deid/reidentify.py 로 재식별을 시도해 /root/deid/attack.json 을 만든다. 대상은 반출본에서 rec_id 가 가장 작은 줄이다.
8. /root/deid/export_record.json/root/deid/checklist.md 를 남긴다. 해시와 건수는 실제 파일에서 재고, 점검 목록에는 근거와 적용 범위를 함께 적는다.

참고

단계 8개

  1. 합성 청구 스냅샷과 지역 인구표 만들기
  2. 직접 식별자 걷어 내기
  3. 조합 하나가 몇 명을 가리키는지 세기
  4. 날짜를 연도로 줄이고 고령을 묶기
  5. 작은 지역과 드문 진단코드 눌러 담기
  6. k를 5로 올리고 잃은 양 재기
  7. 재식별을 직접 시도해 보기
  8. 반출 기록과 점검 목록 남기기