3. 直接标识符与准标识符的识别方法
在临床研究数据匿名化工程中,识别字段的分类是全部后续处理工作的起点。如果分类错误,要么导致匿名化不彻底、产生再识别风险,要么过度脱敏、破坏数据的科研可用性。本节围绕临床数据中常见的姓名、身份证号、病历号、出生日期、邮编、就诊时间等字段,讲清直接标识符与准标识符的判定逻辑、风险等级划分,以及如何构建一份可执行的识别清单。
一、两类标识符的本质区别
直接标识符(Direct Identifier)是指能够单独、直接指向某一个具体自然人的字段。它的特点是"一对一":一个取值对应一个人,无需借助任何其他信息即可完成身份锁定。姓名、身份证号、住院号、门诊病历号、手机号、医保卡号、指纹或人脸等生物特征,都属于直接标识符。在合规实践中,直接标识符通常要求删除或不可逆替换,而不是简单遮蔽。
准标识符(Quasi-Identifier)是指单独看不能唯一确定个体,但多个准标识符组合后可以高概率锁定个体的字段。出生日期、性别、邮编、就诊时间、民族、职业、婚姻状况等是典型代表。准标识符的风险来自"组合效应":例如某三甲医院某科室某日仅有一名85岁女性患者,那么"85岁+女性+该科室+该日"这一组合实际上已等价于直接标识符。
二、临床常见字段的分类与风险等级
下表给出临床研究数据集中高频字段的分类建议与风险等级。风险等级采用高、中、低三档:高风险字段一旦泄露即可直接定位个体;中风险字段在特定组合下可定位;低风险字段单独泄露的定位能力弱,但仍需纳入组合评估。
| 字段 | 类型 | 风险等级 | 处理建议 |
|---|---|---|---|
| 姓名 | 直接标识符 | 高 | 删除或替换为研究编号 |
| 身份证号 | 直接标识符 | 高 | 删除;如需保留地区/年龄信息,仅提取前6位或出生年份 |
| 病历号/住院号 | 直接标识符 | 高 | 替换为映射表管理的伪随机研究ID |
| 手机号/医保卡号 | 直接标识符 | 高 | 删除 |
| 出生日期(精确到日) | 准标识符 | 高 | 泛化为出生年份或年龄段 |
| 就诊时间(精确到分/秒) | 准标识符 | 高 | 泛化为日期或周,或做时间偏移 |
| 邮编(完整6位) | 准标识符 | 中 | 截断为前3位或映射为区域码 |
| 性别 | 准标识符 | 低 | 保留,但需参与组合评估 |
| 年龄 | 准标识符 | 低 | 保留;高龄段(如≥89岁)建议合并 |
| 民族、职业、婚姻状况 | 准标识符 | 低 | 保留或粗分类 |
需要特别说明的是,风险等级不是字段的固有属性,而是"字段+数据集"的属性。在小样本、罕见病或单一中心研究中,邮编、民族等低风险字段的组合风险会显著上升。因此识别清单必须记录评估所依据的数据集规模与场景。
三、识别清单的构建方法
构建识别清单不是简单罗列字段名,而是一个可复现的判定过程。建议按以下四步执行:
- 字段清点:从原始数据字典、CRF表单、数据库表结构中提取全部字段,包括看似无关的备注、自由文本、影像文件名等。自由文本常隐藏姓名和日期,是漏检高发区。
- 单字段判定:对每个字段回答"能否单独唯一指向个体"。能则标记为直接标识符,进入删除/替换流程。
- 组合评估:对剩余字段,选取出生日期、性别、邮编、就诊时间等强准标识符,计算其在数据集中的组合唯一率。若某组合能唯一命中超过阈值(如5%)的记录,则该组合需整体泛化。
- 登记与复核:将字段名、类型、风险等级、处理方式、评估依据写入清单,由数据管理员与伦理/合规人员双人复核。
组合唯一率可用如下方式估算:对选定准标识符集合,统计每个取值组合出现的记录数,唯一组合数除以总记录数即为唯一率。示例:某数据集1000条记录,按"出生日期+性别+邮编"分组后得到120个唯一组合,则唯一率约为12%,超过5%阈值,说明该组合需要进一步泛化(如出生日期改为出生年份、邮编截断为前3位)。
# 组合唯一率估算示例(伪代码)
qi = ["birth_date", "gender", "zipcode"]
groups = df.groupby(qi).size()
unique_ratio = (groups == 1).sum() / len(df)
# 若 unique_ratio > 0.05,则对 qi 中字段做泛化后重新评估
四、识别清单示例
下表是一份可直接参考的识别清单片段,字段与判定依据均来自前述分析。实际使用时,应根据本研究的数据字典逐字段填写,并保留评估日期与复核人签名。
| 序号 | 字段名 | 类型 | 风险等级 | 判定依据 | 处理方式 |
|---|---|---|---|---|---|
| 1 | patient_name | 直接标识符 | 高 | 唯一指向个体 | 删除 |
| 2 | id_card | 直接标识符 | 高 | 唯一指向个体 | 删除,仅保留出生年份 |
| 3 | mrn | 直接标识符 | 高 | 院内唯一 | 替换为研究ID |
| 4 | birth_date | 准标识符 | 高 | 与性别、邮编组合唯一率12% | 泛化为出生年份 |
| 5 | visit_time | 准标识符 | 高 | 精确到分钟,可缩小至单人 | 泛化为日期 |
| 6 | zipcode | 准标识符 | 中 | 6位邮编覆盖范围小 | 截断为前3位 |
| 7 | gender | 准标识符 | 低 | 单独无定位能力 | 保留 |
| 8 | age | 准标识符 | 低 | 单独无定位能力 | 保留,≥89岁合并 |
五、识别过程中的常见误区
第一,把"已脱敏"等同于"已删除姓名"。实际上,病历号、精确就诊时间、自由文本中的日期同样具有强定位能力。第二,忽视自由文本字段。病程记录、影像报告、备注中常出现姓名、床号、具体日期,需单独做文本扫描。第三,只按字段名分类而不看取值粒度。例如"年龄"若以出生日期形式存储,其风险等级应从低升为高。第四,忽略跨数据集链接风险。本研究数据若与公开人口登记数据按邮编和出生日期链接,准标识符的再识别能力会大幅增强。
综上,直接标识符与准标识符的识别,核心在于"单字段唯一性判定"与"多字段组合唯一率评估"两个动作。前者决定哪些字段必须删除或替换,后者决定哪些字段需要泛化以及泛化到什么粒度。把这两个动作固化为清单和复核流程,才能让后续的匿名化处理有据可依、可审计、可复现。