信息速览

NHIS-NHID — 韩国全民健保理赔与健康筛查数据库 AI-Ready Wikipedia
INFOBOX
| 数据集名称 | NHIS-NHID(National Health Information Database) |
| 英文全称 | National Health Information Database of the National Health Insurance Service |
| 别名/简称 | NHID、NHIS-NHID、韩国国民健康保险数据库 |
| 疾病分类 | 全疾病谱(ICD-11:BA00 原发性高血压 / 5A11 2 型糖尿病 / BA41 急性心肌梗死 / 8B11 脑梗死等,详见 §2) |
| SNOMED CT | 38341003 Hypertensive disorder / 44054006 Diabetes mellitus type 2 / 22298006 Myocardial infarction / 422504002 Cerebral infarction(详见 §2.1b) |
| 数据模态 | 结构化 EHR(理赔账单)、健康筛查(问卷+体格测量+血液检验)、行政登记(资格/收入/死亡) |
| AI 任务类型 | 疾病风险预测、死亡预测、表型识别(phenotyping)、药物利用与安全研究、卫生服务研究、生存分析、健康筛查指标建模 |
| 样本总数 | 约 5,200 万参保人(理赔库约覆盖 98% 人口);抽样队列约 2 万-100 万人 |
| 数据大小 | 按申请子库与时间窗计费交付(抽样库按使用天数计费,导出 USB ₩10,000/GB,详见 §6.2) |
| 数据格式 | 结构化关系表(资格库 / 医疗利用库 T20-T60 / 体检库 / 长期护理保险库 / 医疗机构库) |
| 许可证 | NHIS 数据提供许可(申请审核制,非标准开源许可证) |
| 访问级别 | 申请审核(需 IRB 批准 + NHIS 数据提供审查委员会通过) |
| DUO 标签 | IRB, NPUNCU, PUB(按官方审查制度类比映射,以官方协议为准) |
| 语言 | 韩文(门户与文档)、数据值为编码与数值 |
| 首发日期 | 2012(NHID 整合构建)/ 2016-10-27(IJE 数据资源论文线上首发) |
| 最后更新 | 持续滚动更新(2018-2019 体检变量扩至 108 项;截至 2026-09) |
| 发布机构 | 韩国国民健康保险公团(National Health Insurance Service, NHIS) |
| 官方主页 | https://nhiss.nhis.or.kr/ |
| 下载地址 | https://nhiss.nhis.or.kr/bd/ay/bdaya001iv.do |
| DOI | 10.1093/ije/dyw253(数据资源简介论文) |
| 引用次数 | 1,000+(索引数据库合计)/ 670+(Semantic Scholar,截至 2026-09) |
| AI 就绪度评分 | ⭐⭐⭐⭐(4/5)— 全民覆盖、纵向结构、字段文档完善;扣分项:无官方划分与预处理脚本、定制库仅限指定场所访问、理赔编码需二次加工 |
| 页面状态 | published |
§0 E-E-A-T 信任声明与免责声明
医学审核者:千方病案医学编辑部交叉审核:§2 医学背景(KCD 与 ICD-11/SNOMED CT 映射、健康筛查项目与临床任务定义、金标准描述)、§7 偏倚分析。
数据工程审核者:千方病案医学编辑部交叉审核:§4 DAIMS 数据字典(五大子库连接键、T20-T60 理赔表结构)、§5 数据划分策略、§6 预处理 Pipeline 和坑点。
审核日期:2026-09-05
审核方式:交叉审核
利益冲突声明:千方病案医数集与韩国国民健康保险公团(NHIS)无任何商业利益关联。本页面不销售 NHIS-NHID 数据集本身,仅提供 AI 就绪指南与学术信息服务。编辑者未接受 NHIS 或任何关联机构的任何形式资助。
医疗免责声明:本页面提供的医学信息仅供研究和教育目的,不构成医疗建议、诊断或治疗方案。数据集的医学描述基于公开发表的文献,未经逐一临床验证。任何基于该数据集训练的 AI 模型在应用于临床决策前,必须经过独立的临床验证和监管审批。
技术免责声明:本页面的代码示例、预处理建议和基准性能数据基于公开资料整理,不保证在特定环境下的准确性和适用性。使用者应自行验证代码安全性和数据预处理流程的正确性。千方病案医数集不对因使用本页面信息而导致的任何直接或间接损失承担责任。
数据使用合规:使用本页面描述的数据集前,请务必阅读并遵守数据集原始许可协议。NHIS-NHID 要求用户获得所在机构 IRB 批准并经 NHIS 数据提供审查委员会审核后方可获取数据。DUO 标签仅供参考,具体使用限制以数据集官方协议为准。
§1 数据集概览
§1.0 📌 30 秒速览
这是什么? NHIS-NHID(National Health Information Database)是韩国国民健康保险公团(NHIS)于 2012 年整合既有系统构建的公开研究数据库,覆盖超过 5,000 万全人口。韩国实行单一支付方全民健保,几乎所有韩国人生病就医产生的账单、处方与体检结果都会汇入这套系统——它相当于一个国家层面的"全民医疗账本",同时附带了每次体检的生活方式问卷与血检指标。
为什么重要? 大多数临床数据库只记录某几家医院的患者,而 NHID 记录的是一个人在整个国家医保体系内的全部就医轨迹:从社区诊所到三级医院,从开药到手术,再到两年一次的免费健康筛查。研究者可以借此回答"某个药长期吃安全吗""某项指标异常的人十年后会怎样"这类需要全人群、长随访的问题,而不受单家医院患者来源的限制。其数据资源简介论文已被引用约 1,000+ 次(截至 2026-09)。
我能用它做什么? 你可以构建疾病风险预测模型(用体检指标预测心血管事件)、做药物安全性研究(理赔+处方回顾长达十余年)、估计疾病的全国发生率、评估卫生政策效果。但要注意:它本质是"付账数据"而非"科研标注数据",诊断码为理赔而写,直接当金标准标签会踩坑——§6.5 的八个坑点就是为此准备的。
§1.1 摘要
NHID 由韩国国民健康保险公团(NHIS)构建维护。NHIS 作为单一支付方,依据医疗机构提交的账单付费;2012 年,NHIS 将既有系统中的诊疗记录、健康体检记录与投保资格数据整合为 NHID,并在 2016 年 10 月 27 日以数据资源论文形式向国际研究界系统介绍(Seong SC et al., IJE 2017)。数据库由五个子库构成:资格库(社保收入贡献、人口学变量、死亡日期)、国民健康筛查库(生活方式问卷与生物临床变量)、医疗利用库(门急诊/住院记录与处方明细)、长期护理保险库(日常生活活动能力与服务等级)与医疗机构库(机构类型/人力/设备)(PMC7441000)。各子库通过去标识化连接键(替代身份证号)互连,可对同一个体做跨库纵向分析(dyw253)。NHIS + 医疗救助 + 长期护理保险覆盖约 100% 韩国人口(2019 年约 5,200 万人),其中医保理赔库覆盖约 98%(PMC7441000;Korean J Fam Med)。除全人口定制库外,NHIS 还提供多个抽样研究队列(NSC 约 100 万人、HEALS 514,866 人、senior 558,147 人等)。原始简介论文覆盖期 2002-2014,现期数据已随更新延长。
获取与合规路径:数据不提供公开下载。研究者需持机构 IRB 批件与研究方案,经 Health Insurance Data Service 提交申请,由 NHIS 数据提供审查委员会审核(标准审查约 25 天,PMC11876782),并按使用天数与导出量付费(§6.2)。抽样库支持远程访问分析,定制库仅限指定场所访问——这条合规边界决定了你的工程架构,动笔建模之前先读 §6.2。
编码体系:诊断使用韩国疾病分类 KCD-6(基于 ICD-10),2016 年起升级为 KCD-7(Korean Circulation J);处方使用韩国医保药品代码(非 ATC,需自行映射,见坑点 8)。
§1.2 战略价值
维度一:全人群覆盖带来的选择偏倚免疫。单中心数据库(如 MIMIC 系列只覆盖一家医院的 ICU 患者)天然受转诊模式与收治标准影响;NHID 的理赔库覆盖约 98% 韩国 人口(Korean J Fam Med),患者无论在诊所还是大医院就诊都会留下记录。对于发病率估计、药物上市后监测这类"漏一个人就偏一分"的研究问题,全人群覆盖是结构性的优势。2014 年全民健康筛查参与率达 74.8%(每年约 1,500 万人参加,大韩医师协会志),使理赔事件可与标准化体检基线配对,构成"暴露(体检指标)→结局(理赔事件)"的完整证据链。
维度二:体检库是它区别于纯理赔库的护城河。同为韩国两大公开医保数据库,HIRA 数据不含健康筛查数据(无生活方式/实验室/人体测量变量),死亡也仅能分析院内死亡;而 NHID 的筛查库含空腹血糖、血脂、血红蛋白、肌酐、肝酶等血检与体格测量,死亡已与统计厅(Statistics Korea)关联。对 AI 建模者而言,这意味着可以做"多变量基线 → 长期结局"的经典预测任务,而不只是"就诊序列 → 就诊序列"的自监督。
维度三:抽样队列的纵向纵深。NHIS-NSC(约 100 万人,2006 年抽取)是纵向队列,可随访最长约 13 年;对照 HIRA 样本库"每年重抽、不可跨年链接"的横断面设计(Korean J Fam Med),NHID 抽样库允许真正的个体级纵向建模——这是时序模型与生存分析在韩国医保数据上的首选 substrate。
三个维度合起来回答"什么时候不该用它":如果你需要生命体征级时序、自由文本临床叙事或影像模态,NHID 无法提供(模态边界见 §3.1);如果你的研究人群不在韩国医保语境内,跨境验证通道受限(§5.5);如果你的问题依赖诊断级金标准确认,理赔标签的天花板就是你的天花板(§7.2)。用对场景,它是亚洲最强的人群级证据基础设施之一;用错场景,任何模型架构都救不回来。
§1.3 同类数据集横向对比
| 数据集 | 规模 | 模态 | 标注/标签来源 | 与 NHIS-NHID 的差异化 |
|---|---|---|---|---|
| NHIS-NHID(本页) | 约 5,200 万全人口(理赔约 98%);抽样队列 2 万-100 万人 | 理赔账单 + 体检(问卷/体格/血检)+ 死亡登记 | 理赔诊断(KCD-6/7)+ 筛查指标 + 统计厅死因 | 全民覆盖 + 标准化体检基线 + 抽样纵向队列,可随访最长约 13 年 |
| HIRA-NPS(韩国医保审查评价院) | 按就诊患者年重抽约 3% | 理赔账单(无筛查) | 理赔诊断;死亡仅院内 | 每年重抽、不可跨年链接;无 BND 出生死亡表与体检表 |
| MIMIC-IV(美国) | 单体系 ICU 患者 | 监护仪时序 + 检验 + 临床文本 | ICU 临床记录 | 危重症深度远超 NHID,但人群窄、无全人群代表性 |
| UK Biobank(英国) | 前瞻性招募人群队列 | 影像/组学/问卷/住院链接 | 前瞻性随访 | 变量深度高,但为志愿招募队列(非全民行政数据) |
§1.4 版本时间轴
| 时间 | 事件 | 来源 |
|---|---|---|
| 2002 | NHIS-senior 老年队列抽样框(2002 年 60 岁以上 10% 简单随机,随访至 2015);HEALS 基线(2002-2003 体检参与者 10% 抽取) | PMC6615810;ScienceOpen |
| 2006 | NHIS-NSC 国民样本队列抽取(总人口 48,222,537 中约 2%,约 100 万人) | PMC9353560 |
| 2012 | NHID 整合构建(诊疗 + 体检 + 资格数据) | dyw253 |
| 2016-10-27 | IJE 数据资源论文线上首发(覆盖期 2002-2014) | dyw253 |
| 2016 起 | 诊断编码由 KCD-6 升级为 KCD-7 | Korean Circulation J |
| 2017 | IJE 46(3):799-800 正式刊出 | dyw253 |
| 2018-2019 | 体检库变量扩至 108 项(2002-2008 为 51 项、2009-2017 为 57 项) | PMC9353560 |
| 2020 | 全民健康筛查参与率降至 67.8%(受新冠疫情影响;2014 年为 74.8%) | e-dmj |
| 持续 | 退休女性队列与婴幼儿体检队列已停更;其余库滚动更新 | PMC11876782 |
§1.5 典型应用场景
- 心血管风险预测:以 HEALS 队列 2002-2003 体检基线(血压、血脂、血糖)预测随后十余年心梗/卒中/死亡,是 NHID 最经典的建模范式(dyw253 应用领域:心血管、高血压、糖尿病)。基线-结局时间关系清晰,适合作为新人第一个完整项目。
- 药物利用与安全研究:T60 处方明细(药物代码、给药天数、日剂量)支持药物暴露量化与结局关联,应用领域覆盖传染病与癌症用药(dyw253)。处方窗与结局窗的切割方式决定研究的可信度上限。
- 疾病发生率与患病率全国估计:资格库全人口分母 + 理赔事件分子;诊断准确性经次诊与处方联合提升(dyw253)。定制库路径适合需要精确全国分母的公共卫生问题。
- 健康行为与结局关联:筛查问卷(吸烟/饮酒/运动)与体检人体测量支持肥胖等暴露的队列分析(dyw253)。行为暴露与理赔结局同库同键,免去多库拼合的键值对齐成本。
- 卫生服务与政策评估:医疗机构库(类型/人力/设备)+ 医疗利用库费用字段,支持分级诊疗、伤害与卫生利用研究(dyw253;PMC7441000)。政策改革(如筛查项目 51→57→108 项扩容)可作为天然实验的设计锚点。
§2 医学背景
§2.1 ICD-11 编码映射表
NHID 的诊断使用韩国疾病分类 KCD(基于 ICD-10 改造),2016 年起使用 KCD-7(Korean Circulation J)。下表给出高频研究病种的 ICD-10/KCD → ICD-11 对照(编码映射供跨库检索使用,实际分析以 KCD 码为准):
| 病种(中文) | KCD/ICD-10 码 | ICD-11 码 | ICD-11 名称(参考) |
|---|---|---|---|
| 原发性高血压 | I10 | BA00 | Essential hypertension |
| 2 型糖尿病 | E11 | 5A11 | Type 2 diabetes mellitus |
| 急性心肌梗死 | I21 | BA41 | Acute myocardial infarction |
| 脑梗死 | I63 | 8B11 | Cerebral infarction |
| 慢性阻塞性肺疾病 | J44 | CA22 | Chronic obstructive pulmonary disease |
| 慢性肾脏病 | N18 | GB61 | Chronic kidney disease |
| 胃恶性肿瘤 | C16 | 2B72 | Malignant neoplasm of stomach |
| 肺恶性肿瘤 | C34 | 2C25 | Malignant neoplasm of trachea, bronchus or lung |
§2.1b SNOMED CT 映射表
| 标签 | ICD-11 | SNOMED CT 码 | 术语 |
|---|---|---|---|
| 高血压 | BA00 | 38341003 | Hypertensive disorder (disorder) |
| 2 型糖尿病 | 5A11 | 44054006 | Diabetes mellitus type 2 (disorder) |
| 心肌梗死 | BA41 | 22298006 | Myocardial infarction (disorder) |
| 脑梗死 | 8B11 | 422504002 | Cerebral infarction (disorder) |
| 慢性阻塞性肺疾病 | CA22 | 13645005 | Chronic obstructive lung disease (disorder) |
| 慢性肾脏病 | GB61 | 433144002 | Chronic kidney disease (disorder) |
注:以上映射为本 Wiki 提供的跨术语系统检索参考;NHID 原生只携带 KCD 码,SNOMED/ICD-11 映射需研究者自行维护映射表并做版本核对。
映射使用的三个注意事项:① KCD 码与 ICD-10 同构但细节存在韩国本地化调整,逐码核对后再进映射表;② 映射表应作为研究产物随论文发布(版本化),他人才能精确复现你的表型;③ 跨术语系统检索(如 SNOMED 扩展集)适合定义纳入标准,最终数据提取仍以 KCD 原码执行,避免两跳映射的误差叠加。
§2.2 疾病与研究背景简介
NHID 是全疾病谱数据库,无单一"目标疾病"。其简介论文列出的成熟应用领域包括:传染病、癌症、心血管疾病、高血压、糖尿病、伤害,以及吸烟/饮酒/肥胖等健康行为暴露(dyw253)。对 AI 建模者最有价值的是"筛查指标 → 远期结局"这一结构:
- 暴露侧(体检库):问卷(吸烟、饮酒、运动、既往史)+ 体格测量(血压、BMI 等)+ 血液检验(空腹血糖、总胆固醇/甘油三酯/HDL-C/LDL-C、血红蛋白、肌酐、AST、ALT、GGT)。
- 结局侧(医疗利用库):门急诊/住院的 KCD 诊断(主诊/次诊/附加/排除,T40)、手术与住院天数(T20)、处方明细(T60)。
- 终点(资格库):死亡日期(与统计厅关联,死因准确率约 92%)。
流行病学层面需记住三个数字:全民健康筛查 2014 年参与率 74.8%、2020 年 67.8%(新冠影响)、每年约 1,500 万人参加(e-dmj)——它们决定了你的"体检基线可用样本量"的上限与年代间可比性。
已发表的应用领域图谱(dyw253 归纳):
| 研究领域 | NHID 中的典型设计 | 关键数据要素 |
|---|---|---|
| 传染病 | 感染诊断理赔序列 + 处方暴露 | T40 感染码、T60 抗微生物药 |
| 癌症 | 癌症登记式表型 + 手术/住院轨迹 | T40 C 段码、T20 手术标记 |
| 心血管疾病 | 体检基线 → 事件终点 | 血压/血脂/血糖 + T40 I 段码 |
| 高血压 | 主诊+次诊+降压药联合定义 | T40 I10 段、T60 降压药 |
| 糖尿病 | 表型 + 并发症轨迹 | T40 E11 段、体检血糖 |
| 伤害 | 外因诊断与就医类型分析 | T40 S/T 段码、T20 住院路径 |
| 吸烟/饮酒/肥胖 | 行为暴露与远期结局关联 | 问卷 + 人体测量 + 理赔结局 |
§2.3 临床任务定义
| 任务类型 | NHID 中的定义方式 | 输入 → 输出 |
|---|---|---|
| 筛查(代谢异常识别) | 体检库指标定义代谢综合征成分;血检阈值 | 问卷+体格 → 血检异常风险 |
| 诊断(理赔表型识别) | T40 主诊 + 附加诊断 + T60 用药联合定义疾病表型 | 就诊序列 → 表型标签 |
| 分级(长期照护等级) | 长期护理保险库的日常生活活动能力(ADL)与服务等级 | 功能状态变量 → 等级预测 |
| 预后(死亡/事件预测) | 资格库死亡日期;T20 住院/手术事件 | 体检基线 + 既往理赔 → 生存终点 |
| 药物安全(暴露-结局) | T60 暴露窗定义 + T20/T40 结局事件 | 处方时序 → 不良结局风险 |
四类任务的共同前置是表型定义(§2.6):在 NHID 上,"任务定义"与"标签定义"是同一件事——你定义表型算法的方式直接决定标签质量、正例数量与可比较性。建议把表型定义写成独立版本化文件(phecode 式管理),在研究方案中先行注册,再开始任何建模工作。
§2.4 患者人群构成
| 维度 | 全人口理赔库/定制库 | NHIS-NSC 样本队列 | NHIS-HEALS | NHIS-senior |
|---|---|---|---|---|
| 来源 | NHIS 单一支付方理赔 + 体检 + 资格 | 2006 年分层随机抽样 | 2002-2003 体检参与者 10% 随机 | 2002 年 60 岁以上 10% 简单随机 |
| 规模 | 约 5,200 万人(理赔约 98%) | 约 100 万人(约 2%,总人口 48,222,537) | 514,866 人 | 558,147 人 |
| 年龄 | 全年龄 | 全年龄(5 岁龄组分层) | 以成年体检参与者为主 | ≥60 岁 |
| 性别 | 男/女(2 层) | 男/女(2 层) | 男/女 | 男/女 |
| 种族/民族 | 未单列(以韩国人群为主) | 未单列 | 未单列 | 未单列 |
| 就医类型 | 全部医保就医(门急诊/住院/处方) | 全部医保就医(纵向随访最长约 13 年) | 体检基线 + 纵向随访至 2013 | 纵向随访至 2015 |
另有两个专项队列:NHIS-FEM 在职女性队列约 0.18 百万人、NHIS-INCHS 婴幼儿筛查队列约 0.08 百万人(Korean J Fam Med);退休女性队列与婴幼儿体检队列已停更。
人群构成的两点提示:① "未单列种族"意味着跨人群外推必须依赖明确的机制论证而非统计校正——本库的结论天然属于韩国医保语境;② 各队列的年龄结构差异极大(senior 全部 ≥60 岁,INCHS 为婴幼儿),跨队列比较时先画年龄-性别金字塔对齐人群结构,再谈指标差异。
§2.5 临床与科研价值
- 发病率/患病率的全国分母:理赔库覆盖约 98% 人口,配合次诊与处方可提升疾病识别准确性(dyw253)。
- 暴露-结局证据链:全人群只有 NHID 同时具备标准化体检暴露与全就医轨迹结局(HIRA 无筛查数据,PMC7441000)。
- 政策反事实评估:全民覆盖意味着政策改革(如筛查项目扩容 51→57→108 项)对全体人群"实施",天然支持前后对照设计。
- 公平性研究:收入以社保贡献分位入库,可按社会经济梯度评估医疗利用与结局差异。
价值判断的三条经验法则:① 研究问题若依赖"全人群分母",NHID 优于任何单中心库;② 若依赖"深度临床细节"(生命体征、检验随时序),NHID 弱于 EHR 库;③ 若依赖"行为-结局因果链",NHID 的体检+理赔组合在亚洲医保数据中稀缺性最高。选库前先回答:我的问题缺的是广度、深度还是时间?
§2.6 金标准与结局判定策略
| 要素 | 内容 |
|---|---|
| 结局划分 | 无官方"金标准标签";通行做法为多层判定:主诊(T40 主诊断码)→ 加强(次诊 + 特征性处方)→ 排除(排除码 T40) |
| 标注方式 | 行政理赔自动编码(非研究性人工标注);研究者自行定义表型算法 |
| 标注者资质 | 临床编码由医疗机构按理赔规则填报;死因编码由统计厅(准确率约 92%,PMC7441000) |
| 性质 | 弱监督标签;对疾病发生/患病的识别"不最优",但联合次诊+处方可显著提升(dyw253) |
| 验证建议 | 关键表型应参照已发表的韩国理赔验证研究,或在自有金标准子样本上报告 PPV |
§3 数据集规格
§3.0 版本/子库抉择矩阵
NHID 不是单一下载包,而是一组按需申请的子库与队列。先选对入口,再谈建模:
| 你的需求 | 推荐入口 | 规模 | 理由 |
|---|---|---|---|
| 全人群发病率/患病率/政策评估 | 定制库(Customized DB) | 全人口(约 5,200 万;理赔约 98%) | 分母完整;但仅限指定场所访问、只提供批准变量(PMC11876782) |
| 纵向风险预测/生存分析(快速迭代) | NHIS-NSC 样本队列 | 约 100 万人(2,142 层分层随机) | 支持远程访问分析、随访最长约 13 年、含体检表与 BND 出生死亡表 |
| 体检基线 → 远期结局经典预测 | NHIS-HEALS | 514,866 人 | 2002-2003 体检 10% 抽样,随访至 2013,基线-结局结构最干净 |
| 老年病/退行性疾病 | NHIS-senior | 558,147 人 | 60 岁以上队列,随访至 2015 |
| 女性职业健康 / 婴幼儿健康 | NHIS-FEM / NHIS-INCHS | 约 0.18 / 0.08 百万人 | 专项人群;注意相关队列停更状态(PMC11876782) |
| 与韩国同行结果对标 | 明确声明所用子库与版本年份 | — | 不同子库人群与抽样框不同,混用即偏倚(§6.5 坑点 3) |
矩阵用法的最后提醒:入口选错是最贵的一类错误——定制库的变量白名单与场所限制无法事后放宽,抽样队列的人群结构无法事后补齐。申请前把研究问题、所需变量、随访窗三者写在一张纸上,逐行对照本矩阵再提交;获批准后通常不能随意追加子库,返工成本以月计。
§3.1 模态详情
- 结构化理赔账单(医疗利用库):门急诊/住院记录(诊断、住院时长、费用、服务)与处方记录(药码、处方天数、日剂量)(dyw253)。治疗表细分为 T20(specification:就诊起止、主诊/次诊、住院路径、是否手术、住院天数、医疗费用)、T30(诊疗项目分类、剂量频次、费用类型、药分类)、T40(主诊/附加/排除诊断)、T60(处方明细;HIRA 对应 T53)(PMC9353560;Korean J Fam Med)。
- 健康筛查(体检库):生活方式问卷 + 生物临床变量;血检含空腹血糖、总胆固醇、甘油三酯、HDL-C、LDL-C、血红蛋白、肌酐、AST、ALT、GGT(PMC9353560)。
- 行政登记(资格库 + 长期护理保险库 + 医疗机构库):社保收入贡献与人口学、死亡日期;ADL 与服务等级;机构类型/人力/设备(dyw253)。
医疗利用库四张治疗表的分工速查(PMC9353560;Korean J Fam Med):
| 表 | 粒度 | 关键字段族 | 建模用途 |
|---|---|---|---|
| T20(specification) | 一次就诊/住院事件 | 就诊起止日期、主诊/次诊、住院路径、是否手术、住院天数、医疗费用 | 事件轴、严重程度、费用特征 |
| T30(treatment detail) | 事件内处置明细 | 诊疗项目分类、剂量频次、费用类型、药分类 | 处置强度、资源利用 |
| T40(disease) | 事件内诊断行 | 主诊、附加诊断、排除诊断 | 表型/标签定义 |
| T60(prescription;HIRA 对应 T53) | 事件内处方行 | 药物代码、日剂量、给药天数、药费 | 暴露窗、DDD 换算 |
§3.2 按子库/队列的样本数
| 子库/队列 | 单位与规模 | 备注 |
|---|---|---|
| 定制库(全人口) | 约 5,200 万参保人;理赔库覆盖约 98% | 2019 年 NHIS+医疗救助+长期护理保险覆盖约 100% 人口(PMC7441000) |
| NHIS-NSC | 约 100 万人(2006,总人口 48,222,537 的约 2%) | 分层随机 2×17×21×3 = 2,142 层(性别/5 岁龄组/资格-贡献分位/地区)(PMC9353560) |
| NHIS-HEALS | 514,866 人 | 2002-2003 体检参与者 10%,随访至 2013(ScienceOpen) |
| NHIS-senior | 558,147 人 | 2002 年 ≥60 岁 10%,随访至 2015(PMC6615810) |
| NHIS-FEM | 约 0.18 百万人 | 在职女性(Korean J Fam Med) |
| NHIS-INCHS | 约 0.08 百万人 | 婴幼儿筛查(Korean J Fam Med) |
| 体检库(全库) | 每年约 1,500 万人参加健康筛查 | 2014 年参与率 74.8%、2020 年 67.8%(e-dmj) |
§3.3 数据格式
| 属性 | 说明 |
|---|---|
| 组织形式 | 结构化关系表:资格表、治疗表(T20/T30/T40/T60)、体检表、诊疗机构表(clinic)(PMC9353560) |
| 交付方式 | 申请批准后交付数据集文件;抽样库支持远程访问分析,定制库仅限指定场所访问且仅提供批准变量(PMC11876782) |
| 编码体系 | 诊断 KCD-6(2016 起为 KCD-7,基于 ICD-10);药物为韩国医保药品代码;诊疗项目为韩医保项目码 |
| 连接键 | 去标识化个人连接键(替代身份证号)跨子库互连(dyw253) |
§3.4 存储大小
NHIS 官方未公布统一的全库规模数字,本 Wiki 不臆造。实际体量取决于你申请的子库组合、变量清单与时间窗:抽样队列(约 2 万-100 万人 × 10+ 年)在单机内存可控范围内;全人口定制库(约 5,200 万人 × 全部理赔明细)为超大规模关系数据,仅在指定场所的分析环境内使用。可参考的间接尺度线索:数据导出按 USB ₩10,000/GB 收费(OHE Consulting 报告),表明交付以 GB 量级文件为单位。规划磁盘与内存时,按"申请变量数 × 年限 × 队列规模"自行估算并预留 3-5 倍余量。
§3.5 标注方式
NHID 的"标签"不是人工研究标注,而是行政过程自动产生的三类弱监督信号:
- 理赔诊断码:医疗机构为报销填报的 KCD 码(主诊/次诊/附加/排除),生成于付费动机,非研究协议(dyw253)。
- 体检测量值:按国家筛查协议由受训人员按标准化流程采集(问卷 + 体格 + 血检),质量由协议统一约束,但参与是自愿的(2014 年参与率 74.8%)。
- 死亡登记:统计厅死因编码,准确率约 92%。
因此本数据集的"标注质量"章节(§7.2)讨论的是表型算法的阳性预测值(PPV)策略,而非标注者一致性(Kappa)——这是它与标注型影像/文本数据集的根本差异。
三类标注信号的质量阶梯(自下而上递增):
| 层级 | 信号 | 质量 | 适用 |
|---|---|---|---|
| L1 | 单条主诊码 | 低-中(理赔动机驱动) | 粗筛、探索性分析 |
| L2 | 主诊 + 次诊(T40 联合) | 中 | 主分析定义 |
| L3 | 主诊 + 次诊 + 特征性处方/操作 | 中-高(dyw253 认可的联合提升) | 主分析与敏感性分析并报 |
| L4 | L3 + 体检实验室佐证(如血糖 + 降糖药) | 高(仅限体检覆盖人群) | 亚组确证 |
§3.6 标注者资质与一致性
理赔诊断由各医疗机构的编码/收费人员按 KCD 与报销规则填报;体检指标由全国统一协议下的筛查机构执行;死因由统计厅编码(准确率约 92%)。不存在跨标注者一致性系数;可替代的质控信号是"次诊 + 处方联合定义"的内部一致性(dyw253)与表型算法在已发表验证研究中的 PPV。
§3.7 采集周期
| 数据流 | 采集节奏 | 说明 |
|---|---|---|
| 理赔与处方 | 每次就医实时产生 | 按账单周期经付费审核入库 |
| 健康筛查 | 40 岁及以上参保人与受扶养人每两年一次免费一般筛查(PMC7441000) | 每年约 1,500 万人参加(e-dmj) |
| 资格与收入 | 按投保年度登记 | 类型与贡献分位随年度更新 |
| 长期护理等级 | 按评估周期更新 | ADL 与服务等级(dyw253) |
| 死亡关联 | 统计厅登记周期 | 死因准确率约 92%(PMC7441000) |
| 库整体 | 原始简介覆盖期 2002-2014,随更新延长(dyw253) | 申请时指定时间窗 |
§3.8 地域覆盖
韩国全国(单一支付方制度下理论全覆盖,理赔约 98%)。地区以编码区域形式提供,并在 NSC 抽样分层中作为要素之一(PMC9353560)。与其它国家二级数据的关联受隐私法规限制(dyw253)。
§3.9 设备与测量规格
体检库的体格测量与血检遵循国家筛查协议,但数据库不逐条记录测量设备型号——医疗机构库中的"设备"字段描述的是机构级设备配置(类型/人力/设备,dyw253),而非个体测量所用仪器。跨机构比较检验值时,应将机构层级差异纳入敏感性分析(DAIMS"设备记录"项因此记 ⚠️,见 §7.7)。
§3.10 深度溯源链
| 环节 | 主体 | 潜在系统性偏倚 |
|---|---|---|
| 医疗机构账单生成 | 各医疗机构 | 编码为付费服务,存在编码倾向 |
| 付费审核入库 | NHIS 单一支付方理赔系统 | 审核规则影响编码留存 |
| 三系统整合(2012) | 诊疗 + 体检 + 资格 → NHID | 整合口径产生子库年代差异 |
| 去标识化 | 替代身份证号的连接键(dyw253) | 键值唯一性假设 |
| 审查交付 | 数据提供审查委员会 | 变量白名单限制定制库可得字段 |
| 死亡关联 | 统计厅死因登记 → 资格库 | 死因准确率约 92%(PMC7441000) |
每一步都可能引入系统性偏倚:账单动机(编码倾向)、整合口径(子库年代差异)、去标识化(键值唯一性假设)、审查(变量白名单)。研究者应把这六行当作"偏倚预算表"——每选定一个研究设计,就对照盘点哪些环节的偏倚被放大、哪些被抵消。
§4 数据结构
§4.0 目录树
申请批准后交付的数据按子库组织。以下为逻辑视图(实际文件命名与切分方式以交付清单为准):
nhid_request/ # 你的申请包根目录
├── eligibility/ # 资格库:投保类型、收入贡献分位、人口学、死亡日期
│ ├── eligibility_2002.csv
│ └── ...
├── medical_utilization/ # 医疗利用库(理赔明细)
│ ├── t20_specification.csv # 就诊起止/主诊次诊/住院路径/手术/住院天数/费用
│ ├── t30_treatment_detail.csv # 诊疗项目分类/剂量频次/费用类型/药分类
│ ├── t40_disease.csv # 主诊/附加/排除诊断(KCD)
│ └── t60_prescription.csv # 药物代码/日剂量/给药天数/药费
├── screening/ # 国民健康筛查库:问卷 + 体格 + 血检
│ ├── screening_2002_2008.csv # 51 变量
│ ├── screening_2009_2017.csv # 57 变量
│ └── screening_2018_2019.csv # 108 变量
├── ltc/ # 长期护理保险库:ADL 与服务等级
├── clinic/ # 医疗机构库:类型/人力/设备
└── bnd/ # 出生-死亡表(抽样队列提供,如 NSC 的 BND)
§4.1 DAIMS 字段字典(核心逻辑字段)
下表为本 Wiki 整理的逻辑字段视图(列名在交付数据中可能为韩文缩写;语义以官方数据字典为准):
| 字段名 | 类型 | 说明 | 示例值 | AI 用途 | 观测误差 | 信息性缺失编码 | 取值范围 |
|---|---|---|---|---|---|---|---|
| person_key | TEXT | 去标识化个人连接键(替代身份证号),跨五库互连 | 去标识化伪键 | 个体级聚合与纵向链接主键 | 键值唯一性由公团维护 | 无缺失 | 全库唯一 |
| sex | INT | 性别(资格库) | 1 | 分层、公平性评估 | 登记错误罕见 | 无 | |
| birth_year | INT | 出生年份(抽样队列含更细出生信息) | 1970 | 年龄/队列调整 | 老年高端合并 | 无 | 随队列而定 |
| income_quantile | INT | 社保贡献分位(资格库) | 8 | 社会经济分层 | 受扶养人/救助单列 | 受扶养人/医疗救助专用码 | 分位编码 |
| death_date | DATE | 死亡日期(资格库,关联统计厅) | 2013-05-02 | 生存分析终点 | 死因准确率约 92% | 空 = 存活/未发生 | 2002 起 |
| kcd_code | TEXT | 诊断码(T40:主诊/附加/排除;KCD-6,2016 起 KCD-7) | I10 | 表型定义/标签 | 理赔驱动编码偏倚 | 无显式缺失码 | KCD 全表 |
| visit_start_date | DATE | 就诊开始日期(T20) | 2014-03-11 | 时序建模轴 | 门诊通常单日 | 无 | 库覆盖期内 |
| inpatient_days | INT | 住院天数(T20) | 6 | 严重程度代理变量 | — | 门诊记录为 0 | ≥ 0 |
| surgery_flag | INT | 是否手术(T20) | 1 | 操作识别 | — | — | |
| treat_item_code | TEXT | 诊疗项目码(T30,含剂量频次/费用类型) | 项目码 | 处置强度刻画 | 项目合并随年代调整 | 无 | 韩医保项目表 |
| drug_code | TEXT | 药物代码(T60;韩医保药品码,非 ATC) | 药品码 | 药物暴露/DDD 换算 | 需外接映射表 | 无 | 韩医保药品表 |
| prescription_days | INT | 给药天数(T60) | 30 | 暴露窗定义 | — | — | ≥ 1 |
| daily_dose | FLOAT | 日剂量(T60) | 500 | 剂量-反应分析 | 需按药品规格标准化 | 无 | > 0 |
| fasting_glucose | FLOAT | 空腹血糖(体检库) | 96 | 代谢暴露 | 年代间协议漂移 | 未参加筛查则无记录 | 连续值 |
| sbp / dbp | FLOAT | 收缩压/舒张压(体检库) | 128 / 80 | 心血管风险 | 单次测量误差 | 未参加筛查则无记录 | 连续值 |
§4.1b 五大子库内容速查
| 子库 | 内容 | 对 AI 建模的核心价值 |
|---|---|---|
| 资格库 | 社保收入贡献、人口学变量、死亡日期(dyw253) | 分母、社会经济协变量、生存终点 |
| 国民健康筛查库 | 生活方式问卷与生物临床变量(dyw253) | 高质量基线暴露 |
| 医疗利用库 | 门急诊/住院(诊断、住院时长、费用、服务)与处方(药码、处方天数、日剂量)(dyw253) | 事件序列、标签、暴露 |
| 长期护理保险库 | 日常生活活动能力(ADL)与服务等级(dyw253) | 功能状态结局、老年研究 |
| 医疗机构库 | 机构类型/人力/设备(dyw253) | 供给侧情境特征 |
各子库经去标识化连接键互连——这是 NHID 相对"一堆独立表"的本质优势:任何子库的组合都能回到"同一个人"的轴上。
§4.2 标签分布要点
- 结局稀有性:死亡与重大事件(心梗、卒中、癌症死亡)为低频结局,抽样队列(如 HEALS 514,866 人、随访至 2013)中正例占比低,建模需处理类别不平衡(权重/重采样/焦点损失)。
- 标签层次:同一疾病可用三级定义——仅主诊(高特异性低敏感)、主诊+次诊(折中)、主诊+次诊+处方(高敏感,dyw253 指出联合可提升准确性)。建议把"定义严格度"作为超参数报告敏感性。
- 体检标签的年份断层:51/57/108 变量三个年代区间的可用特征集不同(PMC9353560),跨年代训练/测试会引入特征集漂移。
三级表型严格度与正例量的权衡(定义方式来自 dyw253 的联合编码建议):
| 定义档位 | 构成 | 特异性 | 敏感性 | 建议用途 |
|---|---|---|---|---|
| 严格 | 仅住院主诊(或两次门诊主诊) | 高 | 低 | 主结果 |
| 标准 | 主诊 + 次诊联合 | 中 | 中 | 与严格档并报 |
| 宽松 | 标准 + 特征性处方/检验佐证 | 中-高 | 高 | 敏感性分析、筛查场景 |
三档结果同向才能支撑稳健结论;三档分歧行的本身就是论文里最有信息量的图表之一。
§4.3 关键统计
| 统计项 | 数值 | 来源 |
|---|---|---|
| 理赔库人口覆盖 | 约 98% | Korean J Fam Med |
| 制度覆盖(NHIS+救助+长护) | 约 100%(2019 年约 5,200 万人) | PMC7441000 |
| NSC 抽样率 | 约 2%(2006 年总人口 48,222,537) | PMC9353560 |
| 健康筛查参与率 | 2014 年 74.8%;2020 年 67.8% | e-dmj |
| 年度筛查人数 | 约 1,500 万人 | e-dmj |
| 死因编码准确率 | 约 92% | PMC7441000 |
| 标准审查周期 | 约 25 天 | PMC11876782 |
读表提醒:以上统计全部来自同行评审文献或官方口径,不含本 Wiki 的推断值;引用时注明各自行内来源。样本量规划的经验路径:先按目标效应量反推所需事件数,再由事件率(如年死亡率)与随访年限反推所需人数,最后对照 §3.2 选队列——顺序反了(先选队列再问"能做什么")会导致功效不足或过度申请变量。
§4.4 数据层级
NHID 的层级是"人 → 就医事件 → 明细行"的三层结构,与传统影像数据集的"患者 → 检查 → 序列 → 切片"不同:
person(person_key 唯一)
└── 医疗利用记录(T20 就诊事件:一次门急诊/住院)
├── T30 明细行:诊疗项目(检查/处置/材料/注射…)
├── T40 明细行:诊断码(主诊/附加/排除)
└── T60 明细行:处方药品(药码/日剂量/天数)
└── 体检记录(按筛查年份,每两年至多一次)
└── 资格记录(按年度:类型/收入分位/死亡)
└── 长期护理记录(等级评估)
一个 HEALS 队列个体在 2002-2013 间可产生数千条明细行;聚合粒度的选择(人/年/就诊)直接决定模型的信息带宽与泄漏面。
层级选择的工程含义:
| 聚合粒度 | 典型样本量级 | 信息量 | 泄漏面 | 适用任务 |
|---|---|---|---|---|
| 人 | 等于队列人数 | 低(静态画像) | 最小 | 横断面风险分层 |
| 人-年 | 人数 × 年限 | 中 | 小 | 年度事件预测 |
| 就诊事件 | 数千行/人( decade 级随访) | 高 | 大(需按人分组) | 就诊序列建模 |
| 明细行 | 事件 × 明细数 | 最高 | 最大 | 表型定义、自监督预训练 |
§4.5 缺失值与信息性缺失
| 缺失类型 | 机制 | 处理要点 |
|---|---|---|
| 体检变量整行缺失 | 未参加当年筛查(自愿参与) | 不可当随机缺失填补;参与与否本身携带健康素养信息(参与率 74.8%,e-dmj) |
| 体检变量年代断层 | 51→57→108 变量扩容(PMC9353560) | 新变量在旧年代为结构性缺失;跨年代模型须按"变量交集"或年代分层建模 |
| 处方/诊断无记录 | 未就医 ≠ 无病 | 理赔数据的"零"是"未发生保险事件",不是"健康";建模时区分无记录与阴性 |
| 收入分位特殊码 | 受扶养人/医疗救助无缴费分位 | 保留为类别而非数值插补 |
| 死亡字段空 | 存活或随访未到期 | 生存分析用删失处理,勿当二元分类的"阴性"一刀切 |
| KCD 版本切换空窗 | 2016 年 KCD-6 → KCD-7(Korean Circulation J) | 跨版本编码映射前勿直接拼接诊断序列 |
| 抽样队列停更 | 退休女性队列与婴幼儿体检队列已停更(PMC11876782) | 停更队列的时间窗止于公告时点,勿外推 |
信息性缺失的总原则:在 NHID 里,"缺失"几乎从来不是随机的——没参加筛查的人、没就医的年份、没开药的月份都携带健康状态与就医行为的信息。把缺失当噪声填补,等于把信号当噪声扔掉。
§5 划分与使用建议
§5.1 官方划分
无。NHIS 提供原始研究库,不提供机器学习意义上的 train/val/test 划分;所有划分由研究者自行构建(DAIMS"划分建议"项记 ⚠️)。
§5.2 社区惯例与推荐划分
- 个体级随机划分:按 person_key 分组划分(GroupShuffleSplit / GroupKFold),确保同一人的所有理赔/体检记录只出现在一侧——这是理赔数据的第一纪律(坑点 4)。
- 时间外推划分:训练用早期年份、测试用晚期年份(如 KCD-6 时代训练、KCD-7 时代测试),评估跨编码版本泛化(2016 年 KCD-6 → KCD-7,Korean Circulation J)。
- 队列间外推:HEALS 训练 → senior 或 NSC 测试,检验跨年龄结构泛化。
- 抽样设计权重:NSC 为 2,142 层分层随机样本,评估全国指标时应使用抽样权重并按层聚类标准误(PMC9353560)。
§5.3 泄漏风险清单
- 个体泄漏:同一人多次就诊跨划分(最高危,见坑点 4)。
- 时间泄漏:用结局后产生的变量(如结局就诊之后的处方)预测该结局;必须冻结"基线时点",只用基线前信息。
- 标签定义泄漏:表型定义若包含"特征性处方",则处方特征不能再作为预测特征进入模型。
- 抽样泄漏:队列成员本身与健康状况相关(HEALS 来自体检参与者,参与与健康素养相关),跨队列泛化评估时把"队列身份"作为协变量审视。
§5.4 交叉验证建议
外层 GroupKFold(按 person_key)+ 内层时间分割(在训练年份内再做早/晚切分)调参;报告折间方差;分层键建议用"结局 × 性别 × 年龄段"复合分层。
§5.5 外部验证建议
- 首选韩国国内异源库:HIRA-NPS(人群按就诊患者年重抽、无筛查变量)——在 HIRA 上验证可暴露"依赖体检特征"的模型的脆弱性(PMC11876784)。
- 跨国验证:受隐私限制,NHID 无法与其他国家二级数据自由关联(dyw253);可行路径是导出模型在对方环境重训练/重评估,或使用公开汇总数据做生态学对照。
§5.6 划分工作示例
from sklearn.model_selection import GroupShuffleSplit
import pandas as pd
# 个体级划分 + 年代标注(KCD-6/KCD-7 断点由编码版本决定)
persons = cohort[["person_key", "death_in_horizon"]].drop_duplicates()
gss = GroupShuffleSplit(n_splits=1, test_size=0.2, random_state=42)
train_idx, test_idx = next(gss.split(persons, groups=persons["person_key"]))
train_p = set(persons.iloc[train_idx]["person_key"])
test_p = set(persons.iloc[test_idx]["person_key"])
events = t20.assign( # 就诊事件打上个体归属与年代标签
split=lambda d: d["person_key"].map(
lambda p: "train" if p in train_p else "test"),
era=lambda d: d["visit_start_date"].str[:4].astype(int) >= 2016,
)
# 检查泄漏:任何 person_key 不得同时出现在两侧
assert set(train_p) & set(test_p) == set()
# 检查时间外推:报告 train/test 的事件年份分布差异
print(events.groupby("split")["visit_start_date"].str[:4].describe())
§6 AI 就绪指南
§6.0 云端快速启动说明
NHID 没有公开云端镜像(不存在 BigQuery/HuggingFace 快照),一切访问都必须走官方申请通道(§6.2)。拿到数据后,你的环境应满足:数据分析机与存储物理受控(定制库要求指定场所访问,PMC11876782);Python ≥3.10 + pandas/polars/pyarrow + scikit-learn + PyTorch;建议用只读挂载保护原始交付文件,所有中间产物写入独立工作区。
开箱环境自检清单:
| 检查项 | 命令/动作 | 期望 |
|---|---|---|
| 原始交付完整性 | 对照交付清单核对文件数与行数 | 与清单一致 |
| 只读保护 | chmod -R a-w DATA_ROOT |
原始文件不可写 |
| 连接键贯通 | 三库各抽样本取 person_key 交集 | 非空且键格式一致 |
| 年代文件边界 | 抽查体检文件首尾年份 | 与 51/57/108 变量年代对应 |
| KCD 版本检查 | 抽查 2016 前后诊断码位数/取值 | 识别切换年份 |
§6.1 快速上手
代码约定:目录结构预期见 §4.0;
DATA_ROOT即申请包解压根目录,代码从当前工作目录以相对路径拼接DATA_ROOT / 子目录 / 文件;最小可用子集 = 一个抽样队列(如 HEALS)的资格表 + T20 + T40 + T60 + 一份体检表。
# ============================================================
# 目录结构预期(逻辑视图,实际文件名以交付清单为准):
# DATA_ROOT/
# ├── eligibility/ # 资格库
# ├── medical_utilization/ # t20/t30/t40/t60
# ├── screening/ # 体检库(按年代分文件)
# └── bnd/ # 出生-死亡表(抽样队列)
# DATA_ROOT 与本脚本同目录时,直接 Path("nhid_request");
# 任何其他位置请改 DATA_ROOT 为绝对路径。
# ============================================================
from pathlib import Path
import pandas as pd
DATA_ROOT = Path("nhid_request") # ← 按你的解压路径修改
# 最小可用子集:以 T20(就诊事件)为骨架,验证连接键贯通
t20 = pd.read_csv(
DATA_ROOT / "medical_utilization" / "t20_specification.csv",
dtype={"person_key": str, "claim_key": str},
low_memory=False,
)
print(t20.shape) # 行数 = 就诊事件数
print(t20.head()) # 检查就诊起止日期、手术标记、费用列名
print(t20["person_key"].is_unique) # False 是正常的:一人多条就诊
§6.2 数据获取
| 步骤 | 内容 | 要点 |
|---|---|---|
| 1 | 机构 IRB 批准 | 需伦理批准 + 研究方案(dyw253) |
| 2 | 在线申请 | 通过 Health Insurance Data Service(nhiss.nhis.or.kr)提交,申请入口 https://nhiss.nhis.or.kr/bd/ay/bdaya001iv.do(Korean J Fam Med) |
| 3 | 委员会审查 | 经数据提供审查委员会审核,标准审查约 25 天(PMC11876782) |
| 4 | 缴费 | 抽样数据按使用天数计费(7 天档 ₩25,000/天,长至月档 ₩350,000),导出费 USB ₩10,000/GB;定制数据另计价(OHE 报告) |
| 5 | 交付与使用 | 抽样库支持远程访问分析;定制库仅限指定地点访问、仅提供批准变量(PMC11876782) |
计费口径速记(OHE 报告):
| 计费项 | 口径 | 对研究计划的影响 |
|---|---|---|
| 抽样数据使用费 | 按使用天数:7 天档 ₩25,000/天,长至月档 ₩350,000 | 分析周期规划直接进预算 |
| 导出费 | USB ₩10,000/GB | 估算交付体积的间接标尺 |
| 定制数据 | 另计价 | 预算前与 NHIS 确认变量清单与年限 |
# 申请前自检清单(脚本化记录,便于复现研究方案)
checklist = {
"irb_number": None, # 机构 IRB 批件号
"cohort": None, # 目标子库/队列:custom | nsc | heals | senior ...
"tables": ["eligibility", "t20", "t30", "t40", "t60", "screening"],
"years": None, # 申请时间窗(如 2002-2013)
"budget_days": None, # 使用天数档位(影响费用)
}
assert all(v is not None for v in checklist.values()), "研究方案要素未填写完整"
§6.3 预处理全流程
三步走:表型定义 → 基线装配 → 随访窗口切割。以下示例构建"高血压表型 + 体检基线"队列(列名为逻辑名,实际列名以交付数据字典为准):
import pandas as pd
# ---- 第 1 步:KCD 表型定义(主诊 + 附加诊断 + 降压药联合)----
HTN_CODES = ("I10", "I11", "I12", "I13", "I15") # KCD 高血压段
t40 = pd.read_csv("nhid_request/medical_utilization/t40_disease.csv",
dtype=str) # claim_key, seq, kcd_code
t40["is_htn_dx"] = t40["kcd_code"].str.upper().str.startswith(HTN_CODES)
t60 = pd.read_csv("nhid_request/medical_utilization/t60_prescription.csv",
dtype={"drug_code": str})
# antihypertensive_map:由韩医保药品码映射到 ATC C02/C03/C07/C08/C09(自备映射表)
t60["is_htn_rx"] = t60["drug_code"].map(antihypertensive_map).notna()
claim_htn = set(t40.loc[t40["is_htn_dx"], "claim_key"])
claim_rx = set(t60.loc[t60["is_htn_rx"], "claim_key"])
t20 = pd.read_csv("nhid_request/medical_utilization/t20_specification.csv",
dtype={"person_key": str, "claim_key": str})
htn_person = set(t20.loc[t20["claim_key"].isin(claim_htn | claim_rx),
"person_key"]) # 联合定义:dx ∪ 处方
# ---- 第 2 步:体检基线装配(以 HEALS 2002-2003 基线为例)----
scr = pd.read_csv("nhid_request/screening/screening_2002_2008.csv",
dtype={"person_key": str}) # 51 变量年代
BASELINE_VARS = ["sbp", "dbp", "fasting_glucose", "total_cholesterol",
"hdl", "ldl", "triglyceride", "bmi", "smoking", "drinking"]
baseline = scr[scr["screening_year"].isin([2002, 2003])] \
.sort_values(["person_key", "screening_year"]) \
.groupby("person_key", as_index=False).first()[BASELINE_VARS]
# ---- 第 3 步:随访窗口切割(基线后事件与删失)----
elig = pd.read_csv("nhid_request/eligibility/eligibility_2002.csv",
dtype={"person_key": str})
cohort = baseline.merge(elig, on="person_key", how="left")
cohort["event"] = cohort["person_key"].isin(htn_person).astype(int)
# 时间泄漏防线:仅用基线日期之前的理赔记录计算既往史
t20_pre = t20[t20["visit_end_date"] < cohort["baseline_date"]]
体检特征的年代统一化(应对 51/57/108 变量断层,坑点 2 的进阶解法):
def harmonize_by_era(df, value_cols, era_col="screening_year"):
"""按年代分位化(rank-based inverse normal)合并三个体检年代。
2002-2008 / 2009-2017 / 2018-2019 三个年代区间的协议不同,
直接合并原始值会让模型学到'年份'而非'生物学'。"""
def _rint(s):
r = s.rank(pct=True, na_option="keep")
z = (r - r.mean(skipna=True)) / r.std(skipna=True)
return z
out = df.copy()
eras = [(2002, 2008), (2009, 2017), (2018, 2019)]
for lo, hi in eras:
m = out[era_col].between(lo, hi)
out.loc[m, value_cols] = out.loc[m, value_cols].apply(_rint)
return out
§6.4 PyTorch DataLoader 完整代码
以"体检基线 + 就诊事件序列 → 死亡预测"为例(列名为逻辑名):
import numpy as np
import pandas as pd
import torch
from torch.utils.data import Dataset, DataLoader
class NhidMortalityDataset(Dataset):
"""每个样本 = 一次基线装配:(体检特征向量, 就诊事件序列, 死亡标签)。
事件序列按 visit_start_date 排序,截断到基线后 follow_up_days 内。"""
def __init__(self, baseline_df, events_df, follow_up_days=365*5,
max_visits=64):
self.base = baseline_df.set_index("person_key")
self.events = events_df.sort_values("visit_start_date") \
.groupby("person_key")
self.keys = baseline_df["person_key"].tolist()
self.horizon, self.max_visits = follow_up_days, max_visits
def __len__(self):
return len(self.keys)
def __getitem__(self, i):
pid = self.keys[i]
row = self.base.loc[pid]
x = torch.tensor(np.nan_to_num(row.feature_vector, nan=0.0),
dtype=torch.float32)
ev = self.events.get_group(pid) if pid in self.events.groups else None
seq = torch.zeros(self.max_visits, 2) # (Δdays, cost) 极简编码
if ev is not None:
ev = ev.head(self.max_visits)
seq[:len(ev), 0] = torch.tensor(ev["days_since_baseline"].values,
dtype=torch.float32)
seq[:len(ev), 1] = torch.tensor(ev["cost_total"].values,
dtype=torch.float32)
y = torch.tensor(float(row["death_in_horizon"]), dtype=torch.float32)
return x, seq, y
# DataLoader 实例化:按人分组划分已在 §6.3 完成,此处无个体泄漏
train_loader = DataLoader(NhidMortalityDataset(train_base, train_events),
batch_size=256, shuffle=True, num_workers=4)
valid_loader = DataLoader(NhidMortalityDataset(valid_base, valid_events),
batch_size=512, shuffle=False)
配套的最小训练循环(类别不平衡用正类权重,勿跨个体过采样——坑点 4):
import torch.nn as nn
model = nn.Sequential( # 极简融合头:基线特征 + 事件序列均值池化
nn.LazyLinear(64), nn.ReLU(), nn.Linear(64, 1))
pos_weight = torch.tensor([ # 正类权重按训练集比例设定
(len(train_base) - train_base.death_in_horizon.sum())
/ max(train_base.death_in_horizon.sum(), 1)], dtype=torch.float32)
loss_fn = nn.BCEWithLogitsLoss(pos_weight=pos_weight)
opt = torch.optim.AdamW(model.parameters(), lr=1e-3)
for epoch in range(10):
model.train()
for x, seq, y in train_loader:
feat = torch.cat([x, seq.mean(dim=1)], dim=1)
opt.zero_grad()
loss = loss_fn(model(feat).squeeze(-1), y)
loss.backward()
opt.step()
§6.5 八个坑点
⚠️ 坑点 1:把 KCD 理赔诊断码当金标准标签(分类:标签理解)
问题:诊断码为报销目的填报,对识别疾病发生/患病"不最优";仅用主诊会系统性漏掉以次诊身份出现的目标疾病,也混入为收费而写的非确诊编码。
症状:同一病种在不同定义(仅主诊 vs 主诊+次诊 vs +处方)下队列规模差异巨大;模型在某定义下 AUROC 很高、换成严格定义后崩塌。
解决:
- 简单方法:主诊 + 次诊联合识别;目标疾病要求至少一次住院或两次门诊诊断(时间窗自定并固定)。
- 进阶方法:诊断 ∪ 特征性处方联合定义(如高血压加降压药),并对"处方特征"从预测特征中剔除以防标签泄漏(§5.3)。
- SOTA 方法:在带电子病历金标准的子样本上估计表型 PPV,校正标签噪声后再训练/评估(noise-aware 学习)。
参考:dyw253 Limitations;Korean Circulation J 使用指南。
⚠️ 坑点 2:体检变量跨年代定义漂移(51→57→108)(分类:预处理陷阱)
问题:体检库在 2002-2008 含 51 变量、2009-2017 含 57 变量、2018-2019 含 108 变量(PMC9353560);同名变量在不同年代可能改变定义、单位或测量协议。
症状:某血检指标在 2009 年前后分布"跳变";跨年代合并后模型学到"年份"而非"生物学"。
解决:
- 简单方法:只用跨年代稳定存在的变量交集。
- 进阶方法:按年代分位化(rank-based inverse normal transform)后再合并,使各年代边际分布可比。
- SOTA 方法:年代分层训练 + ComBat 式批次校正,并把年代作为敏感性分析维度报告。
参考:PMC9353560 变量年代表;e-dmj 综述。
⚠️ 坑点 3:多个抽样队列与定制库混用(分类:偏倚陷阱)
问题:NSC(约 100 万人,2006 分层随机)、HEALS(514,866,2002-2003 体检参与者 10%)、senior(558,147,2002 年 ≥60 岁 10%)抽样框与人群结构完全不同(§3.2);定制库则是全人口。把它们当同一总体拼接,会引入不可控的选择偏倚。
症状:合并后的年龄/性别分布与任何单一官方描述对不上;效应估计在"合并集"与"单一队列"间相差悬殊。
解决:
- 简单方法:单队列内完成全部建模,队列名写进论文标题。
- 进阶方法:跨队列时使用各自抽样权重,按层(性别×5 岁龄组×资格-贡献分位×地区,NSC 共 2,142 层)加权合并。
- SOTA 方法:把队列身份作为固定效应/分层因子做 meta 分析式 pooling,报告异质性 I²。
参考:PMC9353560 抽样设计;e-dmj 子库分类。
⚠️ 坑点 4:个体级数据泄漏——同一人多条理赔跨 train/test(分类:数据泄漏)
问题:理赔表以"就诊事件"为行单位,一人一年可有多条记录;随机按行划分会把同一人的病历同时放进训练与测试集。
症状:离线 AUROC 虚高(0.9+),上线后骤降;重复个体的"记忆效应"让验证指标失去意义。
解决:
- 简单方法:所有划分以 person_key 为组键(GroupShuffleSplit/GroupKFold),见 §6.1。
- 进阶方法:外层按人分组 + 内层按时间切分(训练早于验证/测试年),同时控制时间泄漏。
- SOTA 方法:交叉验证 + 时间外推双轴报告,并给出按人聚合的 bootstrap 置信区间。
参考:Korean J Fam Med 对 NHIS 纵向 vs HIRA 横断面的比较。
⚠️ 坑点 5:把 NHIS-NHID 与 HIRA-NPS 弄混(分类:工程陷阱)
问题:韩国有两个公开医保研究库,结构相似但能力不同:NHIS 样本按投保资格代表全国且纵向可随访至约 13 年,HIRA-NPS 按就诊患者年重抽约 3%、每年重抽、不可跨年链接;HIRA 无筛查数据、死亡仅院内且未与统计厅关联。
症状:复现论文时找不到体检变量或全因死亡——多半是拿错了库;表名也对不上(NHIS 处方表为 T60,HIRA 为 T53)。
解决:
- 简单方法:开工前核对表名(T60 vs T53)与有无筛查/BND 表(NHIS-NSC 含资格表、BND 与体检表,HIRA-NPS 无)。
- 进阶方法:在研究方案中显式声明数据库、子库、抽样框与时间窗,避免审稿质疑。
- SOTA 方法:利用两库互补性做敏感性分析——NHID 主分析、HIRA 交叉验证处方相关结论。
参考:PMC11876784 两库抽样差异;Korean J Fam Med。
⚠️ 坑点 6:死亡与死因口径——92% 准确率与删失处理(分类:标签理解)
问题:全因死亡(资格库死亡日期)质量高,但死因来自统计厅编码,准确率约 92%;且死亡日期与死因更新存在行政时滞。把死因特异性结局当精确标签,会引入约 8% 量级的错分。
症状:死因特异性分析的效应量被稀释(向零偏移);随访末端年份死亡率"异常下降"(登记时滞假象)。
解决:
- 简单方法:主结局用全因死亡,死因特异性结局放敏感性分析。
- 进阶方法:随访窗口右端预留登记缓冲期(如末端 1-2 年只作删失不作事件窗),并做竞争风险(Fine-Gray)处理。
- SOTA 方法:误分类敏感性分析(对死因标签施加 ±8% 错分率扰动,报告效应量稳健区间)。
参考:PMC7441000 死亡数据质量讨论。
⚠️ 坑点 7:理赔费用 ≠ 医疗成本——点数、自费与通胀(分类:预处理陷阱)
问题:费用字段(T20/T30/T60)是理赔计费口径,服务未被医保覆盖的部分(美容、未纳入医保的新药/新术)不在库内;跨年度费用未做通胀调整,直接汇总会产生结构性漂移。
症状:医疗费用趋势分析出现"政策年跳变";重患者费用被系统性低估(自费项目缺失)。
解决:
- 简单方法:把费用仅作为相对强度特征(分位数化),不做绝对成本解读。
- 进阶方法:按年度价格指数平减,并在论文中声明覆盖范围(仅医保理赔口径)。
- SOTA 方法:与官方医疗费用统计做生态学校准,估计理赔口径对总费用的覆盖率并做校正。
参考:PMC7441000 覆盖范围讨论;dyw253 费用字段定义。
⚠️ 坑点 8:T60 药品代码与剂量字段不是 ATC/DDD(分类:工程陷阱)
问题:T60 处方表携带药物代码、给药天数、日剂量,但药物代码是韩国医保药品码,需要外接映射表才能换算 ATC 与 DDD;直接把原始代码当类别变量喂给模型,代码基数巨大且新药不断进入。
症状:one-hot 后特征上十万维、稀有药码在测试集全部 unseen;DDD 换算结果与文献相差数倍(映射错行)。
解决:
- 简单方法:先用 ATC 第 2-4 层聚合暴露,避免药码级稀疏。
- 进阶方法:维护"韩医保药码 → ATC → DDD"映射表并版本化;日剂量按 (daily_dose × days) / DDD 换算累计暴露。
- SOTA 方法:药码嵌入(entity embedding)+ 暴露窗滑动聚合,映射表随数据版本一起打 tag 存档。
参考:Korean J Fam Med T60/T53 结构;dyw253 处方字段。
§6.6 数据增强(安全与危险操作)
| 操作 | 判定 | 说明 |
|---|---|---|
| 实验室值随机掩码(mask 5-10%) | ✅ 安全 | 模拟体检缺失,提升鲁棒性 |
| 就诊间隔时间抖动(±1 天内) | ✅ 安全 | 缓解日期录入粒度差异 |
| 药码 ATC 层级聚合后 dropout | ✅ 安全 | 在语义层级上做正则 |
| 直接删除 T40 诊断行 | ❌ 危险 | 诊断行参与表型定义,删除=污染标签(坑点 1) |
| 对死亡正例做朴素过采样并跨折复制个体 | ❌ 危险 | 破坏个体级划分,制造泄漏(坑点 4) |
| 跨年代混排后随机打乱年份 | ❌ 危险 | 掩盖 51/57/108 变量断层(坑点 2) |
§6.7 模型推荐
| 任务 | 推荐模型 | 理由 |
|---|---|---|
| 体检基线 → 事件预测(表格) | LightGBM / XGBoost | 表格强基线,缺失原生处理,训练快、可解释 |
| 就诊序列建模 | GRU / 时序 Transformer(RETAIN 类注意力) | T20/T60 序列结构天然适配;注意力可回溯诊断贡献 |
| 死亡/事件生存分析 | Cox-PH(含时变协变量)/ DeepSurv | 与删失机制兼容(坑点 6) |
| 表型识别(多标签) | 神经网络多标签头 + 层级 KCD 约束 | 利用 KCD 的 ICD-10 层级先验 |
| 全国估计 | 按抽样权重校准的 GLM/GEE | NSC 分层设计需设计一致估计(坑点 3) |
| 表型无监督发现 | 经典表型聚类 / 隐马尔可夫 | 利用理赔序列无标签结构做 pretraining |
| 长期护理等级预测 | 有序回归 / ordinal 神经网络 | LTCI 服务等级天然有序(dyw253) |
选型次序建议:先梯度提升树打基线 → 不足再上序列模型 → 因果问题换设计而非换模型。NHID 的样本量通常不是瓶颈,标签质量才是(坑点 1),把工时花在表型定义上比花在架构调优上回报更高。
§6.8 硬件需求
| 场景 | 配置建议 | 说明 |
|---|---|---|
| 抽样队列(约 2 万-100 万人)表格建模 | 32 GB 内存 CPU 工作站 | 单机即可完成全流程 |
| 抽样队列时序深度模型 | 单卡 24 GB GPU(如 RTX 4090 级) | 序列截断至 64-128 事件后批训练无压力 |
| 全人口定制库 | 指定场所分析环境(由 NHIS 提供) | 仅限现场访问(PMC11876782),先做聚合再考虑移动计算 |
§6.9 评估指标代码
import numpy as np
from sklearn.metrics import roc_auc_score, average_precision_score
def clustered_bootstrap_auroc(y_true, y_score, groups, n_boot=1000, seed=42):
"""按 person_key 聚类 bootstrap 的 AUROC/AUPRC 置信区间。
理赔数据必须按个体聚合重采样,否则 CI 过窄(坑点 4)。"""
rng = np.random.default_rng(seed)
df = np.column_stack([y_true, y_score]) # 与 groups 对齐
uniq = np.unique(groups)
idx_by_person = {p: np.where(groups == p)[0] for p in uniq}
aucs, aps = [], []
for _ in range(n_boot):
pick = rng.choice(uniq, size=len(uniq), replace=True)
idx = np.concatenate([idx_by_person[p] for p in pick])
yt, ys = df[idx, 0], df[idx, 1]
if len(np.unique(yt)) < 2:
continue # 该次重采样无正例,跳过
aucs.append(roc_auc_score(yt, ys))
aps.append(average_precision_score(yt, ys))
q = lambda v: (round(float(np.percentile(v, 2.5)), 4),
round(float(np.percentile(v, 97.5)), 4))
return {"auroc_95ci": q(aucs), "auprc_95ci": q(aps)}
§6.10 MLOps 笔记
| 主题 | 做法 | 锚点 |
|---|---|---|
| 版本三元组 | 每次实验记录(数据获取年月 + 申请时间窗 + KCD 版本) | KCD-6/KCD-7 于 2016 年起切换,是硬断点(Korean Circulation J) |
| 表型即代码 | 表型定义与药码映射表入库打 tag,评审可复现 | §6.3、坑点 8 |
| 漂移哨兵 | 监控年度筛查参与率与体检变量年代断层 | 74.8% → 67.8%(e-dmj) |
| 合规流水线 | 数据不出受控环境;对外只发布聚合结果与模型权重 | 定制库仅限指定场所(PMC11876782) |
| 复现包 | 交付"代码 + 表型定义 + 映射表版本",不含原始数据 | 隐私法规限制跨国关联(dyw253) |
§7 质量评估与局限性
§7.1 已知偏倚
| 偏倚类型 | 描述 | 严重程度 | 缓解措施 |
|---|---|---|---|
| 理赔编码偏倚 | 诊断码为付费目的填报,识别疾病发生/患病不最优(dyw253) | 高 | 次诊+处方联合定义;金标准子样本估计 PPV |
| 健康志愿者效应 | 筛查参与者自选(2014 年参与率 74.8%),体检人群更健康(e-dmj) | 中 | 用未参加者做阴性对照敏感性分析;工具变量讨论 |
| 抽样设计偏倚 | 队列为分层样本(NSC 2,142 层),不加权即有偏 | 中 | 设计一致估计(权重+层聚类)(PMC9353560) |
| 覆盖缺口偏倚 | 美容与未纳入医保的新药/新术不可见(PMC7441000) | 中 | 明确研究问题是否落在覆盖范围内 |
| 死因错分 | 统计厅死因准确率约 92%(PMC7441000) | 中 | 全因死亡为主结局;误分类敏感性分析 |
| 因果推断限制 | 理赔为行政目的而非研究设计(e-dmj) | 高 | 倾向得分/断点/工具变量等设计,而非裸回归 |
| 年代协议漂移 | 体检变量 51→57→108、KCD-6→KCD-7(2016 起) | 中 | 年代分层/交集建模(坑点 2) |
| 疫情期结构断裂 | 2020 年筛查参与率降至 67.8%、就医模式改变(e-dmj) | 中 | 疫情年份单列敏感性分析 |
| 编码升级断层 | 罕见病识别在版本切换年可能骤变 | 中 | 切换年前后做表型一致性核对 |
§7.2 标注质量
理赔标签的本质是"行政过程副产物":主诊/次诊结构(T40)与处方记录(T60)提供了多层验证信号,联合使用可提升疾病识别准确性。体检标签(连续测量)质量由国家筛查协议保障,但受自愿参与与年代协议变化影响(51/57/108 变量)。死亡标签分两层:死亡事件(日期)可靠,死因约 92% 准确。总体上,本库适合训练"弱监督标签 + 强设计"的研究,不适合直接输出临床级诊断标签。
可操作的质控动作清单:① 每个表型定义在正式使用前,抽样 100-200 个阳性病例做人工病历级复核(如可行);② 报告三档定义(§4.2)下的估计值区间;③ 对处方佐证的表型,检查处方时间是否落在诊断窗内,防止"事后用药"污染;④ 跟踪年度表型阳性率曲线,突变年优先怀疑编码版本或政策变化而非真实流行病学变化。
§7.3 泛化性
| 场景 | 失效风险 | 证据/机制 |
|---|---|---|
| KCD-6 时代模型 → KCD-7 年代 | 中高 | 2016 年起编码版本切换(Korean Circulation J);时间外推评估 |
| 体检基线模型 → 无体检人群(HIRA 环境) | 高 | HIRA 无筛查变量(PMC7441000);特征不可得即失效 |
| 成人队列 → 老年队列 | 中 | 年龄结构与竞争风险不同;用 senior 队列外推验证 |
| 韩国医保环境 → 其他国家医保 | 高 | 就医行为、编码习惯、覆盖范围均不同(dyw253 指出跨国关联受限) |
| 新冠疫情期 | 高 | 2020 年筛查参与率降至 67.8%,就医模式剧变(e-dmj) |
| 抽样队列 → 全人口推断 | 中 | 分层抽样需权重校正;权重错用会产生方向不定的偏移(坑点 3) |
| 定制库训练 → 抽样库部署 | 中 | 人群与变量白名单不一致(定制库仅提供批准变量,PMC11876782) |
§7.4 伦理与合规
数据为去标识化个体级数据(替代身份证号的连接键,dyw253),但收入分位、地区、死亡等仍属敏感信息:使用需机构 IRB 批准 + 数据提供审查委员会审查(标准约 25 天,PMC11876782);定制库仅限指定场所访问。与其他国家二级数据的关联受隐私法规限制,关联改革在讨论中(dyw253)。
§7.5 公平性
可评估的公平性维度:性别(抽样分层要素)、年龄段(5 岁龄组)、收入贡献分位(资格库)、地区(编码区域)。建模时应报告跨维度的性能分层(AUROC 差、校准斜率),并警惕两个机制性陷阱:低收入/受扶养人的就医门槛差异影响"无记录≠健康"假设(§4.5);老年段在体检库的覆盖依参与率而异。公平性结论必须带抽样权重才可外推至全国(坑点 3)。
def subgroup_auroc_gaps(y_true, y_score, subgroup):
"""按性别/年龄段/收入分位分层报告 AUROC 差距(公平性体检)。"""
import numpy as np
from sklearn.metrics import roc_auc_score
out = {}
for g in sorted(set(subgroup)):
m = np.asarray(subgroup) == g
yt, ys = np.asarray(y_true)[m], np.asarray(y_score)[m]
if len(np.unique(yt)) >= 2:
out[str(g)] = round(float(roc_auc_score(yt, ys)), 4)
ref = list(out.values())[0]
return {g: {"auroc": v, "gap_vs_ref": round(v - ref, 4)}
for g, v in out.items()}
§7.6 数据漂移
三个已知的结构性漂移源:体检变量扩容(51→57→108,特征空间非平稳,PMC9353560);编码版本(KCD-6→KCD-7,2016 起);参与率与就医行为的时代变化(74.8%→67.8%,新冠冲击,e-dmj)。建议以年度为单位监控特征分布与结局率,并在模型卡中声明训练时间窗。
| 哨兵指标 | 监控对象 | 触发动作 |
|---|---|---|
| 年度筛查参与率 | 样本代表性 | 参与率突变年单列敏感性分析 |
| KCD 编码分布熵 | 编码版本切换 | 切换年重训 + 表型一致性核对 |
| 体检变量缺失率 | 特征可用性 | 缺失率跳变触发特征集版本升级 |
| 年度事件率 | 结局稳定性 | 政策/疫情年谨慎外推 |
§7.7 DAIMS 数据集就绪度评估
| # | 检查项 | 状态 | 说明 |
|---|---|---|---|
| 1 | 宽格式可用(一行一个观测单元) | ✅ | 就诊事件/体检记录/资格记录各行一层级,逻辑清晰(§4.4) |
| 2 | 唯一标识符 | ✅ | 去标识化个人连接键跨五库互连(dyw253) |
| 3 | 特殊字符处理 | ✅ | 编码字段为字母数字 KCD/药品码,无自由文本脏字符 |
| 4 | 重复行处理 | ✅ | 事件型数据允许多行同键,主键设计明确(claim 级 + 行级序号) |
| 5 | 缺失值编码标准化 | ⚠️ | 体检缺失以"无记录"呈现,未参加筛查与测量缺失不可区分 |
| 6 | 标签标识清晰 | ⚠️ | 诊断为理赔编码而非研究标签,需研究者自行定义表型(坑点 1) |
| 7 | 罕见类分组建议 | ⚠️ | 罕见病与稀有药码无官方分组指引,需自行按 KCD 层级聚合 |
| 8 | 偏倚评估文档 | ✅ | 官方简介论文系统列出局限(dyw253) |
| 9 | 数据字典可用 | ✅ | 官方提供各子库字段文档与申请端说明 |
| 10 | 信息性缺失解释 | ⚠️ | "未就医"与"未筛查"的信息性缺失需研究者自行建模处理(§4.5) |
| 11 | 设备信息记录 | ⚠️ | 体检不逐条记录测量设备型号;仅机构级设备字段(§3.9) |
| 12 | 共线性检查支持 | ⚠️ | 收入分位/资格类型/救助身份高度相关,需自行诊断 |
| 13 | 编码映射表 | ⚠️ | KCD-6→KCD-7 与药码→ATC 映射需自备并版本化(坑点 2、8) |
| 14 | 时间戳规范处理 | ✅ | 就业起止/就诊起止/死亡日期为显式日期字段,粒度到日 |
| 15 | 划分建议 | ⚠️ | 无官方划分;个体级+时间外推需自行实现(§5) |
| 16 | 泄漏讨论 | ⚠️ | 官方文档不含 ML 泄漏讨论;本 Wiki §5.3 给出四类泄漏清单 |
| 17 | 标签分布信息 | ✅ | 筛查参与率、队列规模、抽样层设计均有公开统计(§4.3) |
| 18 | 测量偏倚记录 | ⚠️ | 筛查参与自选与健康志愿者效应需研究者自行处理(§7.1) |
| 19 | 外部验证建议 | ✅ | 与 HIRA 互补性有明确文献支撑(PMC11876784) |
| 20 | 版本记录 | ✅ | 子库/队列年代、体检变量年代、KCD 版本均有公开时间线(§1.4) |
| 21 | 预处理脚本 | ⚠️ | 无官方 ML 预处理脚本;社区惯例流程见 §6.3 |
| 22 | 合规要求清晰 | ✅ | IRB + 委员会审查 + 计费 + 场所限制全流程文档化(§6.2) |
| 23 | 多模态对齐 | ✅ | 同一个体的理赔/体检/资格/长护经连接键对齐(dyw253) |
| 24 | 去标识化方法已被记录 | ✅ | 替代身份证号的去标识化连接键在简介论文中说明(dyw253) |
DAIMS 评分:18.5 / 24
评分解读:良好——13 项 ✅ 集中在结构化程度、标识体系、合规流程与跨库对齐这些"国家级数据基础设施"的强项;11 项 ⚠️ 几乎全部来自"行政数据转科研数据"的固有转换成本:理赔标签、无官方划分、年代漂移与映射表缺位。
对你意味着什么:选 NHID 就是选"全人群代表性 + 纵向纵深",代价是自己补上机器学习工程的最后三公里:表型定义按"主诊+次诊+处方"三档做敏感性(坑点 1);所有划分按 person_key 分组并加时间外推(坑点 4);体检特征按年代交集或分位化合并(坑点 2);药码先映射 ATC 再进模型(坑点 8)。做完这四件事,18.5/24 的底子足以支撑可发表的全人群预测与药物流行病学研究;不做,离线指标再高也只是理赔账单的过拟合。
§7.8 外部验证矩阵
理赔数据库不存在统一排行榜,外部验证以"异源队列交叉验证"形式存在。下表只录有同行评审支撑的结构性结论(性能数值因各研究任务与定义不可比,标注为"未统一报告"):
| 外部数据集/场景 | 来源机构 | 评估任务 | 性能指标 | 相对内部变化 | 关键发现 |
|---|---|---|---|---|---|
| HIRA-NPS | 韩国医保审查评价院 | 处方相关结论交叉验证 | 未统一报告 | 因无体检变量而受限 | HIRA 按就诊患者年重抽、无筛查数据、死亡仅院内;依赖体检特征的模型无法平移 |
| NHIS-NSC ↔ NHIS-HEALS ↔ NHIS-senior | NHIS | 跨队列稳健性 | 未统一报告 | 队列年龄结构差异带来偏移 | 三队列抽样框不同(约 100 万 / 514,866 / 558,147 人),跨队列结果需按设计加权解读 |
| 统计厅死亡登记 | Statistics Korea | 结局准确性 | 死因准确率约 92% | — | 死亡链接质量上限由登记体系决定 |
§8 基准性能与生态
§8.1 排行榜与代表性研究
NHID 属全疾病谱理赔数据库,没有跨研究的统一排行榜;不同研究的事件定义、随访窗、人群与指标互不可比,数值并列会误导读者。以下按"任务类型"给出代表性研究生态(引用完整可查):
| 排名 | 研究/任务 | 关键贡献 | 年份 | 完整引用 |
|---|---|---|---|---|
| — | 数据资源简介(全库架构与质量) | 定义了 NHID 五库结构与覆盖 | 2017 | Seong SC et al., International Journal of Epidemiology 46(3):799-800. DOI 10.1093/ije/dyw253 |
| — | HEALS 队列简介 | 定义体检基线队列(514,866 人,随访至 2013) | 2018 | NHIS-HEALS Data Resource Profile |
| — | senior 队列简介 | 定义老年队列(558,147 人,随访至 2015) | 2019 | NHIS-senior Data Resource Profile |
| — | 两库比较方法论 | NHIS(资格抽样、纵向)vs HIRA(患者年重抽、横断面) | 2018 | Korean J Fam Med 比较研究 |
| — | 心血管研究使用指南 | KCD 版本与表型定义建议 | 2020 | Korean Circulation Journal(DOI 10.4070/kcj.2020.0171) |
§8.2 SOTA 总结与选型建议
在该数据集生态中,"SOTA"不体现为单一榜单分数,而体现为方法学共识:表格任务以梯度提升树为强基线;时序任务用注意力/循环结构并报告按人聚类的置信区间;全国推断必须带抽样设计;因果问题用目标试验模拟(target trial emulation)框架。选型建议:先跑 LightGBM 基线(§6.7),再投入序列模型;先报告严格表型定义(高特异),再做宽松定义敏感性(高敏感)。
判断一项 NHID 研究是否可信的五个快问:① 表型定义是否三档并报?② 划分是否按人分组?③ 全国数字是否带抽样权重?④ 处方佐证的表型是否把处方从特征中剔除?⑤ 时间窗是否避开登记缓冲期?五问全过,再谈模型分数;任何一问不过,分数本身不可信——这与"哪个模型最先进"无关,与理赔数据的结构性风险有关(坑点 1、3、4、6)。
§8.3 评测协议建议
| 协议要素 | 推荐设定 | 理由 |
|---|---|---|
| 事件定义 | 预注册三档表型(§4.2),主结果用严格档 | 可比性与稳健性 |
| 划分 | 个体级分组 + 时间外推双轴 | 泄漏与年代漂移双控制 |
| 主指标 | AUROC/AUPRC + 按人聚类 bootstrap CI | 理赔数据个体相关(§6.9) |
| 生存指标 | Harrell’s C-index + 时间依赖 AUC | 兼容删失(坑点 6) |
| 校准 | 校准曲线 + Brier 分数 | 医保决策需要绝对风险 |
| 公平性 | 性别/年龄段/收入分位分层指标 | §7.5 |
| 全国推断 | 抽样权重 + 层聚类标准误 | NSC 分层设计(坑点 3) |
执行顺序:先冻结协议(预注册)→ 再跑数据 → 每项偏离协议的改动写入偏离日志。理赔数据上"先看结果再定定义"的诱惑远大于影像数据,协议先行是对抗这种诱惑的唯一手段。
§8.4 相关数据集
| 数据集 | 机构 | 关系 | 适用场景 |
|---|---|---|---|
| HIRA-NPS | 韩国医保审查评价院 | 互补理赔库(患者年 3% 重抽,无体检/BND 表) | 处方与机构侧交叉验证;开放数据门户 opendata.hira.or.kr |
| NHIS-NSC / HEALS / senior / FEM / INCHS | NHIS | 本库的抽样队列家族 | 纵向建模与专项人群研究(§3.0) |
| MIMIC-IV | MIT LCP / BIDMC | 危重症深度参照系 | 单中心 ICU 深度分析、方法学迁移 |
| UK Biobank | UK Biobank Ltd | 前瞻性人群队列参照系 | 深度表型与影像组学;与行政理赔库互补 |
§8.5 关键论文 Top 5
- Seong SC et al., 2017, International Journal of Epidemiology 46(3):799-800. DOI 10.1093/ije/dyw253 — 数据资源简介,定义五库结构、连接键与局限。
- NHIS-HEALS Data Resource Profile — 514,866 人体检基线队列(随访至 2013)。
- NHIS-senior Data Resource Profile — 558,147 人老年队列(随访至 2015)。
- Korean J Fam Med:NHIS 与 HIRA 研究数据库比较 — T60/T53、纵向 vs 横断面、两库选型。
- Korean Circulation Journal:NHIS 数据心血管研究指南 — KCD 版本与表型定义的方法学建议。
§8.6 社区活跃度
- 数据资源简介论文索引引用约 1,000+(截至 2026-09),Semantic Scholar 记录 670+。
- 应用领域横跨传染病、癌症、心血管、高血压、糖尿病、伤害与吸烟/饮酒/肥胖研究(dyw253),是亚洲引用最密的行政理赔研究数据库之一。
- 官方维护申请门户与数据字典更新;队列停更等变更通过官方渠道公告(PMC11876782)。
- 方法学生态的三个支撑点:数据资源简介论文(引用锚点)、两库比较文献(选型依据)、专科使用指南(如表型定义建议)——三者共同构成新手文献阅读路径:先读 ①,再读 ④ 与 ⑤(§8.5),最后进入具体领域文献。
§8.7 生态快照
| 资源 | 类型 | 链接 | 状态(截至 2026-09) | 推荐理由 |
|---|---|---|---|---|
| Health Insurance Data Service | 官方申请门户 | https://nhiss.nhis.or.kr/ | 在线运行 | 唯一官方入口 |
| 数据库申请页 | 官方申请表单 | https://nhiss.nhis.or.kr/bd/ay/bdaya001iv.do | 在线运行 | 抽样库/定制库申请(Korean J Fam Med) |
| IJE 数据资源论文 | 方法学锚点 | https://doi.org/10.1093/ije/dyw253 | 开放获取 | 引用时必备 |
| HIRA 开放数据 | 互补数据库门户 | https://opendata.hira.or.kr | 在线运行 | 交叉验证与机构侧统计(Korean J Fam Med) |
| OHE Consulting 治理报告 | 第三方治理评估 | OHE 报告 PDF | 可下载 | 访问治理与计费细节 |
§9 相关资源与引用
§9.1 官方资源清单
- 官方申请门户:Health Insurance Data Service(nhiss.nhis.or.kr),需 IRB 批准与研究方案,经 NHIS 审查委员会审核(dyw253)。
- 申请表单:https://nhiss.nhis.or.kr/bd/ay/bdaya001iv.do(Korean J Fam Med)。
- 数据资源简介论文:Seong SC et al., IJE 2017。
- 队列简介三篇:HEALS(ScienceOpen)、senior(PMC6615810)、NSC 表结构(PMC9353560)。
- 方法学指南:Korean Circulation J 心血管研究指南、两库比较。
- 互补库开放数据:opendata.hira.or.kr(HIRA,Korean J Fam Med)。
- 访问治理与计费参考:OHE Consulting 治理报告。
§9.2 BibTeX 引用
@article{seong2017nhid,
title = {Data Resource Profile: The National Health Information Database
of the National Health Insurance Service in South Korea},
author = {Seong, S. C. and others},
journal = {International Journal of Epidemiology},
volume = {46},
number = {3},
pages = {799--800},
year = {2017},
doi = {10.1093/ije/dyw253}
}
@misc{nhis_portal,
title = {Health Insurance Data Service (NHIS Customized DB / Sample DB)},
author = {{National Health Insurance Service, Republic of Korea}},
howpublished= {\url{https://nhiss.nhis.or.kr/}},
note = {Accessed 2026-09}
}
§9.3 引用指南
使用 NHID 发表时,需同时引用:① 数据来源(NHIS,含申请门户);② 数据资源简介论文(Seong et al. 2017);③ 所用具体队列的简介论文(如 HEALS/senior);④ 机构 IRB 批件号。引用数表述须带检索日期与来源(如"约 1,000+,截至 2026-09")。
论文方法学部分的最低披露清单:数据库与子库名(NHIS-NHID,注明抽样队列或定制库)、申请时间窗、KCD 版本、表型定义(三档)、抽样权重使用与否、个体级划分方式、IRB 批件号。缺任何一项都会在审稿中被要求补齐——本 Wiki 的 §5、§6.3、§6.9 即按此清单设计,可直接抄进研究方案模板。
§10 AI 使用声明卡
§10.1 AI 模型列表
本页面撰写过程中使用了大语言模型(代码助手)辅助文本组织、代码示例生成与格式校验;全部事实性内容(数字、结构、流程)均取自 §10.3 所列公开文献,经编辑部人工核验。
§10.2 AI 参与范围
AI 参与:初稿撰写、代码示例(§6.1-§6.4、§6.9)、表格排版、JSON-LD 序列化。AI 不参与:事实核验(人工比对来源)、医学判断(编辑部终审)、许可与合规表述(以官方协议为准)。
§10.3 输入来源列表
- Seong SC et al., 2017, International Journal of Epidemiology 46(3):799-800. DOI 10.1093/ije/dyw253 — 数据资源简介论文。
- PMC7441000 — 韩国保险体系与医保数据库综述(覆盖、HIRA 局限、死因准确率)。
- Korean J Fam Med(kjfm.or.kr/journal/view.php?number=4509)— NHIS 与 HIRA 研究库比较、T60/T53、申请入口。
- PMC9353560 — NHID 表结构详述(T20/T30/T40/T60、体检变量年代、NSC 抽样设计)。
- Korean Circulation Journal, DOI 10.4070/kcj.2020.0171 — KCD-6/KCD-7 与 NHIS 心血管研究指南。
- 大韩医师协会志(e-dmj.org/journal/view.php?number=2687)— 筛查参与率、子库分类、理赔行政属性。
- UCL Press/ScienceOpen — NHIS-HEALS 队列简介(514,866 人)。
- PMC6615810 — NHIS-senior 队列简介(558,147 人)。
- PMC11876782 — 访问流程(委员会审查约 25 天)与队列停更公告。
- PMC11876784 — NHIS 与 HIRA 抽样机制差异。
- Journal of Integrative Medicine Korea(integrmed.org, number=102)— NSC 与 HIRA-NPS 表结构差异(BND/体检表)。
- OHE Consulting Report — 访问治理与计费(使用天数、USB 导出费)。
- Rankless(rankless.org/oa-id/A5102968895)— 简介论文索引引用量(约 1,000+)。
- Semantic Scholar(author/S.-Seong/4771761)— IJE 论文引用量(670+)。
- NHIS 官方门户(nhiss.nhis.or.kr)— 申请与数据服务入口。
§10.4 人工校验记录
| 内容模块 | 审核者 | 审核方式 | 审核状态 |
|---|---|---|---|
| frontmatter 与 INFOBOX 事实 | 千方病案医学编辑部 | 与 FACTS 清单逐条比对 | ✅ 已通过 |
| §1 概览与版本时间轴 | 千方病案医学编辑部 | 交叉比对 IJE 论文与队列简介 | ✅ 已通过 |
| §2 医学背景(ICD-11/SNOMED 映射) | 千方病案医学编辑部 | 术语系统对照核验 | ✅ 已通过 |
| §3-§4 规格与数据结构 | 千方病案医学编辑部 | 与 PMC9353560 表结构描述比对 | ✅ 已通过 |
| §5 划分策略与泄漏清单 | 千方病案医学编辑部 | 数据工程逻辑审查 | ✅ 已通过 |
| §6 代码示例与八个坑点 | 千方病案医学编辑部 | 逻辑审查 + 与官方表结构比对 | ✅ 已通过 |
| §7 质量评估与 DAIMS 评分 | 千方病案医学编辑部 | 交叉审核 | ✅ 已通过 |
| §8 引用与生态表述 | 千方病案医学编辑部 | 与原文及引用快照交叉比对 | ✅ 已验证 |
| §C JSON-LD @graph | 千方病案医学编辑部 | Schema 字段逐项校验 | ✅ 已通过 |
§10.5 AI 生成章节标注
以下章节由 AI 生成初稿并经人工审核:§1.0 30 秒速览、§3.0 版本抉择矩阵、§4.1 DAIMS 字段字典、§6.1-§6.4 与 §6.9 代码示例、§6.5 八个坑点、§7.7 DAIMS 评估表与评分、§8.7 生态快照、§C JSON-LD。
§10.6 最后人工审核
最后人工审核日期:2026-09-05(与 §0 审核日期一致)。
页面状态:published(全部内容已完成审核并发布)
§C 结构化数据(JSON-LD)
相关数据集导航
以下为站内 AI-Ready 数据集百科中与本词条共享多个主题标签的相关数据集,按相关度降序排列:
- marketscan — 共享标签:电子健康记录 / 公共卫生与流行病学 / 医保理赔 / 卫生服务研究 / 药物安全
- premier-pinc-ai — 共享标签:电子健康记录 / 公共卫生与流行病学 / 医保理赔 / 卫生服务研究 / 药物安全
- nhird — 共享标签:电子健康记录 / 医保理赔 / 药物安全 / 队列研究
- snds — 共享标签:电子健康记录 / 公共卫生与流行病学 / 医保理赔 / 药物安全
- meps — 共享标签:电子健康记录 / 公共卫生与流行病学 / 医保理赔 / 卫生服务研究
- ices-ontario — 共享标签:电子健康记录 / 公共卫生与流行病学 / 卫生服务研究 / 药物安全
- gepard — 共享标签:电子健康记录 / 医保理赔 / 药物安全 / 队列研究
- optum-clinformatics — 共享标签:公共卫生与流行病学 / 医保理赔 / 卫生服务研究 / 药物安全
- seer-medicare — 共享标签:电子健康记录 / 公共卫生与流行病学 / 医保理赔 / 卫生服务研究
- hcup-nis — 共享标签:电子健康记录 / 医保理赔 / 卫生服务研究
导航说明:本章节由全站统一标签体系自动计算生成(标签重合度算法),双向可达;点击链接可跳转至对应数据集词条。
