INSPIRE 首尔大围术期数据库 — 围术期医学 AI-Ready Wikipedia | 千方病案医数集

首尔国立大学医院 131,109 例手术的十年围术期电子病历数据库

来源 首尔国立大学医院(Seoul National University Hospital, SNUH) url: https://physionet.org/content/inspire/发布时间: 2026-09-08最后更新: 2026-09-08 阅读 5

信息速览

数据集名称INSPIRE 首尔大围术期数据库 — 围术期医学 AI-Ready Wikipedia | 千方病案医数集
数据类型131,109 例手术,6 张数据表 CSV,72 项术中参数,38 项实验室指标,近 1,000 万条用药记录,CITI 培训 + DUA 申请获取
规模约 13.1 万例手术(131,109 例,占全院 50% 随机抽样)
接入方式首尔国立大学医院(Seoul National University Hospital, SNUH) url: https://physionet.org/content/inspire/
AI 就绪度

数据集封面

INSPIRE 首尔大围术期数据库 — 13.1 万例手术的围术期电子病历 AI-Ready Wikipedia

INFOBOX

字段 内容
数据集名称 INSPIRE(首尔大围术期数据库)
英文全称 INSPIRE, a publicly available research dataset for perioperative medicine(INformative Surgical Patient dataset for Innovative Research Environment)
别名/简称 INSPIRE;SNUH 围术期数据库;注意与 2019 年发表的 SNUH Anesthesia Patient Information Database(APID,约 6 万例)为同源不同项目
疾病分类(ICD-11) 覆盖全手术谱;核心结局映射:脓毒症 1G40、急性肾损伤 GB60、急性心肌梗死 BA41
SNOMED CT 术后并发症 10001005 族、急性肾损伤 35455006、急性心肌梗死 22298006
数据模态 围术期/ICU 电子病历(麻醉记录、生命体征、实验室检验、用药、结局)
AI 任务类型 术后死亡率/ICU 入住预测、风险分层、术中时序建模、外部验证
样本总数 131,109 例手术(2011–2020,全院符合条件手术的 50% 随机抽样)
数据格式 CSV(6 张数据表 + schema/parameters/icd10_excluded 3 个元数据文件)
许可证 Korea Credentialed Health Data License-1-0-0
访问级别 申请审核(PhysioNet Credentialed Access:CITI 培训 + 签署 DUA)
DUO 标签 GRU(通用研究使用;DUA 附加禁止再识别与第三方披露条款)
语言 英语(变量名与编码);单中心韩国队列,手术与诊断已编码化
首发日期 2023-09-19(v0.1,约 52,000 例)
最后更新 2026-06-09(v1.4.2)
发布机构 首尔国立大学医院(SNUH)麻醉与疼痛医学科
官方主页 PhysioNet 项目页(项目网站 inspire.or.kr
下载地址 PhysioNet v1.4.2(credentialed 登录后下载)
DOI 10.13026/1eay-yc85(数据 v1.4.2);10.1038/s41597-024-03517-4(论文)
引用次数 61+(Semantic Scholar,截至 2026-09)
AI 就绪度评分 ⭐⭐⭐⭐(4/5)— MIMIC 风格六表结构 + 官方示例代码,扣分项:无官方划分、数值经 5 百分位分箱、时间戳相对化需自行还原
页面状态 published

§0 E-E-A-T 审核声明

医学审核:[千方病案医学编辑部] 交叉审核:§2 医学背景(围术期结局流行病学、ICD-11/SNOMED 映射)、§7 偏倚分析。

数据工程审核:[千方病案医学编辑部交叉审核] 医疗 AI 数据工程师,审核范围:§4 DAIMS 数据字典、§5 数据划分策略、§6 预处理 Pipeline 和坑点。

审核日期:2026-09-05

医疗免责声明:本页面提供的医学信息仅供研究和教育目的,不构成医疗建议、诊断或治疗方案。数据集的医学描述基于公开发表的文献,未经逐一临床验证。任何基于该数据集训练的 AI 模型在应用于临床决策前,必须经过独立的临床验证和监管审批。

技术免责声明:本页面的代码示例、预处理建议和基准性能数据基于公开资料整理,不保证在特定环境下的准确性和适用性。使用者应自行验证代码安全性和数据预处理流程的正确性。千方病案医数集不对因使用本页面信息而导致的任何直接或间接损失承担责任。

数据使用合规:使用本页面描述的数据集前,请务必阅读并遵守数据集原始许可协议。INSPIRE 要求用户完成 CITI Program 的「Data or Specimens Only Research」培训并通过 PhysioNet 凭证化申请、签署 Korea Credentialed Health Data Agreement。DUO 标签仅供参考,具体使用限制以数据集官方协议为准。


§1 数据集概览

§1.0 📌 30 秒速览

这是什么? INSPIRE 是首尔国立大学医院(Seoul National University Hospital,SNUH)麻醉与疼痛医学科制作、托管在 PhysioNet 上的围术期医学公开数据库,全称为 INformative Surgical Patient dataset for Innovative Research Environment。它把该院 2011–2020 年十年间接受麻醉手术的约 13.1 万例患者(131,109 例手术,占全院同期符合条件手术的 50% 随机抽样)的电子病历整理成了 6 张互相关联的 CSV 表——从术前诊断、术中每 5 分钟的生命体征,到围术期实验室检验、每一条用药记录,以及最终 ICU 入住与院内死亡结局 PhysioNet 项目页。需要特别说明:这是首尔国立大学医院的围术期信息数据库(PhysioNet 上的 INSPIRE),与该院 2019 年发表的 Anesthesia Patient Information Database(APID,约 6 万例)以及全球范围内其他名为 INSPIRE 的项目(如基因组学、遥感领域的同名计划)均为不同项目,检索与引用时请以 PhysioNet DOI 10.13026/1eay-yc85 为准。

为什么重要? 术后大并发症发生在约 7–15% 的手术患者身上,而院内死亡等罕见结局的研究需要足够大的样本量才有统计功效 Sci Data 论文。此前的公开资源各有短板:VitalDB 只有 6,388 例手术、院内死亡仅 57 例(0.9%);MIMIC 系列聚焦 ICU 与急诊入院人群,缺少围术期全流程视角。INSPIRE 以 131,109 例手术、1.21% 的院内死亡率(1,581 例)填补了「大规模 + 手术队列 + 公开可及」的空白,并且刻意模仿 MIMIC 的表结构,让熟悉 MIMIC 的研究者几乎零成本迁移。

我能用它做什么? 三件事最直接:其一,训练术后 30 天死亡率或 ICU 入住预测模型——官方用梯度提升机在该任务上达到 AUROC 0.944,示例代码完全公开;其二,把你在自家医院小样本数据上训练的围术期模型拿到 INSPIRE 上做外部验证,这是论文审稿人越来越看重的一步;其三,基于术中 72 项参数做低血压、低氧等急性事件的时序建模。注意它只有结构化数据——没有波形文件、没有影像、没有临床自由文本。

§1.1 摘要

INSPIRE 由 SNUH 麻醉与疼痛医学科的 Leerang Lim、Hyung-Chul Lee 等人构建,数据从该院临床数据仓库 SUPREME 1.0/2.0 中提取,覆盖 2011 年 1 月至 2020 年 12 月。构建流程分四步:第一,纳入在 SNUH 接受全身麻醉、椎管内麻醉、区域阻滞或监测麻醉管理的全部手术,排除手术日年龄小于 18 岁或大于 90 岁、拒绝数据共享(16,176 名患者、25,946 例手术)及曾被大众媒体公开报道的患者(3 例);第二,经机构数据审查委员会(DRB)决定,随机抽取 50%(subject_id 尾号 0–4)构成公开版;第三,脱敏处理——所有时间点转换为相对首次入院(time zero)的相对时间、年龄按 5 岁分箱、测量值按第 5 百分位分箱、手术编码截取 ICD-10-PCS 前 4 位、诊断截取 ICD-10-CM 前 3 位、整类剔除敏感诊断,最终 k-anonymity 达 129、ARX 工具评估的再识别风险低于 0.002%;第四,以 MIMIC 风格组织为 operations、diagnosis、vitals、ward_vitals、labs、medications 六张表,通过 subject_id → hadm_id → op_id 三级主键关联。论文发表于 Scientific Data(2024,11:655),数据版本已迭代至 v1.4.2(2026-06-09)Sci Data 论文

§1.2 战略价值

维度一:围术期 AI 的规模化外部验证场。 围术期预测模型数量在过去十年爆发式增长,但绝大多数停留在单中心内部验证,跨中心外部验证是临床落地前的最大缺口。INSPIRE 的设计初衷之一就是充当「可复现的外部验证数据集」:131,109 例手术的体量足以支撑罕见结局(院内死亡 1.21%、术后 24 小时内 ICU 入住 11.4%)的稳定评估,而 MIMIC 风格的表结构让 MIT-LCP 生态中的代码资产(MIMIC-Extract、fiddle 等预处理思路)可以低成本移植。对东亚医疗系统而言,它更是目前唯一公开的十万人级围术期 EHR,提供了与欧美队列对比人群特征与麻醉实践差异的机会——例如其血管活性药使用偏好(麻黄碱、去氧肾上腺素)与液体管理习惯均在 Usage Notes 中明示,可直接用作协变量 PhysioNet Usage Notes

维度二:脱敏方法论的可复制样板。 INSPIRE 完整公开了一套从三级医院 EHR 到公开科研数据集的工程化脱敏流程:相对时间化、年龄分箱、百分位分箱、编码截断、敏感类别剔除、50% 抽样,并用 ARX 工具量化了 k-anonymity(129)、l-diversity(58)、t-closeness(0.049)与再识别风险(<0.002%)。这套流程连同其 IRB(H-2210-078-1368)与 DRB(BD-R-2022-11-02)审批路径,为亚洲医院「能否合法开放临床数据」提供了可参考的完整先例。同时,它也在论文中验证了分箱脱敏对模型性能的影响可控(GBM AUROC 0.944),回应了「脱敏必然毁掉数据价值」的疑虑。

维度三:MIMIC 生态的亚洲对位数据集。 对已经投入 MIMIC 生态的团队而言,INSPIRE 的表结构、主键命名(subject_id/hadm_id)与「长表 + 相对时间」哲学几乎零迁移成本,但它回答的是一个 MIMIC 回答不了的问题:同一批预测模型在东亚单支付体系、不同麻醉用药习惯、不同手术谱的人群上表现如何。这使它天然成为「训练在 MIMIC、验证在 INSPIRE」或反向工作流的一端。同团队运营的 VitalDB 提供了波形级数据与 caseid 桥接,三者构成「EHR 队列(INSPIRE)+ 高分辨率波形(VitalDB)+ ICU 全景(MIMIC)」的互补三角。对教学场景,官方 GitHub 端到端示例加上六年七个版本的 Release Notes,本身就是一部活的临床数据工程教材。

§1.3 同类数据集横向对比

数据集 机构/地区 规模 模态 结局标注 与 INSPIRE 的差异化
INSPIRE(本条目) SNUH,韩国首尔 131,109 例手术 围术期 EHR:5 分钟生命体征、38 项检验、用药、结局 院内死亡、ICU 入住(术后 24h 内)、住院时长 手术队列 + 十年跨度 + MIMIC 风格结构
MIMIC-IV BIDMC,美国波士顿 约 30 万住院、 ICU 入住为主 ICU EHR 院内死亡等 ICU/急诊人群,无围术期视角;社区生态最大
VitalDB 首尔大学医院,韩国 6,388 例手术 术中高分辨率波形(多参数) 院内死亡 57 例(0.9%) 波形分辨率高但规模小;operations 表 caseid 可与 INSPIRE 匹配
eICU-CRD 美国 multi-center 约 20 万 ICU 入住 ICU EHR 多结局 多中心 ICU,无术中麻醉数据
MOVER multi-center(美国) 约 77,000 例手术 术中生命体征与事件 术中标贯 仅手术室阶段,无病房/检验/用药纵向数据
SICdb St. James’s Hospital,爱尔兰 约 31,000 例入住 围术期 ICU EHR 多结局 欧洲单中心、规模约为 INSPIRE 的 1/4

§1.4 版本时间轴

版本 发布日期 规模 关键变化
v0.1 2023-09-19 约 52,000 例 初版试发布
v1.0 2023-10-06 约 130,000 例 扩容至 50% 全量抽样
v1.1 2023-11-03 约 130,000 例 所有测量值按第 5 百分位分箱,增强匿名性
v1.2 2023-12-28 约 130,000 例 按韩国罕见病管理法更新排除诊断清单,新增 icd10_excluded.csv
v1.3 2024-08-12 约 130,000 例 复合药物拆分为 drug_name/drug_name2/drug_name3;新增 WHO ATC 编码;明确 icuin_time/icuout_time 仅含术后 24h 内 ICU 入住;operations 新增 allcause_mortality 列;修正 subject_id 189643811 的 icuin_time
v1.4 2026-04-15 约 130,000 例 新增术中参数 ds、cpat;修正约 16,000 个 ICD-10-PCS 左右侧不匹配;ward_vitals 新增 art_sbp;机械通气判定纳入 PEEP/呼吸机模式/BIPAP;清理身高 1400–1900 范围的 mm→cm 错误
v1.4.2(当前) 2026-06-09 约 130,000 例 稳定性修正版,DOI 10.13026/1eay-yc85

版本选择的一句话原则:新项目一律 v1.4.2;对标 2024–2025 年已发表论文时才回退 v1.2/v1.3。注意 v0.1(约 52,000 例)与正式版(约 130,000 例)规模差异近 2.5 倍,任何引用了 v0.1 的早期材料与现行数据不可直接对比。

§1.5 典型应用场景

  1. 术后 30 天死亡率预测:以术前(人口学 + 术前检验 + ASA-PS)或术中(+ 生命体征时序)特征训练分类器,官方 GBM 基线 AUROC 0.944 可直接对标。
  2. 术后 ICU 入住需求预测:预测哪些手术患者需要术后 24 小时内转入 ICU,用于术前资源规划(注意结局定义只覆盖 24h 内转入)。
  3. 术中低血压/低氧时序预警:vitals 表 72 项参数、5 分钟分辨率,适合 LSTM/Transformer 类时序模型。
  4. 药物利用与结局关联研究:medications 表带 ATC 编码,近 1,000 万条给药记录,可做围术期用药模式挖掘。
  5. 围术期模型外部验证:把欧美队列训练的模型在韩国单支付体系人群中检验泛化性,量化人群漂移。

§2 医学背景

§2.1 ICD-11 编码映射

INSPIRE 覆盖全手术谱而非单一疾病,数据集内的手术编码为 ICD-10-PCS 前 4 位、诊断编码为 ICD-10-CM 前 3 位。下表给出本数据集核心研究结局与高频病种到 ICD-11 的映射,供跨库检索与编码转换使用(映射为编码参考,建议以 WHO ICD-11 浏览器核对):

概念 ICD-11 编码 ICD-11 中文名 在 INSPIRE 中的角色
脓毒症(sepsis) 1G40 脓毒症 常见术后并发症与死亡原因;诊断表中以 ICD-10-CM 前 3 位(A41 等)出现
急性肾损伤 GB60 急性肾损伤(1–3 期) 术后常见器官损伤结局,可结合肌酐类 labs 变量定义
急性心肌梗死 BA41 急性心肌梗死 围术期心肌损伤相关结局;对的心肌酶 labs 变量可辅助
白内障 9C10 白内障 INSPIRE 最常见诊断(ICD-10-CM H26,约 9,000 例),日间手术代表病种
围术期疾病谱 —(按手术章节) 各系统手术 operations.icd10_pcs 前 4 位映射至 ICD-11 功能子轴的相应手术章节

§2.1b SNOMED CT 映射

标签概念 ICD-10-CM(INSPIRE 内) SNOMED CT 参考码 术语说明
脓毒症 A41(前 3 位) 10001005 Septic disorder
急性肾损伤 N17(前 3 位) 35455006 Acute kidney injury
急性心肌梗死 I21(前 3 位) 22298006 Acute myocardial infarction
术后 ICU 入住 无编码(operations 时间列) 305398007 Admission to intensive care unit(结局由 icuin_time 推导)
院内死亡 无编码(operations 结局列) 397819000 In-hospital death(结局由死亡时间列推导)

注意:INSPIRE 发布版只保留 ICD-10-CM 前 3 位,因此 SNOMED 映射只能到「簇」级;如需细粒度术语(如脓毒症病原、AKI 分期),需回到 labs 时序自行定义判据。

§2.2 围术期医学与术后结局简介

围术期医学覆盖从手术决策到完全康复的全过程。大型流行病学研究显示,术后大并发症发生率约 7–15%,而术后死亡、急性呼吸衰竭、围术期心肌损伤等罕见但灾难性的事件,只有在足够大的队列中才具备统计功效 Sci Data 论文。在 INSPIRE 的 131,109 例手术中,院内死亡 1,581 例(1.21%),术后 24 小时内 ICU 入住 14,971 例(11.4%);队列以中老年为主(中位年龄 60 岁,IQR 45–70),ASA-PS 1–2 级占 88%,急诊手术约 10%,普通外科占 26.5%、骨科占 13.3%。与 VitalDB 的 0.9% 院内死亡率相比,INSPIRE 的死亡率略高,反映其更宽的手术谱(含高风险胸腹与大血管手术)。韩国实行单一支付方(国民健康保险 NHIS)体系,转诊模式与保险申报数据使该院手术谱在全国具有较强代表性,但单中心属性仍限制了人群多样性。

§2.2b 麻醉类型与围术期结局流行病学

INSPIRE 按麻醉方式分四类发布(antype):全身麻醉(general,占比最高)、椎管内麻醉(neuraxial)、区域阻滞(regional)与监测麻醉管理(MAC)。这一分型本身就是重要的建模变量:麻醉类型与手术范围、急诊比例、术后 ICU 需求强相关。围术期结局的流行病学背景:术后大并发症率 7–15%;INSPIRE 队列院内死亡 1.21%(显著高于 VitalDB 的 0.9%,反映更宽手术谱与更高危病例构成);术后 24 小时内 ICU 入住 11.4%,其中相当比例来自心脏、胸科与急诊大手术。对罕见结局建模者,1.21% 的基线率意味着 10 万级样本才换来约 1,500 个阳性事件——这正是 INSPIRE 相对小体量围术期库的核心价值。

§2.3 临床任务定义

任务类型 定义 INSPIRE 支撑变量 输出
筛查/风险分层 术前识别高危患者 age、sex、ASA-PS、icd10_pcs、术前 labs(6 个月窗口) 风险评分/概率
诊断/事件检测 术中识别低血压、低氧、麻醉深度异常 vitals 表 72 项、5 分钟序列 时序二分类/异常检测
预后预测 预测 30 天/院内死亡、ICU 入住、住院时长 全表联合(operations + labs + vitals + medications) 多结局概率
资源规划 预测术后 ICU 床位需求 手术类型、麻醉类型、择期/急诊、icuin_time 需求量预测
药物流行病学 围术期用药模式与结局关联 medications(ATC 编码)+ 结局列 关联/因果估计(观察性)

§2.4 患者人群表

维度 内容
数据来源 首尔国立大学医院(SNUH)临床数据仓库 SUPREME 1.0/2.0
采集时间 2011-01 至 2020-12(十年)
年龄 手术日 18–90 岁;中位 60 岁(IQR 45–70),按 5 岁分箱发布
性别 男/女(sex 列;具体比例以 operations 表实际统计为准)
种族 未提供(韩国单中心队列,种族变量未发布)
就医类型 全手术谱:择期与急诊(约 10%)、全身/椎管内/区域/监测麻醉
抽样 公开版为符合条件手术的 50% 随机抽样(subject_id 尾号 0–4);排除拒绝共享 16,176 名患者(25,946 例手术)与媒体公开患者 3 例

§2.5 临床价值

对临床研究者,INSPIRE 的价值在于把「围术期全流程」放进了一个可 SQL 化查询的沙盒:术前 6 个月的实验室基线、术中每一台麻醉机的参数轨迹、病房与 ICU 的纵向生命体征、直至出院或死亡的全时间线,这在公开数据中此前只有 MIMIC(ICU 视角)可部分替代。对医院管理者与政策研究者,它提供了单一支付体系下大型学术医院手术量、麻醉类型构成与结局率的真实世界画像。对 AI 工程团队,官方以 30 天死亡率预测任务验证了数据可用性——GBM 模型 AUROC 0.944 显著高于仅用 ASA-PS 的 0.829,说明即使经过分箱脱敏,数据仍保留了可观的预测信号 Sci Data 论文

按研究问题拆解,它对四类工作各有不可替代的供给:其一,罕见结局研究——约 1,500 例院内死亡使术后死亡预测、死亡危险因素分析从「病例对照」升级为「全队列建模」;其二,方法学研究——分箱脱敏数据上校准、缺失机制、外部验证方法学都有天然试验场(脱敏即分布偏移的可控实例);其三,医疗政策与手术安全——十年跨度覆盖电子病历系统升级(SUPREME 1.0→2.0)与监测设备普及,可观察系统级变化对结局率的影响(受坑点 1 限制需以代理变量实现);其四,医学教育——MIMIC 风格结构 + 官方可跑示例,是「临床数据科学」课程的理想教具,无需暴露任何真实身份风险。

§2.6 金标准对照表

维度 INSPIRE 的做法 性质
划分 无官方 train/test 划分;公开版即固定 50% 抽样全集 社区自行划分
结局标注 院内死亡、ICU 入出时间、住院时长由医院 EHR 系统自动提取,随版本审计修正(v1.3 修正 1 例 icuin_time) 自动提取 + 版本勘误
手术/诊断编码 ICD-10-PCS 前 4 位 / ICD-10-CM 前 3 位,人工映射自手术记录与 NHIS 申报文本 人工编码(降粒度)
药物 ATC 编码 从药名人工映射至 WHO ATC(atc_code/atc_code2/atc_code3 三列) 人工映射(v1.3 起)
设备数据 麻醉机/监护仪每 1 分钟自动采集,聚合为 5 分钟中位数 自动采集 + 聚合
验证任务 30 天死亡率预测(GBM vs LR vs ASA-PS) 官方技术验证

§3 数据集规格

§3.0 版本抉择矩阵

你的需求 推荐版本 大小与形态 理由
新项目从零开始 v1.4.2(2026-06-09) 多表 CSV,credentialed 下载 含全部勘误(16,000 个 PCS 左右侧修正、身高 mm→cm)、art_sbp、ds/cpat 参数与机械通气判定改进
与已发表 INSPIRE 论文对标复现 v1.3(2024-08-12) 多表 CSV 2024–2025 年间论文多基于 v1.2/v1.3;对齐时避免 v1.4 勘误带来的数值漂移
教学/课程演示 v1.4.2 + 官方 GitHub 示例 少量 CSV 列裁剪即可 gbm_mortality.py 单文件可跑通端到端
需要病房血压完整序列 v1.4.2 ward_vitals.csv art_sbp(动脉收缩压)为 v1.4 新增,旧版无

§3.1 模态详情

  • operations(手术主表):每行一台手术。人口学(年龄分箱、性别)、手术/麻醉时间四元组(opstart_time、opend_time、anstart_time、aneend_time)、手术类型(icd10_pcs 前 4 位)、麻醉类型(antype:general/neuraxial/regional/MAC)、心肺转流(CPB)变量、术后 ICU 入出时间(仅术后 24h 内)、住院时长与院内死亡、allcause_mortality(v1.3+)。
  • diagnosis(诊断表):time zero 前 6 个月至末次手术后出院为止的医生申报诊断,ICD-10-CM 前 3 位 + 相对诊断时间;敏感类别与罕见病整类剔除。
  • vitals(术中体征表):72 项参数——生命体征、麻醉机设置(O2 流量、麻醉气体浓度)、呼吸机参数(潮气量、峰压)、尿量、输液与出血量、BIS 等特殊监测;5 分钟间隔中位数聚合,值不带单位,标签见 parameters.csv。
  • ward_vitals(病房体征表):手术室外的生命体征(time zero 前 6 个月至末次出院),16 项,5 分钟间隔,短于 5 分钟的测量以中位数插补;v1.4 新增 art_sbp;CRRT/ECMO/IABP 等生命支持设备使用转为二分类变量。
  • labs(检验表):38 项预定义检验——动脉血气、血细胞计数、肝肾功能、凝血、糖化血红蛋白、乳酸、心肌酶;窗口为 time zero 前 6 个月至末次出院后 6 个月;含「已复检/凝血/稀释」备注的异常结果已剔除。
  • medications(用药表):time zero 前 6 个月至末次出院的给药记录(近 1,000 万条):drug_name/drug_name2/drug_name3(成分名,v1.3 起拆分复合药物)、给药途径、时间与 ATC 编码三列;不含普通病房常规输液,剔除化疗、免疫治疗、研究药物及使用少于 100 患者的药物。

§3.2 按子集/表的样本数

行数规模(约) 主键粒度 备注
operations 131,109 行 每行一台手术(op_id) 论文表 1 精确数字;ICU 入住 14,971(11.4%)、院内死亡 1,581(1.21%)
diagnosis 数十万行级 患者 × 诊断 × 时间 仅 ICD-10-CM 前 3 位
vitals 千万行级 手术 × 参数 × 5 分钟 72 项参数;BIS 覆盖 65,236 例(49.8%)
ward_vitals 数百万行级 患者 × 参数 × 5 分钟 16 项;CRRT/ECMO/IABP 二分类
labs 数百万行级 患者 × 检验 × 时间 38 项;±6 个月窗口
medications 近 1,000 万行 患者 × 给药 × 时间 ATC 编码;剔除 <100 患者用药

§3.3 数据格式

项目 说明
文件格式 逗号分隔 CSV(UTF-8);每表一个文件
元数据文件 schema.csv(变量定义)、parameters.csv(vitals/ward_vitals/labs 参数标签)、icd10_excluded.csv(被排除的 ICD-10-CM 码,v1.2+)
编码表示 分类变量以英文标签或编码存储;测量值不带单位,需查 parameters.csv 对照
数据库兼容 无官方 PostgreSQL 脚本;表结构借鉴 MIMIC,可参照 MIMIC-IV 加载脚本改写

§3.4 存储规模

数据以 credentialed 方式分发,PhysioNet 公开页面不展示文件清单与精确体积;下载页在登录后显示各 CSV 的实际大小。从表行数量级估算(vitals/medications 均为千万行级),解压后总量为多 GB 至数十 GB 级别,建议预留 50 GB 磁盘并使用 pyarrow/polars 或数据库加载而非全量 pandas.read_csv。本文不给出未经核实的精确 GB 数字。下载完成后的内存预算速查:

# 读取前先估算内存占用(示例:以 vitals.csv 前 10 万行外推全表)
sample = pd.read_csv(os.path.join(DATA_ROOT, "vitals.csv"), nrows=100_000)
n_total = sum(1 for _ in open(os.path.join(DATA_ROOT, "vitals.csv"))) - 1
est_gb = sample.memory_usage(deep=True).sum() / 1e9 * (n_total / len(sample))
print(f"全表内存估算约 {est_gb:.1f} GB —— 超过 4 GB 时改用 dtype 压缩或分块读取")
# 常用压缩:subject_id/op_id 用 int32,value 用 float32,
# parameter/route/antype 转 category 可省 60% 以上内存

§3.1b 参数清单与分类

各长表的具体参数名以 parameters.csv 为权威字典,下表按官方披露的分组归纳:

项数 官方分组 已知代表参数(示例)
vitals 72 生命体征;麻醉设备衍生值;麻醉机;输液/输血/药物;其他 心率、无创/动脉血压、SpO2、EtCO2、潮气量、峰压、O2 流量、麻醉气体浓度、BIS(65,236 例可用)、rSO2(205 例)、尿量、出血量、ds/cpat(v1.4 新增)
ward_vitals 16 生命体征;结局相关;其他 血压、心率、体温、呼吸频率、意识水平、机械通气(二分类)、CRRT/ECMO/IABP(二分类)、art_sbp(v1.4 新增)
labs 38 血细胞计数(CBC);肝功能(LFT);肾功能(RFT);凝血;酶类;动脉血气(BGA);其他 血红蛋白、白细胞、血小板、肌酐、胆红素、AST/ALT、PT/INR、aPTT、HbA1c、乳酸、心肌酶、血气 pH/PaO2/PaCO2

参数检索的正确姿势:

params = pd.read_csv(os.path.join(DATA_ROOT, "parameters.csv"))
# vitals/ward_vitals/labs 的 parameter 列取值以 parameters.csv 为准
print(params["table"].value_counts() if "table" in params else params.head(30))
# 查某参数是否存在:params[params["label"].str.contains("systolic", case=False)]

§3.5 标注方式

INSPIRE 没有「人工标注标签集」的概念——所有标签都是从运营性 EHR 自动提取后经过脱敏加工的回顾性结局标签:院内死亡与死亡时间来自医院登记,ICU 入出时间来自 ICU 转科记录(且只保留术后 24h 内的转入),手术与诊断编码来自手术记录文本与 NHIS 保险申报的人工映射,ATC 编码来自药名的人工映射。这意味着标签质量等同医院运营数据质量,并随版本勘误(如 v1.3 的 icuin_time 修正、v1.4 的 PCS 左右侧修正)而变化。

§3.6 标注者资质与一致性

编码映射(手术名 → ICD-10-PCS 前 4 位;药名 → ATC)由 SNUH 数据团队完成,过程未发布标注者间一致性系数(如 Cohen’s κ);ICD-10-CM 诊断来自医师申报并由病案编码流程规范,与 NHIS 报销数据交叉。研究者若在 INSPIRE 上做二次标注任务(如术中事件判定),需自行建立标注协议。

§3.7 采集周期

数据采集跨度为 2011 年 1 月至 2020 年 12 月,共十年;各表窗口不同——vitals 限于术中时段,ward_vitals/diagnosis/medications 覆盖 time zero 前 6 个月至末次出院,labs 覆盖 time zero 前 6 个月至末次出院后 6 个月。注意论文「Data processing」一段按「每次手术前后各 90 天」描述提取窗口,与各表章节的 6 个月描述存在口径差异,实际应以数据中 chart_time 的分布为准(见坑点 7)。

时间窗起点 时间窗终点 分辨率
vitals 麻醉开始(anstart_time) 麻醉结束(aneend_time) 5 分钟(原始 1 分钟)
ward_vitals time zero 前 6 个月 末次手术后出院 5 分钟(病房实测 4–6 次/日)
labs time zero 前 6 个月 末次出院后 6 个月 按开单时间
diagnosis time zero 前 6 个月 末次手术后出院 按申报时间
medications time zero 前 6 个月 末次出院 按给药时间

如需自行核验实际窗口,对每张表画 chart_time / 1440(相对天数)直方图,观察分布截断点与上述声明的吻合度。

§3.8 地域覆盖

单一机构:首尔国立大学医院(韩国首尔特别市),韩国最大的学术医疗中心之一;韩国实行 NHIS 单一支付体系,院内几乎全部医疗费用经保险申报,这使得手术名称可从申报数据交叉核验,但也意味着数据不覆盖未就诊于该院的院外事件。

§3.9 设备规格

  • 手术室内:麻醉机与监护仪经数字接口每 1 分钟自动写入麻醉记录单,含常规体征与麻醉气体、呼吸机参数;BIS(麻醉深度)与 rSO2(脑氧)等特殊设备数据也汇入 vitals 表——BIS 在 65,236 例(49.8%)手术中可用,rSO2 仅 205 例(0.16%)。

  • ICU:生命体征、尿量、GCS、呼吸机参数经设备数字通信每小时(或主治医师指定间隔)记录,允许人工修改。

  • 普通病房:按医嘱每日测量 4–6 次。

  • 生命支持设备(CRRT/ECMO/IABP):以每 4–8 小时的自由文本记录存在,发布时转为二分类使用变量。

  • 全部时间序列统一聚合至 5 分钟最大分辨率(中位数)。

  • 全部时间序列统一聚合至 5 分钟最大分辨率(中位数)。

事件判定逻辑(v1.4 口径)
事件 判定来源 说明
机械通气 GCS verbal 字段中的 E/T 记录 + PEEP 水平、呼吸机模式、BIPAP 模式记录 v1.4 起:在 GCS 字段基础上纳入 PEEP/模式记录,灵敏度提升
CRRT/ECMO/IABP 至少一条自动记录的设备相关临床观察 以二分类变量进 ward_vitals;原始自由文本每 4–8 小时一条
ICU 入住(术后 24h 内) 转科记录时间 仅此窗口写入 icuin_time/icuout_time

§3.10 深度溯源链

原始设备(麻醉机/监护仪/呼吸机)→ 麻醉信息系统自动记录(1 分钟)→ SNUH 临床数据仓库 SUPREME 1.0/2.0 → 研究团队提取与脱敏(相对时间化、分箱、编码截断、ARX 风险评估)→ IRB H-2210-078-1368 + DRB BD-R-2022-11-02 审批 → 50% 抽样 → PhysioNet 发布(v0.1→v1.4.2)。论文由 Sci Data 同行评审(DOI 10.1038/s41597-024-03517-4),数据托管于 PhysioNet(RRID: SCR_007345),资助方为韩国保健产业振兴院 KHIDI(HI21C107409)。


§4 数据结构

§4.0 目录树

inspire-1.4.2/
├── operations.csv          # 手术主表:131,109 行,每行一台手术
├── diagnosis.csv           # 诊断表:ICD-10-CM 前 3 位 + 相对时间
├── vitals.csv              # 术中体征:72 项参数 × 5 分钟间隔
├── ward_vitals.csv         # 病房/ICU 体征:16 项 × 5 分钟间隔
├── labs.csv                # 检验表:38 项,±6 个月窗口
├── medications.csv         # 用药表:近 1,000 万条,ATC 编码
├── schema.csv              # 全部变量的定义与说明(先读这个)
├── parameters.csv          # vitals/ward_vitals/labs 的 parameter 标签字典
└── icd10_excluded.csv      # 被排除的 ICD-10-CM 诊断码清单(v1.2+)

§4.1 DAIMS 字段字典(operations 核心字段)

字段名 类型 说明 示例值 AI 用途 观测误差 信息性缺失编码 取值范围
subject_id int 患者唯一标识(尾号 0–4 为公开版抽样) 189643804 患者级切分、去重 无(人工主键) 无缺失 长整型 ID
hadm_id int 住院标识;一名患者可多次住院 189643811 住院级聚合 无缺失 长整型 ID
op_id int 手术标识;一次住院可多台手术 598381 样本主键 无缺失 长整型 ID
age int 手术日年龄,5 岁分箱(50 = 47.5–52.4 岁) 60 人口学特征 分箱量化误差(±2.5 岁) 无缺失(纳入即 18–90) 18–90
sex str 性别 M 人口学特征 无缺失 M/F
opstart_time / opend_time float 手术开始/结束时间,相对 time zero 的分钟数 120.5 / 245.0 手术时长特征 相对时间化(无绝对日期) 0 或空值需结合 schema 理解 ≥0
anstart_time / aneend_time float 麻醉开始/结束时间(相对分钟) 95.0 / 260.0 麻醉时长 同上 同上 ≥0
antype str 麻醉类型:general/neuraxial/regional/MAC General 分层特征 人工归类 无缺失 4 类
icd10_pcs str 手术编码,ICD-10-PCS 前 4 位(section/body system/root operation/body part) 0FB4 手术类型嵌入 降粒度 + v1.4 前存在左右侧错误 无缺失 4 字符码
department str 手术科室 General Surgery 层级特征 人工归类 无缺失 科室清单
icuin_time / icuout_time float 术后 ICU 入/出时间(相对分钟);仅含术后 24h 内转入 300.0 / 4320.0 ICU 入住标签 结局定义偏向「术后立即转入」 空值 = 未发生(见坑点 3) ≥0 或空
dis_time float 出院时间(相对分钟) 8640.0 住院时长 相对时间化 死亡患者可能为空 ≥0 或空
death_time / allcause_mortality float/int 院内死亡时间 / 全因死亡标签(v1.3+) 5760.0 / 1 死亡结局标签 院内事件口径 0 = 存活出院(不要当缺失删) 0/1

其余表的关键字段:vitals/ward_vitals/labs 均为 subject_id(或 + op_id)+ parameter(标签查 parameters.csv)+ value(无单位数值)+ chart_time(相对分钟,5 分钟栅格);medications 为 subject_id + drug_name/drug_name2/drug_name3 + route + chart_time + atc_code/atc_code2/atc_code3

diagnosis 表字段字典
字段名 类型 说明 示例值 AI 用途 观测误差 信息性缺失编码 取值范围
subject_id int 患者标识 189643804 患者级关联 无缺失 长整型
icd10_cm str 诊断码(仅前 3 位) H26 共病特征 降粒度(无法区分侧别/分期) 敏感类整类剔除(坑点 6) 3 字符码
chart_time float 诊断时间(相对 time zero 分钟) -4320.0 时序特征/窗口过滤 相对时间化 无缺失 任意(可负)
medications 表字段字典
字段名 类型 说明 示例值 AI 用途 观测误差 信息性缺失编码 取值范围
subject_id int 患者标识 189643804 患者级关联 无缺失 长整型
drug_name/drug_name2/drug_name3 str 成分名(v1.3 起拆分复合药物) ephedrine 暴露特征 复合药拆分前版本有漏读 不适用(长表) 文本
route str 给药途径 IV 暴露特征 粗分类 无缺失 PO/IV/Extra 等
chart_time float 给药时间(相对分钟) 150.0 时序暴露窗口 相对时间化 无缺失 ≥0 为主
atc_code/atc_code2/atc_code3 str WHO ATC 分类(人工映射,v1.3+) C01CA 标准化药物分组 人工映射粒度 无(未映射者留空) ATC 码
labs/vitals/ward_vitals 共同字段
字段名 类型 说明 示例值 AI 用途 观测误差 信息性缺失编码 取值范围
parameter str 参数名(字典在 parameters.csv) heart_rate 通道选择 不适用(长表) 72/16/38 项
value float 测量值(无单位) 72.0 主特征 5 百分位分箱量化(坑点 2) 行缺失 = 未测量 依参数
chart_time float 测量时间(相对分钟,5 分钟栅格) 300.0 时序对齐 聚合中位数平滑(坑点 4/5) 不适用 5 的倍数为主

§4.2 标签分布

结局标签 阳性数 阳性率 来源
院内死亡(in-hospital mortality) 1,581 / 131,109 1.21% Sci Data 论文表 1
术后 24h 内 ICU 入住 14,971 / 131,109 11.4% 同上
急诊手术 约 13,000+ 约 10% 同上
术中 BIS 监测可用 65,236 / 131,109 49.8% 同上

两类主标签均为强不平衡(1.21% 与 11.4%),训练时需类别加权、focal loss 或重采样;评估时 AUPRC 与 AUROC 并报。

§4.3 关键统计

统计项 数值 来源
手术总数(公开版) 131,109 例 Sci Data 论文
中位年龄 60 岁(IQR 45–70) 同上
ASA-PS 1–2 占比 88% 同上
急诊手术占比 约 10% 同上
科室 Top2 普通外科 26.5%、骨科 13.3% 同上
术后 24h 内 ICU 入住 14,971 例(11.4%) 同上
院内死亡 1,581 例(1.21%) 同上
BIS 监测覆盖 65,236 例(49.8%) 同上
rSO2 监测覆盖 205 例(0.16%) 同上
ECMO/IABP/CRRT 患者 166(0.17%)/ 180(0.18%)/ 855(0.86%) 同上
最常见诊断 H26 白内障,约 9,000 例 同上
k-anonymity / l-diversity / t-closeness 129 / 58 / 0.049 同上
ARX 再识别风险 <0.002%(全部攻击模型) 同上
排除:拒绝数据共享 16,176 名患者(25,946 例手术) PhysioNet v1.4 files 页

§4.4 数据层级

patient(subject_id,尾号 0–4)
└── admission(hadm_id,1 个患者 → N 次住院)
    └── operation(op_id,1 次住院 → N 台手术)
        ├── vitals(op_id + chart_time + parameter,术中 5 分钟序列)
        └── medications / diagnosis / ward_vitals / labs(挂在 subject 级,经相对时间对齐)

关键点:只有 vitals 表带 op_id;其余四张纵向表全部挂在 subject_id 级,需要用相对时间与手术时间窗做交集对齐——这是建模前最重要的结构理解(对齐方法见 §6.3)。

与 VitalDB 的桥接

operations 表的 caseid 与 VitalDB 数据集的手术 caseid 匹配(同团队构建,官方幻灯明示「Case ID: matched with VitalDB dataset」)。利用这一点,可以为 INSPIRE 中对应手术补上 VitalDB 的高分辨率波形(动脉压、BIS 原始信号等),形成「结构化 EHR + 波形」的多模态样本;注意两库版本独立更新,匹配后应分别记录两库的版本号,且 VitalDB 的 6,388 例只是 INSPIRE 131,109 例的一个高分辨率子集。

§4.5 缺失值与信息性缺失

缺失情形 机制 处理建议
特殊监测(BIS、rSO2、肺动脉导管)大量缺失 设备可用性(非随机,取决于手术类型与年代) 当作「有无该监测」特征 + 缺失指示列;勿用全局均值填补
icuin_time/icuout_time 为空 未发生术后 24h 内 ICU 入住(结构化零) 编码 0/1 标签,不要按缺失行删除
实验室项目缺失 依临床需要开具(非随机) 用「最近一次术前值 + 距手术天数」双重编码
敏感诊断类别(F、B20–B24 等)整体不存在 脱敏剔除(信息性缺失) 解读「无精神病史」时必须记住是整类删除,见坑点 6
早期版本身高 1400–1900 单位错误(mm),v1.4 已清理 旧版本分析需自行 /10;BMI 计算先查值域

§5 数据划分与使用建议

§5.1 官方划分

INSPIRE 不提供官方 train/validation/test 划分——公开版本身就是固定的 50% 抽样全集,官方仅演示了死亡率预测任务的可行性。任何论文报告的「INSPIRE 上的性能」都依赖作者自行划分,跨论文不可直接比较。

§5.2 社区惯例与建议划分

  • 按 subject_id 哈希切分subject_id % 10 或加密哈希前缀切 70/15/15,确保同一患者的多次手术与全部纵向数据不跨集——这是 MIMIC 社区的通行做法,可平移到 INSPIRE。
  • 按时间切分:以 time zero 的相对时间无法恢复绝对日期,因此严格的时间外推切分在 INSPIRE 上不可行(相对时间与真实年份混同);如需时间泛化评估,只能按 subject_id 尾号做近似(抽样与尾号无关,不保证时间顺序),并在论文中明确此局限。
  • 按手术类型分层:icd10_pcs 前 4 位或 department 分层抽样,避免测试集被白内障等高频日间手术淹没。

§5.3 泄漏风险清单

  1. 患者级泄漏:同一 subject_id 多台手术/多次住院(抽取手术间隔可从相对时间重叠判断),必须患者级切分。
  2. 时序前视泄漏:ward_vitals/labs/medications 的时间窗延伸到手术后乃至出院后(labs 至末次出院后 6 个月)——术前模型只能用手术开始时间之前的记录,做硬截断。
  3. 结局定义泄漏:icuin_time 只记录 24h 内转入;若把「术后任意时刻入 ICU」的病例当阴性样本训练 ICU 预测模型,会系统性低估阳性率并污染特征(这些患者的病房序列往往异常)。
  4. 分箱泄漏:无此风险但需注意——数值分箱在发布前已固定,若在测试集上重算百分位切点会造成轻微信息泄露,应复用训练集切点。
  5. 跨库桥接泄漏:通过 caseid 引入 VitalDB 波形特征后,不得再把 INSPIRE 侧同一手术的衍生统计量当作独立特征重复使用;两库合并样本的切分仍必须以 subject/caseid 一致口径执行。

§5.4 交叉验证建议

5 折患者级分组交叉验证(GroupKFold by subject_id)+ 每折内分层(死亡标签);报告折间均值 ± 标准差。对 1.21% 的死亡标签,建议同时输出校准曲线与 Brier 分数,AUROC 单指标在高不平衡下误导性强。

§5.5 外部验证建议

  • 与 VitalDB(同城市另一院区/同源团队)匹配 operations.caseid 后可做「跨库同人群」验证,隔离数据库构建工艺差异。
  • 与 MIMIC-IV 的手术相关 ICU 子集、SICdb、MOVER 做「跨人群」验证时,注意编码体系差异(INSPIRE 的 ICD-10-PCS 前 4 位/CM 前 3 位与其他库的粒度不同),需建立粗粒度映射层。
  • 报告时区分「分布漂移」(人群/实践差异)与「标签定义差异」(ICU 入住 24h 窗口等),两者在外部验证中经常被混为一谈。

§5.6 从下载到论文的可执行清单

  1. CITI 证书 + PhysioNet credentialed 认证 + DUA 签署(§6.2 表)。
  2. 下载 v1.4.2,记录下载日期;对全部 CSV 计算 SHA256 留档。
  3. 按 §6.1 读入 operations/schema/parameters 三件套,核对行数与本文 §3.2 量级。
  4. 建立患者级划分快照(GroupKFold by subject_id),划分列表入库随代码提交。
  5. 按 §6.3 构建术前特征面板与术中时序面板,特征窗口硬截断。
  6. 复跑官方 GBM 基线(同划分),建立自己工作流的锚点。
  7. 新模型报告按 §8.3 协议输出,亚组与校准必备。
  8. 论文方法学写明:版本号、下载日期、划分种子、标签口径(24h ICU 窗口)、敏感诊断剔除的影响声明(坑点 6)。

§6 AI 就绪指南

§6.0 云端快速启动

INSPIRE 为 credentialed 数据,不能通过 Kaggle/HuggingFace 镜像合法获取(任何第三方镜像都违反 DUA)。合规路径是在完成 CITI 培训与 DUA 签署后,用 PhysioNet 账号直接 wget 下载到自己的云主机(AWS/GCP 均可),数据仅限本机存储与本地模型训练——PhysioNet 明确禁止把数据发送给第三方在线服务(包括 LLM API)。推荐配置:单台 8 vCPU / 32 GB 内存主机 + 50 GB 磁盘即可完成全部表格分析与 GBM 基线;时序模型训练再加一张 16 GB 显存的 GPU。

合规红线速记(签 DUA 前后都要记住的五条):

  1. 仅限研究用途;2. 不向任何第三方披露或转授(包括用外部 API 处理数据);3. 不尝试再识别;4. 违规须在 24 小时内向提供方报告;5. 提供方可提前 30 天通知终止协议,届时需按要求销毁数据。

§6.1 快速上手

# 目录结构预期(data_root 解压后):
#   data_root/
#   ├── operations.csv   ├── diagnosis.csv   ├── vitals.csv
#   ├── ward_vitals.csv  ├── labs.csv        ├── medications.csv
#   ├── schema.csv       ├── parameters.csv  └── icd10_excluded.csv
# data_root 由环境变量指定,与 PhysioNet 下载目录直接对应;
# 最小可用子集 = operations.csv(约 131,109 行)——仅主表即可复现死亡率基线。
import os
import pandas as pd

DATA_ROOT = os.environ.get("INSPIRE_ROOT", "data/inspire-1.4.2")

# operations:一行一台手术,全部主键与结局标签都在这里
ops = pd.read_csv(
    os.path.join(DATA_ROOT, "operations.csv"),
)
print(ops.shape)          # 预期 (131109, <50 列) 量级
print(ops["allcause_mortality"].value_counts(normalize=True))

# 三个元数据文件是读懂其余各表的钥匙:
schema = pd.read_csv(os.path.join(DATA_ROOT, "schema.csv"))        # 每个变量的定义
params = pd.read_csv(os.path.join(DATA_ROOT, "parameters.csv"))    # 72+16+38 项参数标签
excluded = pd.read_csv(os.path.join(DATA_ROOT, "icd10_excluded.csv"))  # 被剔除诊断码

§6.2 数据获取

步骤 动作 说明
1 完成 CITI「Data or Specimens Only Research」培训 证书需在 PhysioNet 凭证认证时上传
2 PhysioNet 账号完成 credentialed 认证 提交身份与机构信息,等待审核(通常数个工作日)
3 在项目页签署 DUA Korea Credentialed Health Data Agreement-1-0-0:仅限研究、不得转授第三方、不得再识别
4 从 v1.4.2 页面 wget 下载 登录后页面提供逐文件下载命令
5 引用 同时引用数据 DOI 10.13026/1eay-yc85 与论文 DOI 10.1038/s41597-024-03517-4
# 登录 credentialed 后,在 v1.4.2 的 Files 页复制下载命令(示意):
# wget --user=$PHYSIONET_USER --password=$PHYSIONET_PASS \
#   -r -N -c -np https://physionet.org/files/inspire/1.4.2/
# 官方示例代码(30 天死亡率 GBM 基线):
git clone https://github.com/vitaldb/inspire.git
python inspire/gbm_mortality.py    # 数据路径按 §6.1 的 INSPIRE_ROOT 配置

超出内存规模的替代方案:把六张表灌入 PostgreSQL(MIMIC 社区的建表脚本可直接改写——只改文件路径与字段名,主键层级 subject_id → hadm_id → op_id 与 MIMIC 同构)。要点三则:其一,长表(vitals/medications)先按行数最大的表分配磁盘(SSD 为佳);其二,为 subject_id(op_id, parameter, chart_time) 建复合索引后再做窗口查询;其三,chart_timeDOUBLE PRECISION 而非 timestamp 存储(相对分钟无时区语义,强转 timestamp 反而引入错误)。

下载后的完整性核验
# 三步核验,任何一步不符都先排查再使用:
head -2 operations.csv                 # 1) 表头与 schema.csv 描述一致
wc -l operations.csv                   # 2) 行数在 131,109 量级(+1 表头行)
python -c "import pandas as pd; \
  df = pd.read_csv('operations.csv'); \
  print(df['subject_id'].astype(str).str[-1].value_counts().sort_index())"
# 3) subject_id 尾号只应出现 0-4(50% 抽样标记);若出现 5-9 说明拿错了版本

§6.3 预处理全流程

核心难点是把 subject 级纵向表对齐到手术时间窗。所有时间是相对 time zero 的分钟数,手术起止时间在 operations 表中:

# 第 1 步:构建手术级样本表(训练样本 = 一台手术)
ops["op_duration_min"] = ops["opend_time"] - ops["opstart_time"]
ops["an_duration_min"] = ops["aneend_time"] - ops["anstart_time"]
ops["los_hours"] = ops["dis_time"] / 60.0          # 住院时长(相对小时)
ops["icu_admit_24h"] = (~ops["icuin_time"].isna()).astype(int)  # 24h 内 ICU 标签

# 第 2 步:术前实验室特征——只取手术开始前的最近一次检验值
labs = pd.read_csv(os.path.join(DATA_ROOT, "labs.csv"))
preop = (labs.merge(ops[["subject_id", "op_id", "opstart_time"]], on="subject_id")
             .query("chart_time < opstart_time")
             .sort_values("chart_time")
             .groupby(["op_id", "parameter"]).tail(1)   # 最近一次
             .pivot(index="op_id", columns="parameter", values="value"))
preop.columns = [f"pre_{c}" for c in preop.columns]

# 第 3 步:术中 5 分钟序列面板(供时序模型)
vitals = pd.read_csv(os.path.join(DATA_ROOT, "vitals.csv"))
vitals["t_bin"] = (vitals["chart_time"] // 5).astype(int)
panel = (vitals.merge(ops[["subject_id", "op_id"]], on="subject_id")
               .pivot_table(index=["op_id", "t_bin"],
                            columns="parameter", values="value", aggfunc="mean"))
# 注:vitals 本身已按 5 分钟中位数聚合,t_bin 仅是保险对齐

# 第 4 步:分箱数值的还原——INSPIRE 数值按第 5 百分位分箱发布
# 分箱值本身是有序类别;作为特征可直接用(树模型天然兼容),
# 若要当连续值用,可用该参数在训练集上的分位数中点做逆映射(勿用全局常数)。

清洗要点:异常值已在源头处理(复检/凝血/稀释样本剔除、身高 mm→cm 已在 v1.4 修正),但仍建议对每个参数做值域检查(对照 parameters.csv 的定义)后再入模。

术中事件标签构造示例(低血压)
# 以「MAP < 65 mmHg 持续事件」为例:从 vitals 面板构造事件级标签
# data_root 内 vitals 面板按 §6.3 第 3 步得到 panel(index: op_id/t_bin)
map_df = (vitals[vitals["parameter"] == "art_map"]
            .merge(ops[["subject_id", "op_id"]], on="subject_id"))
map_df = map_df.sort_values(["op_id", "chart_time"])

def hypotension_burden(df, threshold=65.0):
    """返回每台手术的 MAP<65 的 5 分钟 bin 占比与最长连续时长(bin 数)"""
    below = (df["value"] < threshold).astype(int)
    share = below.mean()
    longest = (below * (below.groupby((below != below.shift()).cumsum()).cumcount() + 1)).max()
    return share, longest

burden = (map_df.groupby("op_id")
                .apply(hypotension_burden, include_groups=False)
                .rename(columns={0: "hypotension_share", 1: "longest_run"}))
# 该类事件标签可用于:预警模型训练、与 allcause_mortality 的关联分析
# 注意:value 已按 5 百分位分箱(坑点 2),阈值 65 需映射到分箱切点后再判定

§6.4 PyTorch DataLoader 完整示例

import numpy as np
import torch
from torch.utils.data import Dataset, DataLoader
from sklearn.preprocessing import LabelEncoder

# 假设 §6.3 已产出:ops(样本表)、panel(术中 5 分钟面板,MultiIndex op_id/t_bin)
PARAMS = ["art_sbp", "art_dbp", "art_map", "heart_rate", "spo2", "etco2"]  # 示例参数子集
SEQ_LEN, PAD = 24, 0.0   # 取麻醉开始后前 24 个 5 分钟 bin = 2 小时,缺失补 0

class InspireOpDataset(Dataset):
    """一台手术 = 一个样本:术中前 2 小时多参数序列 -> 院内死亡标签"""
    def __init__(self, ops_df, panel, params=PARAMS, seq_len=SEQ_LEN):
        self.ops = ops_df.reset_index(drop=True)
        self.panel = panel
        self.params = params
        self.seq_len = seq_len
        self.dept_enc = LabelEncoder().fit(ops_df["department"])

    def __len__(self):
        return len(self.ops)

    def __getitem__(self, idx):
        row = self.ops.iloc[idx]
        try:
            sub = self.panel.xs(row["op_id"], level="op_id")[self.params]
            seq = sub.iloc[:self.seq_len].to_numpy(dtype="float32")
        except KeyError:
            seq = np.empty((0, len(self.params)), dtype="float32")
        # 前填充(左对齐补零):序列长度不足 SEQ_LEN 时在尾部补 PAD
        if seq.shape[0] < self.seq_len:
            pad = np.full((self.seq_len - seq.shape[0], len(self.params)), PAD, "float32")
            seq = np.vstack([seq, pad])
        static = np.array([row["age"] / 90.0,
                           1.0 * (row["sex"] == "M"),
                           self.dept_enc.transform([row["department"]])[0] / 30.0,
                           row["an_duration_min"] / 600.0], dtype="float32")
        y = int(row["allcause_mortality"])
        return torch.from_numpy(seq), torch.from_numpy(static), torch.tensor(y)

def collate(batch):
    seqs, statics, ys = zip(*batch)
    return (torch.stack(seqs), torch.stack(statics),
            torch.tensor(ys, dtype=torch.float32))

ds = InspireOpDataset(ops, panel)
dl = DataLoader(ds, batch_size=128, shuffle=True, num_workers=4,
                collate_fn=collate, pin_memory=True)
for seq, static, y in dl:      # 形状检查
    print(seq.shape, static.shape, y.shape)   # [B, 24, 6] [B, 4] [B]
    break

配套的最小可用模型(静态特征 + 时序双塔):

import torch.nn as nn

class InspireNet(nn.Module):
    """时序塔(GRU)+ 静态塔(MLP)融合,输出院内死亡概率。
    结构刻意保持简单:INSPIRE 上的增量主要来自特征工程而非结构。"""
    def __init__(self, n_params: int, n_static: int, hidden: int = 64):
        super().__init__()
        self.gru = nn.GRU(input_size=n_params, hidden_size=hidden,
                          num_layers=1, batch_first=True)
        self.static_mlp = nn.Sequential(
            nn.Linear(n_static, hidden), nn.ReLU(), nn.Linear(hidden, hidden))
        self.head = nn.Sequential(
            nn.Linear(hidden * 2, hidden), nn.ReLU(),
            nn.Dropout(0.2), nn.Linear(hidden, 1))

    def forward(self, seq, static):
        _, h = self.gru(seq)            # h: [1, B, hidden]
        s = self.static_mlp(static)     # [B, hidden]
        z = torch.cat([h.squeeze(0), s], dim=1)
        return self.head(z).squeeze(-1) # logits

def run_epoch(model, loader, opt, device="cpu"):
    model.train() if opt else model.eval()
    losses, ys, ps = [], [], []
    lossf = nn.BCEWithLogitsLoss(
        pos_weight=torch.tensor(80.0, device=device))   # 1.21% 阳性率的类别加权
    with torch.set_grad_enabled(bool(opt)):
        for seq, static, y in loader:
            seq, static, y = seq.to(device), static.to(device), y.to(device)
            logits = model(seq, static)
            loss = lossf(logits, y)
            if opt:
                opt.zero_grad(); loss.backward(); opt.step()
            losses.append(loss.item())
            ys.append(y.cpu()); ps.append(torch.sigmoid(logits).detach().cpu())
    import numpy as np
    y = torch.cat(ys).numpy(); p = torch.cat(ps).numpy()
    return float(np.mean(losses)), evaluate(y, p)

# model = InspireNet(n_params=6, n_static=4).to(device)
# opt = torch.optim.AdamW(model.parameters(), lr=3e-4)
# 训练循环:for epoch in range(10): run_epoch(model, dl, opt, device)

§6.5 坑点清单(8 个真实失败模式)

⚠️ 坑点 1:所有时间戳是相对分钟,不是日期(分类:预处理陷阱)

问题:INSPIRE 全部 *_time 列都被转换为相对首次入院(time zero)的分钟数,绝对日期被彻底抹去。把它当 Unix 时间戳或直接排序跨患者比较都会得到错误结果。
症状:跨患者画「手术时间分布」出现双峰假象;尝试将 INSPIRE 与流感季节、疫情阶段等外部日历变量合并时报错或全是噪声;同一患者的多台手术看起来「发生在过去」(负值或极小值)。
解决

  1. 简单方法:所有窗口逻辑只用相对量——「术前 7 天」= chart_time ∈ [opstart_time - 10080, opstart_time),全程不还原绝对日期。
  2. 进阶方法:若确需日历特征(如星期几效应),接受该信息不可恢复的事实,改用队列内代理(急诊/择期、手术时段序号)。
  3. SOTA 方法:跨库联合分析时,改用按「相对手术时间轴」标准化的事件表示(TTE 特征),使 INSPIRE 与 MIMIC/VitalDB 在同一相对坐标系下可比。
    参考Sci Data 论文 Anonymization 小节PhysioNet 项目页

⚠️ 坑点 2:年龄 5 岁分箱 + 数值 5 百分位分箱(分类:预处理陷阱)

问题:age 按 5 岁区间分箱(50 代表 47.5–52.4 岁),且 v1.1 起全部连续测量值按第 5 百分位分箱发布。把它们当精确连续值使用会引入系统性量化误差。
症状:校准曲线呈台阶状;连续概率模型的边缘似然异常;细粒度阈值(如肌酐 >1.2 mg/dL)定义的亚组人数与预期严重不符;与外部数据合并做分布对比时直方图对不齐。
解决

  1. 简单方法:树模型(GBM/XGBoost)直接吃分箱值,几乎无损;线性模型接受台阶化。
  2. 进阶方法:需要连续值时,用训练集各参数的分位数中点做逆映射(每参数一张查找表,来自 parameters.csv + 训练集分位数)。
  3. SOTA 方法:把分箱值建模为有序类别 + 区间不确定性(区间删失似然),在生存/回归模型中以 interval-censored 形式处理。
    参考PhysioNet v1.1 Release NotesSci Data 论文

⚠️ 坑点 3:icuin_time/icuout_time 只覆盖术后 24 小时内的转入(分类:标签理解)

问题:v1.3 起官方明确:仅术后 24 小时内的 ICU 入住才写入 icuin_time/icuout_time。延迟转入 ICU(术后 2–7 天恶化)的患者在这些列中是空的。
症状:把空值当「未入 ICU」训练 ICU 需求模型后,模型在延迟恶化患者上系统性乐观;ICU 入住率 11.4% 被误当「全因 ICU 率」与文献比较时偏低;用 ward_vitals 术后序列回看会发现「阴性」样本里有一批生理指标明显恶化者。
解决

  1. 简单方法:把标签改名为「术后 24h 内 ICU 入住」,论文与看板同步改口径。
  2. 进阶方法:结合 ward_vitals 术后序列与 GCS/呼吸机二分类变量,构建「延迟恶化」代理标签,单独建模。
  3. SOTA 方法:把 ICU 入住建为随时间变化的 competing outcome(24h 内 vs 24h–7d),用时变生存模型报告两窗口结果。
    参考PhysioNet v1.3 Release NotesSci Data 论文 Usage Notes

⚠️ 坑点 4:ward_vitals 短于 5 分钟的测量被中位数插补(分类:预处理陷阱)

问题:病房测量每天仅 4–6 次,官方把短于 5 分钟间隔的测量用中位数插补到 5 分钟栅格上。发布后的序列里真实测量与插补值无法区分。
症状:计算血压变异性(SD/CV)远低于文献值;趋势突变检测(如术后出血导致的血压下滑)被插补平台抹平;以「序列中连续相同值」去噪时误删真实重复测量。
解决

  1. 简单方法:ward_vitals 只用于低频特征(日级均值/最值),不做高频变异性分析;高频分析改用 vitals(术中)表。
  2. 进阶方法:识别「长平台段」(连续多个 5 分钟 bin 相同值)作为插补指示,变异性指标只在非平台段上计算。
  3. SOTA 方法:以缺失感知的时序模型(如 GRU-D、mTAN)处理,把平台段视为测量缺失而非真实值。
    参考Sci Data 论文 Ward_vitals 小节

⚠️ 坑点 5:三套采样频率混在一张时序里(分类:数据泄漏)

问题:术中数据源自每 1 分钟自动采集(发布聚合至 5 分钟),ICU 每小时,病房每天 4–6 次,生命支持设备每 4–8 小时一条自由文本。跨场景拼接时序时,不同来源的行代表完全不同的信息密度。
症状:把 ward_vitals 与 vitals 直接 concat 后,模型把「在病房」当成一个可由行频率推断的特征,从而间接推断患者已离开手术室——预测术后结局时构成时间泄漏;每小时 ICU 行被当成 5 分钟粒度处理导致假性长序列。
解决

  1. 简单方法:按表拆分特征组,分别聚合到目标粒度后再 join,并为每行加 source ∈ {op, ward, icu} 标记。
  2. 进阶方法:对术前模型硬截断 chart_time < opstart_time;对术后模型截断 chart_time ∈ [opend_time, opend_time + 48h],并在特征里显式加入「距手术小时数」。
  3. SOTA 方法:用不规则时序框架(mTAN、IP-Net、Griffin)按「测量时间戳 + 来源通道」建模,避免伪栅格化。
    参考Sci Data 论文 Data acquisition 小节

⚠️ 坑点 6:敏感诊断整类剔除造成信息性缺失(分类:偏倚陷阱)

问题:为防再识别,精神与行为障碍(F00–F99)、HIV(B20–B24/Z21)、性传播感染、妊娠终止、虐待、围产期与先天畸形(P00–Q99)及罕见病诊断被整体删除。诊断表中「没有这些码」不等于「患者没有这些病」。
症状:以诊断共病指数(Charlson 等)计算时,精神病共病恒为 0;药物-结局分析中精神科用药(ATC N05/N06)与诊断不匹配;把诊断缺失当阴性时,慢性病负担被系统性低估。
解决

  1. 简单方法:在论文 limitations 明示该清单(icd10_excluded.csv),不报告被剔除类别的任何「患病率」。
  2. 进阶方法:共病指数只由未剔除类别构成,并对被剔除域加「不可观测」标记而非 0。
  3. SOTA 方法:对敏感性做正式分析——比较「含/不含被剔除域」两版共病分数与结局的关联强度差异,作为偏倚界。
    参考Sci Data 论文表 2 排除诊断、icd10_excluded.csv

⚠️ 坑点 7:论文时间窗口径存在 90 天与 6 个月两种描述(分类:工程陷阱)

问题:Sci Data 论文「Data processing」段称手术相关以外变量按「每次手术前后各 90 天」提取,而 diagnosis/ward_vitals/medications/labs 各表小节描述的窗口为 time zero 前 6 个月至末次出院(labs 后延 6 个月)。两种口径都见于正文。
症状:按 90 天假设清洗后,发现 labs/medications 中存在远超 90 天的 chart_time;反之按 6 个月假设过滤会误删真实存在的行;不同版本间边缘样本量对不上。
解决

  1. 简单方法:以数据实测分布为准——对每个表画 chart_time 相对手术时间的直方图,再决定过滤窗。
  2. 进阶方法:自己定义统一窗口(如术前 180 天/术后 90 天)显式过滤,并在论文中声明与作者描述的差异。
  3. SOTA 方法:把窗口作为敏感性分析参数(30/90/180 天)报告主结果稳健性。
    参考Sci Data 论文 Data processing 与各表小节

⚠️ 坑点 8:跨版本数值漂移——16,000 个手术码左右侧修正与身高单位错误(分类:工程陷阱)

问题:v1.4 修正了约 16,000 个 ICD-10-PCS 左右侧不匹配,并清理了 1400–1900 范围的身高值(实为 mm 记录,应为 cm);v1.3 重构了药物表复合字段并新增 ATC。旧版教程代码/旧论文数字与新版数据不可直接互比。
症状:按旧教程 drug_name 单列读药名时复合药物(如「A/B」)整条漏读;用旧版身高算 BMI 出现 15 或 60 的极端值;左右侧相关手术(如膝关节单侧置换)的亚组构成与旧论文不符;版本混用时复现实验失败。
解决

  1. 简单方法:锁定单一版本(推荐 v1.4.2)并在论文/仓库记录版本号与下载日期。
  2. 进阶方法:升级版本时跑一份 diff 脚本(按 op_id 对比 icd10_pcs/height 变化行数),确认影响面后再更新结果。
  3. SOTA 方法:数据版本控制(DVC/lakeFS)+ 结果随版本自动重算,保持「数据版本—结果版本」一一映射。
    参考PhysioNet v1.4 Release NotesPhysioNet 版本页

§6.6 数据增强(安全与危险操作)

操作 安全性 说明
时序随机裁剪(术中窗内) 保持 5 分钟栅格对齐
时间抖动 ±1 bin 小于聚合分辨率,安全
参数 dropout(模拟缺失) 与 BIS 49.8% 的天然缺失一致
幅度缩放(生命体征 ±10%) ⚠️ 生理边界内可行,需校验值域
混合两患者序列(mixup) 制造生理上不存在的轨迹
对 age 分箱值做线性插值 分箱语义被破坏
用生成模型合成患者 违背 DUA 与发表口径,禁止对外共享
跨手术随机重排 5 分钟 bin 破坏麻醉时程内固有的生理阶段结构(诱导—维持—苏醒)
全局常数逆映射分箱值 各参数分布不同,必须按参数建查找表(坑点 2)

增强的优先级排序:对表格模型,特征工程(术前检验时间衰减加权、科室分层)的收益远大于任何增强;对时序模型,先处理缺失通道语义(坑点 5)再谈增强。

§6.7 模型推荐

任务 推荐模型 理由
术后死亡/ICU 结局(表格特征) XGBoost/LightGBM 官方基线即 GBM(AUROC 0.944);分箱特征对树模型友好
术中时序(低血压/低氧预警) GRU/1D-ResNet → PatchTST/不规则时序 Transformer 5 分钟栅格、多通道、含缺失
多模态融合(术表 + 时序 + 用药) 双塔 + cross-attention 表格与时序异构融合
药物利用研究 Cox/因果森林 ATC 编码 + 结局列,注意坑点 6 剔除偏差

§6.8 硬件需求

场景 CPU/内存 GPU 磁盘
表格基线(GBM) 8 vCPU / 32 GB 无需 50 GB
术中时序训练 16 vCPU / 64 GB 1×16 GB(RTX 4090/A4000 级) 100 GB
全库数据库化(PostgreSQL + 索引) 16 vCPU / 64 GB 无需 200 GB SSD

§6.9 评估指标代码

from sklearn.metrics import roc_auc_score, average_precision_score, brier_score_loss
import numpy as np

def evaluate(y_true, y_prob):
    """结局预测三件套:区分度 + PR 曲面 + 校准。1.21% 阳性率下三者缺一不可。"""
    return {
        "AUROC": roc_auc_score(y_true, y_prob),
        "AUPRC": average_precision_score(y_true, y_prob),   # 随基线率波动,必须与 AUROC 并报
        "Brier": brier_score_loss(y_true, y_prob),
        "PPV@10%": np.quantile(y_prob, 0.90) and
                   (y_true[y_prob >= np.quantile(y_prob, 0.90)].mean()),
    }
import matplotlib.pyplot as plt
from sklearn.calibration import calibration_curve
from sklearn.metrics import roc_curve

def calibration_and_roc(y_true, y_prob, name="model", n_bins=10):
    """校准曲线 + ROC:1.21% 阳性率下 AUROC 饱和时,校准决定临床可用性"""
    fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(11, 4.2))
    frac_pos, mean_pred = calibration_curve(y_true, y_prob, n_bins=n_bins, strategy="quantile")
    ax1.plot(mean_pred, frac_pos, marker="o", label=name)
    ax1.plot([0, 1], [0.0121, 0.0121], "k--", lw=0.8, label="baseline 1.21%")
    ax1.set(xlabel="predicted probability", ylabel="observed frequency",
            title="Calibration"); ax1.legend()
    fpr, tpr, _ = roc_curve(y_true, y_prob)
    ax2.plot(fpr, tpr, label=f"{name} (AUC={roc_auc_score(y_true, y_prob):.3f})")
    ax2.set(xlabel="FPR", ylabel="TPR", title="ROC"); ax2.legend()
    plt.tight_layout(); plt.savefig(f"{name}_eval.png", dpi=150)

§6.10 MLOps 笔记

  • 数据版本绑定:把 inspire==1.4.2 写入实验配置与模型卡片;v1.4 修正了 16,000 行手术码,跨版本模型不可混评(坑点 8)。
  • 患者级切分快照:GroupKFold 的 subject_id 分组列表随代码入库,保证任何一次重训复用同一划分。
  • 再训练触发:INSPIRE 为静态历史库(2020 年截止),无需在线监控漂移;但外部部署前建议用本地数据做输入分布监控(年龄分箱边界、科室占比)。
  • 合规流水线:DUA 禁止向第三方服务传输数据——训练管道不得调用外部 API 做预处理或标注;模型权重对外发布前需确认不含实例记忆(对 131,109 例的表格模型风险低,但建议保留审计)。

实验配置快照示例(建议随仓库提交):

# configs/inspire_mortality.yaml —— 与模型权重一起归档
dataset:
  name: inspire
  version: "1.4.2"          # 与 PhysioNet Release Notes 对应
  downloaded: "2026-09-01"
  files_sha256: manifest/sha256.txt
split:
  method: GroupKFold        # groups = subject_id
  n_splits: 5
  stratify: allcause_mortality
  seed: 42
features:
  window: "preop + intraop_first_2h"   # 显式声明特征窗口
  exclude_sensitive_dx: true           # 坑点 6 声明
label:
  target: allcause_mortality
  note: "in-hospital mortality; 30-day variant needs own definition"
training:
  pos_weight: 80.0
  epochs: 10
report:
  metrics: [AUROC, AUPRC, Brier, calibration, DCA]
  subgroup: [emergency, department, age_bin]

§7 质量评估与局限性

§7.1 已知偏倚

偏倚类型 描述 严重程度 缓解措施
单中心偏倚 全部手术来自 SNUH 一家医院,转诊结构与麻醉实践与他院不同 外部验证(§5.5);在论文中明示单中心边界
抽样偏倚 公开版为 50% 随机抽样;拒绝共享者(16,176 名患者/25,946 例手术)已剔除 随机抽样对多数估计无偏;对比研究注意与全院真实构成的差异
结局窗口偏倚 ICU 入住仅记录术后 24h 内转入 按坑点 3 重新定义标签口径
信息性缺失 敏感诊断整类剔除;检验依临床需要开具 坑点 6 的处理策略;缺失指示特征
编码粒度损失 ICD-10-CM 前 3 位/PCS 前 4 位 以「手术家族」粒度建模,不承诺细粒度
药物选择性 剔除通用输液、化疗、免疫治疗、<100 患者用药 药物流行病学结论限定于常用药物域
数值量化 5 百分位分箱 + 年龄 5 岁分箱 树模型直接用;连续分析用区间删失(坑点 2)

§7.2 标注质量

结局标签(死亡、ICU、住院时长)来自医院运营数据自动提取,随版本勘误持续修正(v1.3 修正 1 例 icuin_time;v1.4 修正 16,000 个手术码左右侧与身高单位),显示发布方有积极的版本维护。编码映射(手术、ATC)为人工完成但未公布标注者间一致性;影像学/文本原始记录不随库发布,无法做二次核查。总体判断:结局标签可用性高,二次利用者应把「标签 = 运营数据口径」写进方法学声明。

标签/编码 生成方式 已知质量事件 二次利用建议
院内死亡/死亡时间 医院登记自动提取 无公开勘误 高可信;院内口径(不含出院后死亡)
ICU 入出时间 转科记录 v1.3 修正 subject_id 189643811 注意 24h 窗口定义(坑点 3)
手术编码 ICD-10-PCS 前 4 位 手术记录 + NHIS 申报人工映射 v1.4 修正约 16,000 处左右侧不匹配 高频码可信;亚组分析前查版本
诊断 ICD-10-CM 前 3 位 医师申报 + 病案编码 v1.2 更新罕见病排除清单 共病分析需声明剔除域
ATC 编码 药名人工映射(v1.3+) 无公开一致性指标 用于分组而非因果剂量推断

§7.3 泛化性评估

目标场景 失效风险 证据
迁移至欧美综合医院 高:人群构成、麻醉用药习惯(麻黄碱/去氧肾上腺素偏好)不同 论文 Usage Notes 自述的本地实践;单中心设计
迁移至韩国基层医院 中高:病例组合更轻、重症占比更低 数据本身为最大转诊中心
迁移至儿科 不适用:18–90 岁纳入边界 纳入排除标准
日间/门诊手术占主导的场景 中:H26(白内障)等高频日间手术主导诊断分布 H26 约 9,000 例为最常见诊断
疫情等时点冲击分析 不可行:绝对日期被脱敏移除 坑点 1

§7.4 伦理与合规

SNUH IRB(H-2210-078-1368)批准并豁免知情同意(回顾性设计),机构 DRB(BD-R-2022-11-02)审核了脱敏充分性。分发遵循 Korea Credentialed Health Data Agreement:仅限研究、禁止再识别、禁止转授第三方、可随时终止并需销毁数据。对使用者而言,CITI 培训是获取资格的最低门槛;基于数据的二次发表需按 §9 引用数据 DOI 与论文。

§7.5 公平性

数据集不含种族变量;性别以二值发布;年龄分箱到 5 岁。这限制了公平性审计的粒度,但同时也避免了细粒度敏感属性的暴露。已知风险:手术谱与科室构成隐含性别/年龄结构(如骨科与普外的性别分布差异),模型可能习得科室代理的群体差异;韩国单支付体系的医疗可及性结构与无保险人群体系不同,跨国迁移时需重新校准。

§7.6 数据漂移

2011–2020 十年间,麻醉监测(BIS 覆盖 49.8%)、手术日间化(H26 高发)与电子病历系统(SUPREME 1.0→2.0)都在演进,早期与晚期队列存在可预期的设备覆盖与编码实践漂移。因绝对日期不可恢复,只能以 subject_id、设备覆盖特征与科室构成为代理检验时间稳定性;严格的时间外推验证不可行(§5.2)。可执行的漂移代理检测:

# 漂移代理检测:设备覆盖与科室构成的稳定性(相对时间不可用,故按队列切半)
half = len(ops) // 2
early, late = ops.iloc[:half], ops.iloc[half:]        # 按 op_id 顺序近似前后半期
for name, df in [("early", early), ("late", late)]:
    print(name, {
        "dept_top3": df["department"].value_counts(normalize=True).head(3).round(3).to_dict(),
        "icu_rate": round(df["icuin_time"].notna().mean(), 4),
        "death_rate": round(df["allcause_mortality"].mean(), 4),
    })
# 若前后半期的科室构成/结局率差异大,说明存在时间性构成漂移,
# 患者级随机划分会低估部署期漂移——在论文中需说明。

§7.7 DAIMS 数据质量评估(24 项)

# 检查项 状态 说明
1 宽格式可用性 operations 一行一台手术,可直接 pivot 为样本表
2 唯一标识 subject_id/hadm_id/op_id 三级主键,层级清晰
3 特殊字符处理 全英文标签 + 编码存储;无韩文编码坑(原文文本未随库发布)
4 重复行 主键约束明确;同一 op_id 多行仅出现在 vitals 长表(属正常长格式)
5 缺失编码 ⚠️ 空值 = 未发生/未测量的语义需结合 schema.csv 区分(如 icuin_time 空 = 未入住)
6 标签标识 allcause_mortality/death_time/icuin_time 语义在 v1.3 起明确文档化
7 罕见类分组 ⚠️ 罕见诊断与 <100 患者用药被剔除而非分组发布
8 偏倚评估 论文含 k-anonymity/l-diversity/t-closeness 量化与抽样设计说明
9 数据字典 schema.csv + parameters.csv + 论文逐表小节
10 信息性缺失解释 排除诊断清单(icd10_excluded.csv + 论文表 2)公开可查
11 设备记录 麻醉机/监护仪/呼吸机来源与采样频率在论文明示(1 分钟→5 分钟聚合)
12 共线性 ⚠️ 收缩压/舒张压/平均压、气体浓度族天然共线,需自行降维
13 编码映射 ⚠️ ICD-10-CM 前 3 位/PCS 前 4 位 + ATC 人工映射;无 SNOMED/ICD-11 官方映射表
14 时间戳处理 ⚠️ 相对时间化彻底(利于隐私),但牺牲绝对日期分析(坑点 1)
15 划分建议 无官方 train/test 划分
16 泄漏讨论 ⚠️ 论文未专门讨论泄漏;时间窗泄漏需自行按 §5.3 处理
17 标签分布 死亡 1.21%、ICU 11.4% 等在论文表 1 报告
18 测量偏倚 ⚠️ 设备覆盖随手术类型/年代变化(BIS 49.8% vs rSO2 0.16%),论文有披露
19 外部验证建议 论文定位即为外部验证资源并引用验证框架文献
20 版本记录 七个版本的 Release Notes 完整可查,勘误透明(v1.4 修正 16,000 行)
21 预处理脚本 官方 GitHub gbm_mortality.py 端到端示例
22 合规要求 DUA 全文公开;CITI 培训 + credentialed 流程明确
23 多模态对齐 ⚠️ vitals 带 op_id 可精确对齐;其余四表需相对时间手工对齐(§6.3)
24 去标识化 相对时间 + 分箱 + 编码截断 + ARX 风险评估(<0.002%),方法论完整公开

DAIMS 评分:19.5 / 24

评分解读:得分落在 18–21 的「生产可用」区间。INSPIRE 在标识体系、数据字典、版本记录、去标识化与合规五项达到公开数据集的标杆水平,尤其是七版连续 Release Notes 与 ARX 量化风险评估在同类库中少见。失分集中在三处:无官方划分(#15)、跨表多模态对齐要自建(#23,只有术中表带 op_id)、以及编码粒度与敏感类别剔除带来的结构性限制(#7/#13)——这些不是疏漏,而是隐私工程的必然代价。

对你意味着什么:第一,可以放心把它当作结局面向论文的结局预测与外部验证主数据源,数据字典与版本纪律足以支撑审稿级复现;第二,开工前必须先完成两件自建工作——患者级划分脚本(§5.2)与 subject 级纵向表对齐层(§6.3),预算 1–2 周工程时间;第三,凡涉及精神科/罕见病/细粒度手术类型的结论要主动降级表述,这些信息在源头就不存在;第四,锁定 v1.4.2 并把版本号写进模型卡片,避免 16,000 行手术码修正带来的复现事故(坑点 8)。

§7.8 外部验证矩阵

外部数据集/场景 来源机构 评估任务 性能指标 相对内部变化 关键发现
INSPIRE 内部技术验证(基准行) SNUH 术后 30 天死亡率预测 AUROC 0.944(GBM);0.829(ASA-PS/LR) Sci Data 2024:分箱脱敏后预测信号保留
VitalDB(跨库同城市) 首尔大学医院 待建立统一任务协议 未发表 operations 表 caseid 可与 VitalDB 匹配(官方幻灯披露),但目前缺乏同行评审的跨库基准结果
MIMIC-IV/SICdb/MOVER(跨人群) BIDMC 等 待建立统一任务协议 未发表 截至 2026-09 尚无同行评审的正式跨库外部验证报告;INSPIRE 论文自身将其定位为「供他人验证」的资源

读表说明:矩阵刻意保持「有据才录」——只收录同行评审支撑的结果,宁缺毋滥。这意味着当前 INSPIRE 的「外部验证价值」是结构性的(数据足以支撑验证),而非结论性的(尚无已发表的跨库验证数字);你的研究若完成一次合规的跨库验证,即是该矩阵的第一行社区贡献。另一方面,引用本页 AUROC 0.944 时务必标注其为「官方内部技术验证」,与任何外部验证结果在语义上不可混同。


§8 基准性能与生态

§8.1 排行榜

INSPIRE 没有官方竞赛或排行榜。下表收录官方论文在技术验证任务上的结果,作为社区事实基线:

排名 模型 性能(AUROC) 年份 关键技术 完整引用 代码
1(官方基线) Gradient Boosting Machine 0.944 2024 术前特征 + LightGBM 族 GBM Lim, L., et al. INSPIRE, a publicly available research dataset for perioperative medicine. Sci Data 11, 655 (2024). DOI 10.1038/s41597-024-03517-4 gbm_mortality.py
2(对照) Logistic Regression / ASA-PS 0.829 2024 传统风险分层 同上 同上

⚠️ 数值不可直接比较的原因:无统一划分协议(各论文自定 train/test)、任务定义自由(院内死亡 vs 30 天死亡 vs ICU 入住)、特征窗口自选(术前 vs 术中);引用任何「INSPIRE 上的性能」时必须核对原作者的划分与标签定义。

§8.2 SOTA 总结与选型建议

官方 GBM 基线(0.944)已接近任务上限——死亡标签本身就是 ASA-PS、检验与手术类型的强函数。后续工作的增量空间在三点:校准与临床效用曲线(高不平衡下 AUROC 区分度趋于饱和)、术中时序信息的前置融合(早期预警而非术前分层)、以及跨库外部验证(INSPIRE 作为验证端而非训练端)。新模型建议直接对齐官方 gbm_mortality.py 的预处理再报告增量。

研究阶段 建议起点 避免的弯路
复现/学习 官方 gbm_mortality.py + 本文 §6.1-6.3 勿直接用全量 read_csv(内存爆炸);勿跳过 parameters.csv
新型表格模型 §6.3 特征面板 + §8.3 协议 勿与 0.944 直接比较(划分不同)
时序模型 §6.4 Dataset 模板 + 坑点 4/5 勿把 ward_vitals 当 5 分钟真实测量
外部验证论文 INSPIRE 作验证端;§5.5 桥接方案 勿忽略标签口径差异(24h ICU 窗口)

§8.3 评测协议建议

协议要素 建议值 理由
数据版本 v1.4.2 + 下载日期 坑点 8:跨版本不可比
切分 患者级 5 折 GroupKFold(by subject_id) 防患者泄漏
分层 按 allcause_mortality 分层 1.21% 阳性率
特征窗口 显式二选一:仅术前 / 术前+术中前 2h 可比性与防泄漏
主指标 AUROC + AUPRC + Brier + 校准曲线 高不平衡下单一 AUROC 误导
亚组 急诊/择期、科室、年龄分箱段 公平性与泛化性证据
基线 同划分下重跑官方 GBM(勿直接引 0.944) 划分不可比
报告 折间均值 ± 标准差 + 决策曲线分析 审稿标准
数据集 关系 获取 互补价值
VitalDB 同源团队(SNUH/Lee H-C);operations.caseid 可匹配 PhysioNet 开放 高分辨率术中波形(动脉压、BIS 原始波形)
MIMIC-IV 结构蓝本(INSPIRE 借鉴 MIMIC) PhysioNet credentialed ICU 深度用药/出入量/微生物记录
MIMIC-IV-ED / eICU-CRD 同生态 PhysioNet 急诊与多中心 ICU 视角
MOVER 围术期同类库 开放 美国多中心术中事件标注
SICdb 围术期同类库 开放 爱尔兰单中心 ICU 联动数据

§8.5 关键论文

  1. Lim, L., Lee, H., Jung, C.-W., et al. INSPIRE, a publicly available research dataset for perioperative medicine. Scientific Data 11, 655 (2024). DOI 10.1038/s41597-024-03517-4 —— 数据集原始论文:构建流程、脱敏方法论与技术验证。
  2. Lee, H.-C., & Jung, C.-W. VitalDB, a high-fidelity multi-parameter vital signs database in surgical patients. Scientific Data 9, 279 (2022). DOI 10.1038/s41597-022-01411-5 —— 同团队姊妹库,高分辨率术中波形。
  3. Johnson, A. E. W., et al. MIMIC-III, a freely accessible critical care database. Scientific Data 3, 160035 (2016). DOI 10.1038/sdata.2016.35 —— INSPIRE 表结构借鉴的对象。
  4. Vistisen, S. T., Pollard, T. J., Enevoldsen, J., & Scheeren, T. W. L. VitalDB: fostering collaboration in anaesthesia research. British Journal of Anaesthesia 127, 184–187 (2021). DOI 10.1016/j.bja.2021.03.011 —— 围术期开放数据协作范式。
  5. Samad, M., et al. Medical Informatics Operating Room Vitals and Events Repository (MOVER): a public-access operating room database. JAMIA Open 6, ooad084 (2023). DOI 10.1093/jamiaopen/ooad084 —— 美国同类手术室公开库。
  6. Steyerberg, E. W., & Harrell, F. E. Prediction models need appropriate internal, internal-external, and external validation. Journal of Clinical Epidemiology 69, 245–247 (2016). DOI 10.1016/j.jclinepi.2015.04.005 —— INSPIRE 定位「外部验证资源」的方法学依据。
  7. Penny-Dimri, J. C., et al. Machine learning to predict adverse outcomes after cardiac surgery: a systematic review and meta-analysis. Journal of Card Surgery 37, 3838–3845 (2022). DOI 10.1016/j.jocs.16842 —— 围术期 ML 预测的系统综述背景。

§8.6 社区活跃度

  • GitHub(vitaldb/inspire):官方示例代码仓库,由通讯作者 Hyung-Chul Lee 维护;Issues 用于数据问题反馈(官方 v1.3/v1.4 勘误即部分源于用户反馈)。
  • PhysioNet 项目页:版本化发布 + DUA 管理的标准渠道;数据集被收录进 PhysioNet 围术期专题与 IMAGINE AI Datathon 等活动的教学清单。
  • 学术采用:截至 2026-09 论文被引 61 次(Semantic Scholar),采用场景集中于术后结局预测与麻醉信息学教育;韩国国内外 datathon(含 OHDSI APAC 2025 专题报告)将其列为标准练习数据。
  • 维护节奏:2023 年密集迭代四版(v0.1–v1.2),2024 年随论文发布 v1.3,2026 年推出勘误集中的 v1.4/v1.4.2——发布方对勘误响应积极,社区可通过 PhysioNet 项目页联系通道与 GitHub Issues 提交数据问题。

§8.7 生态快照

资源 类型 链接 状态(截至 2026-09) 推荐理由
vitaldb/inspire 官方仓库 示例代码 GitHub 维护中 gbm_mortality.py 一键跑通基线
PhysioNet 项目页 数据主页 physionet.org/content/inspire v1.4.2 版本、DUA、引用入口
inspire.or.kr 项目网站 inspire.or.kr 在线 官方背景与更新公告
Sci Data 论文 同行评审文档 DOI 10.1038/s41597-024-03517-4 2024-06 发表 表结构与脱敏细节的唯一权威描述
IMAGINE AI Datathon 教学实践 sg-ai.org/datathon 年度活动 官方认可的上手路径

§9 相关资源与引用

§9.1 官方资源清单

资源 说明
PhysioNet 项目主页 版本发布、Release Notes、DUA 签署入口
v1.4.2 下载页 credentialed 登录后的文件下载
官方 GitHub 仓库 gbm_mortality.py 死亡率预测端到端示例
Sci Data 论文 表结构、脱敏方法论、技术验证(开放获取,CC BY 4.0)
DUA 全文 Korea Credentialed Health Data Agreement-1-0-0
项目网站 官方公告与团队信息
ICD-10-CM 官方码表(CDC) 解析 diagnosis 表前 3 位码的官方对照

§9.2 BibTeX 引用块

@dataset{lim2026inspire_data,
  author = {Lim, Leerang and Lee, Hyung-Chul},
  title  = {{INSPIRE, a publicly available research dataset for perioperative medicine}},
  year   = {2026},
  note   = {version 1.4.2},
  doi    = {10.13026/1eay-yc85},
  url    = {https://physionet.org/content/inspire/}
}

@article{lim2024inspire,
  author  = {Lim, Leerang and Lee, Hyeonhoon and Jung, Chul-Woo and Sim, Dayeon and Borrat, Xavier and Pollard, Tom J. and Celi, Leo A. and Mark, Roger G. and Vistisen, Simon T. and Lee, Hyung-Chul},
  title   = {{INSPIRE, a publicly available research dataset for perioperative medicine}},
  journal = {Scientific Data},
  volume  = {11},
  pages   = {655},
  year    = {2024},
  doi     = {10.1038/s41597-024-03517-4}
}

@dataset{lee2022vitaldb,
  author  = {Lee, Hyung-Chul and Jung, Chul-Woo},
  title   = {{VitalDB, a high-fidelity multi-parameter vital signs database in surgical patients}},
  year    = {2022},
  doi     = {10.1038/s41597-022-01411-5}
}

§9.3 引用指南

基于 INSPIRE 的任何产出(论文、模型、衍生数据)必须同时引用:数据 DOI(10.13026/1eay-yc85,注明版本号与下载日期)与原始论文(lim2024inspire);若使用了 PhysioNet 平台基础设施,另引 PhysioNet 平台文献。正文首次提及建议写作「INSPIRE(Seoul National University Hospital 围术期数据库,v1.4.2)」,以与同名项目区分。

§9.4 常见问题(FAQ)

问题 答案
INSPIRE 与 2019 年的 SNUH Anesthesia Patient Information Database 是什么关系? 同源团队(SNUH 麻醉科)先后项目:APID(约 6 万例)是早期本地发布;INSPIRE 是其工程化、脱敏化、PhysioNet 化的继任者,规模约 13.1 万例。引用时认准本条目 DOI。
有波形文件吗? 没有。INSPIRE 只有结构化 EHR 表;高分辨率波形在同团队 VitalDB,经 operations.caseid 桥接(§4.4)。
免费吗? 数据本体免费,但必须走 PhysioNet credentialed 流程(CITI 培训 + DUA);禁止从第三方镜像下载。
可以发商业产品吗? 不可以。DUA 限定研究用途,禁止商业二次使用与第三方转授。
为什么找不到 2021 年以后的手术? 数据窗口固定为 2011–2020;后续批次是否有扩展以官方 Release Notes 为准。
为什么年龄是 50/55/60 这样的整数? 5 岁分箱脱敏:50 代表 47.5–52.4 岁(坑点 2)。
官方排行榜在哪里? 没有。官方只提供技术验证基线(GBM AUROC 0.944),社区评测须按 §8.3 协议自行重跑。

§10 AI 使用声明卡

§10.1 AI 模型列表

模型 用途 版本
大语言模型(CodeBuddy 内置 fast-model) 资料整理、初稿撰写、代码示例生成 2026-09 会话版本

§10.2 AI 参与范围

AI 参与了本页面的文献检索整理(WebSearch 结果归纳)、FACTS 事实清单汇编、章节初稿撰写与代码示例生成;全部数字均经与 PhysioNet 项目页、Sci Data 论文及 Semantic Scholar API 的原文交叉核对;医学背景、编码映射与偏倚表述经编辑部人工复核。AI 未参与的内容:审核结论(§0、§10.4 状态列)与最终发布决定由编辑部作出;所有带「✅ 已通过/已验证」标记的模块均以人工比对原始来源为准,AI 输出仅作底稿。

§10.3 输入来源列表

  1. Lim, L., Lee, H., Jung, C.-W., et al. INSPIRE, a publicly available research dataset for perioperative medicine. Sci Data 11, 655 (2024). DOI 10.1038/s41597-024-03517-4
  2. Lim, L., & Lee, H. INSPIRE, a publicly available research dataset for perioperative medicine (version 1.4.2). PhysioNet (2026). DOI 10.13026/1eay-yc85
  3. PhysioNet. INSPIRE 项目页(含 Release Notes v0.1–v1.4). https://physionet.org/content/inspire/
  4. PhysioNet. Korea Credentialed Health Data Agreement-1-0-0. https://www.physionet.org/content/inspire/view-dua/1.4
  5. PhysioNet. INSPIRE v1.4 files 与版本历史页. https://physionet.org/content/inspire/1.4/files/
  6. Lee, H.-C., & Jung, C.-W. VitalDB, a high-fidelity multi-parameter vital signs database. Sci Data 9, 279 (2022). DOI 10.1038/s41597-022-01411-5
  7. Johnson, A. E. W., et al. MIMIC-III, a freely accessible critical care database. Sci Data 3, 160035 (2016). DOI 10.1038/sdata.2016.35
  8. Vistisen, S. T., et al. VitalDB: fostering collaboration in anaesthesia research. Br J Anaesth 127, 184–187 (2021). DOI 10.1016/j.bja.2021.03.011
  9. Samad, M., et al. Medical Informatics Operating Room Vitals and Events Repository (MOVER). JAMIA Open 6, ooad084 (2023). DOI 10.1093/jamiaopen/ooad084
  10. Steyerberg, E. W., & Harrell, F. E. Prediction models need appropriate internal, internal-external, and external validation. J Clin Epidemiol 69, 245–247 (2016). DOI 10.1016/j.jclinepi.2015.04.005
  11. Lee, H. A machine learning-based prediction model for 30-day mortality after surgery using data from INSPIRE. GitHub (2023). https://github.com/vitaldb/inspire/blob/main/gbm_mortality.py
  12. OHDSI APAC Scientific Forum. Korean Healthcare Dataset: Perioperative Open Dataset of South Korea (2025). https://www.ohdsi.org/wp-content/uploads/2025/06/OHDSI-APAC-Scientific-Forum-20250605.pdf
  13. Semantic Scholar API. INSPIRE 论文引用计量(citationCount 61,2026-09 查询). https://api.semanticscholar.org/graph/v1/paper/DOI:10.1038/s41597-024-03517-4
  14. IMAGINE AI Datathon 课程资料(INSPIRE/MIMIC/VitalDB 教学清单). https://sg-ai.org/datathon

§10.4 人工校验记录

内容模块 审核者 审核方式 审核状态
规模数字(131,109/1,581/14,971 等) 千方病案医学编辑部 与 Sci Data 论文表 1 及 PhysioNet 摘要逐项比对 ✅ 已通过/已验证
版本时间轴与勘误记录 千方病案医学编辑部 与 PhysioNet Release Notes 逐版核对 ✅ 已通过/已验证
引用数与 DOI 千方病案医学编辑部 Semantic Scholar API + PhysioNet 引用块交叉核对 ✅ 已通过/已验证
§4 DAIMS 字段字典与 §6 代码 数据工程审核 代码逻辑走查 + 字段与 schema 描述核对 ✅ 已通过/已验证
§2 编码映射 千方病案医学编辑部 ICD-11/SNOMED 常用码复核 ✅ 已通过/已验证
坑点 1–8 数据工程审核 与论文小节、Release Notes、DUA 原文溯源 ✅ 已通过/已验证

§10.5 AI 生成章节标注

本页面各章节初稿均由 AI 辅助生成;§0 审核声明、§10 声明卡及全部「✅ 已通过/已验证」项为人工撰写与确认。

§10.6 最后人工审核日期

2026-09-05

页面状态:published(全部内容已完成审核并发布)


§C 结构化数据(JSON-LD)

返回 AI-Ready 数据集