VitalDB — 首尔国立大学术中生命体征数据库 AI-Ready Wikipedia | 千方病案医数集

6,388 例非心脏手术、196 类术中高频生命体征参数的开放波形数据库

来源 首尔国立大学医院麻醉与疼痛医学科(Seoul National University Hospital) url: https://vitaldb.net/dataset/发布时间: 2026-09-08最后更新: 2026-09-08 阅读 7

信息速览

数据集名称VitalDB — 首尔国立大学术中生命体征数据库 AI-Ready Wikipedia | 千方病案医数集
数据类型6,388 例手术,95.4 GB 波形+CSV,196 类监测参数,最高 500 Hz 波形,CC BY 4.0 开放获取
规模6,388 例手术(6,090 名患者)
接入方式首尔国立大学医院麻醉与疼痛医学科(Seoul National University Hospital) url: https://vitaldb.net/dataset/
AI 就绪度

数据集封面

VitalDB 首尔国立大学术中生命体征数据库 — 术中高频波形 AI-Ready Wikipedia


INFOBOX

数据集名称 VitalDB(Vital Signs DataBase)
英文全称 VitalDB, a high-fidelity multi-parameter vital signs database in surgical patients
别名/简称 VitalDB open dataset、VitalDB v1.0.0、vitaldb
疾病分类 非疾病专属生理信号库;核心研究结局为术中低血压(ICD-11:BA2Z 低血压,未特指)及其关联结局急性肾损伤(ICD-11:GB60 急性肾衰竭)
SNOMED CT 45007003 Hypotension (disorder) / 59927004 Acute renal failure (disorder)
数据模态 术中高频生命体征波形(ECG、有创动脉压、CVP、PPG、CO2、气道压、EEG 等 12 类)+ 184 类数值参数 + 靶控泵药物轨道 + 围术期 EHR 与实验室结果
AI 任务类型 术中低血压预测、无创血压估计、心输出量估计、麻醉深度/BIS 建模、药代-药效建模、心律失常检测、警报优化
样本总数 6,388 例手术(6,090 名患者)/ 486,451 条数据轨道 / 196 类监测参数
数据大小 95.4 GB(PhysioNet 全量解压)/ 113.2 GB(API 轨道 CSV,gzip)
数据格式 .vital 二进制 / CSV(gzip)/ Web API / Parquet(vitaldb 库)
许可证 CC BY 4.0(数据);MIT(vitaldb Python 库)
访问级别 开放(vitaldb.net 注册并签 DUA,或 PhysioNet 直接下载)
DUO 标签 GRU, NRES
语言 英文(文档、字段名与轨道命名);手术名等临床描述保留韩文原值
首发日期 2017(vitaldb.net 首次开放)
最后更新 2022-07(PhysioNet v1.0.0,随 Sci Data 论文同步发布)
发布机构 首尔国立大学医院麻醉与疼痛医学科(Seoul National University Hospital)
官方主页 https://vitaldb.net/dataset/
下载地址 https://physionet.org/content/vitaldb/
DOI 10.1038/s41597-022-01411-5(论文)/ 10.13026/w758-nw21(数据集)
引用次数 282+(Semantic Scholar,截至 2026-09;另有 Vital Recorder 论文 219+)
AI 就绪度评分 ⭐⭐⭐⭐(4/5)— 官方 Python 库、Web API 与示例笔记本齐全;扣分项:无官方任务划分、波形/数值双轨制需自行对齐、旧版 CSV API 存在时间偏移且已弃用
页面状态 published

§0 E-E-A-T 信任声明与免责声明

医学审核者:千方病案医学编辑部交叉审核:§2 医学背景(ICD-11 与 SNOMED CT 映射、术中低血压与 AKI 定义、金标准描述)、§7 偏倚分析。

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

审核日期:2026-09-05

审核方式:交叉审核

利益冲突声明:千方病案医数集与首尔国立大学医院、VitalLab 及 PhysioNet 无任何商业利益关联。本页面不销售 VitalDB 数据集本身,仅提供 AI 就绪指南与学术信息服务。编辑者未接受上述机构的任何形式资助。

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

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

数据使用合规:使用本页面描述的数据集前,请务必阅读并遵守数据集原始许可协议。VitalDB 以 CC BY 4.0 许可通过 PhysioNet 与 vitaldb.net 开放获取,使用时须遵守署名要求并在引用时注明原始论文。DUO 标签仅供参考,具体使用限制以数据集官方协议为准。


§1 数据集概览

§1.0 📌 30 秒速览

这是什么? VitalDB 是首尔国立大学医院在 31 间手术室中的 10 间,用自研免费软件 Vital Recorder 以 7×24 小时自动方式采集的术中生命体征数据库。2016 年 8 月至 2017 年 6 月间,它完整录下了 6,388 例非心脏手术:从麻醉诱导到苏醒,监护仪、麻醉机、脑电监测仪、输液泵等设备的所有信号都被逐秒同步记录在一个病例文件里,最高波形分辨率达 500 Hz,是首个专注围术期监护的开放生物信号库(Lee et al., Sci Data 2022)。

为什么重要? 手术室是信号密度最高的临床场景之一,但绝大多数公开数据库只保存低频数值记录。VitalDB 把 12 类原始波形、184 类数值参数、泵入药物设定与围术期结局(含手术方式、术中输血用药、住院死亡等 74 项临床变量与 34 项实验室指标)锁定在同一条时间轴上,且全部保留真实世界噪声。这使它成为术中低血压预测、无创血压估计、麻醉深度建模等任务公认的基准数据源(Vistisen et al., BJA 2021)。

我能用它做什么? 你可以训练术前-术中的低血压预警模型(该方向已有公开基准)、从动脉压波形估计心输出量、研究麻醉药靶控输注的药效学、标定 BIS 类麻醉深度算法,或把你的 ICU/监护信号算法拿到这里做外部队列验证。官方 vitaldb Python 库支持按轨道名一键流式下载,无需先下载 95.4 GB 全量数据。

§1.1 摘要

VitalDB 由首尔国立大学医院麻醉与疼痛医学科 Chul-Woo Jung 团队构建。团队将自研的 Vital Recorder 程序(Sci Rep 2018)安装到 10 间手术室,通过串行线缆同时连接患者监护仪(GE Solar 8000M 与 Tram-Rac 4A 模拟采集盒)、麻醉机(Dräger Primus)、脑电监测仪(Covidien BIS Vista)、靶控输液泵(Fresenius Kabi Orchestra)、心输出量监测仪(Edwards Vigileo/EV1000/Vigilance II、Deltex CardioQ)等设备,以时间同步方式把每个病例的全部信号写入单个 .vital 文件。当心率与血氧信号同时出现时自动开始记录,消失超过 10 分钟后自动停止。围术期临床信息(74 列)与术前 3 个月至术后 3 个月的 34 项实验室结果从 EMR 回顾提取并按 caseid 关联。数据经随机 caseid、相对时间化(记录起点设为 0)、轨道重命名(股动脉导管 ART→FEM、输液泵 PUMP→具体药名)等脱标识处理后,于 2017 年首发、2022 年以 Sci Data 论文与 PhysioNet v1.0.0 正式开放(CC BY 4.0)。数据集未做任何信号清洗,保留真实噪声正是其核心设计取向——为可落地于临床环境的监测算法提供训练与外验底座。

§1.2 战略价值

维度一:围术期 AI 的公共基准稀缺性。 在 VitalDB 之前,公开的术中波形资源仅有昆士兰大学生命体征数据集等少数小规模单机数据,EMR 类围术期数据(如之后发布的 INSPIRE)时间分辨率最高仅 5 分钟。VitalDB 以 62.5-500 Hz 波形 + EMR 结局的组合,让机器学习研究首次能在同一队列上同时拿到信号与结局,直接催生了 BJA 2021 低血压预测基准(3,301 例)、PLoS ONE 2022 多波形预警模型等一批方法学论文,并被专文评论为麻醉研究协作的范例(Vistisen et al., 2021)。

维度二:真实噪声保留带来的工程转化价值。 数据集明确不做预处理,噪声、伪差与设备静默期全部保留。这与临床部署环境一致:模型必须在污渍、电极松动、冲洗伪差下工作。围绕该库训练的动脉压-心输出量算法(如 APCONet/pyvital 生态)已反向进入同一团队的临床部署管线,形成从开放数据、开源工具(Vital Recorder、pyvital)到临床监测产品的完整闭环,这也是评估信号类数据集落地潜力时罕见的高成熟度样本。

维度三:同院衍生数据族的时间锚点。 VitalDB 与同院的 INSPIRE(约 26 万例,2011-2020,含院内生命体征与结局)存在人群重叠,INSPIRE 官方提供与 VitalDB 的关联工具;研究者可把 VitalDB 的高频波形与 INSPIRE 的长程结局拼接,构建术前-术中-术后的完整研究链路。这一"波形库 + 结局库"的双库结构在公开围术期数据生态中目前独此一家。

维度四:设备算法的公开对照台。 麻醉市场上有大量商业"衍生参数"——麻醉深度指数、动脉压推导心输出量、快速输液监测等——长期缺乏公开数据做独立评估。VitalDB 把产生这些参数的原始设备流(BIS 主机、Vigileo/EV1000、Orchestra 泵)一并记录,使第三方能复算商业算法的输入-输出关系,做方法学审计与本土化校准。论文自述的早期应用清单(心输出算法、BIS 算法的深度学习复现、药代-药效研究)正是这一价值的直接体现。

§1.3 同类数据集横向对比

数据集 机构/年份 规模 模态与分辨率 结局/标注 与 VitalDB 差异
VitalDB v1.0.0 首尔国立大学医院 / 2017 首发 6,388 例手术 12 类波形(62.5-500 Hz)+ 184 类数值(1-7 s)+ TCI 泵药物 74 列围术期临床 + 34 项检验 本体:波形-结局同轴、保留原始噪声
INSPIRE 首尔国立大学医院 / 2023 起 约 260,000 例麻醉(2011-2020) EHR 结构化数据;生命体征最高 5 min ICU 入住、院内死亡、并发症等 同院重叠人群,官方提供与 VitalDB 的匹配工具,可作外验与结局扩展
MOVER UC Irvine / 2023 83,468 例手术(58,799 名患者,2015-2022) 手术室波形 + EHR 关联 围术期事件 美国多设备环境,常用于跨机构泛化测试
UQ Vital Signs 昆士兰大学 / 2012 单机短程采集 麻醉监护波形 无结局关联 早期纯波形库,无临床变量,仅适合信号处理原型

§1.4 版本时间轴

时间 版本/事件 说明
2017 首次发布 vitaldb.net 上线开放数据集与 Web API
2018-01 Vital Recorder 论文 Sci Rep 8:1527,采集方法学正式发表
2022-06-08 Sci Data 论文 Sci Data 9:279,数据描述论文(截至 2026-09 被 Semantic Scholar 收录 282 次)
2022-07 PhysioNet v1.0.0 全量 95.4 GB 开放,DOI 10.13026/czw8-9p62(v1.0.0)/ 10.13026/w758-nw21(最新)
2026-05 vitaldb 库 v1.6.2-1.6.4 开放数据接入重构为 packed .vital 直读,修复旧 CSV API 的时间偏移问题;DATASET_VERSION=1.0.1
2026-06-08 vitaldb 库 v1.7.2 新增无损 to_parquet 回写与长格式 load_parquet

版本选用结论:数据本体以 PhysioNet v1.0.0 为准(版本化 DOI 保证可引用);库侧跟随 1.6.2+(时间轴修复的硬门槛)。两者是独立版本线,引用时分开声明。

