信息速览

Synthea — 开源合成患者生成器 AI-Ready Wikipedia
INFOBOX
| 字段 | 内容 |
|---|---|
| 数据集名称 | Synthea |
| 英文全称 | Synthetic Patient Population Simulator(Synthea™ Patient Generator) |
| 别名/简称 | Synthea™、SyntheticMass(配套数据集品牌)、Synthea Patient Generator |
| 疾病分类(ICD-11) | 多病种合成覆盖,以慢病谱系为主:5A11(2 型糖尿病)、BA00(原发性高血压)、CA22(慢性阻塞性肺疾病)、CA23(哮喘)、BC81(心房颤动)、BA5Z(心力衰竭)、2C60(乳腺癌)、2B90(结肠恶性肿瘤)、6A70(抑郁发作)、FA00(髋关节骨关节炎)、FB83(骨质疏松)、RA01(COVID-19) |
| SNOMED CT | 全量采用:诊断以 SNOMED CT 编码(如 44054006)、检验以 LOINC 编码(如 4548-4)、药品以 RxNorm 编码 |
| 数据模态 | 合成 EHR(纵向全生命历程:就诊、诊断、用药、检验、免疫、照护计划、费用) |
| AI 任务类型 | 队列模拟、预测建模原型、算法回归测试、互操作性管线验证、教学培训 |
| 样本总数 | 可无限生成;官方 SyntheticMass 档案 100 万名患者,COVID-19 专供集 124,150 名患者 |
| 数据大小 | 100,000 患者 COVID-19 CSV 版约 5.14 GB(17 文件);100/1,000 患者样本可直接下载 |
| 数据格式 | HL7 FHIR(R4/STU3/DSTU2)、Bulk FHIR(ndjson)、CSV、C-CDA、CPCDS |
| 许可证 | Apache License 2.0(代码与数据同许可) |
| 访问级别 | 开放(免费下载或本地生成,无需注册、无需数据使用协议) |
| DUO 标签 | NRES(无限制) |
| 语言 | 英语(模拟美国人口,人口统计锚定美国人口普查数据) |
| 首发日期 | 2016-12-08 |
| 最后更新 | 3.3.0(2024-09-06,Maven Central) |
| 发布机构 | The MITRE Corporation |
| 官方主页 | https://synthetichealth.github.io/synthea/ |
| 下载地址 | https://synthea.mitre.org/downloads |
| DOI | 10.1093/jamia/ocx079(方法论文 DOI) |
| 引用次数 | 610+(Google Scholar,截至 2026-09) |
| AI 就绪度评分 | ⭐⭐⭐⭐(4/5)— 一条命令即可生成可复现的百万级多格式合成 EHR,且零隐私负担;扣分项:默认仅导出 C-CDA 与 FHIR(CSV 需改配置),官方无预处理与划分脚本 |
| 页面状态 | published |
§0 E-E-A-T 审核与免责
- 医学审核者:[千方病案医学编辑部]交叉审核:§2 医学背景(ICD-11 与 SNOMED CT 映射、疾病流行病学先验)、§7 偏倚分析(合成数据的循环性偏倚与泛化性失效风险)。
- 数据工程审核者:[千方病案医学编辑部交叉审核] 医疗 AI 数据工程师,审核范围:§4 DAIMS 数据字典、§5 数据划分策略、§6 预处理 Pipeline 和坑点。
- 审核日期:2026-09-05
医疗免责声明:本页面提供的医学信息仅供研究和教育目的,不构成医疗建议、诊断或治疗方案。数据集的医学描述基于公开发表的文献,未经逐一临床验证。任何基于该数据集训练的 AI 模型在应用于临床决策前,必须经过独立的临床验证和监管审批。
技术免责声明:本页面的代码示例、预处理建议和基准性能数据基于公开资料整理,不保证在特定环境下的准确性和适用性。使用者应自行验证代码安全性和数据预处理流程的正确性。千方病案医数集不对因使用本页面信息而导致的任何直接或间接损失承担责任。
数据使用合规:使用本页面描述的数据集前,请务必阅读并遵守数据集原始许可协议。Synthea 的代码与生成数据均采用 Apache License 2.0 许可,可自由用于学术、研究、工业与政府场景,无需注册或签署数据使用协议。本页面的 DUO 标签仅供参考,具体使用限制以数据集官方协议为准。
§1 数据集概览
§1.0 30 秒速览
这是什么? Synthea 是由美国非营利研究机构 MITRE 开源维护的"合成患者生成器":它不是一份固定下载的数据集,而是一台可以无限生产"真实但非真实"电子病历的模拟机器。每个合成患者都从出生被逐周模拟到死亡,其间经历疾病、就诊、用药、手术、检验和缴费,最终输出与真实医院信息系统格式一致的 FHIR R4、CSV 或 C-CDA 记录。
为什么重要? 真实医疗数据受 HIPAA 等法规约束,获取需要漫长申请且伴随隐私风险;Synthea 的数据底层不存在任何真实个体,因此天然免于成本、隐私与安全限制。它是 Apache 2.0 许可的数字公共产品(DPG,2022 年获认证),任何人都可以一键生成一百万名患者并立即开工。官方 SyntheticMass 档案已提供 100 万名患者的成品记录,COVID-19 专供数据集也被广泛用于疫情建模教学。
我能用它做什么? 健康信息技术开发与回归测试、医疗 AI 算法原型验证、互操作性管线(FHIR/OMOP)联调、流行病学建模教学、政策模拟沙盒。需要注意:官方明确将合成数据定位为工程与教育用途,不能替代真实临床数据的科学推断与临床验证。
§1.1 摘要
Synthea 的核心技术是通用模块框架(Generic Module Framework,GMF):每种疾病或健康行为被编码为一个 JSON 状态机,内含 7 种控制状态与 11 种临床状态,状态之间以直接转移、概率转移、条件转移或复合转移连接。模拟引擎以 7 天为默认时间步,从出生到死亡驱动每名患者独立穿过各疾病模块;模块参数校准自 CDC、NIH 等机构发布的流行病学统计与公开临床路径,人口统计默认锚定马萨诸塞州人口普查数据并支持全美各州扩展。引擎记录患者的每一次就诊、诊断(SNOMED CT 编码)、用药(RxNorm)、检验(LOINC)、免疫与费用,并以 HL7 FHIR R4/STU3/DSTU2、Bulk FHIR ndjson、CSV、C-CDA、CPCDS 五类标准格式导出。固定随机种子(seed)可完整复现一次生成,这使 Synthea 成为可版本化、可回归测试的"数据基础设施"而非一次性数据集。论文发表于 JAMIA 2018(Walonoski et al.),截至 2026-09 已获 610+ 引用(Google Scholar)。
§1.2 战略价值
维度一:零隐私风险的 EHR 工程沙箱。 真实 EHR 数据的获取成本高、审批周期长,且任何分析都受隐私法规约束。Synthea 的合成记录从模型生成而非真实个体,不存在可被重新识别的底层患者——COVID-19 数据集论文明确指出"合成数据不是脱敏数据",其伦理优越性恰恰在于每条合成记录之下没有任何真实个体记录可供重识别。这意味着团队可以在第一天就拿到 TB 级别的标准格式数据打通管线、训练原型、做集成测试,把真实数据的审批窗口留给最终验证。对互操作性开发(FHIR 服务器、C-CDA 解析器、Bulk FHIR 管线)而言,Synthea 是事实上的标准测试床。
维度二:流行病学先验的可执行编码。 Synthea 把散落在文献与临床指南中的患病率、发病率、进展概率、治疗路径"编译"成了可运行的 JSON 模块。研究者可以通过修改模块参数做反事实式的人口健康模拟(如 COVID-19 模型对 PPE 消耗与呼吸机需求的推演),也可以把模块本身当作"可执行的疾病知识库"来审阅与扩展。模块体系(超过 90 个疾病与健康模块,据社区统计)从心血管、内分泌、呼吸到肿瘤、精神与儿童保健持续扩张,2025 年社区已开始探索用生成式 AI 辅助模块开发,进一步降低了领域专家的参与门槛。
§1.3 同类数据集横向对比
| 数据集 | 类型 | 规模 | 隐私性质 | 获取方式 | 与 Synthea 的差异化 |
|---|---|---|---|---|---|
| Synthea / SyntheticMass | 合成 EHR(生成器) | 可无限生成;官方档案 100 万患者 | 无真实个体,零隐私限制 | Apache 2.0,免费下载或本地生成 | 唯一同时提供多标准格式导出与完整可复现性的开源生成器 |
| MIMIC-IV | 真实重症 EHR | 约 30 万患者、40 余万入院(Beth Israel Deaconess 医疗中心) | 脱敏真实数据,需培训认证与 DUA | PhysioNet 凭证化申请 | 科学推断的金标准;Synthea 可作其管线的无风险前置测试床,但不可替代其临床真实性 |
| CMS Medicare LDS | 真实保险索赔 | 数百万受益人 | 脱敏真实数据,申请审核制 | CMS 申请 | 覆盖全美真实保险结算流;Synthea 的 CPCDS 导出可模拟类似结构但无真实结算细节 |
| Synthea COVID-19 100k | 合成 EHR(专供集) | 100,000 患者 CSV(模拟中 124,150 人、88,166 例感染) | 无真实个体 | 免费下载(官方与 Kaggle 镜像) | Synthea 家族的疫情专题快照,开箱即用适合教学 |
§1.4 版本时间轴
| 版本/里程碑 | 日期 | 关键变化 |
|---|---|---|
| 项目首发(Ruby 实现) | 2016-12-08 | Ruby 2.0+ 实现,初版模块覆盖初级保健十大就诊原因与十大高负担慢病 |
| 转向 Java 实现 | 2017 | 版权声明变更为 The MITRE Corporation,架构重写为 Java(Gradle 构建) |
| 2.5.0 | 2019-11-13 | Maven Central 可见的早期稳定线(org.mitre.synthea) |
| 2.6.0 / 2.6.1 | 2020-09-03 | 与 COVID-19 模块开发同期发布 |
| 2.7.0 | 2021-02-10 | 模块与导出器持续增强 |
| 3.0.0 | 2021-12-09 | 主版本升级;CQL 引擎与验证资源集成 |
| 3.1.0 / 3.1.1 | 2022-09-08 / 2022-09-30 | 稳定性修复线 |
| 获认证为 Digital Public Good | 2022-05-25 | 数字公共产品联盟认证(Apache 2.0、开放标准 HL7/RxNorm/FHIR/LOINC/SNOMED CT) |
| 3.2.0 | 2023-06-16 | Java 版本要求提升路径上的过渡版本 |
| 3.3.0(当前最新) | 2024-09-06 | 要求 Java JDK 17+(推荐 LTS 17 或 25) |
§1.5 典型应用场景
- 健康信息技术测试与回归:为 FHIR 服务器、C-CDA 解析器、Bulk FHIR 导入管线提供无限量的标准格式"活体数据",固定 seed 保证测试可复现。
- 医疗 AI 原型与教学:在真实数据获批之前,用合成队列打通特征工程、模型训练与评估全链路;教学场景可直接发放官方 100,000 患者 COVID-19 CSV 版。
- 互操作性与 OMOP 迁移演练:社区维护 Synthea→OMOP CDM 的 ETL 映射示例,适合演练真实医院数据的标准化改造。
- 政策与疫情模拟沙盒:以 COVID-19 模块推演 PPE 消耗、透析机与呼吸机峰值需求;以人口统计配置模拟州县级政策情景。
- 数据素养教育:从模块 JSON 出发讲授疾病建模、状态机与流行病学参数化,模块 JSON 本身即教材。
§1.6 适用与不适用场景速判
| 读者类型 | 适配度 | 说明 |
|---|---|---|
| 互操作性/平台工程师 | ★★★★★ | FHIR/C-CDA/Bulk FHIR 标准格式 + 固定 seed 回归测试,正是官方首推用途 |
| 教师与学生 | ★★★★★ | 零隐私负担、免费开放、可按需定制人群规模与构成 |
| 医疗 AI 研究者(原型期) | ★★★★☆ | 管线全链路演练的理想沙盒;结论须以真实数据复验(§5.5) |
| 政策/疫情建模者 | ★★★★☆ | COVID-19 模块提供完整的资源消耗推演样例(§2.2) |
| 追求临床发现的研究者 | ★★☆☆☆ | 官方定位明确排除临床发现与科学推断(§7.4) |
| NLP/影像多模态研究者 | ★★☆☆☆ | 主仓库缺临床笔记与影像文件,应转向家族数据集 Coherent Data Set(§3.9) |
§2 医学背景
§2.1 ICD-11 编码映射表
Synthea 的诊断编码原生采用 SNOMED CT,下表列出其模块覆盖谱系中的代表性疾病与 ICD-11 对应关系(编码供研究者做跨术语映射参考)。
| 疾病/健康状态 | ICD-11 编码 | ICD-11 中文名 | 模块覆盖要点 |
|---|---|---|---|
| 2 型糖尿病 | 5A11 | 2 型糖尿病 | 前驱糖尿病→糖尿病进展、并发症(视网膜/肾病/神经病变)与 HbA1c 监测 |
| 原发性高血压 | BA00 | 原发性高血压 | 血压观测、降压药治疗路径与心血管并发症 |
| 慢性阻塞性肺疾病 | CA22 | 慢性阻塞性肺疾病 | 吸烟暴露、急性加重与肺功能轨迹 |
| 哮喘 | CA23 | 哮喘 | 儿童期起病、急性发作就诊与吸入治疗 |
| 心房颤动 | BC81 | 心房颤动 | 房颤发生、抗凝管理与卒中风险联动 |
| 心力衰竭 | BA5Z | 心力衰竭 | 冠心病/高血压进展链、射血分数轨迹 |
| 乳腺癌 | 2C60 | 乳房恶性肿瘤 | TNM 分期、手术/化疗/内分泌治疗与生存曲线 |
| 结肠恶性肿瘤 | 2B90 | 结肠恶性肿瘤 | 筛查(结肠镜)→诊断→治疗全路径 |
| 抑郁发作 | 6A70 | 抑郁发作 | 筛查量表、药物治疗与随访 |
| 骨关节炎 | FA00 | 髋关节骨关节炎 | 疼痛观测、影像与置换手术路径 |
| 骨质疏松 | FB83 | 骨质疏松 | 骨密度筛查与骨折并发症 |
| COVID-19 | RA01 | 冠状病毒病 2019 | 2020 年早期文献校准的进展与资源消耗模型 |
§2.1b SNOMED CT 与 LOINC 映射表
| 术语 | 编码系统 | 编码 | 标签 | 在 Synthea 中的角色 |
|---|---|---|---|---|
| 糖尿病 2 型 | SNOMED CT | 44054006 | Diabetes mellitus type 2 | 内分泌模块核心诊断码(检索确认) |
| 前驱糖尿病 | SNOMED CT | 15777000 | Prediabetes | 糖尿病进展链中间状态(检索确认) |
| 高血压性疾患 | SNOMED CT | 38341003 | Hypertensive disorder | 心血管模块核心诊断码 |
| 哮喘 | SNOMED CT | 195967001 | Asthma | 呼吸模块核心诊断码 |
| 慢性阻塞性肺疾病 | SNOMED CT | 13645005 | Chronic obstructive lung disease | 呼吸模块核心诊断码 |
| 心房颤动 | SNOMED CT | 49436004 | Atrial fibrillation | 心血管模块核心诊断码 |
| 糖化血红蛋白 | LOINC | 4548-4 | Hemoglobin A1c/Hemoglobin.total in Blood | 糖尿病模块检验观测(检索确认) |
§2.2 疾病简介与流行病学先验
Synthea 初始模块集刻意选择了"初级保健就诊十大原因"与"美国损失生命年(YLL)最多的十大慢病",此后由社区逐步扩展至覆盖心血管、内分泌、呼吸、肿瘤、骨科、精神健康、儿童保健与免疫接种的疾病谱系(社区统计超过 90 个模块)。每个模块的患病率、发病率与进展概率并非凭空设定:官方声明模块由临床医生参与设计,并以 CDC、NIH 等公开发布的统计资料校准。以 2 型糖尿病模块为例,前驱糖尿病向糖尿病的推进由概率化的延迟状态控制(延迟区间与转移分布参数化),HbA1c 观测值被限定在与疾病阶段一致的取值范围内(前驱糖尿病 5.7%–6.4%),这种"参数即流行病学"的设计使合成人群的疾病负担可以追溯到公开文献来源。
COVID-19 模块是参数校准透明度的典型样例:2020 年 3–5 月基于三篇早期同行评审文献构建,模拟 124,150 名患者产生 88,166 例感染与 18,177 例住院,感染者病死率 4.1%、住院率 20.6%,峰值时刻需要 548 台透析机与 209 台机械呼吸机,并逐日输出 PPE 与医疗物资消耗。该模型刻意冻结在 2020 年 5 月的知识水平,未包含后来的变异株信息。
§2.2b GMF 引擎工作原理
理解 GMF 有助于判断"数据为什么长这样"。引擎的生成循环为:按默认 7 天时间步逐个推进每名患者,在每个时间步激活该患者命中的模块,模块沿状态图推进并登记事件,事件由导出器翻译为 FHIR/CSV/C-CDA 记录。因此任何一张输出表里的行,都能沿"模块 → 状态 → 参数"的路径回溯到一份可阅读的 JSON 文件。
- 模块形态:每个疾病/健康模块是一个 JSON 有向状态图(含名称、 remarks 说明与 references 文献引用),可单独开关(-m 过滤)或由社区贡献新增。
- 控制状态:负责流程编排——Delay(延迟一段时间)、Guard(条件门控)、Switch(分支选择)、CallSubmodule(子模块调用)、Encounter/EncounterEnd(就诊起止)、Death(死亡退出)等。
- 临床状态:负责登记事件,是输出数据的直接来源,映射关系见下表。
- 参数入口:状态属性中的概率、区间与编码(SNOMED CT/LOINC/RxNorm)全部写在 JSON 内,公开可审计。
| GMF 临床状态(代表性术语) | 落地数据表 | 记录内容 |
|---|---|---|
| Encounter / EncounterEnd | encounters.csv | 就诊起止、类型与机构 |
| ConditionOnset / ConditionEnd | conditions.csv | 诊断起始与结束(SNOMED CT) |
| MedicationOrder / MedicationEnd | medications.csv | 用药处方与停药(RxNorm) |
| Procedure | procedures.csv | 手术与操作 |
| Observation | observations.csv | 生命体征/化验(LOINC,含数值与单位) |
| Immunization | immunizations.csv | 免疫接种 |
| AllergyIntolerance | allergies.csv | 过敏记录 |
| Device | devices.csv | 置入器械 |
| CarePlan / CarePlanEnd | careplans.csv | 照护计划 |
| Death | patients.DeathDate | 死亡登记 |
上表为 CSV 导出器的标准映射(表结构详见官方 Wiki 的 Records 页);FHIR 输出则直接采用同名 R4 资源。这意味着审阅模块 JSON 即可预知数据表将出现什么——这是合成数据独有的"可先读后生成"特性。
§2.3 临床任务定义
由于数据由生成器产出,Synthea 支持的"临床任务"实为对真实任务的无隐私负担演练:
- 筛查模拟:乳腺癌(乳房 X 光筛查→活检→TNM 分期)、结直肠癌(结肠镜筛查路径)模块支持筛查-诊断-治疗全链条演练。
- 诊断建模:症状模块产生主诉,就诊触发诊断编码,可用于症状-诊断映射模型的调试。
- 分级与预后演练:肿瘤模块内置 TNM 分期与治疗协议状态机,支持分期依赖的治疗路径模拟。
- 资源规划与流行病学建模:COVID-19 模块输出物资消耗时序,支持床位、透析机、呼吸机的需求预测演练。
- 纵向预测原型:就诊时序 + 检验观测 + 用药记录构成标准纵向 EHR 结构,可演练再入院、疾病进展等预测任务的原型。
§2.4 患者人群构成
| 维度 | 说明 |
|---|---|
| 来源 | 程序生成:每名患者从出生独立模拟至死亡,无真实个体 |
| 时间结构 | 生命历程纵向记录;默认时间步 7 天 |
| 年龄 | 全年龄覆盖(出生至自然死亡),可用 -a 参数指定年龄段生成 |
| 性别 | M/F 二元模拟,可用 -g 参数指定 |
| 种族/民族 | 模拟美国人口普查口径的 Race/Ethnicity 字段 |
| 地域 | 默认锚定马萨诸塞州人口普查统计,支持全美各州/县配置生成 |
| 就医类型 | 初级保健、急诊、症状驱动就诊三类入口 |
| 保险 | payer 模块模拟保险类型与 payer_transitions 变迁 |
§2.5 临床价值定位
Synthea 不产生新的医学证据,其临床价值在于"风险前移":在接触任何真实患者数据之前,研究者与工程师已经在零隐私风险的环境中完成了算法原型、管线联调与错误排查;在正式研究中,它承担统计功效预演、特征工程验证与教学演示的角色。官方对合成数据的定位同样清晰——用于软件测试与验证(含隐私与安全测试)、教育、学术研究、可行性评估与算法验证,但尚未用于临床发现与科学推断。这一边界应被视为使用 Synthea 的第一原则。
§2.6 金标准对比表
| 维度 | Synthea 合成数据 | 真实 EHR 金标准(如 MIMIC-IV) |
|---|---|---|
| 划分 | 无官方划分;患者级划分由使用者执行(固定 seed 可复现) | 官方/社区惯例划分 |
| 标注方式 | 自动生成:诊断/用药/检验事件即标签,无标注误差 | 人工/半自动标注,存在标注者间差异 |
| 标注者资质 | 不适用(程序生成);模块由临床医生参与设计并经社区迭代 | 需专业标注者与质控流程 |
| 标注性质 | 标签即生成事件,分布由模块参数决定(存在循环性偏倚) | 标签反映真实临床过程 |
| 隐私负担 | 零(无真实个体) | 高(脱敏+DUA+培训认证) |
§3 数据集规格
§3.0 版本抉择矩阵
| 你的需求 | 推荐获取方式 | 规模/大小 | 理由 |
|---|---|---|---|
| 快速浏览/教学演示 | 官方下载页 100 或 1,000 患者样本(多格式) | 小(单患者 FHIR 包含 50–500 个资源) | 开箱即用,免构建环境 |
| 疫情建模/数据分析课程 | 官方或 Kaggle 的 COVID-19 100,000 患者 CSV 版 | 5.14 GB(17 文件) | 关系表结构简单,pandas 直接加载 |
| 大规模 ML 原型/测试床 | 本地生成(固定 seed + 指定州/人口) | 按需(100 万患者笔记本需数小时) | 可控人群构成、可复现、可扩展自定义模块 |
| 互操作性联调 | 本地生成(FHIR R4/Bulk FHIR/C-CDA 全开) | 按需 | 输出格式与版本可精确控制 |
§3.1 模态详情
Synthea 的唯一模态是纵向合成 EHR,但粒度完整覆盖真实 EHR 的信息骨架:
- 人口学与标识:患者身份、出生/死亡日期、种族民族、出生地、住址经纬度、终身医疗费用与保险覆盖。
- 就诊与诊疗:就诊(初保/急诊/症状驱动)、诊断(SNOMED CT)、用药(RxNorm)、手术与操作、免疫接种、过敏史、器械置入(devices)、照护计划(careplans)。
- 观测与检验:生命体征与化验观测(LOINC 编码,含单位与取值范围)、影像检查元数据(imaging_studies)。
- 财务与供给:保险 payer 表与保险变迁表、耗材(supplies)、费用结算(claims/claims_transactions,新版导出)。
- 疾病进程机制层:JSON 模块本身(状态机)也是可分析数据——每条合成记录都可回溯到生成它的模块参数。
§3.2 按子集样本数表
| 子集 | 患者数 | 格式 | 获取位置 |
|---|---|---|---|
| SyntheticMass 主档案 | 1,000,000 | FHIR、C-CDA、CSV(gzip 分卷) | 官方下载页 |
| 官方样本包 | 100 / 1,000 | FHIR R4/STU3/DSTU2、C-CDA、CSV | 官方下载页 |
| COVID-19 专供集(10k) | 10,000 | CSV | 官方下载页 |
| COVID-19 专供集(100k) | 100,000 | CSV(17 文件,约 5.14 GB) | 官方下载页 / Kaggle 镜像 |
| COVID-19 完整模拟 | 124,150(其中 88,166 感染、18,177 住院) | 论文口径 | COVID-19 论文 |
| Childhood Obesity Synthetic Denver | 6,357(约 1/100 丹佛模拟) | CSV(含真实感姓名地址用于身份匹配测试) | 官方下载页 |
| 自定义生成 | 任意(-p 参数控制) | 全格式 | 本地 run_synthea |
§3.3 数据格式表
| 格式 | 说明 | 默认导出 | 激活方式 |
|---|---|---|---|
| HL7 FHIR R4 | 每患者一个事务 bundle(JSON) | ✅ | 默认开启 |
| HL7 FHIR STU3 v3.0.1 | 兼容旧版 FHIR 服务器 | ✅ | 配置切换 |
| HL7 FHIR DSTU2 v1.0.2 | 兼容更早生态 | ✅ | 配置切换 |
| Bulk FHIR (ndjson) | 按资源类型的批量 ndjson 文件 | ❌ | exporter.fhir.bulk_data=true |
| CSV | 16 张关系表(分析友好) | ❌ | exporter.csv.export=true |
| C-CDA | 临床文档架构(XML) | ✅ | exporter.ccda.export=true |
| CPCDS | 索赔数据结构 | ❌ | exporter.cpcds.export=true |
§3.4 存储大小
- 官方未公布 SyntheticMass 百万患者档案的精确压缩体积;可核实的参照是 COVID-19 100,000 患者 CSV 版约 5.14 GB(17 文件,其中 observations.csv 2.45 GB、medications.csv 999.3 MB、encounters.csv 988.9 MB)。
- 生成开销参照:100 万患者在笔记本上生成需数小时,官方建议交互式测试将 -p 控制在 10,000 以内。
- 单患者 FHIR bundle 通常包含 50–500 个资源,随年龄与临床复杂度显著增长(70 岁多病共存患者远多于 25 岁健康年轻人)。
§3.5 标注方式
Synthea 的标签是自动生成的:诊断、用药、手术等"标注"就是引擎产生的事件本身,经由 Encounter 状态登记到患者记录。因此不存在标注误差、标注者间差异或标注延迟——但代价是标签的"真实边界"等于模块参数的边界(详见 §7.1 循环性偏倚)。对于监督学习而言,conditions/medications/observations 等表天然构成多任务标签源。
§3.6 标注者资质与一致性
不适用(程序生成)。质量控制的对应物是模块评审机制:官方在贡献页面列出等待专业审阅的模块清单,邀请临床与领域专家参与;模块开发方法论(ONC/ASPE 报告)规定了概念化→设计构建→测试验证→入库的完整生命周期,并有技术专家小组(TEP)参与咨询。
§3.7 采集周期
无采集周期(非采集数据)。生成层面:模拟时间步默认 7 天,患者生存期内每一步都会被引擎评估;单次生成耗时与患者数线性相关(100 万患者需数小时)。
§3.8 地域覆盖
合成人口默认以马萨诸塞州人口普查统计为人口统计基线;run_synthea 支持以州、城市为参数生成对应人群(如 run_synthea “Utah” “Salt Lake City”),并可配置人口规模、随机种子与参考日期。官方另有约 1/100 比例的丹佛模拟子集(6,357 名儿童)。数据语言与编码体系为美国生态(英语、SNOMED CT/LOINC/RxNorm、C-CDA)。
§3.9 设备与仪器记录
- devices.csv 记录患者置入的永久与半永久器械。
- 观测数据涵盖标准生命体征与化验项目(LOINC 编码,含单位与参考范围);项目覆盖由模块驱动,社区曾报告个别 LOINC 项目的取值范围与真实临床惯例存在出入(如血小板分布宽度,Issue #1557)。
- 影像方面,imaging_studies.csv 仅记录影像检查元数据;真实影像文件需转向家族项目 Coherent Data Set(FHIR 链接 DICOM、基因组与 ECG 生理数据)。
§3.10 深度溯源链
- 模块层:JSON 模块声明其引用的文献与统计来源(模块文件内置 remarks 与 references)。
- 参数层:患病率/发病率取自 CDC、NIH 等公开统计;治疗路径参考公开 care maps。
- 人口层:人口统计锚定州/县级人口普查数据。
- 引擎层:固定 seed + 模块版本 + 配置文件唯一确定一次生成结果,Maven Central 的版本工件(org.mitre.synthea)提供版本锚点。
- 导出层:输出格式遵循 HL7 FHIR/C-CDA 开放标准(DPG 认证核验的开源标准清单:HL7 C-CDA、RxNorm、FHIR、LOINC、SNOMED CT)。
§4 数据结构
§4.0 目录树
启用 CSV 与 Bulk FHIR 导出并执行 ./run_synthea -p 1000 Massachusetts 后,输出目录结构如下:
output/
├── csv/
│ ├── patients.csv # 每行一名患者(人口学、标识、费用)
│ ├── encounters.csv # 每行一次就诊
│ ├── conditions.csv # 每行一条诊断(SNOMED CT)
│ ├── medications.csv # 每行一条用药(RxNorm)
│ ├── procedures.csv # 每行一条操作/手术
│ ├── observations.csv # 每行一条观测(生命体征/化验,LOINC)
│ ├── immunizations.csv # 每行一次免疫接种
│ ├── allergies.csv # 每行一条过敏记录
│ ├── careplans.csv # 每行一条照护计划
│ ├── imaging_studies.csv # 每行一次影像检查元数据
│ ├── devices.csv # 每行一件置入器械
│ ├── organizations.csv # 医疗机构
│ ├── providers.csv # 医护人员
│ ├── payers.csv # 保险机构
│ ├── payer_transitions.csv # 每行一次保险变迁
│ ├── supplies.csv # 每行一条耗材记录
│ ├── claims.csv # 费用结算(新版导出)
│ └── claims_transactions.csv # 结算明细(新版导出)
├── fhir/
│ ├── fhir1/ # R4 bundle(每患者一个 JSON)
│ │ └── <uuid>.json
│ ├── fhir2/ # STU3 bundle
│ └── fhir3/ # DSTU2 bundle
├── ccda/ # C-CDA 文档(激活后)
└── hospital/ # 机构级导出
§4.1 DAIMS 字段字典(patients.csv 核心字段)
| 字段名 | 类型 | 说明 | 示例值 | AI 用途 | 观测误差 | 信息性缺失编码 | 取值范围 |
|---|---|---|---|---|---|---|---|
| Id | String(UUID) | 患者唯一标识,连接全部 16 张表的主键 | 1d60c3b3-7e26-… | 实体解析/分组聚合 | 无(程序生成) | 不适用 | UUID |
| BirthDate | Date | 出生日期 | 1975-03-12 | 年龄特征/队列切分 | 无 | 不适用 | 模拟起点至参考日期 |
| DeathDate | Date | 死亡日期 | 2019-08-04 | 结局标签/生存分析 | 无 | 空 = 在世(信息性缺失) | 日期或空 |
| SSN | String | 假社会保障号(保留测试段) | 999-73-4521 | 禁用于特征(假 PII) | 无 | 不适用 | 保留测试号段 |
| Marital | String | 婚姻状态(M/S) | M | 静态协变量 | 无 | 空 = 未模拟 | M/S |
| Race | String | 种族(white/black/asian/…) | white | 公平性分析 | 无 | 不适用 | census 口径枚举 |
| Ethnicity | String | 民族(hispanic 等细分枚举) | nonhispanic | 公平性分析 | 无 | 不适用 | census 口径枚举 |
| Gender | String | 性别(M/F) | F | 静态协变量/分层 | 无 | 不适用 | M/F |
| BirthPlace | String | 出生城镇 | Boston | 地域特征 | 无 | 不适用 | 州内城镇 |
| Healthcare_Expenses | Numeric | 患者自付终身费用累计 | 275,842.13 | 费用预测目标 | 无 | 不适用 | ≥ 0 |
| Healthcare_Coverage | Numeric | 保险支付终身累计 | 1,204,331.87 | 费用预测目标 | 无 | 不适用 | ≥ 0 |
其他表以(start/stop、patient、encounter、code、description)为骨架:encounters.csv 主键为 Id,conditions/medications/procedures/observations 均以 patient + encounter 关联到患者与就诊。注意社区曾报告部分表存在重复 ID(Issue #1545)与 claims_transactions.csv 重复主键(Issue #1648),工程上应以组合键校验唯一性。
§4.1b 表间连接键矩阵
| 表 | 行粒度 | 建议唯一键(组合) | 主要连接路径 |
|---|---|---|---|
| patients | 每患者 | Id | 全部表的外键源 |
| encounters | 每就诊 | Id | PATIENT → patients.Id |
| conditions | 每诊断片段 | PATIENT+ENCOUNTER+CODE+START | PATIENT/ENCOUNTER |
| medications | 每用药片段 | PATIENT+ENCOUNTER+CODE+START | 同上 |
| procedures | 每操作 | PATIENT+ENCOUNTER+CODE+START | 同上 |
| observations | 每观测 | PATIENT+ENCOUNTER+CODE+DATE | 同上 |
| immunizations | 每接种 | PATIENT+CODE+DATE | PATIENT |
| allergies | 每过敏 | PATIENT+CODE+START | PATIENT |
| careplans | 每照护计划 | PATIENT+CODE+START | PATIENT/ENCOUNTER |
| devices | 每器械 | PATIENT+CODE+START | PATIENT/ENCOUNTER |
| imaging_studies | 每影像 | PATIENT+ENCOUNTER+CODE+DATE | 同上 |
| organizations | 每机构 | Id | 被 encounters.ORGANIZATION 引用 |
| providers | 每医护 | Id | 被 encounters.PROVIDER 引用 |
| payers | 每保险机构 | Id | 被 payer_transitions 引用 |
| payer_transitions | 每保险变迁 | PATIENT+START_YEAR+START_MONTH | PATIENT |
| supplies | 每耗材 | PATIENT+CODE+DATE | PATIENT/ENCOUNTER |
| claims / claims_transactions | 每结算/明细 | 官方文档建议先去重校验(Issue #1648) | PATIENT/ENCOUNTER |
使用要点:同日重复 lab panels(Issue #1552)主要落在 observations,建议把"患者+就诊+编码+日期"纳入去重键;claims 两表为新增导出项,旧样本包可能缺失;全部连接建议在入库前以"建议唯一键"做 drop_duplicates + 唯一性断言(对应坑点 4)。
§4.2 标签分布特征
- 疾病标签(conditions.code)的分布由模块参数直接决定:常见慢病(高血压、糖尿病、高脂血症等)呈高流行率,罕见病缺省于默认模块集,需自定义模块或模块过滤(-m)控制。
- 年龄是标签分布的最强调节变量:多病共存概率随年龄上升,70+ 患者的 conditions/observations 行数远高于年轻患者。
- 修改生成配置(州、城市、年龄段 -a、性别 -g、模块集 -m)会系统性改变标签分布,因此报告任何基于 Synthea 的实验时必须连同生成配置一起发布。
§4.3 关键统计速查
| 统计项 | 数值 | 来源 |
|---|---|---|
| SyntheticMass 官方档案患者数 | 1,000,000 | 官方下载页 |
| COVID-19 完整模拟患者数 | 124,150(感染 88,166、住院 18,177) | COVID-19 论文 |
| COVID-19 感染者病死率 | 4.1% | COVID-19 论文 |
| COVID-19 感染者住院率 | 20.6% | COVID-19 论文 |
| 峰值资源需求 | 548 台透析机、209 台机械呼吸机 | COVID-19 论文 |
| CSV 表数量 | 16 张(另有 claims 两表) | 官方 Wiki |
| GMF 状态类型 | 7 控制 + 11 临床 | JAMIA 论文 |
| 默认时间步 | 7 天 | JAMIA 论文 |
| 疾病与健康模块数 | 超过 90 个(社区统计) | 第三方技术博客 |
§4.4 数据层级
Patient(patients.Id)
└── Encounter(encounters.Id,就诊)
├── Condition(conditions,诊断,SNOMED CT)
├── Medication(medications,用药,RxNorm)
├── Procedure(procedures,操作)
├── Observation(observations,观测,LOINC)
├── Immunization(immunizations,免疫)
├── Device(devices,器械)
├── CarePlan(careplans,照护计划)
└── Supply / Claim(supplies / claims,耗材与结算)
层级与 FHIR bundle 的资源嵌套一一对应;分析时通常先以 patient 聚合、再按 encounter 展开时序。
§4.5 缺失值与信息性缺失
| 字段/表 | 缺失形态 | 语义 | 处理建议 |
|---|---|---|---|
| patients.DeathDate | 空 | 患者在世(信息性缺失,不可当 NaN 填补) | 转布尔存活标志 |
| conditions.stop | 空 | 慢病未结束(持续中) | 视为活动状态而非缺失 |
| medications.stop | 空 | 用药仍在进行 | 同上 |
| payer_transitions | 起止配套 | 保险变迁片段 | 以时间区间合并 |
| 未模拟字段 | 整列存在但个别患者无行 | 该患者未经历该类事件 | 以宽表拼接后填 0/标记 |
合成数据的"缺失"几乎全部是信息性缺失(生成器刻意不产生噪声缺失),这与真实 EHR 中大量无意义缺失形成鲜明对比——在真实数据上验证缺失处理策略时需意识到这一差异。
§5 数据划分与使用建议
§5.1 官方划分
无。Synthea 是生成器而非固定基准,官方不提供 train/val/test 划分;固定 seed 下任何"划分"都可被任何人精确复现。
§5.2 社区惯例与推荐策略
- 患者级切分:以 patients.Id 为粒度做 70/15/15(或 8/1/1)切分,全部 16 张表按患者归属整体划分,杜绝同一患者的就诊行跨越训练与测试集。
- seed 报告义务:论文或报告应同时披露 seed、版本号、模块集与配置,第三方才能复现同批数据。
- 时序切分(模拟时间参考日期 -r 可控):以参考日期前后切分训练/测试,更接近部署场景。
§5.3 泄漏风险(重点)
- 跨表泄漏:同一患者出现在多张表,任何以行(而非患者)为单位的随机切分都会泄漏;encounter 级特征聚合若混入未来就诊信息同样构成时序泄漏。
- 重复生成泄漏:用两个不同 seed 生成两批数据再合并训练,患者虽不同但分布完全同源,会高估泛化性能;评估"对真实数据的泛化"时必须引入真实数据集外部验证。
- 模块参数泄漏:标签分布由模块参数决定,若任务恰好是预测"某病在某年龄的流行率",模型等于在背模块参数——这不是学习而是还原。
§5.4 交叉验证建议
固定 seed 生成一批数据后,患者级 5 折交叉验证适用于算法比较;跨 seed(不同随机源)与跨版本(3.2.0 vs 3.3.0)的双重留出更能暴露模型对生成过程本身的依赖。
§5.5 外部验证建议
任何拟用于真实场景的模型,必须在真实数据集(如 MIMIC-IV 或本机构数据)上复测;官方对合成数据的定位明确为工程与教育用途,不用于临床发现与科学推断。建议在报告中显式给出"合成→真实"的性能衰减幅度,作为泛化性的诚实度量。
§6 AI 就绪指南
§6.0 云端快速启动
无需申请、无需凭证,任何有 Java 17+ 的环境即可运行。Docker 方式(以 OpenJDK 镜像为例):
# 目录结构预期:当前目录为工作目录,将挂载进容器
# data_root 拼接关系:所有输出写入 /synthea/output/,宿主机对应 $PWD/output/
docker run --rm -v "$PWD":/synthea -w /synthea eclipse-temurin:17 \
bash -c "git clone https://github.com/synthetichealth/synthea.git src && \
cd src && ./run_synthea -s 42 -p 1000 Massachusetts"
# 结果:$PWD/src/output/fhir/ 与 output/csv/(若已激活 CSV 导出)
§6.1 快速上手
注释约定:以下命令假设
data_root = ./output/;生成器把全部结果写入output/(CSV 需先激活);最小可用子集是 100–1,000 名患者的 CSV 导出,可在分钟级完成。
# 1) 构建(需要 Java JDK 17+;推荐 LTS 17 或 25)
git clone https://github.com/synthetichealth/synthea.git
cd synthea && ./gradlew build check test
# 2) 激活 CSV 导出(默认只导出 C-CDA 与 FHIR!)
# 编辑 src/main/resources/synthea.properties:
# exporter.csv.export = true
# exporter.fhir.bulk_data = true # 如需 Bulk FHIR ndjson
# 3) 生成:固定 seed=42,1,000 名患者,马萨诸塞州
./run_synthea -s 42 -p 1000 Massachusetts
# 常用参数:-s 随机种子;-p 人口数;-cs 医生种子;-r 参考日期(YYYYMMDD)
# -g 性别;-a 年龄段(如 40-75);-m 模块过滤;--config*=value 覆盖任意配置
# 4) 检查产物
ls output/csv/ # 16 张表
ls output/fhir/ # 每患者一个 R4 bundle JSON
§6.2 数据获取
| 获取方式 | 入口 | 大小 | 流程 |
|---|---|---|---|
| 官方样本(免构建) | synthea.mitre.org/downloads | 100/1,000 患者多格式 | 点击下载 |
| SyntheticMass 百万档案 | 官方下载页 gzip 分卷 | 1,000,000 患者 | 点击下载 |
| COVID-19 CSV 专供集 | 官方下载页 / Kaggle | 10k / 100k(约 5.14 GB) | 点击下载(Kaggle 需账号) |
| 本地生成 | github.com/synthetichealth/synthea | 按需 | git clone → gradle build → run_synthea |
# 本地生成指定年龄段与性别的队列(示例:40-75 岁,糖尿病模块过滤)
./run_synthea -s 42 -p 100 -a 40-75 -g F Massachusetts
§6.3 预处理全流程
# 环境预期:output/csv/ 下有 16 张表;data_root 拼接 data_root + 表名
# 最小可用子集:patients.csv + conditions.csv + encounters.csv
import pandas as pd
DATA_ROOT = "output/csv"
def load_synthea(data_root: str = DATA_ROOT) -> dict[str, pd.DataFrame]:
"""加载核心五表;返回以表名为键的字典。"""
tables = {}
for name in ["patients", "encounters", "conditions",
"medications", "observations"]:
tables[name] = pd.read_csv(f"{data_root}/{name}.csv", low_memory=False)
return tables
tables = load_synthea()
# ---- 步骤 1:基本清洗 ----
patients = tables["patients"].copy()
patients["DeathDate"] = pd.to_datetime(patients["DeathDate"])
patients["BirthDate"] = pd.to_datetime(patients["BirthDate"])
patients["alive"] = patients["DeathDate"].isna() # 信息性缺失 → 存活标志
patients["age"] = (pd.Timestamp("2020-01-01")
- patients["BirthDate"]).dt.days // 365
# ---- 步骤 2:去重校验(坑点 4 的防线)----
conditions = tables["conditions"].copy()
key_cols = ["PATIENT", "ENCOUNTER", "CODE", "START"]
dup = conditions.duplicated(subset=key_cols).sum() # 已知 Issue #1545
conditions = conditions.drop_duplicates(subset=key_cols)
# ---- 步骤 3:患者级标签矩阵(多标签)----
labels = (conditions.assign(v=1)
.pivot_table(index="PATIENT", columns="CODE", values="v", aggfunc="first")
.fillna(0).astype(int))
# ---- 步骤 4:观测特征(就诊内取最新值)----
obs = tables["observations"].copy()
latest_obs = (obs.sort_values("DATE")
.groupby(["PATIENT", "CODE"]).tail(1)
.pivot(index="PATIENT", columns="CODE", values="VALUE"))
# ---- 步骤 5:静态特征与标签对齐 ----
feat = patients.set_index("Id")[["age"]].join(
pd.get_dummies(patients.set_index("Id")["GENDER"], prefix="sex"))
X = feat.join(latest_obs, how="inner").astype(float)
Y = labels.reindex(X.index).fillna(0).astype(int)
print(X.shape, Y.shape) # 样本数 × 特征数, 样本数 × 疾病标签数
FHIR 路线(使用官方 fhir.resources 生态):
# 逐 bundle 解析 output/fhir/ 下的 R4 JSON
import json, glob
from collections import Counter
bundle_path = glob.glob("output/fhir/fhir1/*.json")[0]
with open(bundle_path) as f:
bundle = json.load(f)
counter = Counter(e["resource"]["resourceType"] for e in bundle["entry"])
print(counter.most_common()) # Patient/Encounter/Condition/Observation…
§6.4 PyTorch DataLoader 完整代码
# 目录结构预期:output/csv/{patients,conditions,encounters}.csv
# data_root 拼接:DATA_ROOT + "/" + <table>.csv
# 最小可用子集:三表即可完成"人口学 + 病史多标签"预测任务
import numpy as np
import pandas as pd
import torch
from torch.utils.data import Dataset, DataLoader
DATA_ROOT = "output/csv"
class SyntheaPatientDataset(Dataset):
"""患者级多标签数据集:静态人口学特征 + 病史多标签。
1) 以 patients.Id 为主键;2) conditions 按 PATIENT 聚合为多标签;
3) 患者级划分由外部传入的 patient_id 索引控制(防泄漏)。
"""
def __init__(self, patient_ids, top_k_labels=50, seed=0):
patients = pd.read_csv(f"{DATA_ROOT}/patients.csv", low_memory=False)
patients["BirthDate"] = pd.to_datetime(patients["BirthDate"])
ref = pd.Timestamp("2020-01-01")
patients["age"] = (ref - patients["BirthDate"]).dt.days // 365
patients = patients.set_index("Id")
cond = pd.read_csv(f"{DATA_ROOT}/conditions.csv", low_memory=False)
counts = cond["CODE"].value_counts()
keep = counts.head(top_k_labels).index # 罕见标签截断
cond = cond[cond["CODE"].isin(keep)]
self.codes = sorted(keep.tolist())
code2idx = {c: i for i, c in enumerate(self.codes)}
X = np.zeros((len(patient_ids), 3), dtype=np.float32) # age, sexM, alive
Y = np.zeros((len(patient_ids), len(self.codes)), dtype=np.float32)
id_index = {pid: i for i, pid in enumerate(patient_ids)}
for pid, row in patients.iterrows():
if pid not in id_index:
continue
i = id_index[pid]
X[i] = [min(row["age"], 100), 1.0 if row["GENDER"] == "M" else 0.0,
1.0 if pd.isna(row["DeathDate"]) else 0.0]
for pid, grp in cond.groupby("PATIENT"):
if pid not in id_index:
continue
for c in grp["CODE"].unique():
Y[id_index[pid], code2idx[c]] = 1.0
self.X, self.Y = torch.from_numpy(X), torch.from_numpy(Y)
def __len__(self):
return len(self.X)
def __getitem__(self, idx):
return self.X[idx], self.Y[idx]
def make_loaders(batch_size=64, seed=42, train_frac=0.7, val_frac=0.15):
patients = pd.read_csv(f"{DATA_ROOT}/patients.csv", usecols=["Id"])
ids = patients["Id"].drop_duplicates().tolist()
rng = np.random.default_rng(seed) # 患者级切分,防跨表泄漏
rng.shuffle(ids)
n = len(ids)
tr, va = int(n * train_frac), int(n * (train_frac + val_frac))
splits = {"train": ids[:tr], "val": ids[tr:va], "test": ids[va:]}
top_k = 50
loaders = {}
for name, pids in splits.items():
ds = SyntheaPatientDataset(pids, top_k_labels=top_k, seed=seed)
loaders[name] = DataLoader(
ds, batch_size=batch_size,
shuffle=(name == "train"), num_workers=2)
return loaders
if __name__ == "__main__":
loaders = make_loaders()
xb, yb = next(iter(loaders["train"]))
print(xb.shape, yb.shape, float(yb.sum())) # 形状与标签总数校验
§6.4b FHIR R4 bundle 最小解析示例
CSV 之外,FHIR R4 是 Synthea 的第一公民格式(默认开启导出)。以下脚本仅用标准库 + pandas 遍历每患者一个的 R4 事务 bundle,抽取核心资源展平为分析表,并完成与 CSV 侧的行数交叉核对(坑点 7 的防线):
# 目录结构预期:output/fhir/fhir1/<uuid>.json(每患者一个 R4 bundle)
# data_root 拼接:DATA_ROOT + "/fhir/fhir1"
# 最小依赖:仅标准库 json + pathlib + pandas,无需 HAPI FHIR / fhir.resources
import json
from pathlib import Path
import pandas as pd
DATA_ROOT = Path("output")
BUNDLE_DIR = DATA_ROOT / "fhir" / "fhir1"
KEEP_TYPES = ("Condition", "Encounter", "MedicationRequest", "Observation", "Procedure")
def parse_bundle(path: Path) -> list[dict]:
bundle = json.loads(path.read_text(encoding="utf-8"))
rows = []
for entry in bundle.get("entry", []):
res = entry.get("resource", {})
rtype = res.get("resourceType")
if rtype not in KEEP_TYPES:
continue
subj = (res.get("subject") or {}).get("reference", "")
enc = (res.get("encounter") or {}).get("reference", "")
code = (res.get("code") or res.get("medicationCodeableConcept") or {})
codings = (code.get("coding") or [{}])[0]
rows.append(
{
"patient": subj.split("/")[-1],
"encounter": enc.split("/")[-1],
"resource_type": rtype,
"system": codings.get("system", ""),
"code": codings.get("code", ""),
"display": codings.get("display", ""),
"effective": res.get("effectiveDateTime", ""),
"onset": res.get("onsetDateTime", ""),
}
)
return rows
rows = []
for path in sorted(BUNDLE_DIR.glob("*.json")):
rows.extend(parse_bundle(path))
fhir_df = pd.DataFrame(rows)
# ---- 与 CSV 侧交叉核对(坑点 7 防线)----
csv_patients = pd.read_csv(DATA_ROOT / "csv" / "patients.csv")
n_fhir = fhir_df["patient"].nunique()
n_csv = csv_patients["Id"].nunique()
assert n_fhir == n_csv, f"患者数不一致:FHIR {n_fhir} vs CSV {n_csv}"
# ---- 逐行 JSON 有效性已在 parse 阶段保证(json.loads 失败即抛错)----
print(fhir_df.groupby("resource_type").size())
要点:R4 中用药资源为 MedicationRequest(对应 CSV medications)、诊断 Condition.code 为 SNOMED CT、观测 Observation.code 为 LOINC,与 §4.1b 的键矩阵同构;C-CDA(XML)与 Bulk FHIR(ndjson)的解析建议分别使用官方样例包先行校验 schema 再批量处理。
§6.5 坑点 8 个
⚠️ 坑点 1:行级随机切分导致跨表患者泄漏(分类:数据泄漏)
问题:Synthea 的 16 张表以患者 Id 连接,同一患者贡献几十到几千行。若以行(或就诊)为单位随机切分训练/测试集,同一患者的记录将同时出现在两侧,评估指标严重虚高。
症状:测试集 AUROC 高得反常(如 0.95+),而模型上线到真实数据后性能崩塌;按 patient 去重统计发现训练集与测试集的患者 Id 交集非空。
解决:
- 简单方法:以
patients.Id为单位做一次性患者级切分(70/15/15),全部表按 patient 列做 join 过滤。- 进阶方法:患者级 K 折交叉验证,每折独立重算特征(避免统计量来自全量数据);对时序任务改用参考日期切分(-r 参数控制模拟时间)。
- SOTA 方法:患者级 × seed 双重留出——训练与测试使用不同随机种子生成的两批人群,衡量模型对"人群重采样"的稳健性,再叠加真实数据外部验证。
参考:本页 §5.3;官方 Wiki(https://github.com/synthetichealth/synthea/wiki)。
⚠️ 坑点 2:合成标签的循环性——模型在背模块参数(分类:标签理解)
问题:Synthea 的"真值"来自模块状态机的转移概率与校准统计。若任务恰好是模块直接编码的规律(如某年龄段的糖尿病流行率),模型学到的只是模块配置,不是医学规律;在真实数据上必然衰减。
症状:任务性能"好到没有研究空间";检查发现特征重要性集中在年龄/性别等模块 Guard 条件使用的变量;换一个真实数据集复测,性能大幅下滑。
解决:
- 简单方法:在实验设计阶段明确"哪些规律来自模块参数",避免选择与模块参数一一对应的任务。
- 进阶方法:用真实数据集(如 MIMIC-IV)做外部验证,报告合成→真实的性能衰减矩阵。
- SOTA 方法:多版本交叉——用 3.2.0 生成训练集、3.3.0 生成测试集,量化"模块迭代"本身带来的分布漂移影响。
参考:Walonoski et al. 2018 JAMIA(10.1093/jamia/ocx079);COVID-19 论文对"必须按用例验证"的提示。
⚠️ 坑点 3:默认配置不导出 CSV,误以为生成失败(分类:预处理陷阱)
问题:默认 synthea.properties 只导出 C-CDA 与 FHIR;直接跑
run_synthea后找不到output/csv/,误判生成器故障,或误下载全部格式造成存储浪费。
症状:output/下只有 fhir/ 与 ccda/ 目录;查阅 properties 才发现exporter.csv.export默认为 false。
解决:
- 简单方法:编辑
src/main/resources/synthea.properties,设exporter.csv.export=true(需要 Bulk FHIR 时另设exporter.fhir.bulk_data=true)。- 进阶方法:不改文件,用命令行覆盖:
./run_synthea -p 100 --exporter.csv.export=true。- SOTA 方法:在 CI 中以配置模板管理导出开关与 seed,任何数据产物都能由"配置文件 + 版本号"精确复现。
参考:官方 README(https://github.com/synthetichealth/synthea)。
⚠️ 坑点 4:重复 ID 与主键冲突——join 之后行数暴涨(分类:工程陷阱)
问题:社区已报告多张表存在重复 ID(Issue #1545,2024-12)与 claims_transactions.csv 输出重复主键(Issue #1648,2026-03);同一日期也可能生成重复 lab panels(Issue #1552)。未去重的 join 会让样本量虚增、指标失真。
症状:pandas merge 后行数超过逻辑预期;以单列做索引报Index has duplicate keys;同患者同日同编码出现多条完全相同的记录。
解决:
- 简单方法:入库前以业务组合键(如 PATIENT+ENCOUNTER+CODE+START)drop_duplicates。
- 进阶方法:加载时断言唯一性,
assert df[key].is_unique,把校验写进数据管线;对重复行落盘审计日志以便回溯生成配置。- SOTA 方法:以数据库主键约束(PostgreSQL 等)承载数据,让重复在写入期即失败;升级版本前先在样例数据上跑重复率回归检查。
参考:Issues #1545、#1648、#1552(https://github.com/synthetichealth/synthea/issues)。
⚠️ 坑点 5:把合成数据上的评估当作真实性能(分类:评估误用)
问题:合成数据不存在真实世界的采集噪声、录入错误与流程偏差,在其上得到的指标天然偏乐观;官方明确 Synthea 定位不含临床发现与科学推断。将合成结果直接写进临床结论属于评估误用。
症状:报告声称"在 100 万患者 EHR 上验证有效"但无真实数据对照;审稿/合规质询要求提供真实世界证据时无以为答。
解决:
- 简单方法:在所有图表与结论处显式标注"synthetic population",并报告官方定位。
- 进阶方法:设计"合成开发 → 真实验证"两阶段评估,量化并报告性能衰减幅度。
- SOTA 方法:按官方建议把 Synthea 用于软件测试、教育、可行性评估与算法验证,临床有效性主张一律基于真实数据研究。
参考:Walonoski et al. 2020, Intelligence-Based Medicine(10.1016/j.ibmed.2020.100007)。
⚠️ 坑点 6:人群构成由配置决定,默认即马萨诸塞口径(分类:偏倚陷阱)
问题:人口统计默认锚定 Massachusetts Census;疾病模块按美国流行病学与照护模式校准。直接把合成人群当作"全人群"或迁移到非美国场景,会引入系统性构成偏差。
症状:年龄/种族分布与目标人群对不上;非美国团队发现编码体系(SNOMED/LOINC/RxNorm、C-CDA)与本地标准脱节;死亡率/患病率与本国统计不可比。
解决:
- 简单方法:生成时显式指定州/城市(
run_synthea Utah "Salt Lake City")与年龄段 -a,报告配置。- 进阶方法:修改人口统计配置或自定义模块以匹配目标人群统计;社区另有 synthea-international 等国际化扩展线索。
- SOTA 方法:在合成人群与目标人群间做构成(SMD)校准检查,必要时按构成重加权后再训练。
参考:官方主页(人口统计说明);DPG 档案(https://www.digitalpublicgoods.net/r/synthea)。
⚠️ 坑点 7:ndjson 中断写入与无效行(分类:工程陷阱)
问题:Bulk FHIR ndjson 导出存在两类已报告缺陷:Ctrl+C 中断 run_synthea 后文件只写入部分(Issue #1517);部分 ndjson 行是无效 JSON(Issue #1519)。超大规模生成还可能长时间无响应(Issue #1515,p=1 亿)。
症状:批量导入 FHIR 服务器时逐行解析报错;文件行数明显少于预期;进程"挂起"数小时无输出。
解决:
- 简单方法:生成完成后逐行
json.loads校验,丢弃/重生成无效行;中断的产物整批废弃重跑。- 进阶方法:生成后统计"患者数 × 预期资源类型"矩阵,与 CSV 侧交叉核对行数;大任务分片(多次 -p 小批量)合并。
- SOTA 方法:在 CI 中固定版本 + seed 重新生成而非复用历史产物,配合行数/哈希断言实现可复现数据资产。
参考:Issues #1517、#1519、#1515(https://github.com/synthetichealth/synthea/issues)。
⚠️ 坑点 8:假 PII 与语义陷阱——SSN 是保留测试号段(分类:标签理解)
问题:patients.csv 的 SSN 列格式逼真,但取自 SSA 保留测试号段,不对应任何真实发放记录;姓名、地址同理。PII 扫描器会大面积误报,而分析者也可能反向误用这些"像真的"标识列做实体匹配。
症状:隐私扫描报告列出海量 SSN 命中;把 SSN/地址当作特征输入模型;跨批次数据用姓名做连接时出现大量伪匹配。
解决:
- 简单方法:建模前直接丢弃 SSN/Drivers/Passport/姓名/地址列,仅保留 Id 作为连接键。
- 进阶方法:需要"真实感标识"的测试场景,保留原值但给患者 Id 加
synth-前缀命名空间,防止与真实系统混写。- SOTA 方法:在数据契约中显式声明假 PII 字段清单与用途限制,扫描工具按白名单豁免合成来源数据。
参考:官方 SSN 保留段说明(第三方整理 https://tessl.io/registry/testland/synthea-healthcare-data);Issue #1576 等字段语义讨论。
§6.6 数据增强
- ✅ 安全:变换 seed 批量生成多批人群(天然的人群重采样);调整 -a/-g/州配置构造分布偏移的评估集;以模块过滤 -m 构造消融队列。
- ✅ 安全:对观测序列做窗口切片、遮蔽(masking)与 dropout 式特征扰动(模型侧增强)。
- ❌ 危险:对合成数据再做 SMOTE/CTGAN 式二次生成——会放大模块参数伪影且无法追溯分布来源。
- ❌ 危险:修改模块 JSON 后仍声称"官方默认人群"——任何参数修改都使数据不再是可引用的官方分布。
- ❌ 危险:把两批不同配置的生成结果混在一个训练集却当单一分布报告。
§6.7 模型推荐
| 任务 | 推荐模型 | 理由 |
|---|---|---|
| 患者级多标签分类 | XGBoost / LightGBM | 16 表聚合后的静态特征天然表格化 |
| 纵向事件预测 | GRU / Transformer(事件流) | observations/encounters 时序结构完整 |
| 表征学习 | BEHRT / MedBERT 式预训练 | 合成语料无限量,适合预训练管线演练 |
| 互操作管线 | HAPI FHIR 服务器 | 直接装载 FHIR R4 bundle |
| OMOP 迁移 | 社区 Synthea ETL(R) | 官方推荐的 OMOP CDM 映射示例 |
§6.8 硬件需求
| 场景 | CPU | 内存 | 存储 | 参考耗时 |
|---|---|---|---|---|
| 交互生成(-p ≤ 10,000) | 4 核 | 8 GB | 5 GB | 分钟级 |
| 教学数据集(100k CSV) | 4 核 | 8 GB | 10 GB | 约 1 小时量级 |
| 百万患者全量 | 16 核 | 32 GB | 100 GB+ | 数小时 |
| 训练(§6.4 任务) | 8 核 + 1 GPU | 16 GB | 50 GB | 视模型而定 |
§6.9 评估指标代码
# 适用任务:患者级多标签分类(§6.4 数据集)
import torch
import numpy as np
from sklearn.metrics import roc_auc_score, average_precision_score
@torch.no_grad()
def evaluate(model, loader):
model.eval()
ys, ps = [], []
for xb, yb in loader:
ys.append(yb.numpy())
ps.append(torch.sigmoid(model(xb)).numpy())
y, p = np.vstack(ys), np.vstack(ps)
# 逐标签 AUROC / AUPRC(跳过单类标签),再宏平均
auroc, auprc = [], []
for j in range(y.shape[1]):
if y[:, j].min() != y[:, j].max():
auroc.append(roc_auc_score(y[:, j], p[:, j]))
auprc.append(average_precision_score(y[:, j], p[:, j]))
return float(np.mean(auroc)), float(np.mean(auprc))
§6.10 MLOps 笔记
- 版本与 seed 双固定:数据资产 = 模块版本(如 3.3.0)+ seed + 配置 diff;三者齐备才可复现。
- 再生成即漂移:模块在版本间持续演进,"重新生成同一批患者"只对同版本同 seed 成立;CI 中应重建而非缓存跨版本产物。
- 配置即数据卡片:把 synthea.properties 与命令行参数纳入版本库,作为数据集卡片的机器可读部分。
- 合成数据的使用边界写入流水线:在训练/评估 DAG 中加显式节点标注
synthetic-only,防止合成产物混入真实证据链。
§7 质量评估与局限性
§7.1 已知偏倚表
| 偏倚类型 | 描述 | 严重程度 | 缓解措施 |
|---|---|---|---|
| 循环性偏倚 | 标签分布由模块参数决定,模型可能还原模块配置而非学习医学规律 | 高 | 避免参数一一对应的任务;真实数据外部验证 |
| 地理/人群偏倚 | 默认 Massachusetts Census 口径,模块按美国流行病学校准,US-centric | 高 | 显式配置州/人群;国际场景自定义模块 |
| 医疗服务提供者差异缺失 | 官方承认未充分建模不同提供者的诊疗风格差异 | 中 | 解释结果时声明;不以合成数据评估提供者行为 |
| 干预后异质性有限 | 重大干预后的健康结果异质性表达不足(官方承认) | 中 | 避免疗效推断类任务 |
| 临床笔记不足 | 自由文本临床笔记覆盖有限(官方承认) | 中 | NLP 任务改用专门文本语料或 Coherent Data Set 附带笔记 |
| 罕见病覆盖薄弱 | 模块集偏重大宗慢病,罕见病默认缺席 | 中 | 自定义模块 + 明确报告覆盖范围 |
§7.2 标注质量
标签即生成事件:无标注误差、无标注者间分歧、无时间延迟。标签的"质量"问题不在准确性而在代表性——它精确反映模块参数与校准统计,而非真实临床过程。模块层面设有临床专家参与设计、贡献页面公开征集专业审阅的机制;个案研究(JAMIA Open 2022 的 AML 模块复现)显示把外部试验人群精确复刻进 GMF 需要大量迭代,说明模块保真度存在实际边界。
§7.3 泛化性评估
| 使用场景 | 失效风险 | 证据 |
|---|---|---|
| 合成内评估(同 seed 同版本) | 低——任务同源,性能可复现 | 官方 seed 机制 |
| 跨版本迁移 | 中——模块演进改变分布 | 版本时间轴(§1.4);Issue 追踪的模块修正 |
| 合成 → 真实 EHR | 高——噪声/缺失/流程差异全部回归 | 官方定位"不用于临床发现";US-centric 校准 |
| 合成 → 非美国场景 | 高——编码与照护模式脱节 | 模块按美国统计与临床路径构建 |
| 教学与工程测试 | 低——正是官方推荐用途 | DPG 认证描述的使用场景 |
§7.4 伦理
零隐私风险的依据:Synthea 的记录由模型生成,任何合成记录之下都不存在可供重识别的真实个体——官方论文明确将其与"脱敏数据"区分:“合成数据不是脱敏数据”,且合成数据被认为在伦理上优于脱敏数据,因为不存在可能被重新识别的底层记录。这一论证使 Synthea 数据可自由开放分发(Apache 2.0、无需 DUA)。
需防"合成泄露"误区:使用者容易把"无隐私风险"滑向"无科学风险"。两点必须警惕:其一,合成数据不能替代真实临床验证——任何下游模型在进入临床语境前仍需真实数据验证与监管审批;其二,不要把基于合成人群的统计结论当作流行病学发现发表,官方将合成数据用途限定于软件测试、教育、学术研究、可行性评估与算法验证。此外,假 PII(保留号段 SSN 等)在跨系统流转中可能触发真实隐私事件响应流程,应在数据契约中预先声明豁免。
三类数据形态的伦理负担对照:
| 维度 | 原始真实数据 | 脱敏真实数据 | Synthea 合成数据 |
|---|---|---|---|
| 底层记录 | 真实个体 | 真实个体(已去标识) | 不存在真实个体 |
| 重识别残余风险 | 有 | 有(链接攻击等) | 无 |
| 监管/合规负担 | 最高 | 中(仍受隐私法规约束) | 低(Apache 2.0 自由分发) |
| 使用门槛 | 机构审批 | DUA + 培训认证 | 无 |
| 允许用途边界 | 全部 | 视 DUA 而定 | 工程/教育/可行性/算法验证;不用于临床发现与科学推断 |
工程与教育场景的伦理实践清单:
- 在项目文档开头声明数据来源为 Synthea 合成数据及其版本号,避免下游误当作真实数据传递。
- 对假 PII 字段(SSN/姓名/地址)建立白名单豁免与禁入特征清单(呼应坑点 8)。
- 对外发布基于 Synthea 的结果时保留"synthetic population"标注,并在限制章节复述官方定位。
- 教学场景可利用"合成优于脱敏"的论证讲授隐私工程:让学生亲手做一次重识别攻击演练(Denver 子集即为此设计),直观理解脱敏数据的残余风险为何不存在于合成数据。
§7.5 公平性
patients.csv 提供符合美国人口普查口径的 Race/Ethnicity 字段,模型可以在合成数据上预演公平性审计流程(分组指标、混淆矩阵分解)。但须注意:分组间的差异来自模块参数设定,不能被解读为真实健康差距的证据;公平性干预的最终评估必须在真实数据上完成。
§7.6 数据漂移
Synthea 的"漂移"来自生成端而非世界端:模块新增与参数修订会在版本间改变人群分布(2.5.0→3.3.0 的十年迭代跨越 COVID 模块加入、CQL 引擎集成等大变更)。团队应把"模块变更日志"视为分布变更日志,跨版本比较前先做构成校准检查。
§7.7 DAIMS 数据质量评估
| # | 检查项 | 状态 | 说明 |
|---|---|---|---|
| 1 | 宽格式支持 | ✅ | CSV 16 表面向分析,pivot 即得宽表 |
| 2 | 唯一标识 | ⚠️ | Id/UUID 体系完整,但存在已报告的多表重复 ID(Issue #1545) |
| 3 | 特殊字符处理 | ✅ | UTF-8 编码,字段内无换行/逗号冲突 |
| 4 | 重复行 | ⚠️ | claims_transactions.csv 重复主键(Issue #1648);同日重复 lab panels(Issue #1552) |
| 5 | 缺失编码 | ✅ | 缺失即空单元格,无魔法数字 |
| 6 | 标签标识 | ✅ | conditions/medications 即天然标签源,编码体系明确 |
| 7 | 罕见类分组 | ✅ | 生成参数可控制标签分布,罕见类可由模块扩展补足 |
| 8 | 偏倚评估 | ⚠️ | 官方文档记录部分偏倚(provider 差异、干预异质性),缺系统性偏倚报告 |
| 9 | 数据字典 | ✅ | 官方 Wiki 提供表/字段说明与记录结构 |
| 10 | 信息性缺失解释 | ✅ | DeathDate 空=在世等语义在结构中自解释(§4.5) |
| 11 | 设备记录 | ✅ | devices.csv 独立成表 |
| 12 | 共线性检查 | ✅ | 特征由模块独立生成,无数据驱动的共线性伪影 |
| 13 | 编码映射 | ✅ | SNOMED CT/LOINC/RxNorm/ICD-10 多术语体系齐全 |
| 14 | 时间戳处理 | ✅ | 统一 ISO 日期(YYYY-MM-DD);时序跨度可由 -r 控制 |
| 15 | 划分建议 | ✅ | 患者级划分 + seed 复现机制(§5) |
| 16 | 泄漏讨论 | ✅ | 本页 §5.3 专门讨论跨表/跨批次/参数泄漏 |
| 17 | 标签分布 | ✅ | 分布由配置决定且可复现(§4.2) |
| 18 | 测量偏倚 | ⚠️ | 观测由模块合成,"测量过程"本身是参数化的(§7.1) |
| 19 | 外部验证建议 | ✅ | 官方明确要求按用例验证;本页 §5.5 给出路径 |
| 20 | 版本记录 | ✅ | Maven Central 工件 + 版本时间轴(§1.4) |
| 21 | 预处理脚本 | ⚠️ | 官方 Wiki 提供教程,社区有 OMOP ETL,但无官方一键预处理包 |
| 22 | 合规要求 | ✅ | Apache 2.0,无 DUA/无限制使用(NRES) |
| 23 | 多模态对齐 | ⚠️ | 主仓库 CSV/FHIR 无影像;影像/基因组/ECG 对齐需转向 Coherent Data Set |
| 24 | 去标识化 | ✅ | 全合成生成,无真实 PII;假 PII 使用保留测试号段 |
DAIMS 评分:21.5 / 24
评分解读:Synthea 在结构完备性(字典、编码、时间戳、层级)、合规性(Apache 2.0、零隐私负担)与可复现性(seed + 版本工件)上达到顶级水准;扣分集中在工程边角(已报告的重复 ID 类缺陷)、偏倚文档的系统化程度,以及多模态能力分散在家族数据集而非主仓库。这些扣分项均为可修复或可绕过的工程问题,而非设计缺陷。
对你意味着什么:可以放心把 Synthea 作为医疗 AI 工程与教学的主力合成数据源——拿到数据后先做三件事:(1) 按组合键去重并断言唯一性(堵住 #1545/#1648 类缺陷);(2) 把生成配置(版本 + seed + properties diff)写进实验记录;(3) 预留真实数据外部验证阶段,把"合成→真实"衰减幅度作为汇报指标。若任务涉及影像或临床文本,直接转向家族数据集而非强行在主仓库内凑合。
§7.8 外部验证矩阵
| 外部数据集/场景 | 来源机构 | 评估任务 | 性能指标 | 相对内部变化 | 关键发现 |
|---|---|---|---|---|---|
| COVID-19 早期文献统计 | 公开同行评审文献(3 篇) | 病死率/住院率/资源需求校准 | 病死率 4.1%、住院率 20.6%、峰值 548 透析机/209 呼吸机 | — | 合成分布可校准至文献汇总统计(非个体数据) |
| McCormick AML 试验人群 | McCormick & Brown 模拟试验 | AML 模块分布复刻(年龄/种族/转归) | 多轮迭代后多数维度 Pass,年龄分布复刻最困难 | 模块保真度存在实际边界 | GMF 复刻外部试验需大量迭代;文档盲区需试错 |
| FHIR 合规生态 | ONC(美国国家卫生信息技术协调员办公室) | FHIR 标准合规验证 | 相关验证工具研究另发表(JMIR Med Inform 2018) | — | 团队深度参与 FHIR 合规工具链,输出符合开放标准 |
§8 基准性能与生态
§8.1 关键研究文献(替代排行榜说明)
Synthea 是生成器而非固定基准数据集,不存在官方排行榜或 SOTA 排位。其"性能"证据以方法学论文与独立评估的形式存在,以下按影响力列出(数值间不可直接比较,因任务与口径各异):
| 排名 | 工作 | 产出/性能 | 年份 | 关键技术 | 完整引用 | 代码 |
|---|---|---|---|---|---|---|
| 1 | Synthea 方法论文 | 百万患者记录免费开放;GMF 状态机体系 | 2018 | GMF、生命历程模拟 | Walonoski JA, Kramer M, Nichols J, Quina A, Moesel C, Hall D, Duffett C, Dube K, Gallagher T, McLachlan S. Synthea: An approach, method, and software mechanism for generating synthetic patients and the synthetic electronic health care record. Journal of the American Medical Informatics Association. 2018;25(3):230-238. doi:10.1093/jamia/ocx079 | https://github.com/synthetichealth/synthea |
| 2 | COVID-19 模型与数据集 | 124,150 患者模拟;病死率 4.1%、住院率 20.6% 校准 | 2020 | 疫情模块、资源消耗模拟 | Walonoski J, Klaus S, Granger E, Hall D, Gregorowicz A, Neyarapally G, Watson A, Eastman J. Synthea™ Novel coronavirus (COVID-19) model and synthetic data set. Intelligence-Based Medicine. 2020;1:100007. doi:10.1016/j.ibmed.2020.100007 | https://github.com/synthetichealth/synthea |
| 3 | Coherent Data Set | FHIR 链接 DICOM/基因组/ECG/笔记的综合合成记录 | 2022 | 多模态对齐 | Walonoski J, Hall D, Bates KM, Farris MH, Dagher J, Downs ME, Sivek RT, Wellner B, Gregorowicz A, Hadley M, Campion FX, Levine L, Wacome K, Emmer G, Kemmer A, Malik M, Hughes J, Granger E, Russell S. The “Coherent Data Set”: Combining Patient Data and Imaging in a Comprehensive, Synthetic Health Record. Electronics. 2022;11(8):1199. doi:10.3390/electronics11081199 | 官方下载页 |
| 4 | 平台独立评估(AML 案例) | GMF 复刻外部试验的可行性与边界 | 2022 | 模块工程、分布校准 | Petelin D, et al. Case report: evaluation of an open-source synthetic data platform for simulation studies. JAMIA Open. 2022. doi:10.1093/jamiaopen/ooac067 | 模块随文公开 |
| 5 | FHIR 合规验证分析 | 验证工具与实现合规性的关联 | 2018 | FHIR 校验 | Walonoski J, Scanlon R, Dowling C, Hyland MG, Ettema RJ, Posnack S. Validation and Testing of Fast Healthcare Interoperability Resources Standards Compliance: Data Analysis. JMIR Medical Informatics. 2018;6(4):e10870. doi:10.2196/10870 | — |
§8.2 SOTA 总结与选型建议
若目标是"拿到能跑的标准格式合成 EHR",Synthea 是事实标准:格式覆盖面、可复现性与许可自由度在开源生态中无对手。若目标是"高保真模拟真实机构数据",合成保真派(基于真实数据训练的生成模型)更合适,但会重新引入隐私审批。若目标是"影像/基因组多模态",选 Coherent Data Set 而非主仓库。多数团队的最优路径是组合使用:Synthea 打底 + 真实数据后期验证。
§8.3 评测协议建议
评估基于 Synthea 的工作时,建议固定以下协议要素并在报告中披露:生成器版本(Maven 工件号)、seed 与 clinician seed、州/城市/人口规模、模块集(含 -m 过滤)、properties diff、患者级划分方式、以及"合成内指标"与"真实数据外部指标"分别呈现。
§8.4 相关数据集表
| 数据集 | 关系 | 规模 | 获取 |
|---|---|---|---|
| SyntheticMass | Synthea 的官方百万患者档案 | 1,000,000 患者 | 官方下载页 |
| Synthea COVID-19 | 疫情专供合成集 | 10k/100k CSV;模拟 124,150 人 | 官方下载页 / Kaggle |
| Coherent Data Set (“Oh Canada!”) | 多模态扩展(影像/基因组/ECG/笔记) | 论文口径 | 官方下载页 |
| mCode 乳腺癌集 | 肿瘤 FHIR/mCode 扩展 | 多套 | 官方下载页 |
| Childhood Obesity Synthetic Denver | 儿童肥胖专题(身份匹配测试) | 6,357 名儿童 | 官方下载页 |
| MIMIC-IV | 真实 EHR 对照金标准 | 约 30 万患者 | PhysioNet(凭证化申请) |
§8.5 关键论文 Top 5(完整引用 + 一句话贡献)
- Walonoski JA, Kramer M, Nichols J, Quina A, Moesel C, Hall D, Duffett C, Dube K, Gallagher T, McLachlan S. Synthea: An approach, method, and software mechanism for generating synthetic patients and the synthetic electronic health care record. Journal of the American Medical Informatics Association. 2018;25(3):230-238. doi:10.1093/jamia/ocx079 — 方法学奠基:GMF 状态机与百万患者开放档案。
- Walonoski J, Klaus S, Granger E, Hall D, Gregorowicz A, Neyarapally G, Watson A, Eastman J. Synthea™ Novel coronavirus (COVID-19) model and synthetic data set. Intelligence-Based Medicine. 2020;1:100007. doi:10.1016/j.ibmed.2020.100007 — 展示快速模块化建模 + 资源消耗模拟 + "合成优于脱敏"伦理论证。
- Walonoski J, Hall D, Bates KM, et al. The “Coherent Data Set”: Combining Patient Data and Imaging in a Comprehensive, Synthetic Health Record. Electronics. 2022;11(8):1199. doi:10.3390/electronics11081199 — 以 FHIR 为枢纽的多模态合成记录。
- Case report: evaluation of an open-source synthetic data platform for simulation studies. JAMIA Open. 2022. doi:10.1093/jamiaopen/ooac067 — 第三方独立评估 GMF 表达力边界的第一手案例。
- Kramer MA, Mathur A, Adams CE, Walonoski JA. Leveraging Generative AI to Enhance Synthea Module Development. arXiv:2507.21123. 2025 — 生成式 AI 辅助模块开发的最新探索。
§8.6 社区活跃度
- GitHub 仓库(synthetichealth/synthea)持续维护:Issues 看板在 2026 年 3 月仍有活跃缺陷报告(#1648、#1651),历史 issue 编号已超过 1,600。
- 官方维护三通道支持:GitHub Issues、GitHub Discussions、邮件列表(synthea-list@groups.mitre.org),并有行为准则约束。
- 2022 年获数字公共产品(DPG)认证,开放标准符合性(HL7 C-CDA、RxNorm、FHIR、LOINC、SNOMED CT)经第三方核验。
- 学术侧持续产出:2025 年仍有 arXiv 论文探索生成式 AI 辅助模块开发,显示学术社区保持投入。
§8.7 生态快照表
| 资源 | 类型 | 链接 | 维护状态 | 推荐理由 |
|---|---|---|---|---|
| synthetichealth/synthea | 源码仓库 | https://github.com/synthetichealth/synthea | 活跃维护(2026-03 仍有 issue 活动) | 唯一官方实现 |
| 官方 Wiki | 文档 | https://github.com/synthetichealth/synthea/wiki | 官方维护 | Basic Setup/模块开发/FAQ 全覆盖 |
| 项目主页 | 门户 | https://synthetichealth.github.io/synthea/ | 官方维护 | 模块画廊与理念说明 |
| 下载页 | 数据 | https://synthea.mitre.org/downloads | 官方维护(迁移至 synthetichealth.github.io/downloads.html) | 百万档案与专题集入口 |
| Module Builder | 工具 | 官方 Wiki/链接索引 | 官方维护 | 无需写 JSON 的可视化模块编辑器 |
| SyntheaCovid100k(Kaggle) | 数据镜像 | https://www.kaggle.com/datasets/drscarlat/syntheacovid100k | 社区镜像(5.14 GB) | 开箱即用的 100k 教学 CSV |
| Synthea ETL(OMOP) | 社区工具 | github.com/bsc-health-data/pydatalondon23-modern-data-stack | 社区维护 | OMOP CDM 迁移参考实现 |
| DPG 档案 | 认证 | https://www.digitalpublicgoods.net/r/synthea | 第三方核验 | 许可/标准合规的权威快照 |
§9 相关资源与引用
§9.1 官方资源
- 源码仓库:https://github.com/synthetichealth/synthea(构建、测试、run_synthea 用法)
- 官方 Wiki:https://github.com/synthetichealth/synthea/wiki(Basic Setup、Adding a Module、Records、FAQ)
- 项目主页:https://synthetichealth.github.io/synthea/(模块画廊、SyntheticMass 介绍)
- 数据下载:https://synthea.mitre.org/downloads(百万档案、样本包、COVID-19、mCode、Denver、Coherent)
- 社区支持:GitHub Issues / Discussions / synthea-list@groups.mitre.org
- 行为准则:仓库内 CODE_OF_CONDUCT.md
§9.2 教程与延伸阅读
- ONC/ASPE 报告《Synthetic Health Data Generation to Accelerate Patient-Centered Outcomes Research (PCOR) Final Report》— 模块开发方法论与模块构建器官方叙述
- Kaggle SyntheaCovid100k 页面附带的分析 notebook(RDBMS 展平 + 死亡预测示例)
- 社区 Synthea→OMOP CDM ETL 示例(pydatalondon23-modern-data-stack 仓库)
官方 Wiki 四个关键页面的阅读顺序建议:
| 顺序 | Wiki 页面 | 内容 | 什么时候读 |
|---|---|---|---|
| 1 | Basic Setup | 构建、运行环境与 run_synthea 用法 | 第一次搭建环境 |
| 2 | Records | CSV/FHIR 输出的表结构与字段说明 | 写预处理代码前(配合本页 §4) |
| 3 | Adding a Module | GMF 模块开发流程与 JSON schema | 需要自定义疾病/流程时 |
| 4 | FAQ | 常见安装与运行问题 | 排障时(配合本页坑点 1-8) |
学习路径三步走:先用官方样本包(100/1,000 患者)熟悉表结构,不必一上来就生成;再以固定 seed 本地生成小规模队列,打通"配置 → 生成 → 加载"链路;最后按需进入模块开发或互操作联调。
§9.3 BibTeX 引用块
@article{walonoski2018synthea,
title = {Synthea: An approach, method, and software mechanism for generating
synthetic patients and the synthetic electronic health care record},
author = {Walonoski, Jason A. and Kramer, Mark and Nichols, Joseph and
Quina, Andre and Moesel, Chris and Hall, Dylan and Duffett, Carlton and
Dube, Kudakwashe and Gallagher, Thomas and McLachlan, Scott},
journal = {Journal of the American Medical Informatics Association},
volume = {25},
number = {3},
pages = {230--238},
year = {2018},
doi = {10.1093/jamia/ocx079}
}
@article{walonoski2020covid19,
title = {Synthea{\texttrademark} Novel coronavirus (COVID-19) model and synthetic data set},
author = {Walonoski, Jason and Klaus, Sarah and Granger, Eric and Hall, Dylan and
Gregorowicz, Austin and Neyarapally, Geetha and Watson, Abigail and
Eastman, Jon},
journal = {Intelligence-Based Medicine},
volume = {1},
pages = {100007},
year = {2020},
doi = {10.1016/j.ibmed.2020.100007}
}
@article{walonoski2022coherent,
title = {The "Coherent Data Set": Combining Patient Data and Imaging in a
Comprehensive, Synthetic Health Record},
author = {Walonoski, Jason and Hall, Dylan and Bates, Kevin M. and Farris, Michael H. and
Dagher, John and Downs, Michael E. and Sivek, Robert T. and Wellner, Bela and
Gregorowicz, Austin and Hadley, Michael and Campion, Francois X. and
Levine, Lee and Wacome, Keith and Emmer, Gregory and Kemmer, Andrew and
Malik, Maha and Hughes, James and Granger, Eric and Russell, Scott},
journal = {Electronics},
volume = {11},
number = {8},
pages = {1199},
year = {2022},
doi = {10.3390/electronics11081199}
}
@article{petelin2022casereport,
title = {Case report: evaluation of an open-source synthetic data platform for
simulation studies},
author = {Petelin, Deana and others},
journal = {JAMIA Open},
year = {2022},
doi = {10.1093/jamiaopen/ooac067}
}
@article{walonoski2018validation,
title = {Validation and Testing of Fast Healthcare Interoperability Resources
Standards Compliance: Data Analysis},
author = {Walonoski, Jason A. and Scanlon, Robert and Dowling, Conor and
Hyland, Mario G. and Ettema, Richard J. and Posnack, Steven},
journal = {JMIR Medical Informatics},
volume = {6},
number = {4},
pages = {e10870},
year = {2018},
doi = {10.2196/10870}
}
@article{kramer2025genai,
title = {Leveraging Generative AI to Enhance Synthea Module Development},
author = {Kramer, Mark A. and Mathur, Aanchal and Adams, Caroline E. and
Walonoski, Jason A.},
journal = {arXiv preprint arXiv:2507.21123},
year = {2025}
}
§9.4 引用指南
使用 Synthea 生成的数据时,请同时引用:(1) 方法论文(walonoski2018synthea);(2) 若使用 COVID-19 专题数据集,另引 walonoski2020covid19;(3) 若使用 Coherent Data Set,另引 walonoski2022coherent。官方在下载页指定了与上述一致的引用格式。对软件本身,建议在文中注明生成器版本号与随机 seed,以便复现。
§10 AI 使用声明卡
§10.1 AI 模型列表
- 大语言模型(AI 写作助手):负责初稿撰写、结构组织与语言润色。
§10.2 AI 参与范围
- 参与:正文初稿生成、表格整理、代码示例组织、术语一致性检查。
- 不参与:事实核查与来源核验、医学与工程结论的最终判断、发布决定。
§10.3 输入来源列表
- Walonoski JA, et al. Synthea: An approach, method, and software mechanism for generating synthetic patients and the synthetic electronic health care record. J Am Med Inform Assoc. 2018;25(3):230-238. doi:10.1093/jamia/ocx079
- Walonoski J, et al. Synthea™ Novel coronavirus (COVID-19) model and synthetic data set. Intelligence-Based Medicine. 2020;1:100007. doi:10.1016/j.ibmed.2020.100007
- Walonoski J, et al. The “Coherent Data Set”: Combining Patient Data and Imaging in a Comprehensive, Synthetic Health Record. Electronics. 2022;11(8):1199. doi:10.3390/electronics11081199
- Case report: evaluation of an open-source synthetic data platform for simulation studies. JAMIA Open. 2022. doi:10.1093/jamiaopen/ooac067
- Walonoski J, et al. Validation and Testing of FHIR Standards Compliance: Data Analysis. JMIR Med Inform. 2018;6(4):e10870. doi:10.2196/10870
- Kramer MA, Mathur A, Adams CE, Walonoski JA. Leveraging Generative AI to Enhance Synthea Module Development. arXiv:2507.21123. 2025
- GitHub synthetichealth/synthea 仓库 README(格式清单、系统要求、命令行用法)
- Synthea 官方下载页(SyntheticMass 百万档案、COVID-19 10k/100k、Denver、Coherent)
- Synthea 项目主页(GMF 说明、模块画廊、MITRE 机构介绍)
- Digital Public Goods Alliance — Synthea 档案(许可、发布日期、DPG 认证、开放标准清单)
- ONC/ASPE Synthetic Health Data Generation PCOR Final Report(模块开发方法论)
- Maven Central 镜像(org.mitre.synthea 版本历史:2.5.0—3.3.0)
- GitHub Issues #1515/#1517/#1519/#1545/#1552/#1557/#1558/#1576/#1648(缺陷与社区讨论)
- Kaggle SyntheaCovid100k 数据集页(文件结构、5.14 GB、16 表)
- 第三方技术资料(nirmitee.io 模块架构解析;tessl.io 测试数据指南;DeepWiki 模块结构)
§10.4 人工校验记录
| 内容模块 | 审核者 | 审核方式 | 审核状态 |
|---|---|---|---|
| §0 E-E-A-T 与免责声明 | 千方病案医学编辑部 | 逐条核对固定文本与页面适配 | ✅ 已通过/已验证 |
| §1 概览与版本时间轴 | 千方病案医学编辑部 | 对照 Maven Central 与 DPG 档案核验日期 | ✅ 已通过/已验证 |
| §2 医学背景(ICD-11/SNOMED 映射) | 千方病案医学编辑部 | 术语编码交叉核对 | ✅ 已通过/已验证 |
| §3 数据集规格 | 千方病案医学编辑部 | 对照官方下载页与 Wiki 核验 | ✅ 已通过/已验证 |
| §4 数据结构与 DAIMS 字段字典 | 千方病案医学编辑部数据工程组 | 对照官方 Wiki 表结构核验 | ✅ 已通过/已验证 |
| §6 预处理 Pipeline 与 8 大坑点 | 千方病案医学编辑部数据工程组 | 代码走查 + Issue 原文比对 | ✅ 已通过/已验证 |
| §7 质量评估与 DAIMS 24 项 | 千方病案医学编辑部 | 逐项状态复核 | ✅ 已通过/已验证 |
| §8-§9 生态与引用 | 千方病案医学编辑部 | 引用完整性核对 | ✅ 已通过/已验证 |
| §10 声明卡与页面状态 | 千方病案医学编辑部 | 终审 | ✅ 已通过/已验证 |
§10.5 AI 生成章节标注
- 本页正文各节由 AI 辅助生成初稿,经上表所列人工校验流程后发布;事实性内容以 §10.3 输入来源列表为准。
§10.6 最后人工审核日期
- 2026-09-05(与 §0 审核日期一致)
页面状态:published(全部内容已完成审核并发布)
相关数据集导航
以下为站内 AI-Ready 数据集百科中与本词条共享多个主题标签的相关数据集,按相关度降序排列:
- cgrd — 共享标签:电子健康记录 / 药物发现与化学 / 临床电子病历
- thin — 共享标签:电子健康记录 / 药物发现与化学 / 临床电子病历
- jmdc — 共享标签:电子健康记录 / 药物发现与化学 / 临床电子病历
- MIMIC-BR — 共享标签:电子健康记录 / 临床电子病历
- gdb-17 — 共享标签:药物发现与化学 / 分子生成
- coconut — 共享标签:药物发现与化学 / 分子生成
- uspto-50k — 共享标签:药物发现与化学 / 分子生成
- open-reaction-database — 共享标签:药物发现与化学 / 分子生成
- pcornet — 共享标签:电子健康记录 / 临床电子病历
- SEER-NCI — 共享标签:电子健康记录 / 临床电子病历
导航说明:本章节由全站统一标签体系自动计算生成(标签重合度算法),双向可达;点击链接可跳转至对应数据集词条。
