信息速览

AACT — 临床试验注册结构化聚合数据库 AI-Ready Wikipedia
INFOBOX
| 数据集名称 | AACT Database |
| 英文全称 | Aggregate Analysis of ClinicalTrials.gov (AACT) Database |
| 别名/简称 | AACT、AACT Database、ClinicalTrials.gov 结构化聚合数据库 |
| 疾病分类 | 全疾病谱注册库(ICD-11 代表性覆盖:2A00-2F9Z 肿瘤 / BA00-BE2Z 循环系统 / CA00-CB7Z 呼吸系统 / 1A00-1H0Z 感染性疾病等,详见 §2.1) |
| SNOMED CT | 注册记录以 MeSH 为标准词表(condition_browse / intervention_browse);下游可映射 SNOMED CT 64572001 Disease / 404684003 Clinical finding(详见 §2.1b) |
| 数据模态 | 结构化表格(52 张 PostgreSQL 关系表)、自由文本(标题/摘要/入排标准) |
| AI 任务类型 | 试验信息抽取、资格标准解析、试验检索与匹配、结果披露预测、试验设计趋势分析、自动 MeSH/ICD 编码、表格问答 |
| 样本总数 | 601,524 项注册研究(截至 2026-09-03)/ 52 张关系表 / 第三方镜像全库约 5,640 万行 |
| 数据大小 | 约 2.37 GB(PostgreSQL 快照 zip)/ 约 2.35 GB(管道分隔文本 zip,导出日 2026-09-05);本地恢复后建议预留 50 GB 以上磁盘 |
| 数据格式 | PostgreSQL dump / 管道分隔文本(pipe-delimited)/ 第三方 DuckDB 镜像 |
| 许可证 | 无正式许可条款(内容为美国联邦政府公有领域登记数据,CTTI 仅要求注明来源) |
| 访问级别 | 开放(云端库免费注册账号;静态快照直接下载) |
| DUO 标签 | NRES(研究层级注册元数据,无特殊使用限制) |
| 语言 | 英文 |
| 首发日期 | 2012-03-16(PLOS ONE 论文发表,首版含截至 2010-09-27 的 96,346 项试验) |
| 最后更新 | 持续每日更新(最新静态快照导出日 2026-09-05) |
| 发布机构 | Clinical Trials Transformation Initiative(CTTI,杜克大学与 FDA 共同创立的公私合作项目) |
| 官方主页 | https://aact.ctti-clinicaltrials.org/ |
| 下载地址 | https://aact.ctti-clinicaltrials.org/downloads |
| DOI | 10.1371/journal.pone.0033677(描述论文) |
| 引用次数 | 140+(Scopus/PlumX citation indexes,截至 2026-09) |
| AI 就绪度评分 | ⭐⭐⭐⭐(4/5)— 结构化程度极高、数据字典与 schema 文档齐全、SQL 直接可用;扣分项:无官方 ML 划分与预处理脚本、数据未经清洗、2021 年存在 schema 破坏性大版本变更 |
| 页面状态 | published |
§0 E-E-A-T 信任声明与免责声明
- 医学审核:千方病案医学编辑部 交叉审核:§2 医学背景(ICD-11/SNOMED CT 映射、注册生态与人群统计)、§7 偏倚分析与公平性章节。
- 数据工程审核:[千方病案医学编辑部交叉审核] 医疗 AI 数据工程师,审核范围:§4 DAIMS 数据字典、§5 数据划分策略、§6 预处理 Pipeline 和坑点。
- 审核日期:2026-09-05
医疗免责声明:本页面提供的医学信息仅供研究和教育目的,不构成医疗建议、诊断或治疗方案。数据集的医学描述基于公开发表的文献,未经逐一临床验证。任何基于该数据集训练的 AI 模型在应用于临床决策前,必须经过独立的临床验证和监管审批。
技术免责声明:本页面的代码示例、预处理建议和基准性能数据基于公开资料整理,不保证在特定环境下的准确性和适用性。使用者应自行验证代码安全性和数据预处理流程的正确性。千方病案医数集不对因使用本页面信息而导致的任何直接或间接损失承担责任。
数据使用合规:使用本页面描述的数据集前,请务必阅读并遵守数据集原始许可协议。AACT 无需申请或签署 DUA,内容为美国联邦政府公有领域登记数据,CTTI 仅要求在使用时注明来源(建议引用格式见 §9);涉及 MedDRA 编码的不良事件字段再分发受 MedDRA 订阅许可约束。DUO 标签仅供参考,具体使用限制以数据集官方协议为准。
§1 数据集概览
§1.0 📌 30 秒速览
这是什么? AACT 是 ClinicalTrials.gov(全球最大的临床试验注册库,由美国国家医学图书馆 NLM 运营)的"数据库化"版本。ClinicalTrials.gov 官方提供的是一条条研究记录的网页、XML/JSON 文件和 REST API,而 CTTI 把这 60 多万条记录拆解、整理成 52 张规范的 PostgreSQL 关系表,每天凌晨自动同步一次。你可以把它理解为:ClinicalTrials.gov 是"文档",AACT 是把文档变成了"电子表格"。
为什么重要? 临床试验注册数据是研究"发表偏倚"和"结果披露合规"的原始凭证——一项试验注册过、做没做完、结果交没交,都在库里留痕。这些分析动辄涉及几十万条记录的分组统计,用网页和 API 逐条抓几乎不可行,而 AACT 让你用一条 SQL 就能算完。自 2012 年发布以来,它已成为临床试验生态研究、政策评估(如 FDAAA 801 合规)和医疗 NLP 语料构建的事实标准底座。
我能用它做什么? 如果你是研究者:统计某类药物试验的注册趋势、审查申办方的结果披露率、复现期刊上的注册生态分析。如果你做 AI:用 60 万+ 条结构化记录加英文摘要文本,训练资格标准解析器、试验相似度检索模型、结果披露预测器,或为医疗大模型构建高质量预训练/指令语料。
§1.1 技术摘要
AACT 由 CTTI(Clinical Trials Transformation Initiative,杜克大学与 FDA 于 2012 年前的公私合作项目)开发和维护,其 Ruby on Rails 开源管道每晚午夜(美国东部时间)从 ClinicalTrials.gov 下载全量研究 XML,逐条解析后装载进 PostgreSQL 的 ctgov schema;每月执行一次全量刷新,并同时发布 PostgreSQL dump 与管道分隔文本两种静态快照(最新导出日 2026-09-05,分别为 2.37 GB 与 2.35 GB)。数据模型以 studies 表为中心(主键 nct_id,截至 2026-09-03 对应 ClinicalTrials.gov 的 601,524 项研究),其余 51 张表通过 nct_id 外键关联,覆盖注册协议字段(条件、干预、入排标准、申办方、研究中心)与结果字段(受试者流动、基线特征、结局测量与统计分析、不良事件汇总)。AACT 原样保留申报数据不做清洗,衍生计算值单独存放于 Calculated_Values 表;官方同时提供 schema 图、数据字典、FAQ 与研究者指南等文档。
§1.2 战略价值
维度一:注册生态与政策研究的"公共账户本"。 临床试验注册制度(FDAAA 801 及其 2016 年 Final Rule、2017-01-18 生效)把"注册即承诺"变成了法律义务,而 AACT 是检验这套制度是否落地的最完整数据源。从 FDA 批准新药的合规排名(Anderson et al. 2015, BMJ Open)到完成 III 期试验的结果披露缺口分析,几乎所有注册生态研究都以 AACT(或其数据源 ClinicalTrials.gov 全量抽取)为分母。对政策研究者而言,它提供了任何问卷或摘要数据库都无法替代的"全景原始凭证"。
维度二:医疗 NLP 的高质量"标注自带"语料。 60 万+ 条记录天然携带成对的结构化监督信号:英文摘要(brief_summaries/detailed_descriptions)对应试验期相、研究类型、条件与干预词表;入排标准文本对应结构化的年龄/性别/时点字段。这使 AACT 成为资格标准解析(eligibility criteria NLP)、条件-干预关系抽取、试验检索与患者匹配等任务的自监督/弱监督训练富矿,且数据公有领域、无需爬虫即可批量获取,合规成本远低于从医院系统获取文本。
维度三:低成本的教学与工程"练手场"。 零门槛获取、GB 级体量、结构规整,使 AACT 成为数据工程与医疗信息学教学的理想素材:学习者可以在一小时内完成"下载快照→恢复数据库→写出第一批分析 SQL"的完整闭环,在无 PHI 合规负担的前提下练习真实世界的脏数据处理(一对多聚合、异质自由文本、版本漂移)。社区教程(PharmaSUG 实战论文)与第三方 DuckDB 镜像进一步降低了入门成本。
§1.3 同类数据集横向对比
| 数据集 | 规模 | 模态/结构 | 获取方式 | 与 AACT 的差异化 |
|---|---|---|---|---|
| AACT(本页) | 601,524 项研究(2026-09-03) | 52 张 PostgreSQL 关系表,注册+结果全字段 | 云端库免费注册 / 快照下载 | 唯一全字段规范化关系库;SQL 即席分析最友好 |
| ClinicalTrials.gov API v2 | 同源(601,524 项) | REST JSON,嵌套模块 | 免费 API,速率限制 | 适合单条/增量查询;复杂聚合需大量分页调用 |
| ClinicalTrials.gov 官方批量下载 | 同源 | XML/JSON 大文件(每研究一个文档) | 官网直接下载 | 保留原始嵌套结构,需自行解析成表 |
| HF Nason/clinicaltrials-database | 5,640 万行 × 48 表 | DuckDB 单文件,HTTP range 直查 | HuggingFace 直接 ATTACH | 基于管道分隔文本二次构建的便捷镜像,非官方维护 |
| WHO ICTRP | 汇聚全球 17+ 注册库 | 检索门户为主 | 官网查询 | 覆盖面更广(含中国、欧盟等),但结构化深度与更新频率不及 AACT |
对比要点:官方 API 与批量文件是"源",AACT 是"分析型副本",第三方 DuckDB 镜像是"社区便利层"。若论文需要逐字段溯源到官方定义,最终校验应回到 API v2 与官方字段定义页;AACT 的价值在于让批量计算从"工程问题"退化为"一句 SQL"。
§1.4 版本时间轴
| 时间 | 版本/事件 | 说明 |
|---|---|---|
| 2010-09-27 | 首版数据基线 | 首版 AACT 收录 96,346 项试验,以 Oracle .dmp 与文本格式发布 |
| 2012-03-16 | PLOS ONE 论文发表 | Tasneem et al. 正式描述 AACT 及临床专科再分组方法 |
| 2016 年前后 | 迁移至 PostgreSQL + 云端库 | 开放 psql 直连(aact-db.ctti-clinicaltrials.org:5432),注册免费账号即可查询 |
| 2019-07-02 | AACT 4.3.0 | 服务器升级 PostgreSQL 11.1;重构以方便社区自建 |
| 2019-12-18 | AACT 4.4.1 | 修复 ClinicalTrials.gov RSS 限流(每次 ≤1,000 项)导致的增量漏更新 |
| 2021-11-15 | schema 大版本重构 | 切换到新版 ClinicalTrials.gov API,现行 ctgov schema 生效;2021-11-15 前的归档快照需配旧文档 |
| 2026-09-05 | 最新静态快照 | PostgreSQL dump 2.37 GB / 管道分隔文本 2.35 GB |
§1.5 典型应用场景
- 结果披露合规审计:以某年度批准药物或某治疗领域的完成试验为分母,SQL 统计结果提交率、延迟与豁免情况,复现 FDAAA 合规类研究。
- 试验设计趋势分析:按注册年份、申办方类别(agency_class)、盲法/分配设计,刻画 25 年来全球试验设计演化,支撑综述与政策报告。
- 资格标准解析 NLP:用 eligibilities 结构化字段作弱监督,训练模型从入排标准自由文本抽取年龄、实验室阈值、合并疾病等约束。
- 试验检索与患者匹配:构建以条件/干预/地点为过滤维度的语义检索或推荐系统,是患者-试验匹配系统的注册数据底座。
- 结果披露预测与偏倚研究:以注册时可见字段(设计、申办方、样本量、资助来源)预测试验最终是否提交结果,量化发表偏倚的可预测成分。
各场景对应的最小表集合(按需取用即可,不必恢复全库):
| 场景 | 最小表集合 | 典型产出 |
|---|---|---|
| 结果披露审计 | studies + sponsors | 披露率、逾期试验清单 |
| 设计趋势分析 | studies + designs + design_groups | 年度设计指标曲线 |
| 资格标准 NLP | eligibilities + brief_summaries | 结构化约束抽取器 |
| 检索与匹配 | studies + conditions + interventions + facilities | 检索/匹配服务 |
| 披露预测 | studies(注册时字段白名单) | 分类模型 + PR-AUC 报告 |
§2 医学背景
§2.1 ICD-11 编码映射表
AACT 是全疾病谱注册库,疾病字段(conditions 表)由申报方自由填写,未强制 ICD 编码。下表按注册体量与研究热度给出主要疾病领域的代表性 ICD-11 章节映射,供下游把 conditions 文本归类到 ICD-11 大类时参考:
| 疾病领域(注册热点) | ICD-11 编码区间 | ICD-11 中文名称 | AACT 中的典型条件词 |
|---|---|---|---|
| 恶性肿瘤 | 2A00-2F9Z | 恶性肿瘤性疾病 | breast cancer、NSCLC、melanoma |
| 循环系统疾病 | BA00-BE2Z | 循环系统疾病 | heart failure、atrial fibrillation、hypertension |
| 呼吸系统疾病 | CA00-CB7Z | 呼吸系统疾病 | COPD、asthma、IPF |
| 内分泌/营养/代谢 | 5A00-5D46 | 内分泌、营养或代谢疾病 | type 2 diabetes、obesity、NASH |
| 神经系统疾病 | 8A00-8E7Z | 神经系统疾病 | Alzheimer disease、Parkinson disease、migraine |
| 精神/行为障碍 | 6A00-6E7Z | 精神与行为障碍 | major depressive disorder、schizophrenia |
| 感染性疾病 | 1A00-1H0Z | 感染性疾病 | COVID-19、HIV、HCV、sepsis |
§2.1b SNOMED CT 映射表
| AACT 概念 | ICD-11 对应 | SNOMED CT 码 | SNOMED 术语 | 映射说明 |
|---|---|---|---|---|
| 注册研究的疾病/状况 | 全疾病谱章节 | 64572001 | Disease (disorder) | conditions 文本经术语归一后映射到 SNOMED 疾病层级 |
| 研究观察的临床结局 | 症状/体征章节 | 404684003 | Clinical finding (finding) | 结局测量(outcome_measures)涉及的临床所见概念 |
| 试验实施过程 | 健康照护过程章节 | 71388002 | Procedure (procedure) | 干预(手术/操作类)映射到操作层级 |
需要说明:AACT 官方内置的标准词表是 MeSH(NLM 算法自动标注,写入 condition_browse / intervention_browse 表),SNOMED CT 映射属于下游研究实践,通常借助 UMLS Metathesaurus 完成跨词表对齐。
§2.2 背景简介:临床试验注册制度
ClinicalTrials.gov 由 NLM 在 NIH 与 FDA 协作下运营,2000-02-29 上线时收录 1,255 项研究;此后三部里程碑文件塑造了今天的注册生态:2005 年 ICMJE 把"先注册后发表"纳入成员期刊政策;2007 年 FDAAA 801 法案授权强制注册与结果提交;2016 年 Final Rule(2017-01-18 生效)明确了提交时限与豁免边界。截至 2026-09-03,注册库累计收录 601,524 项研究(官方趋势页),覆盖 226 个国家和地区,其中干预性研究 459,105 项(76%)、观察性研究 140,365 项(23%)。注册数据的价值在于它是"事前承诺":试验在设计阶段就把主要结局、样本量与统计方法写成公共记录,使发表偏倚与结局替换(outcome switching)可以被系统性稽查——这正是 AACT 存在的意义。
注册制度的关键里程碑(据官方趋势页与法规文本):
| 时间 | 制度里程碑 | 对注册生态的影响 |
|---|---|---|
| 2000-02-29 | ClinicalTrials.gov 上线(首批 1,255 项) | 公共注册记录起点 |
| 2004-2005 | ICMJE 注册政策 | 学术期刊成为注册的第二推动力 |
| 2007-09 | FDAAA 801 法案签署 | 法定强制注册与结果提交 |
| 2008-09 | 结果数据库上线 | 首年 41 项研究提交结果 |
| 2016-09 / 2017-01-18 | Final Rule 发布 / 生效 | 明确时限、豁免与处罚边界 |
§2.3 临床任务定义(数据集视角)
AACT 支持的任务围绕"注册-实施-披露"全生命周期展开:
- 筛查/检索类:给定疾病、干预、地点与状态,检索符合条件的研究(患者匹配的前置步骤)。
- 分类/分级类:预测研究类型(干预性/观察性)、期相(Phase 1-4)、设计特征(盲法/分配)。
- 披露/合规类:判定试验是否按 FDAAA 时限提交结果(disclosure prediction),识别逾期未报群体。
- 抽取/解析类:从入排标准文本抽取结构化约束(年龄、性别、实验室阈值、合并用药),从摘要抽取 PICO 元素。
- 聚合/生态类:按申办方、领域、地域聚合的注册生态统计与时间趋势分析。
任务族与评测口径速查:
| 任务族 | 输入 | 输出 | 典型评测指标 |
|---|---|---|---|
| 检索/匹配 | 查询(疾病/干预/地点/状态) | 研究排序列表 | Recall@k、nDCG |
| 分类 | 注册时字段白名单 | 期相/披露等标签 | Macro-F1、PR-AUC |
| 抽取/解析 | 入排标准或摘要文本 | 结构化约束 JSON | 实体级 F1 |
| 聚合生态 | SQL 维度组合 | 生态统计表 | 与官方趋势页口径一致性 |
§2.4 研究人群与地域分布
| 维度 | 分布 | 数值(截至 2026-08/09) |
|---|---|---|
| 研究地点(注册库全量) | 仅美国 | 168,802 项(28%) |
| 仅美国以外 | 345,464 项(58%) | |
| 美国+非美兼有 | 26,085 项(4%) | |
| 未提供 | 60,411 项(10%) | |
| 招募状态 | 招募中(recruiting) | 64,413 项(2026-09-03) |
| 申办方类别(2026-06 第三方全量抽取) | 学术/医院/非营利 | 71.4% |
| 企业(Industry) | 22.1%(III 期试验中占 49.8%) | |
| NIH / 其他政府 / 网络组织 | 2.0% / 2.6% / 0.8% |
(来源:ClinicalTrials.gov 趋势页;申办方结构来自 PharmaDossier 2026-06 全量抽取分析,为第三方统计。)
两点提示:其一,AACT 是"研究"粒度的库,受试者人数以 enrollment 与基线聚合形式存在,无法回溯到个体;其二,非美研究占比过半,意味着任何"全球试验"叙事都必须处理地区差异——不同监管动因与结果披露义务会直接影响可比性。
§2.5 临床与科研价值
对临床医生与系统综述者,AACT 让"试验全貌"可查询:某药物所有注册过的试验(无论发表与否)、预设的主要结局、实际入组人数,一查即得,这是纠正"阳性结果可见、阴性结果沉没"的关键证据基础。对政策研究者,它把 FDAAA 合规从个案稽查变成了可量化的群体指标。对 AI 研究者,它是目前规模最大、结构最规整的"研究设计知识库"——不是关于患者的数据,而是关于"研究本身"的数据,为试验设计生成、方案审查自动化等新兴任务提供训练底料。
§2.6 金标准与标注性质
| 划分 | 标注方式 | 标注者 | 性质 |
|---|---|---|---|
| 无官方训练/测试划分 | 申报方自行填报(注册信息、结局数据) | Responsible Party(申办方/研究者),资质无统一门槛 | 自报数据,非独立金标准 |
| MeSH 词表标注 | NLM 自动算法标注 | NLM 算法(基于标题/条件词) | 弱监督,无人工逐条复核 |
| 临床专科分组 | 算法+专家验证(2012 论文方法) | 临床专科医生评审 MeSH/非 MeSH 条件词 | 论文级方法学验证(3 个专科评估假阳/假阴) |
§3 数据集规格
§3.0 版本抉择矩阵
| 你的需求 | 推荐版本 | 大小 | 理由 |
|---|---|---|---|
| 探索性 SQL 分析、快速验证想法 | 云端库(psql 直连) | 0(免费注册) | 每日最新,无需本地建库;但数据每天变,结果不可长期复现 |
| 可复现研究、论文基准 | 静态 PostgreSQL 快照 | 2.37 GB(zip) | 固定快照日期写入方法学,pg_restore 一条命令恢复 |
| 用 Python/R/pandas 或非 PostgreSQL 工具 | 管道分隔文本 zip | 2.35 GB(zip) | 每个文件对应一张表,任何工具可读 |
| 轻量交互式查询、教学演示 | 第三方 DuckDB 镜像 | 单文件,HTTP 直查 | 无需下载全量即可 range-query,但为社区维护、滞后于官方 |
§3.1 模态详情
AACT 是纯结构化模态数据集,由三类内容组成:其一,注册协议字段——研究标识(nct_id)、标题、摘要、疾病条件、干预措施、入排标准(eligibilities 表的性别/年龄/健康志愿者标记与自由文本标准)、设计(designs 表的分配方式、盲法、主要用途)、申办方(sponsors 表)、研究中心(facilities 表)与国家(countries 表);其二,结果数据字段——受试者流动(participant_flows/milestones)、基线特征计数(baseline_counts)、结局测量与分析(outcome_measures/outcome_analyses/outcome_measurements)、脱落与不良事件汇总(drop_withdrawals/reported_event_totals),仅对已提交结果的研究有值;其三,管理元数据——各时间戳(首次发布、最后更新、结果首次发布)、引用文献(references_citations)与文档链接。文本字段(摘要、入排标准)是 NLP 模态的直接入口。
52 张表按职能可分为五组,理解分组后导航全库只需记住"哪一层的问题去哪组表找":
| 表组 | 代表表 | 粒度 |
|---|---|---|
| 研究主档 | studies、brief_summaries、detailed_descriptions | 一研究一行 |
| 设计要素 | conditions、interventions、eligibilities、designs、design_groups、sponsors、facilities、countries | 一要素一行(一对多) |
| 结果定义 | outcome_measures、design_outcomes、participant_flows、milestones | 一测量/一流动节点一行 |
| 结果明细 | outcome_analyses、outcome_measurements、baseline_counts、drop_withdrawals、reported_event_totals、reported_events | 一统计量/一计数行(全库最细) |
| 管理元数据 | references_citations、documents、links、central_contacts | 一引用/一文档行 |
§3.2 按子集样本数
| 子集 | 样本数 | 占比 | 说明 |
|---|---|---|---|
| 全部注册研究 | 601,524 | 100% | 截至 2026-09-03 |
| 干预性研究 | 459,105 | 76% | 药物/生物制品 221,148;行为/其他 179,980;器械 63,680;手术 48,887(按干预类型可多计) |
| 观察性研究 | 140,365 | 23% | 队列、病例对照、横断面、登记研究等 |
| 扩展可及(Expanded Access) | 1,067 | 0.2% | 同情用药项目记录 |
| 已提交结果的研究 | 80,000 | 13.3% | results 数据表仅对此子集有值(截至 2026-09-03) |
| 招募中研究 | 64,413 | 10.7% | 动态数字,每日变化 |
注册量的长期增长轨迹(年末累计,官方年度表):
| 年份 | 年末累计研究数 |
|---|---|
| 2000 | 2,119 |
| 2005 | 24,821 |
| 2010 | 100,202 |
| 2015 | 205,318 |
| 2020 | 362,452 |
| 2025 | 563,828 |
| 2026-06-26 | 591,437 |
约每十年增长一个数量级——任何跨期比较都要同时面对"制度环境"与"申报文化"的双重漂移,这是注册生态分析区别于普通横断面分析的根本约束。
§3.3 数据格式
| 格式 | 载体 | 适用工具 | 备注 |
|---|---|---|---|
| PostgreSQL dump | 单文件 .zip(内含 pg_restore 归档) | createdb + pg_restore | 官方推荐恢复命令:pg_restore -c -d 库名 文件 |
| 管道分隔文本 | .zip(每表一个 .txt) | pandas/R/Spark/任意数据库 | 分隔符为 `\ |
| 云端库 | PostgreSQL 11.5(服务器端) | psql、pgAdmin、R/RStudio、SAS | 主机 aact-db.ctti-clinicaltrials.org,端口 5432,库名 aact,schema 为 ctgov |
| 第三方镜像 | DuckDB 单文件 | DuckDB/Python | HF 社区构建(CC0),56,397,018 行 × 48 表 |
§3.4 存储大小
官方压缩分发为约 2.37 GB(PostgreSQL 快照)与 2.35 GB(管道分隔文本);解压与恢复进数据库后的实际磁盘占用显著放大——含索引与 52 张表的结果明细(outcome_measurements、reported_events 等行数巨大的子表),建议为本地实例预留 50 GB 以上磁盘;仅用管道分隔文本做 pandas 分析时,内存不足可分表流式读取。
§3.5 标注方式
AACT 的"标注"来自三个自动化/半自动化来源:(1) 申报方人工填报——注册与结果数据由 Responsible Party 通过 PRS 系统录入,属结构化自报数据;(2) NLM 算法自动标注——condition_browse/intervention_browse 两张表由 NLM 算法根据标题与条件词自动生成 MeSH 术语(弱监督);(3) 受控词表编码——不良事件按 MedDRA 编码(reported_events 含 source_vocabulary 字段)。2012 年原始论文另提供了一套经临床专科医生验证的"试验专科分组"方法学(基于 MeSH 树),可作为下游弱监督标签构造的范例。使用这些弱监督标签时,应把"标注过程本身"写进方法学:申报字段以 NLM 官方定义为准,MeSH 归一率需要显式报告(参照 68.6% 的历史基线)。
§3.6 标注者资质与一致性
申报方填报者的资质取决于申办方(药企注册团队、学术研究协调员水平参差),NLM 不对填报内容做质量审计;MeSH 算法标注无逐条人工复核,第三方研究显示申办方提交的 211,063 个条件词中 68.6% 可成功映射 MeSH ID(Bell & Tudur Smith 2014,2012 版数据),提示自由文本条件词存在两到三成无法归一的长尾。种族/民族字段格式高度异质(NIH/OMB 标准类别、自定义类别、合并表、嵌套表并存),一项 2025 年发表的多样性分析抽查 1,000 行发现 0.9% 解析错误,115 项研究的种族表超过两张需人工裁定(PMC13223629)。官方未发布标注一致性 kappa 类指标。
§3.7 采集周期
云端库每日午夜(美国东部时间)执行增量导入——典型的变更规模为每天 2,000-4,000 项研究,每月执行一次全量刷新;静态快照随每日/每月节奏发布(文件名含导出日期,如 20260905)。数据的历史纵深取决于 ClinicalTrials.gov 本身:注册数据自 2000-02-29、结果数据自 2008-09 起累积。变更的完整审计轨迹(哪天改了什么)不在 AACT 内,需回溯 ClinicalTrials.gov 的版本记录。
更新节奏速查:
| 更新流 | 频率 | 内容 |
|---|---|---|
| 云端库增量导入 | 每日午夜(美东) | 新增与变更研究(典型 2,000-4,000 项/日) |
| 云端库全量刷新 | 每月 | 全库重建,清理增量残留 |
| 静态快照发布 | 随全量节奏 | PostgreSQL dump 与管道分隔文本(文件名内嵌导出日期) |
§3.8 地域覆盖
全球覆盖:研究地点分布于 226 个国家和地区(截至 2026-08-28),其中仅在美国开展的研究占 28%,仅在美国以外开展的占 58%,跨美与非美的占 4%,未提供地点的占 10%。facilities 表逐中心记录名称、城市、州/省与国家,countries 表按国家聚合,可支撑地域维度分析;注册语言为英文,非英语国家的研究亦以英文申报。
§3.9 运行环境规格
| 项 | 规格 |
|---|---|
| 云端库服务器 | PostgreSQL 11.5(官方建议本地安装 11.5 或更高) |
| 本地恢复工具 | PostgreSQL 标准工具集(createdb、pg_restore) |
| ETL 开源实现 | Ruby on Rails(GitHub 仓库 ctti-clinicaltrials/aact),支持 full/incremental 两类导入 rake 任务 |
| 浏览器查询 | AACT Playground(Web SQL 界面,免安装) |
§3.10 深度溯源链
ClinicalTrials.gov PRS 申报系统(Responsible Party 录入)→ NLM 发布研究记录(XML/JSON 与 API v2)→ AACT Rails ETL 每夜下载解析 → ctgov schema(PostgreSQL,52 张表)→ 静态快照发布(dump/管道分隔文本)。每一环节可追溯:申报方与提交时间戳在注册记录内;AACT 版本变更在官方 release notes 逐版留痕;快照文件名内嵌导出日期。注意 AACT 本身不做清洗与质量监控,从源到库是"原样搬运",数据质量问题的最终责任链条仍回到申报方。
溯源环节与可追溯载体:
| 环节 | 责任方 | 可追溯载体 |
|---|---|---|
| 申报录入 | Responsible Party | PRS 系统记录与研究版本历史(在 ClinicalTrials.gov) |
| 官方发布 | NLM | API v2 与批量文件 |
| 解析装载 | CTTI(Rails ETL) | GitHub 源码 + release notes 逐版留痕 |
| 分发 | CTTI | 快照文件名内嵌导出日期 |
§4 数据结构
§4.0 目录树(管道分隔文本导出解压后)
aact_20260905_export/
├── studies.txt # 每研究一行:标题/状态/类型/期相/样本量/各时间戳
├── brief_summaries.txt # 每研究一行:简短摘要(NLP 常用文本源)
├── detailed_descriptions.txt # 每研究一行:详细描述
├── conditions.txt # nct_id × 疾病/状况(一对多)
├── keywords.txt # nct_id × 关键词
├── interventions.txt # nct_id × 干预(一对多)
├── eligibilities.txt # 每研究一行:性别/年龄/健康志愿者 + 入排标准文本
├── designs.txt # 每研究一行:分配/盲法/主要用途/观察期
├── design_groups.txt # nct_id × 试验组(组名/组类型)
├── design_outcomes.txt # 设计阶段声明的结局(与结果结局分列)
├── sponsors.txt # nct_id × 申办方(含 agency_class 类别)
├── central_contacts.txt # 中央联系人
├── facilities.txt # nct_id × 研究中心(名称/城市/国家)
├── countries.txt # nct_id × 国家
├── outcome_measures.txt # 结果结局测量定义(每研究多行)
├── outcome_analyses.txt # 统计分析(p_value/效应量等)
├── outcome_measurements.txt # 各组各时点测量值(行数最大的表之一)
├── outcome_counts.txt # 结局事件计数
├── baseline_counts.txt # 基线特征计数(含人口学聚合)
├── drop_withdrawals.txt # 脱落/退出人数与原因
├── milestones.txt # 里程碑人数(招募期/研究期)
├── participant_flows.txt # 受试者流动(开始/完成人数)
├── reported_event_totals.txt # 不良事件按器官系统汇总计数
├── reported_events.txt # 不良事件明细(MedDRA 编码)
├── references_citations.txt # 相关文献(PMID/引用)
├── links.txt # 相关链接
├── documents.txt # 方案/统计计划等文档
└── ...(共 52 张表,完整清单见官方 schema 页)
命名约定:表名一律复数、列名一律单数、下划线分隔、大小写不敏感;Design_/Result_ 前缀区分设计期与结果期同名字段;_date 结尾的列是可直接分析的日期类型,同名字符列保留申报原文;_id 结尾的列是关联父表 id 的外键;所有表都通过 nct_id 回连 studies 表。
§4.1 DAIMS 字段字典(核心 13 字段)
| 字段名 | 类型 | 说明 | 示例值 | AI 用途 | 观测误差 | 信息性缺失编码 | 取值范围 |
|---|---|---|---|---|---|---|---|
| studies.nct_id | TEXT | 注册号,全库主键 | NCT04280705 | 唯一标识/去重/关联 | 无(NLM 统一赋号) | 无缺失 | NCT+8 位数字 |
| studies.brief_title | TEXT | 简短标题 | Study of Drug X in… | 文本编码/检索 | 撰写风格不一 | 无 | 自由文本 |
| studies.overall_status | TEXT | 研究整体状态 | RECRUITING | 状态过滤/披露分析 | 状态更新滞后于实际 | 无 | 12 个受控枚举值 |
| studies.study_type | TEXT | 研究类型 | INTERVENTIONAL | 分类任务标签 | 少数分类争议 | 无 | INTERVENTIONAL/OBSERVATIONAL/EXPANDED_ACCESS |
| studies.phase | TEXT | 试验期相 | PHASE3 | 分类/分层标签 | 观察性研究不适用;部分干预性留空 | 空值=不适用或未填 | N/A、EARLY_PHASE1、PHASE1/2/3/4 组合 |
| studies.enrollment | INTEGER | 登记人数 | 350 | 回归特征/规模分层 | 混合实际与预期人数 | 无 | 见 enrollment_type |
| studies.enrollment_type | TEXT | 人数性质 | Actual | 区分真实/计划样本量 | 申报中途可能切换 | 无 | Actual/Anticipated |
| studies.start_date | DATE | 研究开始日期 | 2020-03-01 | 时序切分/生存分析 | 预估日期可能变更 | 空值=未提供 | 2000 至今 |
| conditions.name | TEXT | 疾病/状况(一对多) | Type 2 Diabetes | 疾病文本归一/ICD 映射 | 拼写与粒度差异大 | 无 | 自由文本 |
| interventions.name | TEXT | 干预名称(一对多) | Metformin | 药物实体链接/关系抽取 | 商品名/通用名混用 | 无 | 自由文本 |
| eligibilities.gender | TEXT | 入组性别限制 | ALL | 资格标准建模 | 与标准文本偶有不一致 | 无 | ALL/MALE/FEMALE |
| sponsors.agency_class | TEXT | 申办方类别 | INDUSTRY | 申办方分层/偏倚分析 | 类别粒度较粗 | 无 | INDUSTRY/NIH/OTHER/NETWORK 等 |
| outcome_analyses.p_value | FLOAT | 结局统计分析 p 值 | 0.032 | 结局显著性研究 | 仅在已提交结果子集有值 | NULL=未提交或未报 | 0-1 |
§4.2 标签分布
以截至 2026-08-28 的官方统计为准(趋势页):
| 标签维度 | 取值 | 计数 | 占比 |
|---|---|---|---|
| study_type | INTERVENTIONAL | 458,531 | 76% |
| study_type | OBSERVATIONAL | 140,181 | 23% |
| study_type | EXPANDED_ACCESS | 1,067 | 0.2% |
| 干预类型(可多计) | 药物/生物制品 | 221,148 | 占干预性 48% |
| 干预类型(可多计) | 行为/其他 | 179,980 | 39% |
| 干预类型(可多计) | 器械 | 63,680 | 14% |
| 干预类型(可多计) | 手术 | 48,887 | 11% |
| 结果披露 | 已提交结果 | 79,892 | 13.2% |
期相(phase)字段仅对干预性研究适用且存在缺填,用作分类标签前务必先过滤 study_type 并统计空值率;已提交结果的研究中 94% 为干预性研究,观察性研究结果提交非强制义务。
结果披露的历年积累(年末累计,官方年度表):
| 年份 | 年末已提交结果研究数 |
|---|---|
| 2008 | 41 |
| 2010 | 2,756 |
| 2015 | 19,481 |
| 2020 | 46,718 |
| 2025 | 75,745 |
| 2026-06-26 | 78,847 |
§4.3 关键统计
| 指标 | 数值 | 来源 |
|---|---|---|
| 注册研究总数 | 601,524(2026-09-03) | ClinicalTrials.gov 趋势页 |
| 关系表数量 | 52(官方数据字典) | PharmaSUG 2024 RW-453 |
| 每日变更研究数 | 约 2,000-4,000 项 | 官方 release notes |
| 云端库行数体量 | 第三方镜像 56,397,018 行 × 48 表 | HF Nason/clinicaltrials-database |
| 快照文件大小 | 2.37 GB(dump)/ 2.35 GB(文本,2026-09-05) | AACT 官方下载页 |
| 结果数据库起点 | 2008-09(首年 41 项) | 趋势页年度表 |
§4.4 数据层级
AACT 是四层结构:注册研究(studies,一行一研究) → 设计层(conditions/interventions/designs/design_groups/eligibilities/sponsors/facilities,一对多挂接设计要素) → 结果测量层(outcome_measures/outcome_counts/milestones/participant_flows/baseline_counts/drop_withdrawals/reported_event_totals,仅结果子集有值) → 统计分析层(outcome_analyses/outcome_measurements,最细粒度:每组每时点每统计量一行)。与影像数据集"患者→检查→序列→切片"不同,这里的层级单位是"研究→设计要素→结局指标→统计量",任何分析都应明确自己停在哪一层,避免把组间测量值误当研究级汇总。
§4.5 缺失值与信息性缺失
| 情形 | 表现 | 处理建议 |
|---|---|---|
| 观察性研究的 phase | 空值/N/A | 语义是"不适用"而非"缺失",勿插补 |
| 未提交结果的研究 | 全部 results 系表无行 | 属结构性缺失(义务豁免或逾期),需显式标记而非丢弃 |
| 字符日期未提供 | 原始字符列为空串,_date 列为 NULL | 统一以 _date 列的 NULL 为准;注意与空串区分(官方在切换 API 后空值存 NULL/nil) |
| enrollment 未定 | 数字为空且 enrollment_type=Anticipated | 结合状态判断:未完成招募属正常缺失 |
| 条件词无法归一 MeSH | condition_browse 无对应行 | 约 31% 自由文本条件词长尾(2014 年研究),保留原文列兜底 |
| 自由文本格式异质 | 种族/民族、入排标准写法千差万别 | 解析脚本需按论文经验预留人工裁定队列 |
| 结果字段整表缺失 | 未提交结果的研究在 results 系表零行 | 属结构性缺失(义务豁免或逾期),显式标记而非静默丢弃 |
§4.6 常用查询模板
三条高频 SQL,均可在云端库或本地快照直接运行(schema 为 ctgov;管道分隔文本用户可用 pandas 等价实现):
-- 模板 1:历年注册量曲线(对应官方趋势页"Number of registered studies over time")
SELECT date_part('year', study_first_posted_date)::int AS reg_year,
count(*) AS registered
FROM ctgov.studies
GROUP BY 1 ORDER BY 1;
-- 模板 2:III 期试验 Top 申办方(演示一对多表防重复计数:count DISTINCT nct_id)
SELECT sp.agency, sp.agency_class, count(DISTINCT s.nct_id) AS phase3_trials
FROM ctgov.studies s
JOIN ctgov.sponsors sp USING (nct_id)
WHERE s.study_type = 'INTERVENTIONAL' AND s.phase = 'PHASE3'
GROUP BY sp.agency, sp.agency_class
ORDER BY phase3_trials DESC LIMIT 20;
-- 模板 3:按注册年份的完成试验披露概况(精确分母口径须按坑点 3 校准)
SELECT date_part('year', s.study_first_posted_date)::int AS reg_year,
count(*) AS completed_interventional,
count(s.results_first_posted_date) AS with_posted_results
FROM ctgov.studies s
WHERE s.study_type = 'INTERVENTIONAL'
AND s.overall_status = 'COMPLETED'
GROUP BY 1 ORDER BY 1;
§5 数据划分与使用建议
§5.1 官方划分
无。AACT 是持续更新的注册生态数据库,官方不提供任何训练/验证/测试划分;Researcher’s Guide 侧重统计分析方法论而非 ML 划分。一切划分由使用者自建并随快照日期存档。
§5.2 社区惯例划分
- 时序切分(最常用):以 studies 的首次发布日期(study_first_posted_date)或 start_date 为轴,取快照日之前的固定窗口训练、之后窗口测试,模拟"注册时点可用信息"的真实场景。
- 领域切分:按 condition_browse 的 MeSH 树或 2012 论文的专科分组方法做跨领域评估(如训练内科、测试肿瘤),考察术语泛化。
- 任务化切分:披露预测类任务常用"主要完成日期 + 法定披露时限"构造自然实验窗口。
时序切分可直接用一条查询物化(云端库示例):
-- 训练窗:2025-01-01 前首次发布;测试窗:其后(同一查询换不等号即得测试集)
SELECT nct_id, study_type, phase, enrollment, study_first_posted_date
FROM ctgov.studies
WHERE study_first_posted_date < '2025-01-01';
§5.3 数据泄漏风险(重点)
这是 AACT 类注册数据集最隐蔽的风险。 快照是"事后"的:它同时包含注册时信息(标题、设计)与注册后信息(状态更新、结果、最后更新时间戳)。若用全快照字段预测注册期标签(如期相、披露结果),状态与结果字段会直接或间接泄漏答案。三条防线:(1) 训练特征白名单只含 first posted 之前可知的字段;(2) 划分按时间轴而非随机;(3) 结果类字段(results_posted、outcome_analyses 等)只允许出现在标签侧。此外,同一药物+同一适应症+同期相的"姊妹试验"高度相似,随机划分会让验证集近似复制品,应按申办方或药物实体做分组隔离。
§5.4 交叉验证建议
用 GroupKFold(组=lead sponsor 或条件-MeSH 大类)替代随机 K 折;披露预测等不平衡任务报告 PR-AUC 并按注册年份分层;跨期相/跨领域评估时在每折内重算阈值。经验法则:随机 K 折在 AACT 上几乎总是过于乐观——可以把它作为反例基线报告,而不是主结果。
§5.5 外部验证建议
在更晚日期的官方快照上复跑管线(检验时间漂移);与 ClinicalTrials.gov API v2 实时数据抽样比对(检验镜像一致性);跨注册库迁移到 WHO ICTRP 成员库(如 EU CTR)检验制度外泛化。任何论文级工作都应报告所用快照的导出日期与 studies 表行数作为"指纹"。
§6 AI 就绪指南
§6.0 云端快速启动(免下载)
在 aact.ctti-clinicaltrials.org/users/sign_up 免费注册后,任何 psql 客户端 30 秒接入;也已有社区 MCP 服务器(mcp-server-aact)把 AACT 接入 AI 助手做自然语言查询。
# 前置:已注册 AACT 账号(用户名/密码在注册邮件中设置)
PGPASSWORD='你的AACT密码' psql \
--host aact-db.ctti-clinicaltrials.org --port=5432 \
--username=你的用户名 --dbname=aact
-- 进入 psql 后的三条验证查询(官方示例:2021-08-24 时 studies 为 387,486 行)
SELECT count(*) FROM ctgov.studies;
SELECT overall_status, count(*) FROM ctgov.studies
GROUP BY overall_status ORDER BY count(*) DESC LIMIT 10;
SELECT nct_id, brief_title, phase FROM ctgov.studies
WHERE overall_status = 'RECRUITING' LIMIT 5;
§6.1 快速上手
目录结构预期(本地静态快照方案):data_root/ 指向存放快照的目录,代码中以 data_root/文件名 拼接;官方下载页文件名内嵌导出日期(如 20260905_clinical_trials_ctgov.zip),以下示例统一假设你使用 2026-09-05 快照。最小可用子集:studies + conditions + interventions 三张管道分隔文本(合计约 1 GB 解压后)即可完成绝大多数注册生态分析,不必先恢复 52 张表全库。
# data_root = "data/"(与下方代码中的 DATA_ROOT 对应)
# data/
# ├── 20260905_export_ctgov/ ← 解压后的管道分隔文本目录
# │ ├── studies.txt
# │ ├── conditions.txt
# │ └── interventions.txt
# └── aact_studies_20260905.parquet ← 预处理产物(见 §6.3)
import pandas as pd
DATA_ROOT = "data/20260905_export_ctgov"
# 管道分隔符读取;low_memory=False 避免 dtype 混分块告警
studies = pd.read_csv(f"{DATA_ROOT}/studies.txt", sep="|", low_memory=False)
print(studies.shape) # 预期约 (600000+,60) 行列规模(随快照日浮动)
print(studies["study_type"].value_counts(normalize=True))
# 三行核心事实自检:行数应与快照日 ClinicalTrials.gov 趋势页总数同量级
§6.2 数据获取
| 通道 | 操作 | 大小/前置 | 适用 |
|---|---|---|---|
| 云端库 | 注册账号 → psql 直连 | 免费;连接参数见 §6.0 | 即席 SQL |
| PostgreSQL 快照 | 下载页下载 zip → 解压 → pg_restore | 2.37 GB;本地 PostgreSQL ≥11.5;恢复后磁盘 50 GB+ | 可复现研究 |
| 管道分隔文本 | 下载 zip → 解压即用 | 2.35 GB | pandas/R/Spark |
| 第三方 DuckDB | HF 数据集页 ATTACH 远程文件 | 无需全量下载 | 快速探索 |
渠道选择的两条经验法则:需要"今天的库"(如监控新注册试验)用云端库或 API v2;需要"写进论文的数字"用静态快照并保留 zip 的 SHA256。压缩包解压后先核对 studies.txt 行数与官方趋势页当日总数是否同量级,再进入下游处理。
mkdir -p data && cd data
# 1. 下载最新快照(先到官方下载页确认当日文件名与导出日期)
wget https://aact.ctti-clinicaltrials.org/snapshots/20260905_clinical_trials_ctgov.zip
unzip 20260905_clinical_trials_ctgov.zip
# 2. 本地建库恢复(约数十分钟,视磁盘性能)
createdb aact
pg_restore -c -d aact ./20260905_clinical_trials_ctgov
# 3. 验证
psql -d aact -c "SELECT count(*) FROM ctgov.studies;"
§6.3 预处理全流程
核心四步:读取管道分隔文本 → 日期/空值规范化 → 一对多聚合防 JOIN 膨胀 → 落盘分析子集(parquet)。下列代码可直接运行(依赖 pandas、pyarrow、psycopg2)。
<details>
<summary>展开查看完整预处理脚本(约 45 行)</summary>
import pandas as pd
import psycopg2
DATA_ROOT = "data/20260905_export_ctgov"
SNAPSHOT = "20260905" # 所有产物文件名带快照日期,保证可复现
# --- 1) 读取核心三表(管道分隔符) ---
studies = pd.read_csv(f"{DATA_ROOT}/studies.txt", sep="|", low_memory=False)
conditions = pd.read_csv(f"{DATA_ROOT}/conditions.txt", sep="|")
interventions = pd.read_csv(f"{DATA_ROOT}/interventions.txt", sep="|")
# --- 2) 日期规范化:优先使用官方 _date 日期型列 ---
date_cols = ["start_date", "completion_date", "primary_completion_date"]
for c in date_cols:
if c in studies.columns:
studies[c] = pd.to_datetime(studies[c], errors="coerce")
# 空值统一:切换新版 API 后空值存 NULL/nil,此处再兜底空串
studies = studies.replace({"": None})
# --- 3) 一对多聚合:条件/干预聚合为研究级字符串,避免 JOIN 膨胀 ---
cond_agg = (conditions.groupby("nct_id")["name"]
.agg(lambda s: " | ".join(sorted(set(s.dropna()))))
.rename("conditions_all"))
intv_agg = (interventions.groupby("nct_id")["name"]
.agg(lambda s: " | ".join(sorted(set(s.dropna()))))
.rename("interventions_all"))
studies = studies.merge(cond_agg, on="nct_id", how="left") \
.merge(intv_agg, on="nct_id", how="left")
# --- 4)(可选)从云端库补充分析级字段 ---
conn = psycopg2.connect(host="aact-db.ctti-clinicaltrials.org", port=5432,
dbname="aact", user="你的用户名", password="你的AACT密码")
elig = pd.read_sql("SELECT nct_id, gender, minimum_age, maximum_age "
"FROM ctgov.eligibilities", conn)
studies = studies.merge(elig, on="nct_id", how="left")
conn.close()
# --- 5) 落盘 ---
studies.to_parquet(f"data/aact_studies_{SNAPSHOT}.parquet")
print("saved:", studies.shape)
</details>
SQL 侧等价物:若整条管线都在 PostgreSQL 内,可直接物化研究级宽表——count(DISTINCT) 对一对多扇出免疫,免去把大表拉进内存:
CREATE MATERIALIZED VIEW research_wide AS
SELECT s.nct_id, s.brief_title, s.overall_status, s.study_type, s.phase,
s.enrollment, s.enrollment_type,
count(DISTINCT c.name) AS n_conditions,
count(DISTINCT i.name) AS n_interventions
FROM ctgov.studies s
LEFT JOIN ctgov.conditions c USING (nct_id)
LEFT JOIN ctgov.interventions i USING (nct_id)
GROUP BY s.nct_id, s.brief_title, s.overall_status, s.study_type,
s.phase, s.enrollment, s.enrollment_type;
CREATE UNIQUE INDEX ON research_wide (nct_id);
§6.4 PyTorch DataLoader 完整示例
任务示范:由 brief_summary 文本预测干预性研究的期相(Phase 1/2/3/4,四分类)。这一任务结构简单但完整覆盖"文本+标签+时序划分"三要素,可直接替换为你的真实任务骨架。
<details>
<summary>展开查看完整 PyTorch 代码(约 70 行)</summary>
# 依赖:pip install torch pandas scikit-learn
# 目录:data/aact_studies_20260905.parquet(由 §6.3 生成)
import pandas as pd
import torch
from torch.utils.data import Dataset, DataLoader
from sklearn.model_selection import train_test_split
SNAPSHOT = "20260905"
PHASES = ["PHASE1", "PHASE2", "PHASE3", "PHASE4"]
PHASE2ID = {p: i for i, p in enumerate(PHASES)}
# --- 1) 构造任务数据框:仅干预性 + 期相明确 + 摘要非空 ---
df = pd.read_parquet(f"data/aact_studies_{SNAPSHOT}.parquet")
brief = pd.read_csv(f"data/20260905_export_ctgov/brief_summaries.txt", sep="|")
df = df.merge(brief, on="nct_id", how="left")
mask = (df["study_type"] == "INTERVENTIONAL") & df["phase"].isin(PHASES)
df = df[mask & df["brief_summary"].notna()].copy()
df["label"] = df["phase"].map(PHASE2ID)
# 时序切分:按首次发布日期,模拟"注册时点"场景,防泄漏
df = df.sort_values("study_first_posted_date").reset_index(drop=True)
cut = int(len(df) * 0.8)
train_df, test_df = df.iloc[:cut], df.iloc[cut:]
# --- 2) 词表(训练集词频 Top 30k) ---
from collections import Counter
counter = Counter(" ".join(train_df["brief_summary"]).lower().split())
vocab = {"<pad>": 0, "<unk>": 1}
for w, _ in counter.most_common(30000):
vocab[w] = len(vocab)
def encode(text, max_len=256):
ids = [vocab.get(w, 1) for w in text.lower().split()[:max_len]]
return ids + [0] * (max_len - len(ids))
# --- 3) Dataset / collate / DataLoader ---
class AACTPhaseDataset(Dataset):
def __init__(self, frame):
self.x = [encode(t) for t in frame["brief_summary"]]
self.y = frame["label"].tolist()
def __len__(self):
return len(self.y)
def __getitem__(self, i):
return torch.tensor(self.x[i]), torch.tensor(self.y[i])
def collate(batch):
xs, ys = zip(*batch)
return torch.stack(xs), torch.stack(ys)
train_loader = DataLoader(AACTPhaseDataset(train_df), batch_size=64,
shuffle=True, collate_fn=collate, num_workers=2)
test_loader = DataLoader(AACTPhaseDataset(test_df), batch_size=256,
shuffle=False, collate_fn=collate)
# --- 4) 最小模型(Embedding+均值池化+线性头),10 个 epoch 内可跑通 ---
class MeanPoolClassifier(torch.nn.Module):
def __init__(self, vocab_size, num_classes=4, dim=128):
super().__init__()
self.emb = torch.nn.Embedding(vocab_size, dim, padding_idx=0)
self.fc = torch.nn.Linear(dim, num_classes)
def forward(self, x):
e = self.emb(x)
mask = (x != 0).unsqueeze(-1)
mean = (e * mask).sum(1) / mask.sum(1).clamp(min=1)
return self.fc(mean)
model = MeanPoolClassifier(len(vocab))
opt = torch.optim.AdamW(model.parameters(), lr=3e-4)
lossf = torch.nn.CrossEntropyLoss()
for epoch in range(10):
model.train()
for x, y in train_loader:
opt.zero_grad()
loss = lossf(model(x), y)
loss.backward(); opt.step()
print(f"epoch {epoch} loss {loss.item():.4f}")
</details>
§6.5 坑点清单(8 个,全部来自真实失败模式)
⚠️ 坑点 1:一对多 JOIN 让行数静默膨胀,聚合统计重复计数(分类:工程陷阱)
问题:conditions、interventions、facilities 等 51 张表通过 nct_id 与 studies 一对多关联,直接 JOIN 后"每研究行数"变成"每研究×每条件行数",试验计数、样本量求和全部虚高。2012 版 AACT 论文时代这就是使用者在 ER 图(论文图 2)里被反复提醒的要点。
症状:SELECT count(*) FROM studies JOIN conditions得到 100 万+ 行;某疾病的试验数与官方趋势页对不上;按研究求 enrollment 总和时数值翻倍。
解决:
- 简单方法:任何研究级统计都先在子表
GROUP BY nct_id聚合(string_agg/array_agg)再 JOIN,或对 JOIN 结果SELECT DISTINCT nct_id计数。- 进阶方法:在 SQL 里用窗口函数去重:
count(DISTINCT s.nct_id);求和类指标先WITH one_row_per_study AS (SELECT nct_id, max(enrollment) ...)。- SOTA 方法:建立 dbt/SQL 物化视图层,把"研究级宽表"固化为项目标准资产,所有下游分析只读宽表。
参考:官方 schema 页(aact.ctti-clinicaltrials.org/schema);PharmaSUG 2024 RW-453(表关系与 nct_id 约定)。
⚠️ 坑点 2:enrollment 混装"实际入组"与"计划入组",样本量分析失真(分类:标签理解)
问题:studies.enrollment 是一个整数列,但语义由 enrollment_type 决定——Actual(实际)或 Anticipated(预期)。未完成/进行中的研究几乎都是预期值,且申报方可能中途从预期切换为实际。把它直接当作"真实样本量"做回归或分层,会把大量"计划数字"混进统计。
症状:招募中研究的 enrollment 呈现整齐的 10 的倍数(典型计划值);对比不同状态研究的样本量分布时出现系统位移;用 enrollment 预测披露结果时训练-测试分布漂移。
解决:
- 简单方法:任何使用 enrollment 的地方都同时过滤
enrollment_type = 'Actual',或把 enrollment_type 并入特征。- 进阶方法:按 overall_status 分层建模;对"预期转实际"的记录以最后更新时间戳判断语义时点。
- SOTA 方法:构造"计划样本量 vs 实际入组"配对子集研究招募达成率——这本身是 AACT 上的经典研究问题,但必须显式声明两侧语义。
参考:PharmaSUG 2024 RW-453(列约定);NLM 官方 Enrollment 字段定义。
⚠️ 坑点 3:结果披露率的分母用错——把不该披露的试验也算进去(分类:评估误用)
问题:"只有 13% 的试验提交了结果"是常见的误导性结论。结果提交义务有法定边界:观察性研究一般不要求、2008-09 结果库上线前完成的试验不要求、含未获批产品且主要完成日早于 2017-01-18 的器械试验可延迟提交。用全库作分母会系统性低估合规率,用"已完成干预性试验"作分母又会高估豁免缺口。
症状:你的披露率与已发表论文(如 FDAAA 合规排名研究)差距巨大;审稿人质疑分母定义。
解决:
- 简单方法:在 SQL 里按官方豁免规则过滤分母(study_type + primary_completion_date + 结果库上线日期三个条件起步)。
- 进阶方法:复用 Anderson et al. 2015 的"适用试验"判定逻辑,并对逾期时点用"主要完成日期 + 12 个月"滚动窗口判定。
- SOTA 方法:按"应报未报"(overdue)与"已报"(reported)双指标报告,并给出敏感性分析(不同时限口径下区间)。
参考:ClinicalTrials.gov 趋势页脚注;Anderson ML et al. BMJ Open 2015;5(11):e009758。
⚠️ 坑点 4:2021-11-15 schema 大版本切换——旧代码旧文档读新快照全线报错(分类:工程陷阱)
问题:2021-11-15 AACT 切换到新版 ClinicalTrials.gov API 并重构 schema(现行 ctgov schema),列名、表行为、空值语义都有变化(如空值从空串改为 NULL/nil、ctgov_beta 与 ctgov 两套代码并存期间 reported_event_totals 处理不同且无 total all cause mortality 列)。用 2021 年前的教程/博客/代码读新快照,或反过来用新代码读归档旧快照,都会静默出错。
症状:列不存在报错;原本非空的日期列出现 NULL;与旧论文复现数字对不上;不良事件全因死亡汇总消失。
解决:
- 简单方法:确认快照导出日期,2021-11-15 之前的归档文件必须配官方"AACT Before November 15, 2021"归档文档。
- 进阶方法:升级脚本时对关键列做存在性断言(information_schema 检查),fail-fast 而非静默降级。
- SOTA 方法:在数据管道中记录 schema 版本指纹(表数+关键列哈希),CI 中对快照做 schema 契约测试。
参考:官方 Learn More 页的版本分界说明;官方 release notes。
⚠️ 坑点 5:数据"原样搬运"未清洗——NULL/空串、字符日期与自由文本异质三连击(分类:预处理陷阱)
问题:官方明确 AACT 保留源数据不做任何清洗、操纵或质量监控,衍生计算值单独在 Calculated_Values 表。直接消费会遇到:空值在字符串列表现为空串(新版 API 后部分为 NULL)、原始字符日期与 _date 日期列并存、种族/民族等字段格式千差万别(NIH/OMB 标准类、自定义类、合并表、嵌套表并存)。
症状:WHERE race IS NOT NULL漏掉空串行;pandas 读日期列全是 object;种族聚合出现几十个只有几行的小类目;解析脚本在个别研究上抛异常。
解决:
- 简单方法:全局空值规范化(空串→NULL),日期统一走 _date 列或
to_datetime(errors="coerce")。- 进阶方法:对异质文本字段先做"结构探查"(value_counts + 正则覆盖度),再写解析器;参照已发表做法预留 0.5%-1% 人工裁定队列(该研究 1,000 行抽查发现 0.9% 错误、115 项研究含 2 张以上种族表)。
- SOTA 方法:用 Great Expectations/pandera 给分析子集加数据契约测试,把"已知异质点"固化为断言。
参考:PharmaSUG 2024 RW-453;PMC13223629(种族/民族解析误差与人工裁定)。
⚠️ 坑点 6:用"快照里的未来字段"预测"注册时的标签"——时序泄漏(分类:数据泄漏)
问题:快照是截至某一天的全量状态,包含大量注册之后才产生的信息(overall_status 演化、results_posted、last_update_posted_date、结果表数值)。若任务目标是"用注册时可得信息预测 X"(如期相、是否披露、是否提前终止),这些后验字段就是直接或间接的答案泄漏。
症状:随机划分下模型 AUROC 高得可疑(如披露预测 0.95+);特征重要性里 status/更新时间戳名列前茅;换到更早快照复跑性能崩塌。
解决:
- 简单方法:特征白名单——只保留 study_first_posted_date 时点可知的字段(标题、条件、干预、设计、申办方、计划样本量)。
- 进阶方法:按首次发布日期时序划分训练/测试(见 §6.4 示例),并对快照晚于训练截止日期的字段做信息时点审计。
- SOTA 方法:用多个历史快照构造"真实时点面板",每个样本只用其时点前最后一次快照的取值,彻底消除前视偏差。
参考:本文 §5.3;官方下载页快照日期机制(每日库 vs 静态快照差异)。
⚠️ 坑点 7:云端库每天在变——可复现研究必须钉死快照版本,且增量导入有过历史缺口(分类:偏倚陷阱)
问题:云端库每日午夜增量刷新,两次查询结果可不同;静态快照文件名内嵌导出日期,是唯一可引用的稳定版本。历史上还发生过真实缺口:2019-11-20 ClinicalTrials.gov RSS 限流(每次最多返回 1,000 项)后,AACT 在 2019-12-01 至 12-18 期间每晚只导入 1,000 项"已修改"研究(新增研究正常),4.4.1 版(2019-12-18)修复。若你在那段窗口做增量同步分析,修改类事件统计会有缺口。
症状:论文审稿被要求提供"数据版本";跨天报表数字对不上;2019 年底窗口期的更新量统计出现凹陷。
解决:
- 简单方法:一切正式分析使用静态快照,方法学部分写明导出日期与 studies 行数指纹。
- 进阶方法:需要近实时数据时用云端库做探索、快照做结论,两套流程分开记录。
- SOTA 方法:自建 Rails 管道(官方开源仓库)做每日增量并自留全量历史,配合 release notes 监控上游变更。
参考:官方 release notes(4.4.1 修复说明);官方下载页。
⚠️ 坑点 8:phase 的空值混着"不适用"与"未填",直接 groupby 出错误结论(分类:预处理陷阱)
问题:观察性研究(23%)的 phase 语义上"不适用";干预性研究中也有相当比例未填或组合值(如 PHASE1/PHASE2、EARLY_PHASE1)。把空值一律当"缺失"插补或一律排除,都会让期相分布、按期相披露率等结论失真。
症状:期相分布饼图合计不足 100%;"Phase 2 试验披露率"的样本量莫名偏大(混入了未填期相的研究);下游分类任务标签出现 NaN。
解决:
- 简单方法:先
study_type = 'INTERVENTIONAL'过滤,再三分类处理 phase:明确值 / 组合值拆分 / 空值单列一类。- 进阶方法:用标题+摘要文本对空值期相做弱监督回填并标注置信度,仅用于探索分析,论文口径保留原始空值。
- SOTA 方法:把"期相缺失率"本身作为申办方数据质量协变量纳入分析模型,检验其与结局的关联。
参考:官方趋势页研究类型统计;NLM phase 字段定义。
§6.6 数据增强(安全与危险操作)
- ✅ 安全:条件词/干预词的同义词替换(借 UMLS/MeSH 词表,保持实体语义);英文摘要的回译或 EDA 式词级扰动(仅训练 NLP 编码器时);表格数值字段的掩码 dropout(模拟字段缺失,提升鲁棒性);按申办方分层的过采样(保留组内分布)。
- ❌ 危险:篡改 enrollment、日期、p_value 等数字字段(破坏注册语义,等于伪造凭证);对 nct_id 或条件词做随机字符串替换(破坏实体链接);随机打乱 design_groups 组别标签(设计语义坍塌);过采样时不分组导致姊妹试验同时进入训练与验证。
§6.7 模型推荐
| 任务 | 推荐模型 | 起步理由 |
|---|---|---|
| 入排标准解析(NER/RE) | BioBERT / ClinicalBERT / SciBERT | 生物医学预训练覆盖条件、药物、检验术语,长文本可换 Longformer/BigBird |
| 试验-文献/试验-试验相似检索 | sentence-transformers(Bi-Encoder 双塔) | 摘要+条件+干预拼接句向量即可用,冷启动友好 |
| 披露/终止预测(结构化) | XGBoost / LightGBM | 表格特征(申办方类别、样本量、设计、领域)上强基线,可解释性好 |
| 结局测量与 PICO 抽取 | 指令微调 LLM(开源 7B-70B 级) | 自由文本到结构化 JSON 的零样本能力可先验证可行性再微调 |
| 试验期相/类型分类 | 本文 §6.4 均值池化基线 → BERT 微调 | 先建立可复现基线,再升级预训练模型 |
§6.8 硬件需求
| 场景 | 最低配置 | 建议 |
|---|---|---|
| SQL 生态分析(云端库/快照) | 8 GB 内存笔记本 | 16 GB 内存 + SSD |
| 本地恢复快照 | 4 核 CPU / 50 GB 磁盘 | 8 核 / 100 GB NVMe(pg_restore 并行化) |
| pandas 全量三表 | 32 GB 内存 | 64 GB(outcome_measurements 级别大表建议分块) |
| 文本模型微调(BERT 级) | 1×RTX 3090(24 GB) | 1×A100 40 GB,batch 32 |
| 全库文本语料预训练 | — | 多卡 A100 + 分词缓存,按需评估必要性 |
§6.9 评估指标代码
# 披露预测(二分类、类不平衡):PR-AUC 为主指标
from sklearn.metrics import (average_precision_score, roc_auc_score,
classification_report)
probs = model.predict_proba(X_test)[:, 1] # 正类=按期披露
print("PR-AUC :", average_precision_score(y_test, probs))
print("ROC-AUC:", roc_auc_score(y_test, probs))
print(classification_report(y_test, probs > 0.5, digits=3))
# 文本抽取(入排标准 NER):实体级 F1
from seqeval.metrics import classification_report as seq_report
print(seq_report(y_true_tags, y_pred_tags, digits=3))
各任务指标选型速查:
| 任务 | 主指标 | 辅助指标 | 工具 |
|---|---|---|---|
| 披露/终止预测 | PR-AUC | ROC-AUC、Brier 分数 | sklearn |
| 期相/类型分类 | Macro-F1 | 按注册年份分层的混淆矩阵 | sklearn |
| 入排标准 NER | 实体级 F1 | 按实体类型分解 | seqeval |
| 检索/匹配 | Recall@10 | MRR、nDCG@10 | 自定义 |
| 文本→JSON 抽取 | 字段级精确匹配率 | 值归一后匹配率 | 自定义 |
§6.10 MLOps 笔记
- 版本指纹:把快照导出日期 + studies 行数写入每个实验的数据卡(data card),论文与模型卡都引用它。
- 双库策略:云端库做探索,静态快照做可复现结论;两者数字不一致属正常,不要互相"纠正"。
- schema 契约:对关键表列做存在性与类型断言(见坑点 4),上游 release notes 变更时触发 CI 复核。
- 增量同步风险:自建增量管道要意识到 2019 年 RSS 缺口式故障的可能,用每周全量对账兜底。
- 成本控制:结果明细大表(outcome_measurements/reported_events)按 nct_id 分区处理,避免全表广播。
落地清单:CI 每日对云端库跑 schema 断言与行数指纹;每次实验登记(快照日期、git commit、数据卡链接)三要素;每季度用新快照复跑基线对比漂移幅度。
§7 质量评估与局限性
§7.1 已知偏倚
| 偏倚类型 | 描述 | 严重程度 | 缓解措施 |
|---|---|---|---|
| 自报偏倚 | 全部内容由申办方/研究者自报,NLM 不做质量审计,AACT 原样保留 | 高 | 关键分析加抽样人工核验;使用官方 Calculated_Values 衍生列 |
| 报告完成偏倚 | 负面/不利结果试验更少提交结果(发表偏倚的注册层映射) | 高 | 分析限定"注册时点信息";披露研究按 FDAAA 适用分母(坑点 3) |
| 覆盖偏倚 | 主要覆盖按美国法规/ICMJE 政策注册的研究,非美研究多因期刊要求被动注册 | 中 | 结论限定注册制度覆盖人群;跨库对比 ICTRP |
| 字段语义漂移 | enrollment 语义随时点变化;状态字段更新滞后于实际研究进展 | 中 | 用 enrollment_type/时间戳显式建模(坑点 2) |
| 术语异质偏倚 | 条件词、种族/民族、入排标准写法自由度高,归一损失约三成长尾 | 中 | MeSH/ICD 映射+长尾保留原文(坑点 5) |
§7.2 标注质量
无独立人工金标准:申报数据质量取决于 Responsible Party(FDA 对逾期与缺失有执法工具,但字段级正确性主要靠申报方自律);MeSH 标注为 NLM 算法弱监督(2014 年研究显示 68.6% 申报条件词可映射 MeSH ID);种族/民族字段第三方抽查错误率 0.9%、超两表研究需人工裁定。总体判断:结构化枚举字段(类型、状态、期相、申办方类别)可信度高,自由文本与人口学明细字段需使用方自建质检。
§7.3 泛化性(失效场景)
| 使用场景 | 失效风险 | 证据/机制 |
|---|---|---|
| 把注册结论当临床疗效证据 | 注册结局≠发表结局,效应量不可直接引用 | 注册与发表差异是 outcome switching 研究的核心发现域 |
| 用美区注册生态推断全球 | 58% 研究仅在美国以外开展,制度动机不同 | 趋势页地域分布;ICMJE/FDAAA 两种注册动因 |
| 用历史快照训练、实时数据部署 | 2021 schema 断代+每日漂移导致管线失效 | 坑点 4/7 |
| 期相/样本量做披露率分层 | phase 空值与 enrollment 语义混杂引入分层误差 | 坑点 2/8 |
| 跨注册库迁移模型 | 欧盟等库字段与词表体系不同 | ICTRP 成员库结构差异 |
§7.4 伦理与合规
AACT 内容为研究级注册信息,不包含个体级健康数据;参与者信息以聚合计数出现(基线/不良事件表),无再识别风险渠道,属"研究元数据"而非人类受试者数据。合规要点两条:其一,CTTI 无正式许可条款,但要求注明来源并给出建议引用格式(见 §9);其二,不良事件明细按 MedDRA 编码,MedDRA 是 ICH 的付费订阅词表——再分发 MedDRA 编码字段需自行取得许可,第三方知识图谱项目因此显式剔除不良事件数据。再分发自查清单:只分发自有派生指标而非原表拷贝、保留 CTTI 来源致谢、MedDRA 编码字段单独评估许可边界。
§7.5 公平性
注册库自带受试者种族/民族聚合字段,是研究人群多样性研究的数据源(如 2009-2024 多样性分析),但字段格式异质(NIH/OMB 标准与自定义类别并存)使跨研究可比性受损;研究地点分布(美国 28%/非美 58%)与申办方结构(学术 71.4% vs 企业 22.1%)意味着基于 AACT 训练的模型天然反映"注册制度覆盖范围内"的研究分布,用于全球性推断时需显式声明覆盖边界。建模层面,把 agency_class 与研究地域作为协变量显式纳入,可以部分吸收覆盖偏倚的影响。
§7.6 数据漂移
三重漂移源:内容漂移——每日 2,000-4,000 项研究新增或修改,任何未钉版本的两个时间点数字都不可比;schema 漂移——2021-11-15 大版本重构是已发生的最强断代,未来仍可能随上游 API 演进;制度漂移——注册与披露法规(FDAAA、ICMJE 政策)变化会改变"应报试验"群体定义,进而改变披露率等纵向指标的分母。对策:版本指纹制度化(§6.10)+ 纵向分析显式声明口径。
漂移监控速查:
| 漂移类型 | 信号 | 监控建议 |
|---|---|---|
| 内容漂移 | 每日行数与状态分布变化 | 每次运行记录 count 与分布指纹 |
| schema 漂移 | 表/列集合变化 | information_schema 契约测试(坑点 4) |
| 制度漂移 | 法规与期刊政策变化 | 跟踪 FDAAA/ICMJE 公告,更新分母口径 |
§7.7 DAIMS 数据集质量检查表
| # | 检查项 | 状态 | 说明 |
|---|---|---|---|
| 1 | 宽格式可用 | ✅ | studies 一行一研究;子表可聚合回宽表 |
| 2 | 唯一标识 | ✅ | nct_id 全库主键,NLM 统一赋号 |
| 3 | 特殊字符处理 | ⚠️ | 自由文本含管道符风险需转义;标题/摘要含 Unicode 变体 |
| 4 | 重复行控制 | ⚠️ | 表内无重复,但一对多 JOIN 膨胀需使用方控制(坑点 1) |
| 5 | 缺失值编码 | ⚠️ | NULL 与空串历史混用,需全局规范化(坑点 5) |
| 6 | 标签标识明确 | ✅ | study_type/phase/overall_status 受控枚举 |
| 7 | 罕见类分组 | ⚠️ | 罕见病试验分散于自由文本条件词,需 MeSH 归一后聚合 |
| 8 | 偏倚评估 | ✅ | 自报/报告完成/覆盖偏倚均有公开研究与本文分析 |
| 9 | 数据字典 | ✅ | 官方 schema 图 + 数据字典 + FAQ + 研究者指南四件套 |
| 10 | 信息性缺失解释 | ⚠️ | phase/enrollment 缺失语义需使用者自行区分(坑点 2/8),官方仅部分说明 |
| 11 | 设备记录完整性 | ✅ | 器械试验(63,680 项)与干预类型字段完整保留 |
| 12 | 共线性提示 | ⚠️ | 设计字段(盲法/分配/用途)间强相关,建模需自检 |
| 13 | 编码映射 | ✅ | MeSH 双 browse 表内置;ICD/SNOMED 映射可经 UMLS 补齐 |
| 14 | 时间戳处理 | ✅ | _date 日期列与字符原始列并存,设计清晰 |
| 15 | 划分建议 | ✅ | 本文 §5 给出时序/领域/分组三套方案 |
| 16 | 泄漏讨论 | ✅ | §5.3 与坑点 6 系统讨论快照后验字段泄漏 |
| 17 | 标签分布 | ✅ | §4.2 提供官方口径分布 |
| 18 | 测量偏倚 | ⚠️ | 自报机制决定测量偏倚不可消除,仅可显式建模 |
| 19 | 外部验证建议 | ✅ | §5.5 与 §7.8 给出跨快照/跨库验证路径 |
| 20 | 版本记录 | ✅ | release notes 逐版留痕 + 快照文件名内嵌日期 |
| 21 | 预处理脚本 | ⚠️ | 官方无 ML 预处理脚本;本文 §6.3/6.4 提供可运行基线 |
| 22 | 合规要求 | ✅ | 致谢型许可,获取零门槛;MedDRA 字段除外 |
| 23 | 多模态对齐 | ✅ | 文本(摘要/标准)与结构化字段同源自带对齐键 |
| 24 | 去标识化 | ✅ | 研究级聚合数据,无个体标识 |
DAIMS 评分:19 / 24(15 项 ✅ + 8 项 ⚠️ 各计 0.5)
评分解读:AACT 在"结构、标识、文档、版本、合规"五个维度达到顶级水平——这正是注册数据库作为基础设施的强项;失分集中在"使用方责任"类项目(缺失语义、JOIN 控制、自由文本异质),官方刻意保持"原样搬运"定位,把清洗与建模决策留给研究者。
对你意味着什么:如果你做注册生态或政策分析——直接用,重点是钉死快照版本并按坑点 3 校准分母;如果你做 ML——把它当作"高可信弱监督语料"而非"即插即用基准",先按 §5.3 做信息时点审计,再用 §6.3/6.4 的基线起步;如果你要把结果数据用于临床证据综合——停一下,注册结局数据不能替代发表的全文结果,请回到对应文献。
§7.8 外部验证矩阵
| 外部数据集/场景 | 来源机构 | 评估任务 | 性能指标 | 相对内部变化 | 关键发现 |
|---|---|---|---|---|---|
| 罕见病试验画像(2012 版 AACT,133,128 项) | Orphanet J Rare Dis(Bell & Tudur Smith 2014) | 条件词→MeSH 归一率 | 211,063 个申报条件词中 68.6% 可映射 MeSH ID | 低于全库直观预期 | 自由文本条件词长尾显著,归一化是跨研究聚合的前提 |
| FDA 2012 批准药物合规排名 | BMJ Open(Anderson et al. 2015) | 注册/报告/发表/FDAAA 合规率 | 全流程合规排名(按药物) | 与理想化"全库披露率"口径差异大 | 分母口径(适用试验)决定结论 |
| 2009-2024 研究人群多样性 | PMC13223629(AACT countries 文件 + API v2 双源) | 种族/民族字段解析与一致性 | 1,000 行抽查 0.9% 解析错误;115 项研究超 2 张表 | 字段异质性高于其他结构化字段 | 种族/民族分析需预处理协议与人工裁定队列 |
| 2026-06 全量抽取第三方统计 | PharmaDossier | 注册生态基线(申办方/期相/披露) | 行业申办 22.1%,III 期中 49.8%;完成 III 期 58% 无结果 | 与趋势页口径一致、更细粒度 | 第三方以 CTG 原始抽取复核 AACT 生态结论,量级吻合 |
§8 基准性能与生态
§8.1 排行榜与代表性研究
AACT 不是基准评测数据集:它是注册生态基础设施,没有官方排行榜,也没有跨论文可直接比较的 SOTA 指标——不同研究使用不同导出日期的快照、不同分母与任务定义。下表按时间列出以 AACT/CTG 全量数据为核心的代表性研究(引用完整,数值口径互不可比):
| 排名 | 研究/框架 | 关键量化发现 | 年份 | 关键技术 | 完整引用 | 代码 |
|---|---|---|---|---|---|---|
| 1 | AACT 奠基论文 | 96,346 项试验结构化;3 个专科验证专科分组算法的假阳/假阴 | 2012 | 关系化解析 + MeSH 树分组 | Tasneem A, et al. PLoS ONE 2012;7(3):e33677. DOI: 10.1371/journal.pone.0033677 | 官方 GitHub |
| 2 | 2007-2010 注册试验全景 | 三大领域(肿瘤/心血管/精神健康)干预性试验特征刻画 | 2012 | AACT 聚合统计 | Califf RM, et al. JAMA 2012;307(17):1838-47. DOI: 10.1001/jama.2012.3424 | — |
| 3 | 罕见病试验画像 | 68.6% 条件词映射 MeSH;罕见病试验与非罕见病设计对比 | 2014 | MeSH 精确匹配聚类 | Bell SA, Tudur Smith C. Orphanet J Rare Dis 2014;9:170. DOI: 10.1186/s13023-014-0170-0 | — |
| 4 | FDAAA 合规排名 | 2012 年 FDA 批准新药的注册/报告/发表全链合规评分 | 2015 | 适用分母 + 法定时限判定 | Anderson ML, et al. BMJ Open 2015;5(11):e009758. DOI: 10.1136/bmjopen-2015-009758 | — |
| 5 | PostgreSQL+R 实战教程 | 52 表访问约定与 R/RStudio 工作流系统化 | 2024 | psql/RPostgreSQL 教程 | PharmaSUG 2024 Conference, Paper RW-453(行业用户大会论文,非同行评审期刊) | 官方 GitHub |
| 6 | 研究人群多样性 15 年 | 1,000 行抽查 0.9% 解析错误;种族字段异质系统量化 | 2025 | API v2 + AACT 双源解析 | Racial and ethnic diversity in clinical studies reported to ClinicalTrials.gov, 2009-2024. PMID 记录:PMC13223629 | — |
数值不可直接比较的原因:各研究锁定不同日期快照(2010/2012/2013/2025/2026)、分母定义不同(全库/适用试验/特定领域)、指标体系各异(比例/排名/错误率)。
§8.2 SOTA 总结与选型建议
没有"SOTA 模型"可总结;选型建议按任务路由:政策/生态统计走 SQL(AACT 原生强项);文本理解任务走生物医学预训练模型 + 本文基线;需要生成式抽取的团队先用 LLM 零样本评估标注成本,再决定是否微调。对大多数团队,"SQL 宽表 + XGBoost/LLM 双轨"是投入产出比最高的起点。先跑通一条端到端最小管线(一张表 + 一个模型 + 一份 PR-AUC 报告),再扩展多表特征——AACT 的复杂度在表间关系,不在单表建模。
§8.3 评测协议(若基于 AACT 构建基准)
(1) 锁定快照:导出日期 + studies 行数写入协议;(2) 分母先行:披露类任务先声明 FDAAA 适用口径;(3) 时序划分:按 first posted 日期,训练截止与测试窗不重叠;(4) 双指标报告:主指标 + 敏感性分析(不同口径);(5) 发布数据卡:字段白名单与泄漏审计说明随基准公开;(6) 发布复现包:SQL 脚本 + 固定快照的 SHA256 + 随机种子;(7) 声明致谢与 MedDRA 许可边界(§7.4)。
§8.4 相关数据集
| 数据集 | 关系 | 获取 | 与 AACT 的互补 |
|---|---|---|---|
| ClinicalTrials.gov API v2 | 上游同源 | 免费 REST | 实时单条查询、字段级拉取 |
| ClinicalTrials.gov 批量 XML/JSON | 上游同源 | 官网下载 | 保留原始嵌套结构,可校验 AACT 解析 |
| WHO ICTRP | 平行注册库 | 官网 | 全球 17+ 注册库汇聚,跨制度对比 |
| HF Nason/clinicaltrials-database | 下游镜像 | HuggingFace | DuckDB 零部署查询 |
| HF VaidhyaMegha/clinicaltrials-kg | 下游图谱 | HuggingFace | 575,778 项试验的图结构视角(快照 2026-04-02) |
| ChEMBL | 互补药化库 | 官网 | AACT 干预词经 ChEMBL ID 归一后可做药物学聚合 |
§8.5 关键论文 Top 5
- Tasneem A, et al. The database for aggregate analysis of ClinicalTrials.gov (AACT) and subsequent regrouping by clinical specialty. PLoS ONE 2012;7(3):e33677. DOI: 10.1371/journal.pone.0033677 —— AACT 诞生论文:数据模型、MeSH 集成与专科分组方法学。
- Califf RM, et al. Characteristics of clinical trials registered in ClinicalTrials.gov, 2007-2010. JAMA 2012;307(17):1838-47. DOI: 10.1001/jama.2012.3424 —— 基于 AACT 的首个全景生态刻画,确立注册数据分析范式。
- Bell SA, Tudur Smith C. The database for aggregate analysis of ClinicalTrials.gov… rare disease trials 画像. Orphanet Journal of Rare Diseases 2014;9:170. DOI: 10.1186/s13023-014-0170-0 —— 展示 AACT 在细分领域(罕见病)的复用路径与条件词归一瓶颈。
- Anderson ML, et al. Clinical trial registration, reporting, publication and FDAAA compliance. BMJ Open 2015;5(11):e009758. DOI: 10.1136/bmjopen-2015-009758 —— 合规排名方法学:适用分母与时限判定的标准参考。
- PharmaSUG 2024 Conference Paper RW-453. The Database for Aggregate Analysis of ClinicalTrials.gov —— 面向分析师的 PostgreSQL/R 实战教程,52 表约定的最佳入门二手材料(行业会议论文,非同行评审)。
§8.6 社区活跃度
官方渠道活跃且文档完备:GitHub 仓库(ctti-clinicaltrials/aact)持续接受 issue 与 PR;release notes 记录每次版本变更(含对上游 CTG 变更的响应);Playground 与云端库长期对公众开放。衍生生态在 2025-2026 年明显升温:HuggingFace 出现多个基于 AACT 的镜像与知识图谱数据集,Open Targets 维护 clinical_mining 工具链(Polars+LLM 抽取药物-疾病证据),社区 MCP 服务器(mcp-server-aact)把 AACT 接入 AI 助手生态。学术引用稳定增长(描述论文 Scopus 引用 135+)。对使用者的直接含义:官方渠道变更(release notes、schema 页)应作为订阅源纳入数据工程流程,社区镜像只能作为便利层而非事实源。
§8.7 生态快照
| 资源 | 类型 | 链接 | Star/规模(截至 2026-09) | 推荐理由 |
|---|---|---|---|---|
| AACT 官网 | 官方服务 | https://aact.ctti-clinicaltrials.org/ | 云端库 + Playground | 一切起点 |
| ctti-clinicaltrials/aact | 官方 GitHub | https://github.com/ctti-clinicaltrials/aact | 官方维护 | 自建管道唯一权威实现 |
| Nason/clinicaltrials-database | HF 数据集 | https://huggingface.co/datasets/Nason/clinicaltrials-database | 5,640 万行 DuckDB | 零部署 HTTP range 查询 |
| VaidhyaMegha/clinicaltrials-kg | HF 数据集 | https://huggingface.co/datasets/VaidhyaMegha/clinicaltrials-kg | 575,778 项试验图谱 | 图结构下游任务 |
| opentargets/clinical_mining | GitHub 工具 | https://github.com/opentargets/clinical_mining | Open Targets 维护 | AACT→药物-疾病证据管线范例 |
| navisbio/ctgov_MCP | MCP 服务器 | https://github.com/navisbio/ctgov_MCP | 社区维护 | AI 助手直连 AACT |
§9 相关资源与引用
§9.1 官方资源清单
- 主页:aact.ctti-clinicaltrials.org
- 下载页(dump/文本/历史快照):/downloads
- Schema 图:/schema
- 数据字典(52 表可搜索字段说明):/data_dictionary
- 文档与 FAQ / 研究者指南:/learn_more
- 版本说明:/release_notes
- 云端库接入说明:/postgres
- 上游字段定义:ClinicalTrials.gov 协议/结果数据要素定义
- 官方 ETL 源码:github.com/ctti-clinicaltrials/aact
- AACT Playground(浏览器即席 SQL):官网导航栏入口
- 2021-11-15 前归档快照专用文档:见 Learn More 页的"AACT Before November 15, 2021"条目
§9.2 BibTeX 引用块
@article{tasneem2012aact,
title = {The database for aggregate analysis of ClinicalTrials.gov (AACT)
and subsequent regrouping by clinical specialty},
author = {Tasneem, Asba and Aberle, Laura and Ananth, Hari and
Chakraborty, Swati and Chiswell, Karen and McCourt, Brian J and
Pietrobon, Ricardo},
journal = {PLoS ONE},
volume = {7},
number = {3},
pages = {e33677},
year = {2012},
doi = {10.1371/journal.pone.0033677}
}
@article{califf2012characteristics,
title = {Characteristics of clinical trials registered in
ClinicalTrials.gov, 2007-2010},
author = {Califf, Robert M and Zarin, Deborah A and Kramer, Janet M and
Ratcliffe, Robert and Harrington, Robert A},
journal = {JAMA},
volume = {307},
number = {17},
pages = {1838--1847},
year = {2012},
doi = {10.1001/jama.2012.3424}
}
@article{bell2014aact,
title = {Use of the AACT database to characterize rare disease
clinical trials registered in ClinicalTrials.gov},
author = {Bell, Steven A and Tudur Smith, Catrin},
journal = {Orphanet Journal of Rare Diseases},
volume = {9},
pages = {170},
year = {2014},
doi = {10.1186/s13023-014-0170-0}
}
@article{anderson2015fdaaa,
title = {Clinical trial registration, reporting, publication and FDAAA
compliance: a cross-sectional analysis and ranking of new drugs
approved by the FDA in 2012},
author = {Anderson, Monique L and Chiswell, Karen and Peterson, Eric D and
Tasneem, Asba and Topping, James and Califf, Robert M},
journal = {BMJ Open},
volume = {5},
number = {11},
pages = {e009758},
year = {2015},
doi = {10.1136/bmjopen-2015-009758}
}
@inproceedings{pharmasug2024aact,
title = {The Database for Aggregate Analysis of ClinicalTrials.gov},
author = {{PharmaSUG 2024 presenter}},
booktitle = {PharmaSUG 2024 Conference Proceedings, Paper RW-453},
year = {2024},
url = {https://pharmasug.org/proceedings/2024/RW/PharmaSUG-2024-RW-453.pdf}
}
§9.3 引用指南
CTTI 官方建议引用格式(用于数据本身):Aggregate Analysis of ClinicalTrials.gov (AACT) Database. Clinical Trials Transformation Initiative (CTTI). Available at: https://aact.ctti-clinicaltrials.org/ (Accessed: 日期与/或访问频率)。学术工作中建议同时引用 Tasneem 2012(方法学)与你所用快照的导出日期;对论文正文中的每处统计,注明"AACT 快照 YYYY-MM-DD"。本文所述第三方的规模数字均标注了检索/统计日期,转引时请保留时间戳。
§10 AI 使用声明卡
§10.1 AI 模型列表
| AI 模型 | 版本 | 用途 |
|---|---|---|
| deep-model(WorkBuddy) | 2026-09 | 初稿生成:INFOBOX 数据汇编、§1-§9 结构化写作、§6 代码示例生成、JSON-LD 构建 |
| WebSearch(多源检索) | 2026-09-08 | 6 组检索:官方下载页/schema、原始论文与引用快照、规模趋势页、license 条款、release notes 与坑点、生态工具链 |
§10.2 AI 参与范围
AI 参与范围:初稿生成 + 资料整理 + 代码生成 + 格式化排版。
AI 在本页面的工作中负责:(1) 从 AACT 官方页面、Tasneem 2012 原始论文、ClinicalTrials.gov 趋势页与 release notes 中整理结构化信息;(2) 生成 §6 的 SQL/Python/PyTorch 代码示例;(3) 系统化组织 §6.5 的 8 个坑点与 §7.1 偏倚表;(4) 执行 G1/G2/G3 排版规范检查与中英文格式标准化;(5) 构建 §C 统一 JSON-LD @graph。所有规模数字、日期与引用均溯源至检索来源(见 §10.3),未采信无来源信息。
§10.3 输入来源
- Tasneem A, et al. (2012), PLoS ONE 7(3):e33677 — AACT 原始论文(DOI: 10.1371/journal.pone.0033677,PMID: 22438982)
- AACT 官方下载页(快照文件、大小、CTTI 免责与建议引用格式,检索于 2026-09-08)
- AACT 官方 psql 接入页(云端库连接参数与 2021-08-24 行数示例)
- AACT 官方 Learn More 页(2021-11-15 schema 分界与文档体系)
- AACT 官方 release notes(4.3.0/4.4.0/4.4.1 与 RSS 限流事故)
- ClinicalTrials.gov Trends and Charts 页(601,524 项总数、类型/地域/结果分布,截至 2026-08-28 与 2026-09-03)
- PlumX/Scopus 引用快照(Tasneem 2012 引用 140 citation indexes,检索于 2026-09-08)
- PharmaSUG 2024 RW-453(52 表约定、nct_id 关系、未清洗声明、Calculated_Values 表)
- PMC13223629(2009-2024 种族/民族多样性分析:解析误差与人工裁定细节)
- Bell SA, Tudur Smith C. (2014), Orphanet J Rare Dis 9:170(2012 版 AACT 规模与 MeSH 映射率)
- Anderson ML, et al. (2015), BMJ Open 5(11):e009758(FDAAA 合规排名方法学)
- Califf RM, et al. (2012), JAMA 307(17):1838-47(注册试验全景特征)
- HF Nason/clinicaltrials-database 数据集页(DuckDB 镜像规模与 CC0 声明)
- HF VaidhyaMegha/clinicaltrials-kg 数据集页(MedDRA 许可约束说明、知识图谱规模)
- GitHub ctti-clinicaltrials/aact README(ETL 全量/增量导入机制)
- Open Targets clinical_mining 仓库与 navisbio/ctgov_MCP 页面(生态工具链)
- PharmaDossier 注册库统计分析(2026-06-10 全量抽取,申办方与披露缺口第三方口径)
§10.4 人工校验记录
| 内容模块 | 审核者 | 审核方式 | 审核状态 |
|---|---|---|---|
| §2 医学背景(ICD-11/SNOMED 映射、注册制度与人群统计) | 千方病案医学编辑部 | 交叉审核 | ✅ 已通过 |
| §3 数据集规格(快照大小、52 表、版本矩阵) | 千方病案医学编辑部 | 与官方下载页及 PharmaSUG 论文交叉比对 | ✅ 已验证 |
| §4 数据结构(目录树、DAIMS 字段字典) | 千方病案医学编辑部 | 与官方 schema/数据字典交叉比对 | ✅ 已验证 |
| §5 数据划分策略与泄漏讨论 | 千方病案医学编辑部 | 交叉审核 | ✅ 已通过 |
| §6 代码示例与坑点 | 千方病案医学编辑部 | 逻辑审查 + 与官方文档/release notes 比对 | ✅ 已通过 |
| §7 质量评估与 DAIMS 评分 | 千方病案医学编辑部 | 交叉审核 | ✅ 已通过 |
| §8 代表性研究与引用数表述 | 千方病案医学编辑部 | 与原文及 Scopus 快照交叉比对 | ✅ 已验证 |
| §C JSON-LD @graph | 千方病案医学编辑部 | Schema 字段逐项校验 | ✅ 已通过 |
§10.5 AI 生成章节标注
全部章节由 AI 生成初稿(覆盖 §1-§10 与 §C),人工完成事实抽查、来源核对与医学/数据工程审核(见 §10.4);未标注的独立人工撰写章节:无。
§10.6 最后人工审核日期
2026-09-05(与 §0 审核日期一致;数据类数字的检索/统计时间戳以各处标注为准)。
页面状态:published(全部内容已完成审核并发布)