§1.5 典型应用场景

  1. 术中低血压预测(最热方向):以动脉压/PPG/ECG/EEG 波形预测未来 5-15 分钟 MAP<65 mmHg 事件,已有 BJA 2021 与 PLoS ONE 2022 公开基准与官方质量核查笔记本可复现。
  2. 无创血压与心输出量估计:用 PPG+ECG 波形回归有创血压或以动脉压波形估计每搏输出量(APCONet/pyvital sv_dlapco 即沿此路线训练并进入部署)。
  3. 麻醉深度与药效建模:BIS 轨道 + EEG 波形 + 丙泊酚/瑞芬太尼 TCI 效应室浓度,支持 PK-PD 与闭环麻醉策略研究。
  4. 监测算法外部队列验证:把在其他数据集(如 ICU 或 MIMIC 系列)上训练的信号算法拿到单中心手术人群上做迁移与稳健性检验。
  5. 信号算法本体研究:波形去噪、心律失常检测(配合社区 R 峰标注)、PPG 合成(GAN 由 ECG 生成 PPG)等纯信号任务。
  6. 术中事件流行病学:以逐搏 MAP 暴露量化低血压剂量与术后 AKI、住院死亡的暴露-反应关系(J Pers Med 2026 的因果分析示范了完整流程)。
  7. 警报与流程优化研究:利用通气参数、气体浓度与用药轨道复盘警报阈值设置与人工干预模式,为报警疲劳问题提供数据基础。

§2 医学背景

§2.1 ICD-11 编码映射

VitalDB 为生理信号库而非疾病队列,但其核心研究结局与下游任务围绕以下 ICD-11 概念展开:

概念 ICD-11 编码 中文名称 在 VitalDB 中的体现
术中低血压 BA2Z 低血压,未特指 MAP<65 mmHg 事件标签(由动脉压轨道衍生),低血压预测任务的正类
急性肾损伤 GB60 急性肾衰竭 术后 7 天肌酐变化(lab_data.csv),IOH-AKI 因果研究的主要结局
直立性低血压 BA21 直立性低血压 低血压表型分型研究的参照概念

注:ICD-11 低血压类目位于循环系统章(BA20-BA2Z),急性肾衰竭为 GB60(GB61 为慢性肾脏病),两者均可经 WHO ICD-11 浏览器核验。院内死亡结局由 clinical_data.csv 的 death_inhosp(0/1)字段承载,不设 ICD-11 映射(死亡归因编码属 EMR 原始层)。

§2.1b SNOMED CT 映射

标签 ICD-11 SNOMED CT 码 术语
低血压 BA2Z 45007003 Hypotension (disorder)
急性肾衰竭 GB60 59927004 Acute renal failure (disorder)
心电监护 163009 不适用(以 12 类波形轨道的设备前缀为操作级映射)

注:除上述已核验概念外,轨道与 SNOMED 观测概念(如 ECG 导联、血压测量操作)不存在官方一一映射,跨术语链接需研究者自行维护(见坑点 5)。

§2.2 医学背景简介

现代麻醉要求在诱导、维持到苏醒的全过程中同时监护心率、血压、血氧饱和度、体温、呼吸力学、吸入/呼出气体浓度与麻醉深度。这些生命体征的动态交互——例如麻醉药诱导的血管扩张、失血与补液、正压通气对静脉回流的影响——决定了术中最常见的并发症之一:术中低血压(intraoperative hypotension, IOH)。IOH 常用定义为平均动脉压(MAP)低于 65 mmHg;大量队列研究显示其暴露剂量与术后急性肾损伤、心肌损伤及住院死亡率呈剂量依赖相关,且不同研究对 IOH 的定义差异极大(有系统综述统计过上百种定义,报告的发生率区间横跨 5%-99%),这也是信号级高频数据(而非每 5 分钟一次的护理记录)对 IOH 研究至关重要的原因:只有逐搏动脉压波形才能精确刻画低血压的累积暴露量。流行病学上,非心脏手术人群中多数患者会在术中至少经历一次 MAP<65 mmHg 暴露,麻醉时长中位数约 2.5 小时的 VitalDB 队列(中位 150 min)正落在这一典型暴露区间。VitalDB 的临床价值即在于把这类高频暴露与围术期结局放进同一数据底座,支持暴露-结局建模、预警算法开发与设备算法的对照评估。

§2.3 临床任务定义

任务类型 定义 VitalDB 支撑数据
预警(预测) 提前 5/10/15 分钟预测 MAP<65 mmHg 事件(二分类)或回归未来 MAP SNUADC/ART、SNUADC/PLETH、SNUADC/ECG_II、BIS 波形;Solar8000/ART_MBP 参照
估计(回归) 由 PPG/ECG 估计有创血压;由动脉压波形估计心输出量/每搏量 PLETH、ECG_II 对 ART;ART 对 Vigileo/EV1000/Vigilance/CardioQ 数值
分级/深度 麻醉深度指数建模与镇静水平估计 BIS/BIS、BIS/EEG1_WAV、Primus 麻醉气体、Orchestra TCI 浓度
结局关联/因果 IOH 累积暴露与术后 AKI、住院死亡的关联与效应异质性 波形衍生 MAP 暴露 + preop_cr/术后肌酐 + death_inhosp
药代-药效 靶控输注设定与效应室浓度-生理反应建模 Orchestra 各药物 RATE/VOL/浓度轨道 + BIS/生命体征反应
低氧/通气事件研究 SpO2、气道压与气体浓度的异常事件检测与预警 Solar8000/SPO2、Primus/AWP、Primus/CO2、MAC 轨道
输血与容量管理 术中出血量、输血输液与血流动力学反应建模 intraop_ebl/intraop_rbc/intraop_ffp + ART/CVP/Orchestra 容量轨道

§2.4 患者人群

维度 内容
来源机构 首尔国立大学医院(韩国首尔,三级转诊中心),31 间手术室中的 10 间
采集时间 2016-08 至 2017-06(连续 11 个月,7×24 小时记录)
手术类型 普外 4,930(77.2%)、胸外 1,111(17.4%)、妇科 230(3.6%)、泌尿 117(1.8%)
麻醉方式 全麻 6,043(94.6%)、脊椎麻醉 273(4.3%)、镇静/镇痛 72(1.1%)
年龄 中位 59 岁(IQR 48-68)
性别 男 3,243(50.8%)/ 女 3,145(49.2%)
种族 单一亚洲(韩国)人群为主(论文 limitation 明示单中心单种族)
就医类型 择期与急诊非心脏手术(急诊标记 emop 字段;心脏手术与局麻排除)
入路 开放 3,368(52.7%)、腔镜 2,701(42.3%)、机器人 269(4.2%)

§2.5 临床价值

对麻醉科与重症研究而言,VitalDB 提供了把床旁信号研究推向可复现科学的三块基石:其一,高频暴露测量——IOH、低 BIS、低氧、高气道压等暴露不再依赖护理抄录,而由波形直接衍生,消除了记录偏倚的主要来源;其二,器械算法的对照基准——厂商麻醉深度指数、心输出量估计算法可在同一队列上被复算与比价(论文列出的早期应用即包括动脉压心输出算法与 BIS 算法的深度学习复现);其三,教学与剂量研究——TCI 泵轨道完整记录丙泊酚/瑞芬太尼的设定与输注史,是研究药物-反应关系少有的公开资源。若与 INSPIRE 联用,还能延伸到术后ward与 ICU 的长程结局。

§2.6 金标准表

任务 划分 标注方式 标注者 性质
术中低血压事件 无官方划分(社区按 subjectid/caseid 分组自建) 算法衍生:动脉压波形计算 MAP,阈值 65 mmHg(前瞻窗 5/10/15 min) 无人工标注(衍生标签) 弱监督/规则标签
生命体征数值 设备自动记录 监护设备 仪器读数
围术期临床变量 EMR 回顾提取 + 自动清洗 无人工标注 回顾性结构化
心律失常 R 峰 社区衍生标注(vitaldb-arrhythmia) 研究团队 公开衍生标注

注:除上表外,所有厂商衍生参数(BIS 指数、Vigileo 每搏量等)在数据中均以"设备输出"身份存在——它们是该设备专有算法的结果,可作参照系但不是独立金标准;涉及此类参数的研究应在 Methods 中声明参照性质。


§3 数据集规格

§3.0 版本抉择矩阵

你的需求 推荐版本/通道 大小 理由
大规模波形训练(自建窗口数据集) PhysioNet v1.0.0 全量下载 95.4 GB(ZIP 94.2 GB) 一次性拿到 6,388 个 .vital 文件与全部 CSV,离线可复现
快速探索与原型(单轨道/单病例) vitaldb Python 库(pip install vitaldb,≥1.6.2) 按需流式(单轨道可省 60-76% 流量) load_case/find_cases 直接按轨道名取数,内置 packed .vital 时间轴
仅做临床变量建模(不碰波形) Web API:api.vitaldb.net/cases、/labs 约 2 MB 级 74 列临床表 + 34 项检验直接拉取
衍生小数据快速试验 vitaldb.net/data-bank/(如 APCONet ABP 片段 numpy) 数 GB 级 预切片 ABP 100 Hz 片段与人口学数组,适合快速调参;部分衍生集需申请

§3.1 模态详情

12 类波形轨道(经 track_names.csv 实测核验):

轨道名 含义 采样率 单位
SNUADC/ART 有创动脉压波形 500 Hz mmHg
SNUADC/FEM 股动脉压波形 500 Hz mmHg
SNUADC/CVP 中心静脉压波形 500 Hz mmHg
SNUADC/ECG_II ECG II 导联 500 Hz mV
SNUADC/ECG_V5 ECG V5 导联 500 Hz mV
SNUADC/PLETH 指脉氧容积波(PPG) 500 Hz 无量纲
Primus/CO2 二氧化碳波形(主流式) 62.5 Hz mmHg
Primus/AWP 气道压波形 62.5 Hz hPa
BIS/EEG1_WAV BIS 设备 EEG 通道 1 128 Hz μV
BIS/EEG2_WAV BIS 设备 EEG 通道 2 128 Hz μV
CardioQ/ABP 食道多普勒动脉压波形 180 Hz mmHg
CardioQ/FLOW 降主动脉血流波形 180 Hz cm/s

184 类数值轨道覆盖 11 个设备前缀(Solar8000 44 个参数 @2 s、Primus 37 个 @7 s、Orchestra TCI 51 个 @1 s、BIS 8 个 @1 s、Vigileo/EV1000/Vigilance/CardioQ/Invos/FMS2000 等),包含心率、血压(SBP/DBP/MBP)、SpO2、体温、麻醉气体 MAC、通气设置与呼吸力学、靶控设定与效应室浓度、输液速率与累积量。轨道总量 486,451 条(每例平均 87 条,范围 16-129),每例平均约 280 万数据点;每例轨道组合因设备使用而异。

常用数值轨道速查(实测自 track_names.csv,字段为 轨道名 | 含义 | 类型 | 单位):

轨道名 含义 类型 单位
Solar8000/HR 心率 N bpm
Solar8000/ART_SBP / ART_DBP / ART_MBP 有创血压收缩/舒张/平均 N mmHg
Solar8000/ART_SPO2 / PLETH_SPO2 血氧饱和度 N %
Solar8000/NIBP_SBP / NIBP_DBP / NIBP_MBP 无创袖带血压 N mmHg
Solar8000/ETCO2 / INCO2 呼气末/吸入 CO2 N mmHg
Solar8000/FIO2 / FEO2 吸入/呼出氧浓度 N %
Solar8000/MAC 最低肺泡有效浓度 N
Solar8000/BT 体温 N
Solar8000/CVP 中心静脉压 N mmHg
Solar8000/VENT_MAWP / PIP_MBAR 类 通气道压(Primus 侧另有 hPa 波形) N
BIS/BIS 麻醉深度指数 N
Orchestra/PPF20_VOL / PPF20_RATE 丙泊酚 2% 累积量/速率 N mL / mL/h
Orchestra/RF_RATE 类 瑞芬太尼输注速率 N mL/h
Orchestra/PPF20_CE 丙泊酚效应室浓度(模型估算) N μg/mL
Primus/ETCO2 / FIN2O / FEN2O 麻醉机侧气体浓度 N

轨道命名规律:设备前缀/参数名。Solar8000 前缀统一来自 GE 监护仪;同一生理量常同时存在于多个前缀(如 CO2 在 Solar8000 与 Primus 各有一条),二者分辨率与延迟不同,不能混用(见坑点 3、坑点 5)。

§3.2 按子集样本数

子集 例数 占比
普通外科 4,930 77.2%
胸外科 1,111 17.4%
妇科 230 3.6%
泌尿科 117 1.8%
合计 6,388 100%
其中全麻 6,043 94.6%
其中脊椎麻醉 273 4.3%
其中镇静/镇痛 72 1.1%

设备覆盖(可多选):Solar 8000M 6,388(100%)、Tram-Rac 4A(SNUADC 模拟采集)6,355(99.5%)、Primus 麻醉机 6,362(99.6%)、BIS Vista 5,566(87.1%)、Orchestra TCI 4,919(77.0%)、EV1000 599、Vigileo 348、Vigilance II 63、INVOS 33、CardioQ 29、FMS2000 15。

§3.3 数据格式

形态 格式 说明
病例波形 .vital 二进制 Vital Recorder 原生格式,含全部轨道与事件轨,规范文档见仓库 Vital File Format
轨道导出 CSV(gzip) 论文时期由 /trks 索引 + /{tid} 下载,两列 Time/Value;v1.6.2 起官方推荐直接读 packed .vital(见坑点 2)
临床信息 CSV clinical_data.csv(74 列)+ clinical_parameters.csv(字段说明)
实验室 CSV lab_data.csv + lab_parameters.csv
数据框 Parquet vitaldb 库 v1.7.2 起支持无损 to_parquet/load_parquet
校验 SHA256SUMS.txt PhysioNet 侧逐文件校验和,下载后必须执行

§3.4 存储大小

PhysioNet v1.0.0 解压总量 95.4 GB(ZIP 94.2 GB);论文口径的轨道 CSV 总量 113.2 GB。AWS S3 公共桶 s3://physionet-open/vitaldb/1.0.0/ 支持 aws s3 sync --no-sign-request 免登录同步。每例 .vital 文件平均约 15 MB,含约 280 万数据点。

§3.5 标注方式

全部原始信号与临床变量由设备自动记录与 EMR 自动提取产生,无人工逐例标注。任务级标签由研究者按规则衍生:低血压事件以动脉压 MAP<65 mmHg 阈值定义(如 BJA 2021 基准);心输出量参照值取自对应监测设备。数据集刻意不做信号清洗,伪差保留率 100%。

按标注机制分三类:①设备自动测量(波形与数值轨道,逐秒/逐搏,精度取决于设备);②EMR 结构化提取(临床信息 74 列,回顾性、以字段原有编码为准);③规则衍生(研究者在轨道上按阈值/窗口计算的标签)。三类机制的误差来源不同,特征工程与质量核查需分别对待。

§3.6 标注者资质与一致性

不适用人工标注者协议;质量控制由官方公开的 vitaldb_quality_check.ipynb 提供可复用的信号质量核查流程(NaN 比例、离群值、轨道覆盖检查)。衍生标签的边界效应(窗内/窗外事件)是研究者须自行控制的主要一致性风险(见坑点 6)。

§3.7 采集周期

2016 年 8 月至 2017 年 6 月,共 11 个月连续采集。入组流程(论文 Table 1 口径):

步骤 例数
合格手术(非心脏,符合监测条件) 7,051
排除:局部麻醉 −239
排除:记录不完整 −279
排除:关键数据轨道缺失 −145
最终入组 6,388(91%)

记录自动化规则:心率与 SpO2 信号同时出现即开始记录,两者同时消失超过 10 分钟自动停止,因此 casestart/caseend 覆盖患者入室监护至出室全程,通常长于麻醉期(anestart/aneend)与手术期(opstart/opend)。

§3.8 地域覆盖

韩国首尔大学医院单中心;采集期 2016/2017;无更细地理信息(脱标识要求,数据中不含地址与就诊日期)。

§3.9 设备规格

设备 类型 厂商 参数数 采样间隔
Tram-Rac 4A(SNUADC) 患者监护模拟采集 GE Healthcare 6(波形) 1/500 s
Solar 8000M 患者监护仪 GE Healthcare 44(数值) 2 s
Primus 麻醉机 Dräger 37(波形+数值) 波形 1/62.5 s,数值 7 s
BIS Vista 脑电监护 Covidien 8(波形+数值) EEG 波形 1/128 s,数值 1 s
Orchestra 靶控输液泵 Fresenius Kabi 51(数值) 1 s
Vigileo 心输出量监测 Edwards Lifesciences 5(数值) 2 s
EV1000 心输出量监测 Edwards Lifesciences 9(数值) 2 s
Vigilance II 心输出量监测 Edwards Lifesciences 14(数值) 2 s
CardioQ 食道多普勒监测 Deltex Medical 13(波形+数值) 波形 1/180 s,数值 1 s
INVOS 脑/躯体氧饱和 Covidien 2(数值) 5 s
FMS2000 快速输液系统 Belmont Instrument 7(数值) 每 2.875 mL 输注

§3.10 深度溯源链

麻醉设备(11 类)→ 串行/TCP 线缆 → Vital Recorder v1.7.4(时间同步写入单病例 .vital 文件)→ SNUH 数据整理(轨道核查、重命名、脱标识:随机 caseid、相对时间、FEM/PUMP 改名)→ vitaldb.net 云 + Web API(/cases、/trks、/labs、/{tid})→ PhysioNet v1.0.0 存档(95.4 GB,SHA256SUMS.txt 校验)。论文 Methods 与 IRB(H-1408-101-605)可在源头核验;ClinicalTrials.gov 注册号 NCT02914444。


§4 数据结构

§4.0 目录树

PhysioNet v1.0.0 解压后的实际目录(2026-09 实测):

vitaldb/1.0.0/
├── vital_files/                  # 6,388 个二进制病例文件
│   ├── 0001.vital                # caseid=1,全轨道时间同步波形+数值
│   ├── 0002.vital
│   └── ...                       # 命名为 4 位数字 caseid.vital
├── clinical_data.csv             # 围术期临床信息:每行一例,74 列
├── clinical_parameters.csv       # clinical_data 各字段的名称/说明
├── lab_data.csv                  # 时间序列实验室结果(34 项)
├── lab_parameters.csv            # 实验室字段说明
├── track_names.csv               # 196 类轨道字典:Parameter, Description, Type/Hz, Unit
├── LICENSE.txt                   # CC BY 4.0
└── SHA256SUMS.txt                # 文件校验和

Web API 侧的等价资源:https://api.vitaldb.net/cases(临床表)、/labs(检验)、/trks(486,449 行轨道索引:caseid, tname, tid)、/{tid}(单轨道 csv.gz,两列 Time/Value)。vitaldb Python 库在 ≥1.6.2 版本默认走 packed .vital 路径 https://api.vitaldb.net/{caseid}.vital

§4.1 DAIMS 数据字典

核心字段字典(8 列,选 14 个最关键字段):

字段名 类型 说明 示例值 AI 用途 观测误差 信息性缺失编码 取值范围
caseid Integer 随机手术病例 ID,主键 1 样本级主键、连接波形与临床表 无(缺失=整行不存在) 1-6,388
subjectid Integer 脱标识患者 ID 10052 再手术分组、防泄漏划分 1-6,090
casestart/caseend Integer 记录起止相对秒(casestart=0) 0 / 12,540 波形时间轴对齐 记录起止判定(HR+SpO2 出现/消失 ±10 min 规则) ≥0
anestart/aneend Integer 麻醉起止相对秒 660 / 11,880 定义麻醉期、剔除诱导前/苏醒后 EMR 时间抄录误差 相对秒
opstart/opend Integer 手术(切皮-缝合)起止相对秒 960 / 10,920 手术期子窗口 EMR 抄录误差 相对秒
emop Integer 急诊手术标记 0 偏倚分层、风险模型特征 0 表未标/择期 0/1
age/sex/height/weight/bmi Mixed 人口学 59 / M / 162 / 61 / 23.2 协变量 自报/测量 空值 age 含 >89 归并风险(见 §4.5)
ane_type Text 麻醉类型 General 任务筛子(全麻子集) General/Spinal/Sedation
SNUADC/ART Float 有创动脉压波形 500 Hz 87.4 mmHg IOH 标签源、逐搏分析 导管动态响应/冲洗伪差 缺失留空(波形轨) 生理范围外含伪差
SNUADC/ECG_II Float ECG II 导 500 Hz 0.31 mV 心律/HRV 任务 电极伪差、基线漂移 缺失留空
Solar8000/ART_MBP Float 监护仪 MAP 数值 @2 s 86 mmHg 快速标签参照(与波形衍生 MAP 有差) 设备算法平滑 缺失删行(数值轨) 0-300 mmHg 含伪值
BIS/BIS Float 麻醉深度指数 @1 s 42 深度建模标签 设备算法估计 缺失删行 0-100
Orchestra/PPF20_VOL Float 丙泊酚 2% 累积输注量 @1 s 235.0 mL PK-PD、用药特征 泵精度 缺失删行 ≥0
asa Integer ASA 体格状态分级 2 风险分层特征 麻醉医师主观评定 空值 1-5(含 E 后缀语义在 ane_type/emop 组合中)
preop_htn / preop_dm Integer 高血压/糖尿病既往史 0 合并症协变量 EMR 编码 空值 0/1
intraop_ebl Integer 术中估计出血量(mL) 350 容量管理/输血建模 医师估计(主观性强) 空值 ≥0
icu_days Integer 术后 ICU 住院天数 0 资源利用结局 EMR 登记 空值 ≥0
death_inhosp Integer 院内死亡 0 结局标签 EMR 登记 空值=未知 0/1

§4.2 标签分布

数据集无内置任务标签,常用衍生标签的总体分布可由官方统计推导:麻醉方式(全麻 94.6% / 脊椎 4.3% / 镇静 1.1%)、手术入路(开放 52.7% / 腔镜 42.3% / 机器人 4.2%)、主要麻醉药使用率(瑞芬太尼 TCI 75.7%、丙泊酚 TCI 54.8%、七氟烷 39.7%、地氟烷 21.6%)。IOH 事件率因定义(阈值、窗口、人群)而异,官方未提供统一标签;BJA 2021 基准在 3,301 例全麻人群上构建 5/10/15 min 窗口标签。

对衍生标签分布的实操建议:在自建标签层完成后,按手术类型 × 麻醉方式 × 急诊标记三维交叉表报告事件率——普外与胸外、全麻与脊椎麻醉、择期与急诊之间的低血压发生率差异可能达数倍,任何只报总体事件率的基线都会掩盖分层问题。罕见子集(如机器人手术 269 例、脊椎麻醉 273 例)事件率估计不稳定,应合并报告或加置信区间。

§4.3 关键统计

  • 轨道总数 486,451(每例 16-129 条,均值 87);唯一参数 196 类;设备前缀 11 个(2026-09 对 /trks 实测 486,449 行,与论文一致)。
  • 波形轨道最高 500 Hz、最低 62.5 Hz;数值轨道 1-7 s。
  • 有创动脉压(ART/FEM 波形)覆盖约 60% 病例(MDPI 2026 研究从 6,388 例中排除 2,578 例无动脉波形)。
  • 麻醉时长中位 150 min(IQR 90-240)。
  • 检验时间窗:术前 3 个月至术后 3 个月,34 项。

覆盖面最高的轨道(2026-09 对 /trks 索引实测,前 12 名):

轨道名 覆盖例数 备注
Solar8000/HR 6,387 心率,近乎全量
Solar8000/PLETH_SPO2 6,386 SpO2 数值
Solar8000/PLETH_HR 6,386 脉搏率
Primus/CO2 6,362 二氧化碳波形
Primus/SET_AGE 6,361 麻醉机设定
Primus/PAMB_MBAR 6,361 大气压
Primus/AWP 6,360 气道压波形
SNUADC/ECG_II 6,355 ECG II 导波形
Primus/VENT_LEAK 6,344 回路泄漏
Primus/INCO2 6,339 吸入 CO2
Primus/FIN2O 6,339 吸入 N2O
Primus/ETCO2 6,339 呼气末 CO2

该表说明监护仪与麻醉机轨道接近全覆盖,而 BIS(5,566 例)与有创血流动力学设备轨道的缺失主要由麻醉方式与病情决定,构成天然的选择性结构。

§4.4 数据层级

患者(subjectid,6,090 名)→ 手术病例(caseid,6,388 例;个别患者多次手术)→ 数据轨道(tname 带 11 类设备前缀;tid 为 40 位十六进制轨道唯一地址)→ 采样点(Time/Value;波形轨以起点+固定间隔+长度重建时间轴,数值轨以实际采集时刻存储)。跨表连接:clinical_data.caseid ↔ 轨道索引.caseid;lab_data 以 caseid+时间戳关联。

subjectid (6,090 名患者,脱标识)
└── caseid (6,388 例手术,主键)
    ├── .vital 病例文件
    │   ├── SNUADC/*          500 Hz 波形(ART/FEM/CVP/ECG/PLETH)
    │   ├── Primus/*          62.5 Hz 波形 + 7 s 数值(麻醉机)
    │   ├── Solar8000/*       2 s 数值(监护仪)
    │   ├── BIS/*             128 Hz EEG 波形 + 1 s 数值
    │   ├── Orchestra/*       1 s 数值(TCI 泵)
    │   └── 其他设备前缀       Vigileo/EV1000/Vigilance/CardioQ/Invos/FMS
    ├── clinical_data.csv 行(74 列围术期信息)
    └── lab_data.csv 行(34 项检验 × 时间戳)

§4.5 缺失值与信息性缺失

缺失类型 表现 处理建议
数值轨道缺失 缺失行被直接删除,时间间隔不规则(1-7 s 名义间隔不等于实际均匀) 重采样到统一网格并显式填充 NaN,禁止假设均匀采样
波形轨道缺失 缺失值保留为空白,时间轴仍连续(由起点/间隔/终点三值重建) 读入后以 NaN 标记,QC 统计连续缺失时长
临床变量缺失 空单元格(如 preop_pft、cline2 等按需项) 建模前显式编码缺失指示;无 -999 类哨兵值
设备性缺失 设备组合逐例不同(16-129 轨道):无 BIS 的脊椎麻醉病例天然无 EEG find_cases 先筛有目标轨道的 caseid 集合再建任务
年龄上限 高龄患者年龄可能被归并处理 敏感分析时按上限处理

注:数据集不使用信息性缺失哨兵编码;缺失模式本身携带临床信息(如无动脉线的病例更可能是低风险择期手术),建模时应区分"未监测"与"生理缺失"(见坑点 7)。


§5 划分与使用建议

§5.1 官方划分

无。VitalDB 官方不提供 train/val/test 划分,任务定义与划分由研究者自建。

§5.2 社区惯例划分

  • BJA 2021 基准:3,301 例全麻病例,按病例划分训练/内部验证,5/10/15 min 前瞻窗口二分类 + MAP 回归双任务。
  • APCONet 管线:以 chart ID(病例)为分组键做 train/validation 切分,明确要求同一病例的所有 20 s 片段不得跨集合(README 原文强调防泄漏)。
  • 社区通用:按 caseid 分层抽样 70/15/15 或 5 折交叉验证;涉及 subjectid 重复者必须按 subjectid 分组。

按 subjectid 分组的参考划分代码:

import pandas as pd
import vitaldb
from sklearn.model_selection import GroupKFold

cases = vitaldb.load_clinical_data()[["caseid", "subjectid"]]
task_ids = vitaldb.find_cases("SNUADC/ART")          # 有动脉压波形的病例
df = cases[cases.caseid.isin(task_ids)].reset_index(drop=True)

gkf = GroupKFold(n_splits=5)
for fold, (tr, te) in enumerate(
        gkf.split(df, groups=df.subjectid.values), 1):
    train_ids = df.caseid.values[tr]
    test_ids = df.caseid.values[te]
    print(f"fold {fold}: train {len(train_ids)} cases, "
          f"test {len(test_ids)} cases")
    # 同一 subjectid 的所有病例始终落在同一折

§5.3 泄漏风险(重点)

  1. 同患者多次手术:6,388 例对应 6,090 名患者;若按 caseid 随机划分,同一患者的两次手术可分属训练与测试,导致生理基线泄漏。解决:GroupShuffleSplit/GroupKFold(groups=subjectid)
  2. 窗口重叠:滑动窗样本(如 20 s 片段、5 min 前瞻标签)相邻窗口高度相关;必须以病例为单位整体进集合,任何窗级随机划分都构成泄漏。
  3. 衍生特征的未来信息:MAP 回归任务若以"未来 MAP"构造标签,切勿把含标签时刻的波形段留在输入;TCI 效应室浓度是模型外推值,含设定信息。
  4. 预处理统计泄漏:归一化均值/方差、QC 阈值须在训练集内拟合后应用于验证/测试。

§5.4 交叉验证建议

按 subjectid 分组的 5 折 GroupKFold 为默认起点;报告折间均值±标准差而非单次划分;小样本结局(如院内死亡)建议分层。波形任务的折叠间应保持设备组合分布可比(BIS 有/无、动脉线有/无)。

两处细节:①GroupKFold 不分层,若结局事件率低,先用 StratifiedGroupKFold(sklearn ≥1.0)按病例级标签分层;②折内再做超参搜索时,验证子集必须从训练折内部切出(嵌套划分),不得触碰外层测试折——波形任务的超参数(窗口长度、步长、QC 阈值)本身就是"超参",也须在嵌套层内选定。

§5.5 外部验证建议

首选同院 INSPIRE(官方 linker 匹配人群,结局更全,但生命体征仅 5 min 分辨率,适合结局端外验);跨机构首选 MOVER(美国多设备环境,可检验设备迁移与文档习惯差异);纯信号算法可用 MIMIC 系列波形记录对照。跨人群(非东亚)验证目前缺乏公开围术期等价数据,应在论文中明示为局限。


§6 AI 就绪指南 ⭐

§6.0 云端快速启动

任何能装 Python 包的环境即可起步(官方推荐 ≥Python 3.8):

pip install vitaldb          # MIT 许可,PyPI 最新 1.7.2(2026-06-08)
python -c "import vitaldb; print(vitaldb.__version__)"

无需下载 95.4 GB:load_case 会按 caseid 从 https://api.vitaldb.net 流式拉取 packed .vital 文件,指定轨道名时支持流式提前截止(v1.6.3 起单轨道 ECG 下载量由 17.6 MB 降至 6.3 MB)。

Colab/Kaggle 等云端环境直接可用(仅依赖网络与 pip),推荐先跑一个最小探针确认连通性:vitaldb.load_case(1, "Solar8000/ART_MBP", interval=1.0) 返回一维数组即成功;国内网络环境建议改走 AWS S3 通道或自建镜像。

§6.1 快速上手

# 目录结构预期:无需本地数据;本例全部走云端 API。
# 若已用 PhysioNet ZIP 下载到本地,可把 data_root 指向解压目录:
#   data_root = "/data/vitaldb/1.0.0"        # 解压根目录
#   波形文件 = data_root/vital_files/{caseid:04d}.vital
#   临床表   = data_root/clinical_data.csv
# 最小可用子集:临床表 cases(约 2 MB)+ 任意 caseid 的 SNUADC/ECG_II 轨道。
# data_root 拼接关系:本地模式下轨道文件路径 = f"{data_root}/vital_files/{caseid:04d}.vital"。
import vitaldb

# 1) 找到同时具有所需轨道的病例(轨道名 = 设备前缀/参数名)
caseids = vitaldb.find_cases("SNUADC/ECG_II,Solar8000/ART_MBP")
print(len(caseids), caseids[:5])          # 返回有创轨道+ECG 齐备的 caseid 列表

# 2) 读一例的 1 Hz 网格数据:返回 (N, 2) 数组,缺失为 NaN
data = vitaldb.load_case(1, "SNUADC/ECG_II,Solar8000/ART_MBP", interval=1.0)
ecg_1hz, mbp_1hz = data[:, 0], data[:, 1]

# 3) 临床表与检验表(pandas DataFrame)
cases_df = vitaldb.load_clinical_data()   # 6,388 行 × 74 列
labs_df = vitaldb.load_lab_data()

# 4) 高分辨率波形:500 Hz ECG(interval=1/500)
ecg_500 = vitaldb.load_case(1, "SNUADC/ECG_II", interval=1/500)

注意:轨道名必须带设备前缀(SNUADC/ECG_II 而非 ECG_II);完整轨道字典见 track_names.csvvitaldb.get_track_names()

本地 .vital 文件读取(全量下载后的离线路线):

import vitaldb

# 已下载 /data/vitaldb/1.0.0/vital_files/0001.vital
vf = vitaldb.VitalFile("/data/vitaldb/1.0.0/vital_files/0001.vital",
                       ["SNUADC/ECG_II", "Solar8000/ART_MBP"])
print(vf.get_track_names())                      # 确认轨道已加载
ecg = vf.to_numpy("SNUADC/ECG_II", 1/500)        # 500 Hz 原生分辨率
df = vf.to_pandas(["SNUADC/ECG_II", "Solar8000/ART_MBP"], 1)  # 1 Hz 对齐宽表

# 也可以用通用读取入口自动识别格式(vital/csv/csv.gz/wfdb/parquet)
vf2 = vitaldb.read_vital("/data/vitaldb/1.0.0/vital_files/0001.vital",
                         header_only=True)       # 只读轨道头,秒级探测

§6.2 数据获取

方式 命令/链接 大小 适用
PhysioNet ZIP https://physionet.org/content/vitaldb/ → Download ZIP 94.2 GB 全量离线训练
AWS S3 免登录 aws s3 sync --no-sign-request s3://physionet-open/vitaldb/1.0.0/ DEST 95.4 GB 服务器批量同步
Web API(轨道 CSV) wget https://api.vitaldb.net/cases -O cases.csv.gz;轨道经 /trks 索引取 / 按需(全部 CSV 合计 113.2 GB) 临床建模、抽查
vitaldb 库流式 vitaldb.load_case(caseid, tracks, interval) 按需 原型与小样本
DUA 通道 vitaldb.net 注册并签数据使用协议 需要 userid 的云下载/部分 data-bank 衍生集

PhysioNet 侧为 CC BY 4.0 开放访问(无需 credentialed 账号),引用须注明 Sci Data 2022 论文

# 方式一:PhysioNet 全量递归下载(断点续传)
wget -r -N -c -np https://physionet.org/files/vitaldb/1.0.0/

# 方式二:AWS S3 免登录同步(推荐服务器使用)
aws s3 sync --no-sign-request s3://physionet-open/vitaldb/1.0.0/ /data/vitaldb/1.0.0/

# 方式三:仅临床与检验表(轻量起步)
wget https://api.vitaldb.net/cases -O cases.csv.gz
wget https://api.vitaldb.net/labs -O labs.csv.gz

# 校验完整性(PhysioNet 提供 SHA256 清单)
sha256sum -c SHA256SUMS.txt --quiet

§6.3 预处理全流程

从原始轨道到可训练窗口的推荐流程(格式转换→清洗→标准化→窗口化):

import numpy as np
import vitaldb
from scipy.signal import butter, filtfilt

FS = 100  # 统一重采样到 100 Hz

def load_case_window(caseid, dur_s=6 * 3600):
    """读取 ECG+PPG+ART 三条 500 Hz 波形并重采样到 100 Hz。"""
    waves = vitaldb.load_case(
        caseid, "SNUADC/ECG_II,SNUADC/PLETH,SNUADC/ART", interval=1/FS)
    return waves  # (N, 3),缺失已填 NaN

def clean_wave(w, kind):
    """单通道清洗:去 NaN 段 + 带通滤波。"""
    valid = ~np.isnan(w)
    if valid.sum() < 10:
        return np.full_like(w, np.nan)
    b, a = butter(3, [0.5/(FS/2), 40/(FS/2)], btype="band")
    out = np.full_like(w, np.nan)
    # 只对连续有效段滤波,避免跨缺失段卷积产生伪值
    idx = np.where(valid)[0]
    segs = np.split(idx, np.where(np.diff(idx) > 1)[0] + 1)
    for s in segs:
        if len(s) > 3 * 10:  # 至少 10 s 连续段
            if kind == "ecg":
                out[s] = filtfilt(b, a, w[s])
            elif kind in ("ppg", "art"):
                out[s] = filtfilt(
                    *butter(3, [0.5/(FS/2), 20/(FS/2)], btype="band"), w[s])
    return out

def znorm(x):
    """按通道 z 标准化;均值/方差应只在训练集上统计后保存复用。"""
    mu = np.nanmean(x, axis=0, keepdims=True)
    sd = np.nanstd(x, axis=0, keepdims=True)
    return (x - mu) / (sd + 1e-8)

要点:①先 find_cases 锁定有全部目标轨道的病例;②滤波只作用于连续有效段(跨缺失卷积会制造伪差);③标准化统计量按 §5.3 规则在训练集拟合;④窗口化时同步保存 caseid 与窗口起点,便于按病例分组划分与回溯调试。

窗口化与标签落盘(一次计算、多次训练复用):

import numpy as np
import pandas as pd

def build_windows(caseids, win_s=60, horizon_s=300, step_s=30):
    """以 100 Hz 60 s 窗 × 5 min 前瞻构造 IOH 样本并落盘 Parquet。
    输出:samples.parquet(caseid/t0/label/valid_ratio)+ X/{caseid}_{t0}.npz
    """
    FS = 100
    rows = []
    for cid in caseids:
        waves = vitaldb.load_case(
            cid, "SNUADC/ART,SNUADC/ECG_II,SNUADC/PLETH", interval=1/FS)
        mbp = vitaldb.load_case(cid, "Solar8000/ART_MBP", interval=1.0)[:, 0]
        n = min(len(waves), len(mbp))
        for t0 in range(0, n - (win_s + horizon_s) * FS, step_s * FS):
            x = waves[t0: t0 + win_s * FS]
            fut = mbp[(t0 + win_s * FS): t0 + (win_s + horizon_s) * FS]
            fut = fut[~np.isnan(fut)]
            if len(fut) < horizon_s * 0.8 or np.isnan(x).all():
                continue
            label = int((fut < 65).any())
            np.savez_compressed(f"X/{cid}_{t0}.npz", x=x)
            rows.append((cid, t0, label, float(np.mean(~np.isnan(x)))))
    pd.DataFrame(rows, columns=["caseid", "t0", "label", "valid_ratio"]
                 ).to_parquet("samples.parquet", index=False)

§6.4 PyTorch DataLoader

术中低血压预测(前瞻 5 min,MAP<65 mmHg)最小可运行示例:

import numpy as np
import torch
from torch.utils.data import Dataset, DataLoader
import vitaldb

FS = 100
WIN_S, HORIZON_S = 60, 300          # 60 s 输入窗,预测未来 5 min

class IOHDataset(Dataset):
    """术中低血压预测数据集。
    预期目录结构(本地模式):/data/vitaldb/1.0.0/vital_files/{caseid:04d}.vital
    本示例直接走 vitaldb 云端 API(data_root=None)。
    """
    def __init__(self, caseids, cache={}):
        self.caseids = list(caseids)
        self.samples = []           # (caseid, t0) 列表,划分时按 caseid 分组
        for cid in self.caseids:
            waves = vitaldb.load_case(
                cid, "SNUADC/ART,SNUADC/ECG_II,SNUADC/PLETH", interval=1/FS)
            map_ = vitaldb.load_case(cid, "Solar8000/ART_MBP", interval=1.0)[:, 0]
            n = min(len(waves), len(map_))
            for t in range(0, n - (WIN_S + HORIZON_S), FS * 30):  # 30 s 步长
                fut = map_[t + WIN_S + FS * 0: t + WIN_S + HORIZON_S]
                fut = fut[~np.isnan(fut)]
                if len(fut) < HORIZON_S * 0.8:        # 未来 MAP 覆盖不足则丢弃
                    continue
                label = float((fut < 65).any())
                if np.isnan(waves[t: t + WIN_S]).all():
                    continue
                self.samples.append((cid, t, label))

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

    def __getitem__(self, i):
        cid, t, label = self.samples[i]
        waves = vitaldb.load_case(
            cid, "SNUADC/ART,SNUADC/ECG_II,SNUADC/PLETH", interval=1/FS)
        x = waves[t: t + WIN_S].T                      # (3, WIN_S*FS)
        x = np.nan_to_num(x, nan=0.0)
        x = np.clip((x - x.mean(axis=1, keepdims=True)) /
                    (x.std(axis=1, keepdims=True) + 1e-8), -5, 5)
        return torch.tensor(x, dtype=torch.float32), torch.tensor(label)

# 按 subjectid 分组划分,杜绝同患者跨集合(见坑点 1)
import pandas as pd
cases_df = vitaldb.load_clinical_data()[["caseid", "subjectid"]]
sub = cases_df[cases_df.caseid.isin(vitaldb.find_cases("SNUADC/ART"))]
groups = sub.subjectid.values
from sklearn.model_selection import GroupShuffleSplit
tr, te = next(GroupShuffleSplit(n_splits=1, test_size=0.2, random_state=42)
              .split(sub, groups=groups))
train_ids, test_ids = sub.caseid.values[tr], sub.caseid.values[te]

train_loader = DataLoader(IOHDataset(train_ids[:50]), batch_size=32,
                          shuffle=True, num_workers=2, pin_memory=True)
test_loader = DataLoader(IOHDataset(test_ids[:20]), batch_size=64)

# 训练循环要点:类别不平衡用 pos_weight;早停看 AUPRC 而非 loss
import torch.nn as nn
model = nn.Sequential(
    nn.Conv1d(3, 32, 7, stride=2, padding=3), nn.ReLU(),
    nn.Conv1d(32, 64, 5, stride=2, padding=2), nn.ReLU(),
    nn.AdaptiveAvgPool1d(1), nn.Flatten(), nn.Linear(64, 1))
pos_weight = torch.tensor([4.0])                 # 按训练集事件率设定
criterion = nn.BCEWithLogitsLoss(pos_weight=pos_weight)
optimizer = torch.optim.AdamW(model.parameters(), lr=3e-4)
for epoch in range(5):
    model.train()
    for x, y in train_loader:
        optimizer.zero_grad()
        loss = criterion(model(x).squeeze(-1), y)
        loss.backward()
        optimizer.step()

生产使用时应预切片落盘(Parquet/NPZ)并把 IOH 标签离线算好,避免 __getitem__ 反复拉取云端波形。

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

⚠️ 坑点 1:按 caseid 划分导致同患者泄漏(分类:数据泄漏)

问题:6,388 例手术只对应 6,090 名患者;随机按 caseid 划分会把同一患者的多次手术分进训练与测试集,模型记住个体生理基线后指标虚高。
症状:测试 AUROC 明显高于外部/时序验证;同一 subjectid 的病例在训练与测试中同时出现却无人察觉。
解决

  1. 简单方法:以 GroupShuffleSplit(groups=subjectid)GroupKFold 划分,任何特征工程统计量(均值/方差/QC 阈值)在训练折内拟合。
  2. 进阶方法:滑窗样本以 (caseid, 窗口起点) 索引,划分只发生在病例层;对同一患者的窗口施加同折约束(代码见 §6.4)。
  3. SOTA 方法:划分后再按设备组合(BIS 有无、动脉线有无)分层,保证折间协变量分布可比;最终在 MOVER 或 INSPIRE 上做跨机构/跨库外验。
    参考:APCONet README 对 chart-based split 的强调(github.com/hyunlimy/APCONet);§5.3。

⚠️ 坑点 2:旧版逐轨道 CSV API 的时间偏移(每例可达约 1 s)(分类:工程陷阱)

问题:v1.6.2 之前的 vitaldb 库经 /trks 索引逐轨道下载 CSV,各轨道样本相对真实记录存在每例恒定时间偏移,多轨道间对齐与外部事件标注(如 vitaldb-arrhythmia 的 R 峰)失准。官方在 v1.6.2 release note 中明确承认并修复。
症状:ECG R 峰与 CO2/血压事件差半秒到 1 秒;不同轨道拼接后跨轨道峰值错位;同一代码在不同机器上结果漂移(取决于库版本)。
解决

  1. 简单方法pip install -U vitaldb>=1.6.2load_case/VitalFile(caseid) 默认改读 packed .vital(全轨道共享同一条时间轴);旧 API load_trk/find_cases/get_track_names 已加弃用警告。
  2. 进阶方法:锁定库版本写入 requirements;以 return_timestamp=True 校验轨道时间戳单调性与对齐。
  3. SOTA 方法:自建数据快照(记录 vitaldb 库版本 + DATASET_VERSION),论文可复现性声明写明版本号。
    参考github.com/vitaldb/vitalutils v1.6.2/v1.6.3/v1.6.4 release notes。

⚠️ 坑点 3:波形轨与数值轨的时间结构不同,reshape 直接错位(分类:预处理陷阱)

问题:数值轨道缺失行被删除(Time 列是实际采集时刻),波形轨道缺失保留为空白(Time 列仅 3 个值:起点 0、间隔、终点),两类轨道不能按同一逻辑展平或重采样。
症状:把波形 CSV 当等间隔数组读取后长度对不上名义时长;把数值轨按 1-7 s 名义间隔 reshape 得到系统性漂移;NaN 计数统计失真。
解决

  1. 简单方法:一律用官方库 load_case(..., interval=...)/to_pandas 输出统一网格,不要手写 CSV 解析。
  2. 进阶方法:自建管线时对波形轨用 起点 + arange(0, N)×间隔 重建时间轴、缺失置 NaN;对数值轨先 reindex 到目标网格再插值(时间敏感指标用最近邻,连续量用线性)。
  3. SOTA 方法:统一落盘为长格式 Parquet(v1.7.2 load_parquet),保留原始 Time 列以审计插值影响。
    参考Sci Data 2022 Data Description 与 Fig. 2 对两类轨道格式的定义。

⚠️ 坑点 4:原始噪声不是错误——直接套用 ICU 级清洗会毁掉标签(分类:预处理陷阱)

问题:VitalDB 刻意保留真实世界伪差(论文明示不预处理)。冲洗伪差会让动脉压出现方波与超射,导致 MAP 阈值标签出现假事件;SpO2/HR 在探头脱落时出现 0 或断崖。
症状:低血压事件率异常高;模型学会识别冲洗伪差而非低血压;QC 缺失时训练集中混入整段为 0 的动脉压。
解决

  1. 简单方法:跑官方 vitaldb_quality_check.ipynb,按 NaN 比例与生理范围(如 MAP 20-200 mmHg)剔除坏窗。
  2. 进阶方法:冲洗伪差检测(方差/频率特征)+ 逐搏合理性校验(SBP>DBP、脉压>15 mmHg);事件样本要求伪差后仍连续有效。
  3. SOTA 方法:对比训练集"清洗 vs 不清洗"双版本性能并披露差异;在论文中报告 QC 剔除率。
    参考:官方 examples 仓库质量核查笔记本;Sci Data 2022 Usage Notes。

⚠️ 坑点 5:轨道名带设备前缀且历史改名,旧代码静默丢轨(分类:工程陷阱)

问题:轨道名 = 设备前缀/参数名(11 个前缀),且发布前做过重命名:股动脉导管 ART→FEM,输液泵 PUMP_RATE/PUMP_VOL→具体药名(EPI_RATE、PPF20_VOL 等)。按旧论文/旧笔记写死的轨道清单会静默取不到数据(返回空或 NaN),设备型号写法(Solar 8000M)与轨道前缀(Solar8000)也不一致。
症状find_cases 返回空列表;load_case 返回全 NaN 列;复现旧论文时样本量对不上。
解决

  1. 简单方法:永远从 track_names.csv(196 类,含 Type/Hz/Unit)或 vitaldb.get_track_names() 查询真实轨道名。
  2. 进阶方法:对 ART 类任务同时匹配 SNUADC/ARTSNUADC/FEM;药物轨道按 Orchestra/*_RATE|*_VOL 通配聚合。
  3. SOTA 方法:维护项目级轨道映射表(轨道名→语义→单位→采样率),进 CI 校验。
    参考PhysioNet vitaldb 页面 Usage Notes(FEM/PUMP 改名说明);track_names.csv。

⚠️ 坑点 6:把跨研究 AUROC 当排行榜直接比较(分类:评估误用)

问题:低血压预测文献的协议差异巨大——前瞻窗(5/10/15 min)、事件定义(MAP<65 vs <55 或 SBP<90)、人群(全麻 3,301 例 vs 其他)、标签粒度——数值不可直接排序。例如 BJA 2021 有创多通道 AUROC(15 min) 0.897,PLoS ONE 2022 ABP+EEG AUROC(5 min) 0.935,二者人群与窗口不同。
症状:模型选型错位;复现结果系统性低于报告值。
解决

  1. 简单方法:只同窗、同定义、同子集内比较;引用数值时强制标注协议三要素。
  2. 进阶方法:在自建测试集上重跑开源模型(如 Mendeley 公开的 BJA 2021 代码 10.17632/wdpxsyrg2s)统一评测。
  3. SOTA 方法:报告 AUROC+AUPRC+校准曲线(AUPRC 对类不平衡更敏感),并做时间外推验证。
    参考Lee S et al., BJA 2021Jo Y-Y et al., PLoS ONE 2022

⚠️ 坑点 7:设备组合异质造成的选择偏倚(分类:偏倚陷阱)

问题:每例 16-129 条轨道由麻醉医师按需决定——BIS 覆盖 87.1%(脊椎/镇静病例无 EEG),有创动脉压约 60%,心输出量设备仅个位数百分比。基于"有动脉压"的子集做研究,等于选择了更重的手术与更病态的人群;无创任务若只用有动脉线的病例训练,再部署到全体患者会失准。
症状:样本量与全库不符;模型在"无线"人群上 AUROC 骤降(BJA 2021 无创模型 0.762 vs 有创 0.897 的差距部分源于此)。
解决

  1. 简单方法:报告每个任务的可用病例数(如 find_cases 结果),明确排除标准。
  2. 进阶方法:按设备可用性分层评估;无创模型在有创子集上做交叉评估以量化信息增益。
  3. SOTA 方法:多任务/掩码建模直接利用"未监测"作为信息性缺失(§4.5),并把设备组合作为协变量。
    参考:Sci Data 2022 Table 1-2;J Pers Med 2026 VitalDB 队列筛选流程(6,388→2,726 例的排除链)。

⚠️ 坑点 8:TCI 药物轨道是泵设定与模型估算,不是实测血药浓度(分类:标签理解)

问题:Orchestra 泵轨道记录靶控设定、血浆/效应室目标浓度与输注量,其中效应室浓度由药代模型(Marsh/Schnider 类)外推,不是实测值;PUMP 轨道改名后的药名来自泵数据与麻醉记录的匹配,存在匹配误差。
症状:把效应室浓度当 ground truth 做药效回归后被质疑;同一模型换 Schnider/Marsh 参数后结论翻转。
解决

  1. 简单方法:仅把 _RATE、_VOL 等实际输注量当"已实施剂量"特征使用。
  2. 进阶方法:明示所用 PK 模型与参数版本,对浓度类特征做敏感性分析。
  3. SOTA 方法:PK-PD 联合建模时把模型参数(如 ke0)纳入可学习量,用生命体征/BIS 反馈端到端估计。
    参考:Sci Data 2022 数据描述(Orchestra 参数定义);vitaldb.net 数据集页参数表。

§6.6 数据增强

  • 安全:时间裁剪/滑窗、随机时间平移(在连续有效段内)、幅度缩放(ECG/PPG 轻微增益)、高斯小噪声、通道 dropout(模拟设备缺失)、Mixup(同标签窗口)。
  • 条件安全:随机丢弃短片段并线性插值(模拟信号丢失,时长 ≤2 s 且不在标签临界点附近);按通道随机增益 0.8-1.2 倍(模拟电极阻抗差异)。
  • 危险:跨缺失段拼接(制造非生理跳变)、对动脉压做时间伸缩(破坏波形-事件时序、扭曲 MAP 标签)、随机翻转/反相(ECG 极性有生理意义)、把伪差当增强模板回注、对 SpO2 类有生理偏置的量做幅度抖动。

§6.7 模型推荐

架构 适用任务 代表配置 参考
1D CNN / ResNet1D 低血压预测、波形分类 输入 3×6000(3 通道×60 s@100 Hz),全局池化+FC BJA 2021 基准路线
CNN+LSTM / CRNN 需长程依赖的 MAP 回归 CNN 下采样 + 2 层 BiLSTM PLoS ONE 2022 风险指数
U-Net1D / Transformers 逐搏分割、PPG→ABP 重建 128 Hz-500 Hz 原生分辨率输入 社区 PPG2ABP 复现
神经 ODE / PK-PD 联合模型 药效动力学 TCI 输入 + BIS 反馈 论文列出的 PK-PD 深度学习方向
表格梯度提升(XGBoost/LightGBM) 纯临床变量结局建模(不碰波形) clinical_data 74 列 + preop 检验 快速基线与特征筛选

选型原则:先建一个不碰波形的临床基线(表格模型),再量化波形通道的增量收益;波形模型输入通道数从 1(ART)起步逐通道验证增益,避免一步到位的多通道黑箱。

§6.8 硬件需求

阶段 最低配置 推荐配置
数据探索(API 流式) 4 GB 内存 + 网络 16 GB 内存
全量波形预处理(95.4 GB 解压) 200 GB 磁盘、8 核 512 GB NVMe、16 核、并行解压+滤波
模型训练(1D CNN/CRNN) 单卡 8 GB(如 RTX 3060) 单卡 24 GB(A10/4090)+ AMP
大规模多通道预训练 多卡 A100 80 GB + Parquet 预切片数据

§6.9 评估指标

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

def eval_ioh(y_true, y_score, y_map_true=None, y_map_pred=None):
    out = {
        "AUROC": roc_auc_score(y_true, y_score),
        "AUPRC": average_precision_score(y_true, y_score),  # 类不平衡下比 AUROC 苛刻
    }
    if y_map_true is not None:
        out["MAP_MAE_mmHg"] = mean_absolute_error(y_map_true, y_map_pred)
    return out

低血压预测任务按惯例在事件前 5/10/15 min 三个评估点分别报告;回归任务(MAP 估计)报 MAE(mmHg);心输出量任务报 MAE/Pearson r,并与设备参照(Vigileo 等)对照。

三点评估纪律:①事件样本的采信以"未来窗内 MAP 数据覆盖 ≥80%"为前提(§6.4 代码已内置该过滤),否则伪缺失窗会稀释 AUPRC;②不同 caseid 的事件权重不同(同一患者贡献多事件),谨慎起见可按病例聚合后再算宏平均;③校准(calibration curve / Brier score)对临床预警系统与判别指标同等重要,建议作为默认输出项。

§6.10 MLOps 笔记

  • 版本锚定:数据(PhysioNet v1.0.0 DOI 10.13026/w758-nw21)+ 库(vitaldb>=1.6.2)+ 轨道映射表三件套写入锁文件。
  • 缓存策略:首次拉取后转 Parquet 落盘(v1.7.2 原生支持),云端 API 仅作补数;对 500 Hz 全轨数据预留 ≥500 GB 存储。
  • 特征存储:窗口样本以 (caseid, t0) 双键写入特征表;标签重算(如改阈值 60/65/70 mmHg)只重生成标签列,不动波形切片。
  • 监控:上线后按周统计输入 NaN 率、设备前缀分布漂移(新设备接入会改变轨道结构)。
  • 复现:记录 vitaldb.__version__find_cases 结果快照与 QC 剔除率;官方 QC 笔记本纳入数据 CI。
  • 隐私合规:CC BY 4.0 只约束署名,患者隐私保护仍要求下游不尝试重识别、不公开原始波形片段截图(可能含可识别个体特征的罕见伪差)。

§7 质量评估与局限性

§7.1 已知偏倚

偏倚类型 描述 严重程度 缓解措施
单中心偏倚 全部来自 SNUH 一家医院的 10 间手术室与单一麻醉团队习惯 跨机构外验(MOVER/INSPIRE);论文原文警示过拟合
科室与术式偏倚 普外 77.2% 主导;胸外以腔镜为主(80.0%),设备组合随之不同 按科室分层报告基线与性能
种群偏倚 单一亚洲(韩国)人群;PPG 与 SpO2 类特征存在肤色相关偏差的已知证据 跨人群验证前限制结论范围;对 SpO2 类标签敏感分析
设备选择偏倚 有创动脉压约 60%、BIS 87.1%,由医师按病情决定 中-高 分层评估;无创/有创子集交叉对照(坑点 7)
手术类型失衡 普外占 77.2%,急诊占比低(emop 标记) 按手术类型分层训练;避免向急诊/心脏场景外推
时代偏倚 2016-2017 单年数据,设备固件与临床规范已演进 与 2015-2022 的 MOVER 对照检验时间稳健性

§7.2 标注质量

原始层无人工标注,质量由设备精度与 EMR 抄录决定;衍生标签(IOH 事件)完全由规则生成,可复现但携带阈值选择的主观性(IOH 定义在文献中有上百种变体)。信号质量方面,官方提供 QC 笔记本但未提供逐例质量分级;社区实践通常报告 QC 后样本保留率。使用动脉压波形时务必执行 SBP>DBP、生理范围与冲洗伪差检查(坑点 4)。

对标签质量的三点具体提醒:①监护仪数值(Solar8000/ART_MBP)与波形衍生 MAP 不完全相等——前者经设备算法平滑与刷新,后者逐搏实时,做短窗标签时应统一以一种为准并披露选择;②BIS 指数本身是设备端专有算法输出,把它当"真值"研究其他深度算法时存在循环论证风险;③检验结果(lab_data)的时间戳精度与 EMR 录入一致,秒级对齐不可靠,做术前-术中特征拼接时按天粒度更稳。

§7.3 泛化性

场景 失效风险 证据
跨机构(设备/流程不同) 中-高:轨道命名、设备组合、麻醉习惯改变 MOVER 等美国库的设备生态不同;Vistisen 2021 专文呼吁多中心协作
跨人群(非东亚) 高:单一种族队列,论文原文明示 Sci Data 2022 Limitation 段
脊椎麻醉/镇静场景 中:无 BIS、少有创监测,轨道骤减 设备覆盖表(BIS 87.1% 集中于全麻)
心脏手术 高:数据集排除了心脏手术 入组标准(非心脏手术)
儿科 高:成人队列 入组标准

§7.4 伦理

数据采集与开放由首尔国立大学医院 IRB 批准(H-1408-101-605),因数据完全匿名豁免知情同意;研究注册于 ClinicalTrials.gov(NCT02914444)。脱标识措施:随机 caseid、脱标识 subjectid、记录时间相对化、股动脉轨道与泵轨道改名消除间接识别线索。下游使用者仍须遵守 CC BY 4.0 署名义务与所在机构伦理要求;不得尝试通过波形细节重识别个体。

发表层面还需注意:①患者同时具有临床变量与高分辨率波形,理论上罕见生理特征组合可能构成再识别风险,故数据再分发应维持原始打包形态而非拆分重编码;②涉及 INSPIRE 联动的子研究须同时遵守两个数据集的协议;③商用用途在 CC BY 4.0 下允许,但任何临床部署声明均需独立的前瞻验证与监管路径,数据集许可不等于器械许可。

§7.5 公平性

队列性别均衡(男 50.8%),但年龄以中位 59 岁的成人为主、种族单一。信号类任务中,PPG/SpO2 特征对深肤色人群的系统性偏差已在跨库研究中被反复证实——围术期开放数据综述专门引述了 2020 年密歇根大学团队在近万例队列上发现脉搏血氧饱和度在黑人患者中系统性高估、隐性低氧血症更多发的证据链,该问题随后推动 FDA 对脉搏血氧仪启动监管审查;VitalDB 单一人群无法内部检验此问题,做无创监测模型时应引用外部证据并限制部署声明。妇科仅女性、泌尿科以男性为主(86.3%)的子集结构也可能诱导性别-手术类型共线性,分层建模时需拆解。

§7.6 数据漂移

采集期仅 11 个月,时间漂移有限;主要漂移风险来自设备侧(固件升级改变数值轨道行为、新监测设备接入引入新前缀)与临床规范演进(如 MAP 目标 65 mmHg 共识普及后麻醉管理更激进)。跨年份验证可用同院 INSPIRE(2011-2020)观察长期趋势;模型上线后建议以输入分布监控(轨道 NaN 率、MAP 基线分布)捕捉漂移。

实际漂移监控建议跟踪四个量:①各设备前缀的出现频率(设备更替直接改变特征空间);②MAP 分布的 P5/P50/P95(管理策略变化的敏感指标);③数值轨道的采样间隔分布(固件或网络变化会改变数值轨密度);④BIS 缺失率(麻醉方式构成变化的前导指标)。任一指标周环比突变超过预设带宽即触发再训练评估。

§7.7 DAIMS 24 项评估

# 检查项 状态 说明
1 宽格式可用性 原生为轨道长格式/时序波形;宽表须自行按窗口聚合构建
2 唯一标识 caseid/subjectid/tid 三级标识完备,跨表连接稳定
3 特殊字符处理 字段名规范化;检验结果已去除非数值字符
4 重复行检查 主键无重复(/cases 6,388 行、/trks 轨道唯一 tid)
5 缺失编码规范 ⚠️ 无哨兵编码;数值轨删行、波形轨留空,语义需使用者区分
6 标签标识清晰 无内置标签,衍生标签规则(MAP<65)在基准文献中明示
7 罕见类分组 ⚠️ 手术类型/设备子集高度不均(CardioQ 仅 29 例),小样本层需合并
8 偏倚评估 论文 Limitation 明示单中心单种族;§7.1 补充设备偏倚
9 数据字典完备 track_names.csv + clinical/lab_parameters.csv 双字典
10 信息性缺失解释 ⚠️ 未监测≠缺失的语义需使用者自证(设备组合即选择偏倚)
11 设备/仪器记录 轨道前缀即设备来源,11 类设备型号齐全
12 共线性风险提示 ⚠️ SBP/DBP/MBP 相互衍生、MAP 与波形强相关,特征筛选需注意
13 编码映射表 ⚠️ 药物轨道名为泵匹配产物,无 ATC/SNOMED 官方映射
14 时间戳处理 相对秒统一轴(casestart=0),跨轨道对齐有保障(packed .vital)
15 划分建议 ⚠️ 官方无划分;社区按 subjectid 分组惯例需自行执行
16 泄漏讨论 ⚠️ 论文未讨论;本 Wiki §5.3 与 APCONet 实践补足
17 标签分布披露 麻醉/手术/用药分布官方表格完整
18 测量偏倚评估 ⚠️ 设备型号混杂(同一生理量多设备多算法)无统一校准
19 外部验证建议 论文明确鼓励作为外验底座;INSPIRE 提供官方 linker
20 版本记录 PhysioNet 版本化 DOI;库侧 DATASET_VERSION 明示
21 预处理脚本 vitaldb 库 + examples + 官方 QC 笔记本
22 合规要求明示 CC BY 4.0、IRB、NCT 注册号齐全
23 多模态对齐 ⚠️ packed .vital 同轴良好;但旧 CSV API 偏移坑与双轨制需注意(坑点 2/3)
24 去标识化审计 时间相对化+随机 ID+改名三重措施,IRB 豁免记录在案

DAIMS 评分:18.5 / 24(✅×14 计 14 分,⚠️×9 计 4.5 分,❌×1 计 0 分)

评分解读:18.5 分处于"研究可用、工程需自律"区间。标识体系、数据字典、版本管理与合规文档达到一线开放数据集水准;失分集中在两点——原始形态是时序轨道而非分析就绪宽表(第 1 项),以及官方不提供划分/泄漏指引(第 15/16 项),把防泄漏与缺失语义的责任转移给了使用者。

对你意味着什么:①直接把 track 长格式当特征宽表用是第一坑——先按 §6.3 建窗口聚合层再谈模型;②任何划分代码必须以 subjectid 为分组键,评审时请把划分脚本与 v1.6.2+ 库版本一起提交;③QC(坑点 4)应写进数据管线而非论文脚注;④引用该库做"多模态"研究时,默认对齐基准是 packed .vital 时间轴,旧 CSV 结果不可混用;⑤无创模型结论应限定在"有创子集交叉评估过的范围",并向跨机构外验开放。

§7.8 外部验证矩阵

外部数据集/场景 来源机构 评估任务 性能指标 相对内部变化 关键发现
VitalDB 内部 3,301 例(全麻,有创) SNUH 低血压预测(15 min 前瞻) AUROC 0.897(多通道)/ 0.891(仅动脉压) 多通道增益有限但校准更优
VitalDB 内部(无创通道) SNUH 低血压预测(15 min 前瞻) AUROC 0.762(PPG+ECG+CO2)/ 0.694(仅 PPG) 有创→无创 −13.5 个百分点 无创场景性能显著衰减,为跨场景外验提供参照下界
MOVER(外部测试台) UC Irvine 麻醉决策模型泛化 任务相关(见原论文) 按任务披露 用于设备与文档异质性下的稳健性检验
INSPIRE(同院扩展) SNUH 围术期结局模型外验 按任务披露 官方 linker 与 VitalDB 匹配人群,结局端扩展

注:表内数值均出自同行评审文献;跨库对比需对齐任务协议后进行,禁止直接横比(坑点 6)。


§8 基准性能与生态

§8.1 排行榜:术中低血压预测

排名 模型 性能 年份 关键技术 完整引用 代码
1 ABP+EEG 深度网络(HRI) AUROC(5 min) 0.935 / AUPRC 0.882 2022 ABP+ECG+EEG 多波形 CNN,事件前 3/5/10/15 min 输出 Jo Y-Y, Jang J-H, Kwon J-m, Lee H-C, Jung C-W, Byun S, Jeong H-G, et al., 2022, PLoS ONE 17(8):e0272055. DOI: 10.1371/journal.pone.0272055 论文披露架构,未附官方仓库
2 多通道有创模型 AUROC(15 min) 0.897 / MAE(15 min) 7.76 mmHg 2021 动脉压+ECG+PPG+CO2 一维 CNN;分类+MAP 回归双任务 Lee S, Lee HC, Chu YS, Song SW, Ahn GJ, Lee H, Yang S, Koh SB, 2021, British Journal of Anaesthesia 126(4):808-817. DOI: 10.1016/j.bja.2020.12.035 Mendeley Data 10.17632/wdpxsyrg2s
3 多通道无创模型 AUROC(15 min) 0.762 / MAE(15 min) 11.68 mmHg 2021 同上架构,仅无创通道(PPG/ECG/CO2) 同上(Lee S et al., 2021, BJA) 同上

⚠️ 数值不可直接比较:三者的事件定义(MAP<65 mmHg 为共同点)、评估窗(5 vs 15 min)、队列构建(3,301 例全麻 vs 论文自述更大内部集)与校准方式不同;排名仅示意性能量级。商用对照可参考 Hatib 等基于高保真动脉压波形的 HPI 算法(Anesthesiology 2018,DOI: 10.1097/ALN.0000000000002300),其评测协议不同,未列入排名。

阅读该表的正确姿势:先看协议三要素(窗长、阈值、队列)再看待排名的 AUROC;短窗(5 min)天然高于长窗(15 min),有创通道天然高于无创通道;AUPRC 对事件率敏感,事件率不同的研究间 AUPRC 差异不能解读为模型优劣。若需真正横向对比,应把各模型放到同一自建测试集上重跑——这正是把基准代码(Mendeley 10.17632/wdpxsyrg2s)与 VitalDB 一起复用的价值所在。

§8.2 SOTA 总结与选型建议

当前最优公开结果集中在"动脉压+EEG 多通道、短前瞻窗"组合(AUROC 约 0.93 量级);无创通道性能下探至 0.75 量级,说明波形信息量是性能上界的主要约束。选型建议:以可部署性为目标选无创多通道模型并接受性能损失;以方法学研究为目标复现有创基准并重点报告 AUPRC 与校准;心输出量等回归任务优先与设备参照做一致性检验而非只追低 MAE。

三条趋势判断:①从单一动脉压走向多波形融合(EEG 通道已被证明同时提升判别与校准);②从分类走向风险指数回归(连续 HRI 输出更贴合麻醉医师的决策节奏);③从单中心走向跨库外验——MOVER 与 INSPIRE 的出现使"VitalDB 训练 → 外部验证"成为新论文的常规配置,纯内部验证的结果价值正在贬值。

§8.3 评测协议

社区事实标准:①标签 = 未来 H 分钟内 MAP<65 mmHg 任一时刻发生(H∈{5,10,15});②MAP 由动脉压波形/监护数值衍生;③按病例(更优:subjectid)划分;④指标 AUROC+AUPRC(+MAP 回归 MAE);⑤报告 QC 剔除率与可用病例数。复现入口:官方 vitaldb_quality_check.ipynb 与 Mendeley 代码 10.17632/wdpxsyrg2s。

# 评测点对齐:同一模型在事件前 5/10/15 min 三个评估点分别输出
def eval_at_horizons(model, test_set, horizons=(5, 10, 15)):
    for h in horizons:
        y_true, y_score = [], []
        for x, y, t_event in test_set.at_horizon(h):   # 按前瞻窗重组样本
            y_true.append(y)
            y_score.append(model.predict_proba(x))
        r = eval_ioh(np.array(y_true), np.array(y_score))
        print(f"H={h:>2} min  AUROC={r['AUROC']:.3f}  AUPRC={r['AUPRC']:.3f}")
数据集 关系 差异化用途
INSPIRE 同院衍生、人群重叠(官方 linker) 长程结局与术前/术后扩展,结局端外验
MOVER 同类围术期波形+EMR 库 美国多设备环境的跨机构泛化测试
UQ Vital Signs 早期麻醉波形库 算法原型与小规模对照
MIMIC-III/IV Waveforms ICU 波形记录 危重人群信号算法外验

§8.5 关键论文 Top6

  1. Lee HC, Park Y, Yoon SB, Yang SM, Park D, Jung CW. VitalDB, a high-fidelity multi-parameter vital signs database in surgical patients. Sci Data, 2022, 9:279. DOI: 10.1038/s41597-022-01411-5 —— 数据集正式描述论文(轨道体系、API 与脱标识全定义)。
  2. Lee HC, Jung CW. Vital Recorder—a free research tool for automatic recording of high-resolution time-synchronised physiological data from multiple anaesthesia devices. Sci Rep, 2018, 8:1527. DOI: 10.1038/s41598-018-20062-4 —— 采集软件方法学,理解时间同步机制必读。
  3. Lee S, Lee HC, Chu YS, et al. Deep learning models for the prediction of intraoperative hypotension. Br J Anaesth, 2021, 126(4):808-817. DOI: 10.1016/j.bja.2020.12.035 —— VitalDB 低血压预测基准(有创/无创双线,代码公开)。
  4. Jo Y-Y, Jang J-H, Kwon J-m, et al. Predicting intraoperative hypotension using deep learning with waveforms of arterial blood pressure, electroencephalogram, and electrocardiogram. PLoS ONE, 2022, 17(8):e0272055. DOI: 10.1371/journal.pone.0272055 —— 证明 EEG 通道增益与多时点风险指数输出。
  5. Vistisen ST, Pollard TJ, Enevoldsen J, Scheeren TWL. VitalDB: fostering collaboration in anaesthesia research. Br J Anaesth, 2021, 127(2):184-187. DOI: 10.1016/j.bja.2021.03.011 —— 专文评论数据集价值与多中心协作路线。
  6. Causal Effect and Personalization of Intraoperative Hypotension Burden on Postoperative Acute Kidney Injury. J Pers Med, 2026, 16(7):371. DOI: 10.3390/jpm16070371 —— 在 VitalDB v1.0.0 上构建 2,726 例 IOH-AKI 因果队列,示范结局端用法。

§8.6 社区活跃度

官方渠道:vitaldb.net 论坛(出版物追踪)、GitHub vitaldb 组织(vitalutils,MIT,约 22 star,2026 年上半年仍保持活跃提交:2026-05 连发 v1.6.2-v1.6.4、2026-06 发 1.7.2)、vitaldb/examples 教程仓库。学术侧:截至 2026-09 两篇核心论文合计被引约 500 次(Semantic Scholar),衍生工作覆盖低血压预测、血压估计、药效建模与心律失常标注。库的迭代速度(2026 年仍在重构数据接入)说明生态由原作者团队持续维护,缺陷修复响应快(时间偏移问题当月修复)。

社区结构特点:①核心维护者即数据集原作者团队,库、数据、采集软件三位一体,没有碎片化的第三方分叉负担;②讨论集中在 GitHub release notes 与官方论坛而非 Stack Overflow,问题检索以仓库为先;③2026 年新增 MCP server 支持与 Parquet 无损链路,显示维护者面向 AI 工具链的主动适配。

§8.7 生态快照

资源 类型 链接 热度(截至 2026-09) 推荐理由
vitaldb(PyPI) Python 库 https://pypi.org/project/vitaldb/ 1.7.2,MIT 事实上的官方访问层,含 MCP server 支持
vitalutils GitHub 仓库 https://github.com/vitaldb/vitalutils 约 22 star,活跃 库源码 + vital 格式规范 + C++/JS/R 工具
vitaldb/examples 教程仓库 https://github.com/vitaldb/examples 官方 QC 笔记本与任务示例入口
PyVital Python 库 vitaldb 组织内 官方 PPV/HRV 等次级参数与滤波器生态(含 APCONet sv_dlapco)
PhysioNet vitaldb 数据托管 https://physionet.org/content/vitaldb/ v1.0.0 全量下载与版本化 DOI
Vital Recorder 采集软件 https://vitaldb.net/vital-recorder/ 持续更新(1.19.x) 理解轨道生成机制、自建采集

§9 相关资源与引用

§9.1 官方资源列表

§9.2 BibTeX 引用块

@article{lee2022vitaldb,
  title   = {VitalDB, a high-fidelity multi-parameter vital signs database in surgical patients},
  author  = {Lee, Hyung-Chul and Park, Yoonsang and Yoon, Soo Bin and Yang, Seong Mi and Park, Dongnyeok and Jung, Chul-Woo},
  journal = {Scientific Data},
  volume  = {9},
  pages   = {279},
  year    = {2022},
  doi     = {10.1038/s41597-022-01411-5}
}

@article{lee2018vitalrecorder,
  title   = {Vital Recorder---a free research tool for automatic recording of high-resolution time-synchronised physiological data from multiple anaesthesia devices},
  author  = {Lee, Hyung-Chul and Jung, Chul-Woo},
  journal = {Scientific Reports},
  volume  = {8},
  pages   = {1527},
  year    = {2018},
  doi     = {10.1038/s41598-018-20062-4}
}

@article{lee2021hypotension,
  title   = {Deep learning models for the prediction of intraoperative hypotension},
  author  = {Lee, Solam and Lee, Hyung-Chul and Chu, Yu Seong and Song, Seung Woo and Ahn, Gyo Jin and Lee, Hunju and Yang, Sejung and Koh, Sang Baek},
  journal = {British Journal of Anaesthesia},
  volume  = {126},
  number  = {4},
  pages   = {808--817},
  year    = {2021},
  doi     = {10.1016/j.bja.2020.12.035}
}

@article{jo2022hypotension,
  title   = {Predicting intraoperative hypotension using deep learning with waveforms of arterial blood pressure, electroencephalogram, and electrocardiogram: Retrospective study},
  author  = {Jo, Yong-Yeon and Jang, Jong-Hwan and Kwon, Joon-myoung and Lee, Hyung-Chul and Jung, Chul-Woo and Byun, Seonjeong and Jeong, Han-Gil},
  journal = {PLoS ONE},
  volume  = {17},
  number  = {8},
  pages   = {e0272055},
  year    = {2022},
  doi     = {10.1371/journal.pone.0272055}
}

@article{vistisen2021vitaldb,
  title   = {VitalDB: fostering collaboration in anaesthesia research},
  author  = {Vistisen, Simon T. and Pollard, Tom J. and Enevoldsen, Johannes and Scheeren, Thomas W. L.},
  journal = {British Journal of Anaesthesia},
  volume  = {127},
  number  = {2},
  pages   = {184--187},
  year    = {2021},
  doi     = {10.1016/j.bja.2021.03.011}
}

@article{iohaki2026vitaldb,
  title   = {Causal Effect and Personalization of Intraoperative Hypotension Burden on Postoperative Acute Kidney Injury: A Doubly Robust Analysis of the VitalDB Cohort},
  journal = {Journal of Personalized Medicine},
  volume  = {16},
  number  = {7},
  pages   = {371},
  year    = {2026},
  doi     = {10.3390/jpm16070371}
}

§9.3 引用指南

使用数据集本体请引用 lee2022vitaldb;描述采集方法或使用 Vital Recorder 请同时引用 lee2018vitalrecorder;对 VitalDB 数据做低血压预测对照时建议一并引用对应基准论文以利读者核对协议。

三条补充惯例:①在 Methods 中注明数据版本(PhysioNet v1.0.0,DOI 10.13026/w758-nw21)与 vitaldb 库版本号;②若使用了社区衍生标注(如 R 峰标注)或 data-bank 衍生集,须单独引用其来源;③数据经 CC BY 4.0 开放,再分发自建衍生数据集时同样以 CC BY 4.0 或兼容许可发布并回链原始论文。


§10 AI 使用声明卡

§10.1 AI 模型列表

模型 用途 版本
fast-model(CodeBuddy Code 内置) 资料检索整合、结构撰写、代码示例生成 2026-09

§10.2 AI 参与范围

AI 完成检索整合与初稿撰写;所有规模数字、轨道清单、采样率、设备统计经 Web API(api.vitaldb.net)与 PhysioNet 目录实测核验;医学概念映射经 ICD-11/SNOMED 权威来源核对;最终由千方病案医学编辑部人工交叉审核后发布。

§10.3 输入来源列表

  1. Lee HC, Park Y, Yoon SB, Yang SM, Park D, Jung CW. VitalDB, a high-fidelity multi-parameter vital signs database in surgical patients. Sci Data, 2022, 9:279. DOI: 10.1038/s41597-022-01411-5
  2. Lee HC, Jung CW. Vital Recorder—a free research tool for automatic recording of high-resolution time-synchronised physiological data from multiple anaesthesia devices. Sci Rep, 2018, 8:1527. DOI: 10.1038/s41598-018-20062-4
  3. Lee S, Lee HC, Chu YS, et al. Deep learning models for the prediction of intraoperative hypotension. Br J Anaesth, 2021, 126(4):808-817. DOI: 10.1016/j.bja.2020.12.035
  4. Jo Y-Y, Jang J-H, Kwon J-m, et al. Predicting intraoperative hypotension using deep learning with waveforms of arterial blood pressure, electroencephalogram, and electrocardiogram. PLoS ONE, 2022, 17(8):e0272055. DOI: 10.1371/journal.pone.0272055
  5. Vistisen ST, Pollard TJ, Enevoldsen J, Scheeren TWL. VitalDB: fostering collaboration in anaesthesia research. Br J Anaesth, 2021, 127(2):184-187. DOI: 10.1016/j.bja.2021.03.011
  6. Causal Effect and Personalization of Intraoperative Hypotension Burden on Postoperative Acute Kidney Injury. J Pers Med, 2026, 16(7):371. DOI: 10.3390/jpm16070371
  7. PhysioNet. VitalDB, a high-fidelity multi-parameter vital signs database in surgical patients. https://physionet.org/content/vitaldb/(访问于 2026-09)
  8. VitalDB 官方数据集页(规模、设备与参数表)。https://vitaldb.net/dataset/(访问于 2026-09)
  9. VitalDB Python Library 官方文档。https://vitaldb.net/dataset?query=lib(访问于 2026-09)
  10. vitaldb/vitalutils 仓库与 v1.6.2-1.6.4 release notes(时间偏移修复与 API 弃用)。https://github.com/vitaldb/vitalutils(访问于 2026-09)
  11. vitaldb/vitalutils(PyPI 包信息与依赖)。https://pypi.org/project/vitaldb/(访问于 2026-09)
  12. Open datasets in perioperative medicine: a narrative review. Anesth Pain Med(INSPIRE/MOVER 对比与 VitalDB 关联)。https://www.anesth-pain-med.org/
  13. Lee S et al. 低血压预测基准配套代码与 QC 笔记本。Mendeley Data 10.17632/wdpxsyrg2s;github.com/vitaldb/examples(访问于 2026-09)
  14. Semantic Scholar API 引用计数(截至 2026-09)。https://api.semanticscholar.org/graph/v1/paper/DOI:10.1038/s41597-022-01411-5
  15. WHO ICD-11 浏览器(BA2Z 低血压、GB60 急性肾衰竭)。https://icd.who.int/(访问于 2026-09)
  16. api.vitaldb.net/cases、/trks 与 PhysioNet track_names.csv 实测(2026-09-08,本 Wiki 编辑部自测)。

§10.4 人工校验记录

内容模块 审核者 审核方式 审核状态
§2 医学背景(ICD-11/SNOMED 映射、IOH 定义) 千方病案医学编辑部 对照 ICD-11 浏览器与同行评审文献逐条核对 ✅ 已通过
§3/§4 规格、目录树与数据字典 千方病案医学编辑部 api.vitaldb.net 与 PhysioNet 目录实测核验 ✅ 已通过
§6 预处理代码与 8 个坑点 医疗 AI 数据工程师(编辑部交叉审核) 代码走查 + 官方 release notes/论文原文比对 ✅ 已通过
§7 DAIMS 与偏倚分析 千方病案医学编辑部 24 项逐条复核评分 ✅ 已通过
§8 基准数字与引用 千方病案医学编辑部 对照 PubMed/DOI 原文核验 ✅ 已通过
全文事实与链接 千方病案医学编辑部 16 项输入来源逐一溯源 ✅ 已通过

§10.5 AI 生成章节标注

本页全部章节由 AI 辅助撰写初稿;其中 §6.5 坑点全部取自官方 release notes、Sci Data 论文与基准文献的已验证失败模式;§7.7 DAIMS 评分为编辑部复核后确认;§2 医学内容经编辑部医学审核。

AI 生成内容的边界声明:AI 未运行训练实验、未产生本页之外的原始数据;所有代码示例为模式示范,未经端到端 GPU 训练验证,使用者首次运行时如遇库版本差异请以官方文档为准;对存疑表述(如个别轨道的语义别名)编辑部已按 2026-09 实测结果修正。

§10.6 最后人工审核日期

2026-09-05

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

返回 AI-Ready 数据集