MIT-6-S897-医疗机器学习-2019-中文笔记-全-
MIT 6.S897 医疗机器学习 2019 中文笔记(全)



课程 P1:医疗保健为何独特? 🏥
在本节课中,我们将探讨机器学习在医疗保健领域的应用背景、独特挑战以及未来机遇。我们将回顾该领域的历史尝试,分析当前变革的驱动因素,并通过具体案例理解机器学习如何可能改变未来的医疗实践。
概述:为何关注医疗保健中的机器学习?
美国的医疗保健费用过高,每年花费约3万亿美元,但效果却不尽如人意。慢性病往往诊断过晚、管理不佳,医疗差错时有发生,可能导致本可避免的死亡。医疗保健影响着我们每个人,几乎所有人都有家人或朋友曾受健康问题困扰。因此,我们面临的核心问题是:如何利用机器学习与人工智能,作为改变医疗保健现状的更大拼图的一部分?
个人经历也驱动着对这一领域的兴趣。例如,家人因阿尔茨海默病晚期诊断或血癌治疗策略选择不当而遭受的痛苦,凸显了更早、更精准干预的必要性。机器学习虽非万能解药,但它是推动系统性变革的重要元素之一。本节课将介绍AI在医疗保健中的背景,解释为何现在正是取得重大进展的时机,并举例说明机器学习可能如何塑造未来十年的医疗保健。

历史回顾:早期的尝试与挑战
人工智能在医学中的应用并非新概念,其历史可追溯至20世纪70年代甚至更早。

MYCIN 专家系统
早期尝试之一是斯坦福大学开发的 MYCIN 系统,其目标是识别导致感染的细菌并指导治疗。该算法能在69%的病例中提出有效治疗方案,在当时甚至优于顶尖传染病专家。系统采用对话界面与临床医生交互,例如:
计算机:我准备好了。
临床医生:这是一个2岁6个月的男性患者...
计算机:病人的年龄是2岁6个月,性别是男性。
尽管技术有效,但此类系统并未融入临床护理流程。
INTERNIST-1 / QMR 系统
20世纪80年代,匹兹堡大学开发了 INTERNIST-1(快速医学参考,QMR) 系统,用于初级保健诊断。它将疾病建模为潜在变量(如流感、肺炎),将症状(如咳嗽、疲劳)或实验室结果作为观测变量,形成一个庞大的概率网络(包含超过4万条边)。该模型旨在根据患者症状进行鉴别诊断。
然而,构建该模型需要15人年的巨大努力,且其设计脱离了临床工作流程(如需要医生手动输入结构化数据),导致其难以被广泛采用和维护。此外,模型无法从数据中自动学习,在新环境(如不同地区或专科)应用时需耗费大量资源重新推导。

数据驱动的医学发现
20世纪80年代,斯坦福大学利用类风湿关节炎患者的疾病登记数据库进行数据驱动发现。系统能提出因果假设,进行统计检验,并将发现提交给领域专家验证。其中一个著名发现是“强的松可能会升高胆固醇”,该成果发表于1986年。

20世纪90年代的神经网络应用
进入20世纪90年代,神经网络开始被用于解决各类医学问题(如乳腺癌、心肌梗死预测)。然而,这些研究通常特征数量少(依赖手工整理的结构化数据)、样本量小(数十至数千例),且模型泛化能力差,难以在不同机构间复现。这些因素共同阻碍了技术向临床实践的转化。


当前变革的驱动因素 🚀
尽管历史上面临挑战,但当前我们正处在一个转折点,主要驱动力来自数据、标准化和算法进步。
数据的可用性
过去,医疗人工智能大多依赖领域知识而非数据。如今,电子健康记录(EHR) 的普及改变了局面。在美国,2009年《经济刺激法案》投入约300亿美元推动医院采用EHR,使其使用率从不足10%大幅提升至超过80%。电子化数据为机器学习提供了基础。

以下是一些重要的数据集示例:

- MIMIC-III:由麻省理工学院创建,包含4万多名重症监护室患者的丰富数据(生命体征、化验结果、用药记录、临床笔记等),是全球唯一公开的大规模EHR数据集,本课程将使用它。
- IBM MarketScan:基于保险理赔数据,提供患者健康的纵向视图,但通常需付费获取,限制了其可及性。
- “我们所有人”研究计划:旨在收集100万美国人的多样化健康数据,包括EHR、保险理赔、基因组学等,以支持更广泛的研究。

数据来源也日益多元,包括基因组学、蛋白质组学等生物数据,以及社交媒体、手机活动等非传统健康数据。
数据标准化

数据标准化是使算法能够跨机构应用的关键。以下是一些重要标准:

- 疾病编码:ICD-10等系统为诊断提供标准化代码。
- 化验编码:LOINC系统标准化实验室检验项目。
- 药品编码:NDC代码唯一标识每种药物。
- 医学术语:UMLS(统一医学语言系统)本体整合了数百万医学概念,有助于从自由文本中提取信息。
- 数据交换:FHIR(Fast Healthcare Interoperability Resources)等新兴标准定义了API,便于系统间交换数据。
- 通用数据模型:如OMOP,可将不同机构的数据映射到统一格式,便于算法移植。

机器学习算法的进步
近年来机器学习在其他领域的突破也为医疗保健应用铺平了道路。

- 大数据与性能提升:如图像识别在ImageNet竞赛中的错误率从25%降至5%以下,证明了大数据和先进算法(如CNN)的威力。
- 算法进展:
- 处理高维特征的算法(如带L1正则化的SVM)。
- 快速优化方法(如随机梯度下降)。
- 半监督/无监督学习:这对医疗至关重要,因为标注数据往往稀缺。
- 深度学习:CNN、RNN等架构在图像、序列数据处理上表现出色。
- 开源软件:TensorFlow、PyTorch等框架加速了研究和开发。
行业兴趣与投资
巨大的社会影响和潜在经济收益吸引了大量投资。科技巨头(如DeepMind Health、IBM Watson)和数百家初创公司正致力于开发医疗AI工具。数据被视为核心资产,引发了并购潮(如IBM收购Merge、Flatiron Health)。
机器学习改变医疗保健的示例 💡
机器学习可在医疗生态系统的多个环节(提供者、支付方、患者)发挥作用。
在临床提供方(医院/诊所)的应用
以下是在急诊科等场景中应用的例子:
- 临床决策支持:算法可自动从EHR提取信息,推理患者状况,用于分诊、早期预警或触发最相关的临床指南。例如,系统识别患者可能符合“蜂窝织炎诊疗路径”并提示医生,医生确认后即进入标准化处理流程。
- 减少专家依赖:利用CNN分析胸部X光片或心电图,辅助或初步完成肺炎、心律失常等诊断,缓解放射科、心内科医生资源压力,并可能惠及资源匮乏地区。
- 改善数据质量:通过自然语言处理技术,自动从分诊护士的记录中预测并推荐标准化的“主诉”,提高了数据质量和录入效率。
慢性病管理与精准医疗


对于糖尿病、癌症等慢性病,机器学习能帮助更好地预测进展和优化治疗。
- 疾病轨迹预测:超越eGFR等粗略指标,利用多维度数据(化验、基因表达等)精细预测患者病情发展。
- 治疗选择:构建模型预测患者对不同治疗方案(A或B)的潜在反应,辅助实现精准医疗。这本质上是一个因果推理问题。
- 远程监测与跟踪:使用无线信号(如Emerald系统)监测老年人是否跌倒;结合手机照片预测食物对血糖的影响,优化胰岛素泵的自动调节。
医学发现

机器学习还能推动基础医学发现。
- 疾病亚型发现:利用聚类算法(如K-means)从患者数据中发现新的疾病亚型(如哮喘的不同亚型)。
- 药物发现:预测可能有效的抗体或化合物,加速新药研发。


医疗保健中机器学习的独特挑战 ⚠️
将机器学习应用于医疗保健面临一系列特殊挑战,与通用机器学习课程所学有所不同。
问题本质的挑战
- 高风险性:决策关乎生死,要求算法极度稳健、安全。需要发展形式化验证方法,确保算法行为符合预期,并建立部署后的监控制衡机制。
- 公平性与责任:算法被用于风险分层、资源分配(如决定哪些患者获得上门护理)。必须警惕算法因数据偏差而加剧健康不平等。
- 标签稀缺:许多重要预测目标(如疾病亚型、长期结局)缺乏高质量标注数据,因此无监督、半监督学习至关重要。
- 因果性问题:很多核心问题(如“哪种治疗更好?”)是因果推断问题,而非单纯的预测问题。
- 数据稀缺性:即使是常见病,特定罕见表现的患者样本也很少。需要利用迁移学习、领域知识融合等方法。
- 大量缺失与删失数据:患者数据因换工作、换保险公司而断裂;只有事件发生时才有记录;生存分析中存在删失数据(只知道患者在某个时间点前未发生事件)。需要专门方法处理。
实施与后勤挑战
- 数据隐私与访问:健康数据高度敏感,去标识化困难,导致数据共享协议谈判漫长,公共数据集稀少,代码可复现性成为重大挑战。
- 系统集成困难:医院使用的商业EHR系统(如Epic, Cerner)并非为集成外部AI算法设计,导致部署落地非常困难。
课程目标与总结 🎯
本节课我们一起回顾了机器学习在医疗保健领域的漫长历史与当前复兴的驱动力。我们看到了早期系统因脱离工作流程、难以维护而失败,也看到了如今因数据电子化、标准化和算法进步而带来的新机遇。
通过具体案例,我们了解到机器学习不仅能辅助诊断,还能在临床决策支持、慢性病管理、远程监测和医学发现等多个层面产生深远影响。
然而,医疗保健领域的机器学习充满独特挑战:高风险性要求稳健与安全;公平性不容忽视;因果性问题、标签与数据稀缺、大量缺失数据等都需要我们发展新方法。此外,数据隐私和系统集成等实际障碍也亟待解决。
本课程的目标是帮助大家:
- 获得处理医疗保健数据的直觉。
- 学会将医疗保健问题形式化为机器学习挑战。
- 理解并非所有先进算法(如深度学习)都适合所有医疗问题。
- 领会安全、稳健部署机器学习算法的微妙之处。
这是一个年轻且快速发展的领域,充满开放的研究问题,期待大家共同探索。






课程 P10:机器学习在心血管医学中的应用 🫀
在本节课中,我们将学习机器学习,特别是计算机视觉技术,如何应用于心血管医学领域。我们将从心脏的基础结构和功能讲起,了解主要的诊断方法,并探讨如何将机器学习自动化引入临床实践。课程将涵盖数据获取的挑战、图像分类与分割等核心任务,并展望未来在疾病早期检测和生物学研究中的应用前景。
心脏结构与功能概述
心脏的主要功能是作为一个泵,将含氧血液输送到全身循环系统,为大脑、肾脏、肌肉等组织供氧。这是一个高效的器官,每分钟泵出约五升血液,在运动时可增加五到七倍。心脏必须保持非常规律的节律,一生中大约跳动20亿次。

为了理解疾病,我们需要先了解心脏的解剖结构。血液从上、下腔静脉流入右心房,通过三尖瓣进入右心室,右心室将血液泵入肺部进行氧合。含氧血液从左心房流出,通过二尖瓣进入左心室,左心室作为主力泵,将血液通过主动脉输送到全身。

心脏的电传导系统与机械泵血功能紧密耦合。窦房结发出的电信号传导至心房(心电图P波),经过房室结延迟(PR间期),再扩散至心室(QRS波群),最后复极化(T波)。这种电-机械耦合是心脏生理学的核心。


心脏疾病分类
医生根据心脏功能异常来组织疾病定义。以下是主要的疾病类别:
- 心力衰竭:心脏泵血功能异常,表现为呼吸急促、腹部和腿部积液。治疗包括药物、辅助设备甚至移植。
- 冠心病/心肌梗死:冠状动脉堵塞导致心肌缺血或坏死,表现为胸痛、呼吸急促。治疗包括血管成形术、支架植入或搭桥手术。
- 瓣膜疾病:心脏瓣膜异常导致血液反流(反流)或狭窄(狭窄),表现为头晕、呼吸急促、晕厥。治疗需要修复或置换瓣膜。
- 心律失常:如心房颤动(心房颤抖)或心室功能不全,表现为心悸、昏厥甚至猝死。治疗包括起搏器、除颤器植入或消融手术。
传统的疾病分类侧重于泵功能和电活动,但心脏包含多种细胞类型(心肌细胞、内皮细胞、成纤维细胞等),未来可能需要更复杂的生物学视角来理解疾病。
心脏成像与诊断方法
心脏病学诊断高度依赖成像技术,不同技术的成本和用途各异:

- 心电图 (ECG):成本较低,用于诊断急性心脏病发作、心律失常等。
- 超声心动图 (Echocardiogram):使用声波成像,用于量化心脏结构和功能,诊断心力衰竭、瓣膜病等。
- 心脏磁共振 (MRI):成像质量高但非常昂贵,用途与超声心动图类似。
- 血管造影 (Angiography):通过X射线或CT扫描可视化冠状动脉血流,用于定位堵塞并指导支架植入。
- 核素显像 (PET/SPECT):使用放射性示踪剂检测心肌血流异常。
临床决策(如是否植入除颤器、进行血管成形术或瓣膜置换)常常依赖于这些成像检查的结果。然而,创新面临一个挑战:新风险模型的建立依赖于现有付费收集的数据,这限制了全新生物标志物的探索。

数据获取与挑战

医学成像数据通常以DICOM(医学数字成像和通信)标准存储,包含图像数据和元数据头文件。虽然有Python库可以处理这些数据,但获取大规模数据集用于机器学习非常困难。


挑战主要来自以下几个方面:
- 临床系统设计:医院系统为临床操作而设,并非为方便大数据提取而设计。
- 隐私与信息:图像常嵌入患者姓名、出生日期等可识别信息,去除困难。
- 供应商锁定:供应商可能使数据导出变得困难,以防止用户更换系统。
- 数据关联:成像数据与临床标签(如疾病诊断)通常分开存储,需要复杂的关联工作。
- 数据规模:即使在大中心,特定模态的数据量也可能有限(例如,PET扫描约8000例,超声心动图约30-50万例)。
- 心脏与呼吸运动:心脏持续运动,一些成像技术时间分辨率不足,导致图像模糊,常需使用心电门控等技术对齐不同心跳周期的图像。
计算机视觉在心脏成像中的应用

上一节我们介绍了心脏成像的数据基础,本节中我们来看看计算机视觉技术如何应用于这些数据。临床图像解读涉及大量手工测量和视觉诊断,自动化潜力巨大。我们主要关注三个领域:图像分类、语义分割和图像配准。

图像分类

图像分类任务是为图像分配标签(例如,诊断某种疾病)。在卷积神经网络出现之前,医学图像分类领域进展有限。尽管自动化分类可能提高效率,但其临床整合面临挑战:

- 责任归属:放射科医生是医疗责任的主要承担者,不愿将诊断任务完全移交。
- 临床应用场景:自动化系统可能更适合分诊(对急诊检查进行优先级排序)或资源匮乏环境下的辅助诊断。
- 解释性需求:医学决策需要可视化证据和共同决策,仅提供分类标签往往不够。
为了提供解释性,研究者尝试了多种方法,例如通过梯度计算或遮挡技术来可视化驱动分类决策的图像区域。然而,生成令临床医生和患者满意的解释仍是一个难题。

语义分割

语义分割任务是将图像中的每个像素分配给特定的类别标签(例如,区分左心室、左心房等结构)。在临床实践中,医生需要手动勾画心脏结构来测量面积、体积等指标,这是一个繁琐的过程。

U-Net架构因其编码-解码结构和跳跃连接在医学图像分割中非常流行。然而,像素级分类有时会产生不符合解剖常识的错误(例如,出现孤立的“小卫星”心室区域)。解决这一问题可能需要引入更大的感受野(如使用空洞卷积)或结合全局上下文信息。

图像配准
图像配准是将不同时间、不同模态或不同心跳周期获取的图像对齐到同一坐标系的过程。这对于融合多模态信息(如PET与CT)或分析动态心脏功能至关重要。传统方法使用优化算法,现代方法则开始探索使用条件变分自编码器等深度学习模型来学习几何变换。
自动化超声心动图分析流程
我们开发了一个旨在全自动化处理超声心动图原始数据的流程。目标是从机器输出的原始研究开始,自动完成以下所有步骤:
- 对不同切面视图进行分类。
- 进行图像质量评分。
- 分割五个主要视图中的心脏结构。
- 直接检测特定疾病。
- 计算所有标准的定量测量值(如射血分数、心室容积)。
我们使用改进的U-Net架构进行分割,并对偏离中心区域的预测施加惩罚,以减少错误。与传统方法(医生仅手动追踪2帧图像)相比,我们的算法可以处理每个心脏周期的每一帧,提供了更丰富的数据。
评估模型性能面临“金标准”难题。我们通过Bland-Altman图等方法与人工测量对比,发现当出现较大偏差时,往往是人工测量出错。我们还通过寻找心脏结构间已知的生理相关性(如心肌增厚与左心房增大相关)来间接验证自动化测量的合理性。
疾病直接检测与未来展望
除了测量,我们还构建了模型直接检测特定疾病:
- 肥厚型心肌病:心肌异常增厚,是年轻运动员猝死的主要原因之一。
- 心脏淀粉样变:一种现在有药可治的疾病,但漏诊率高。
- 二尖瓣脱垂:瓣叶在收缩期向左心房脱垂。
对于二尖瓣脱垂,我们通过分析整个视频并自动确定心脏周期时相,专注于脱垂发生的特定阶段进行分类,取得了良好效果。
展望未来,机器学习在心血管医学中的应用可能朝以下方向发展:
- 常规测量自动化:这已在进行中,并将成为标准。
- 床旁快速诊断:在紧急情况下(如评估心功能或心包积液)实现快速自动化分析。
- 降低技能门槛:通过结合视图分类、质量评估和自动化解读,使初级保健医生能使用手持设备进行心脏超声检查。
- 疾病监测与亚型分类:利用自动化流程获取更大规模、更频繁的序列数据,用于监测疾病进展、治疗反应和发现新的疾病亚型。
从成像到生物学:一个“勇敢的想法”
我们之前讨论的重点是成像,但生物学呢?我们如何在那里获得见解?冠心病(CAD)的研究面临独特挑战:无法对病变血管进行安全活检,组学检测成本高昂,疾病发展周期长,且现有大数据研究缺乏丰富的生物学表型数据。

为此,我们启动了一个新项目,专注于循环血细胞。选择它们的理由很充分:它们参与动脉粥样硬化过程,易于获取,且包含丰富的细胞类型信息。我们采用计算机视觉方法分析血涂片图像,使用荧光染料标记不同细胞器,从而低成本地大幅扩展细胞表型空间。我们还可以引入各种扰动来揭示潜在的细胞特征。
这种方法成本低、可重复、表达力强,并且有望对治疗产生反应。我们计划每月收集数千名患者的样本,达到深度学习所需的规模。同时,我们关联这些患者的电子病历、心电图、基因组学等数据,希望用这种低成本的“表达型”检测桥接现有的成像和临床数据,最终推动对冠心病生物学机制的更深理解和更早干预。
总结



本节课我们一起学习了机器学习在心血管医学中的应用。我们从心脏的基础知识出发,了解了临床诊断的现状与挑战,深入探讨了图像分类、分割和配准等计算机视觉任务如何应用于心脏超声等影像。我们看到了全自动化分析流程的潜力与评估难题,也探讨了直接进行疾病检测的模型。最后,我们展望了未来在降低检查门槛、实现疾病监测以及转向更本质的生物学研究方面的广阔前景。将技术创新与临床实际需求结合,是推动该领域发展的关键。



课程 P11:鉴别诊断 🩺
在本节课中,我们将学习医学诊断推理的核心概念与历史发展。我们将从简单的流程图方法开始,逐步探讨概率模型、决策分析以及现代机器学习方法在鉴别诊断中的应用。
概述
诊断是对某一现象的性质和原因的鉴定。鉴别诊断则是对某一特定疾病或状况的鉴别,需要将其与其他表现出类似临床特征的疾病区分开来。当医生面对病人时,他们通常会列出病人可能有的问题,并通过一个过程试图找出确切的原因。本节课将重点讨论这些诊断推理的模型和方法。
诊断推理的早期模型
上一节我们介绍了诊断的基本概念,本节中我们来看看历史上一些早期的、更简单的诊断推理模型。
流程图与分诊工具
在缺乏复杂计算模型的年代,人们使用流程图来辅助诊断。例如,在1973年,麻省理工学院健康中心针对女性尿路感染投诉,使用了一张颜色编码的流程表。护士会根据病人的回答勾选一系列选项,最终根据流程图的分支逻辑给出建议:立即送医、次日复诊或自行服药缓解。
这种方法本质上是一个分诊工具,用于判断问题的紧急程度。其优势在于规则明确、易于操作。然而,这类方法通常非常具体、脆弱,需要大量努力来建立共识,且不一定能长期有效。
“穿孔卡片”诊断法
另一种有趣的早期设想是“穿孔卡片”诊断法。每张卡片代表一种疾病,卡片边缘的孔洞代表不同的症状(如呼吸急促、左脚踝疼痛)。诊断时,将针穿过代表病人症状的孔洞,摇晃卡片堆,符合该症状的疾病卡片便会掉落。
这种方法的一个明显缺陷是,当病人有多种症状时,可能没有卡片能同时匹配所有条件,导致诊断失败。尽管后来有人尝试在计算机上实现类似逻辑,但其根本局限性使其未能成为主流。
概率模型在诊断中的应用
上一节我们看了一些基于规则的方法,本节中我们来看看如何将概率论,特别是贝叶斯定理,应用于诊断推理。
朴素贝叶斯模型
一个更复杂的模型是朴素贝叶斯模型。该模型假设病人一次只患一种疾病(即疾病状态是互斥且完备的),并且各种临床表现(症状、体征)在给定疾病条件下是相互独立的。
基于这些假设,我们可以应用贝叶斯规则。贝叶斯规则的基本形式是:在观察到某些证据(症状)后,更新我们对假设(疾病)成立可能性的信念。
公式表示为:
P(Disease | Symptoms) ∝ P(Symptoms | Disease) * P(Disease)
其中 P(Disease) 是先验概率,P(Symptoms | Disease) 是似然。


似然比与对数赔率
医学界在实践中常使用似然比(Likelihood Ratio, LR)和对数赔率来简化计算,避免直接进行概率乘法。
- 似然比(LR):
LR = P(Symptom | Disease) / P(Symptom | No Disease) - 后验赔率 = 先验赔率 × 似然比1 × 似然比2 × ...
由于乘法计算不便,常取对数将其转化为加法:
log(后验赔率) = log(先验赔率) + log(LR1) + log(LR2) + ...
许多临床评分系统(如格拉斯哥昏迷评分)本质上就是在对数尺度上累加不同条件的贡献。
评估诊断测试:ROC曲线

在讨论概率模型时,我们需要工具来评估诊断测试的效能。接收者操作特征曲线(ROC曲线)就是这样一个工具。
ROC曲线描绘了在不同判定阈值下,诊断测试的真阳性率(敏感性)与假阳性率(1-特异性)之间的关系。曲线下面积(AUC)用于量化测试的整体区分能力:AUC=0.5表示没有区分力(如同抛硬币),AUC越接近1表示区分能力越好。

决策分析与理性选择
上一节我们介绍了如何用概率描述不确定性,本节中我们来看看如何在不确定条件下做出理性的治疗决策。
期望效用理论
理性决策的原则是:以最大化期望效用的方式行事。在医疗决策中,每个行动(如治疗与否)都有其成本、风险和潜在收益(效用)。效用可以用生存率、生活质量(如质量调整寿命年)、医疗费用等来衡量。
临床决策树实例
考虑一位老年患者足部坏疽的案例。决策选项包括:立即截肢,或先尝试药物治疗。药物治疗可能成功,也可能失败;若失败,则可能面临更高位的截肢或死亡风险。
通过构建决策树,我们可以为每个机会节点(代表不确定结果)计算期望效用,并通过“回滚”决策树来比较不同初始决策的期望效用,从而选择期望效用最高的方案。
然而,这种分析的挑战在于概率和效用值的估计往往不稳定。因此,进行敏感性分析至关重要,即观察当关键参数(如患者对截肢后生活的效用评估)变化时,最优决策是否改变。
交互式诊断程序的发展
上一节我们看到了如何为单一决策建模,本节中我们来看看如何构建能主动询问信息以缩小诊断范围的交互式系统。
急性少尿症诊断程序
一个早期的典范是1967年开发的急性少尿症(肾功能衰竭)诊断程序。该系统将问题分为两类:廉价的初步问题(如血压、尿液检查)和昂贵/有创的确认性检查。
其核心算法是信息增益最大化。系统持续计算当前疾病概率分布的熵,并选择能最大程度降低期望熵的问题进行提问。这能高效地聚焦于最可能的疾病集合。
当某个疾病的概率超过阈值(如95%)时,系统会切换到决策分析模式,评估是否进行有创检查及选择何种治疗方案。
INTERNIST-I / QMR 系统

一个更宏大的项目是INTERNIST-I及其后继者QMR(快速医学参考)系统。它包含了约500-750种疾病和3500-5500种临床表现。每种疾病与一系列表现关联,并附有两个经验性评估值:
- 唤起强度(Evoking Strength):0-5分,表示该表现对该疾病的提示强度。
- 频率(Frequency):1-5分,表示该疾病患者出现该表现的普遍程度。


诊断时,系统根据输入的表现计算每种疾病的分数,形成“鉴别诊断”列表。它采用启发式策略管理提问:
- 聚焦策略:当某个假设得分很高时,询问该疾病强烈预测的表现以确认它。
- 排除策略:当鉴别诊断列表很长时,询问能排除多个竞争假设的表现。


尽管早期评估显示其诊断准确性未达顶尖,但它作为交互式知识库和诊断辅助工具,为医生提供了有价值的参考。


现代方法与挑战
上一节我们回顾了基于规则和概率的经典系统,本节中我们来看看现代机器学习方法如何改变诊断推理,以及面临的新挑战。


从贝叶斯网络到症状检查器

随着贝叶斯网络技术的发展,研究者将QMR等系统的知识库重新表述为贝叶斯网络,利用“因果独立性”等假设进行更严格、更快速的概率推理,取得了不错的效果。
如今,基于类似原理的“症状检查器”应用程序已十分普及。它们通过交互式提问,利用算法优化问题序列,试图为用户提供可能的诊断和分诊建议(如自我护理、看医生或去急诊)。
有限理性与元层次推理
在实际临床中,决策常受时间、资源限制。有限理性理论指出,人们并非总是进行完全理性的计算,而是依赖启发式和快速直觉。
元层次推理关注“应该进行多少推理”以及“采用哪种推理策略”本身。例如,在时间紧迫的重症监护场景,是否应立即给呼吸困难的病人上呼吸机?一个快速的行动可能救命,但也可能带来严重感染风险。建模时需要同时考虑治疗行动的效用和计算/延迟本身的成本。
强化学习新视角
最近的研究将诊断过程重新表述为一个强化学习问题。
- 状态:当前已确认和排除的临床表现集合。
- 动作:询问一个特定表现,或给出一个最终诊断。
- 奖励:给出正确诊断获得正奖励,错误诊断获得负奖励,并且鼓励用更少的问题得到诊断。
先进的模型(如名为“Mango”的系统)结合了深度Q网络和奖励塑造(例如,对可能得到肯定回答的提问给予额外奖励),以及特征重构(共同训练模型以预测未问及的表现),在模拟数据上展现了高效的学习和诊断性能。
然而,这些模型大多仍在模拟或有限数据上进行测试,将其应用于真实、复杂的临床环境并验证其安全性与有效性,是当前的重要挑战。

总结



本节课我们一起学习了医学鉴别诊断推理的演进历程。我们从基于流程图的简单规则系统开始,探讨了朴素贝叶斯概率模型和决策分析在量化诊断与治疗选择中的应用。随后,我们深入了解了INTERNIST-I/QMR等大型交互式诊断系统的设计与启发式策略。最后,我们展望了现代机器学习方法,特别是强化学习,为构建更自适应、更高效的诊断助手带来的新机遇与挑战。诊断推理的核心,始终是在不确定性中,整合信息,权衡利弊,为患者寻求最优的医疗决策路径。



课程 P12:机器学习在病理学中的应用 🧬🔬
在本节课中,我们将学习机器学习,特别是深度学习,如何应用于病理学领域。我们将探讨其核心任务、面临的挑战、具体应用案例以及未来的发展方向。

什么是病理学?🧫
上一节我们介绍了课程概述,本节中我们来看看病理学的定义及其在医疗决策中的核心作用。
病理学是医学的一个分支,专注于通过检查组织样本来诊断疾病。当患者就诊时,医生会收集各种数据。如果担心存在结构性病变(如癌症),通常会进行组织活检。病理学报告对于后续的治疗决策(如手术、化疗)至关重要。
病理学是高度视觉化的学科。病理学家观察染色的组织切片,分析细胞形态、组织结构等,以区分正常组织与疾病,并确定疾病亚型。此外,特殊染色可用于检测特定病原体或蛋白质表达,进一步增加了诊断的复杂性。
历史与挑战:为何需要机器学习?📜
上一节我们了解了病理学的基本概念,本节中我们来看看该领域的历史挑战以及引入机器学习的原因。
将人工智能或机器学习应用于病理学并非新鲜事,相关研究已有四十多年历史。早期研究试图通过测量细胞大小等简单特征(形态测定)来识别癌细胞。然而,这些方法基于小数据集和简单模型,难以规模化。
病理学实践面临的核心挑战是观察者间和观察者内的变异性。研究表明,不同病理学家对同一病例的诊断一致性可能很低,甚至同一位病理学家在间隔一段时间后也可能做出不同判断。这种不一致性可能导致重大的临床决策错误。
因此,需要一种计算方法来实现详尽、定量、高效的分析,减少人为错误,提高诊断的标准化和准确性。
机器学习在病理学中的优势 🚀
上一节我们看到了传统病理学的局限性,本节中我们来看看机器学习方法带来的独特优势。

以下是机器学习应用于病理学图像分析的几个关键优势:
- 详尽分析:计算机可以分析整张切片上的每一个细胞,而人类受限于时间和精力,只能抽样观察。
- 定量精准:计算机能精确计算细胞数量、比例等,提供客观的量化数据。
- 高效并行:分析过程可以大规模并行化,显著提升效率。
- 新见解发现:通过数据驱动的方式,机器学习可以发现人类未曾注意到的、与预后或治疗反应相关的新的图像特征模式。
机器学习并不会取代病理学家,而是像航空领域的自动驾驶系统一样,改变他们的工作方式。未来的病理学家可能更像整合多源数据(包括AI输出)的顾问医生。

核心方法与技术 💻
上一节我们探讨了机器学习的优势,本节中我们深入了解一下其核心方法与技术流程。
病理学的核心任务之一是图像分析。现代方法主要使用深度卷积神经网络来处理这些巨大的数字病理图像(通常为千兆像素级)。由于无法将整张图像直接输入网络,标准流程是:
- 图像分块:将整张切片图像分割成数百万个小补丁(Patch)。
- 模型训练与推理:将每个补丁输入CNN模型进行分类(例如,判断是否为肿瘤细胞)。
- 结果整合与可视化:将所有补丁的预测结果整合,并在原图上生成热图,直观显示关注区域。

代码示例:简化的图像分块逻辑
# 伪代码示例:将大图像分割成重叠或非重叠的补丁
def extract_patches(whole_slide_image, patch_size=256, stride=256):
patches = []
height, width = whole_slide_image.shape[:2]
for y in range(0, height - patch_size + 1, stride):
for x in range(0, width - patch_size + 1, stride):
patch = whole_slide_image[y:y+patch_size, x:x+patch_size]
patches.append(patch)
return patches
一个关键的优化点是采样策略。在训练时,并非所有补丁都同等重要。采用智能采样(例如,针对模型当前易出错的区域进行过采样)可以显著提升模型性能和泛化能力。
应用案例一:乳腺癌淋巴结转移检测 🎯
上一节我们介绍了核心技术流程,本节中我们来看一个具体的成功应用案例。
检测乳腺癌是否转移到淋巴结是一项重要但耗时且容易出错的任务。CAMELYON16挑战赛提供了约300张训练切片和130张测试切片,要求参赛系统自动检测淋巴结切片中的转移灶。
参赛团队采用的方法正是上述的分块+CNN分类流程。最终,最好的全自动系统错误率低于1%,显著优于病理学家在时间受限的临床环境中的表现(错误率更高,尤其是假阴性)。
在实际应用中,AI系统可以生成热图,高亮显示最可疑的转移区域,引导病理学家重点关注,从而将病理学家的错误率降低85%。这不仅能提高诊断准确性,还能将病理学家从繁琐的测量、计数工作中解放出来,使其专注于更高层次的诊断决策和报告整合。
应用案例二:精准免疫治疗预测 🧪


上一节我们看到了AI在检测任务中的价值,本节中我们探索一个更前沿的预测性应用。
免疫疗法通过抑制PD-1/PD-L1等信号通路来激活患者自身的免疫系统攻击癌细胞。确定哪些患者可能受益的关键生物标志物之一是肿瘤细胞或免疫细胞是否表达PD-L1蛋白。
然而,病理学家在人工评分PD-L1表达时的一致性很低(观察者间一致性可低至8.6%)。Path AI等公司开发了系统,能够:
- 识别组织区域(癌上皮、间质等)。
- 对每个细胞进行分类(癌细胞、淋巴细胞等)。
- 定量计算表达PD-L1蛋白的细胞比例。
这为患者分层提供了更精确、可重复的依据。更进一步,研究正在探索直接从常规H&E染色图像中,通过深度学习提取特征,预测患者对免疫治疗的反应,从而发现新的预测性生物标志物。
多模态数据整合 🧬🔗
上一节我们专注于图像分析,本节中我们来看看如何将病理图像与其他数据类型整合。

病理图像反映的是组织和细胞的形态表型,而基因组、转录组等数据揭示的是底层的分子机制。将两者结合可以产生更强大的洞察。
例如,在黑色素瘤研究中,可以从病理图像中提取数百个定量特征,并找出其中与患者生存率最相关的特征子集。随后,可以分析这些图像特征与全基因组基因表达的相关性,从而发现与之关联的关键基因通路。这些通路可能是新的药物靶点或诊断标志物。


这种“图像表型 -> 临床结局 -> 分子特征” 的集成分析方法是可扩展的,能够系统性地发现新的生物学关联。
总结与未来展望 🌟
本节课中我们一起学习了机器学习在病理学中的应用全景。
总结要点如下:
- 需求驱动:病理学诊断存在变异性,需要更标准化、定量化的方法。
- 技术成熟:深度卷积神经网络(CNN)非常适合处理高分辨率的病理图像,通过分块策略解决图像过大的问题。
- 价值显著:AI在具体任务(如转移灶检测、生物标志物定量)上已展现出超越人类专家的准确性和一致性,并能与病理学家协同工作,提升整体诊断质量。
- 未来方向:未来的发展在于构建高质量、大规模的训练数据集,开发更鲁棒的模型,并将其与基因组学等多模态数据整合,最终实现从诊断到精准治疗预测的闭环。
将AI应用于病理学视觉任务已取得惊人进展,这得益于数字数据的普及、大规模计算资源的可用性以及深度学习算法的突破。我们正处在将这些工具引入常规临床实践的前夜,它们有望深刻改变病理学的工作流程,最终造福患者。



注:本教程根据公开讲座内容整理,旨在教育分享。临床应用需经过严格的验证和监管审批。




课程 P13:机器学习在乳腺X光检查中的应用 🩺
在本节课中,我们将学习如何将机器学习应用于乳腺X光检查,具体探讨两个核心任务:癌症检测分诊和乳腺癌风险预测。我们将从数据收集、模型构建的挑战讲起,逐步深入到具体的建模方法、分析技巧,并总结实践中常见的陷阱。


数据收集与挑战 📊


上一节我们介绍了课程的整体目标,本节中我们来看看数据收集的具体过程以及面临的挑战。

我们从一个包含约28万例筛查的数据集开始。在过滤掉随访时间不足一年的病例后,最终用于开发和测试的数据集约为2.6万例。我们定义“阳性”的标准是:在筛查后一年内,通过任何方式(包括后续影像学检查、活检或手术)确诊的乳腺癌。这意味着我们的标签不仅限于放射科医生在首次阅片时发现的癌症,也包含了后续“捕捉”到的病例。这种标注方式旨在模拟真实世界中我们试图“抓住”所有癌症的场景。一个重要的细节是,我们始终按患者划分数据集,以避免数据泄露,确保同一个患者的不同影像不会同时出现在训练集和测试集中。
现在,让我们进入建模环节。建模部分将分为两大块:第一块是讨论此类项目面临的通用挑战,这些挑战在各种医学影像项目中都很常见;第二块将针对本项目的具体分析进行深入探讨。

你可能会问,这看起来就是图像分类,和ImageNet任务有什么不同?虽然核心思路相似,但存在几个关键区别。
以下是两个核心挑战:

- 信噪比极低:乳腺X光图像非常大(例如3200x2600像素),而真正的癌变区域可能只有约50x50像素。这与普通物体识别(如识别一张图片中的狗)完全不同,在后者中,目标物体通常占据了图像的很大一部分。在乳腺X光中,我们需要在巨大的全局背景下定位微小的可疑区域,这非常困难。
- 数据不平衡与计算限制:即使在大型筛查中心的数据集中,癌症阳性样本的比例也很低(例如7%)。与拥有数百万张图像的常规物体分类数据集相比,我们的阳性样本数量(约2000例)非常少。同时,高分辨率图像导致单个GPU一次只能处理很少的样本(例如3张),这限制了批量大小,影响了训练的稳定性和效率。

因此,核心问题是:信号微弱,训练不稳定。我们需要思考如何让模型有效地学习。



建模策略与技巧 ⚙️
上一节我们讨论了数据层面的核心挑战,本节中我们来看看如何通过建模策略来解决这些问题。
我们尝试了多种方法,最终总结出一些有效的策略。我们的基线设置包括:使用ImageNet预训练权重进行初始化、采用较大的有效批量大小、在训练时对批次进行平衡采样(确保每个批次都包含正负样本),以及使用ResNet-18作为主干网络。
以下是几个关键的建模决策点:

1. 初始化:ImageNet预训练至关重要
我们观察到,使用ImageNet预训练权重初始化模型,损失值会立即开始下降,模型能快速学到有用的特征。而随机初始化则需要在训练初期徘徊很长时间才能开始有效学习。虽然预训练的滤波器并非直接针对乳腺癌设计,但它提供了稳定的起点,可能有助于稳定批归一化等层的统计量。
2. 架构与优化:简化流程,增大批量
一种常见思路是采用两阶段训练:先在标注的病变区域(patch)级别进行预训练,再在整个图像(full image)级别进行微调。然而,我们发现这并不是必需的。核心问题在于梯度噪声大。通过增大有效批量大小(例如,使用梯度累积技术,在4个GPU上各处理几张图像,累积梯度后再更新权重),并对每个训练批次进行平衡采样,我们可以实现非常稳定的单阶段端到端训练。这意味着我们可以直接从整张图像和“一年内是否患癌”的标签开始训练,无需复杂的区域标注。
3. 模型输出与校准
模型默认输出的“概率”通常未经校准,可能会过于自信。我们采用Platt缩放法(一种在开发集上拟合的双参数Sigmoid函数)对模型输出进行校准,使其预测的概率更符合真实的癌症发病率。
分诊任务:分析与结果 📈

上一节我们介绍了如何构建一个稳定的癌症检测模型,本节中我们来看看如何将其用于分诊任务,并分析其效果。

我们的目标是利用模型进行分诊:将低风险(极不可能患癌)的筛查者标记为“健康”,从而让放射科医生将精力集中在更高风险的病例上。具体做法是:在开发集上选择一个阈值,使得所有低于该阈值的病例中没有漏诊的癌症。在测试时,我们将模型预测概率低于此阈值的检查归类为“阴性”。


以下是我们的分析目标:
- 模型是否有效?(整体性能)
- 模型是否对所有人都有效?(亚组分析)
- 与放射科医生的评估相比如何?


整体与亚组分析结果:
- 模型在测试集上的AUC(区分癌症与非癌症的能力)约为0.82。
- 我们按年龄、种族和乳腺密度进行了亚组分析。结果显示,模型在不同亚组中的表现非常相似,AUC均在0.82左右波动,没有发现明显的性能差距。这表明模型在我们所服务的人群中具有普遍性。


与放射科医生评估的对比:
我们比较了模型预测与放射科医生原始评估的关系:
- 真阳性:绝大多数放射科医生发现的癌症,其模型预测概率都很高(集中在高分位)。
- 假阳性:许多被放射科医生判定为假阳性(召回但最终非癌)的病例,其模型预测概率较低。这意味着模型和医生的判断存在差异。
- 真阴性:模型预测概率与真阴性病例的相关性很弱。

这种差异带来了潜在好处。我们进行了一项模拟:假设在临床工作中,放射科医生不再审阅那些模型预测低于分诊阈值的检查。
- 结果:在保持灵敏度(发现癌症的能力)基本不变(从91.6%微降至91.1%)的同时,特异性(正确排除非癌的能力)从93.0%显著提升至93.7%。这意味着可以减少约25%的假阳性召回。


这证明了分诊策略的潜力。当然,下一步需要在真实的临床前瞻性试验中验证这一效果。



风险预测任务 🧬

上一节我们探讨了用于即时分诊的癌症检测模型,本节中我们来看看另一个重要应用:利用健康时的影像预测未来的乳腺癌风险。


传统的乳腺癌风险模型(如Tyrer-Cuzick模型)主要依赖年龄、家族史、激素状况等临床风险因素,其预测能力(C-statistic约0.62)有限。我们想知道,乳腺X光图像本身是否包含更多未被利用的风险信息。

方法:
我们采用了与分诊任务相似的建模框架,但标签变为“在未来几年内是否会患癌”。我们比较了三种模型:
- 仅图像模型:只使用X光图像。
- 仅风险因素模型:只使用传统临床风险因素。
- 混合模型:结合图像和临床风险因素。

结果:
- 仅图像模型的C-statistic达到0.68,已优于传统模型。
- 混合模型的性能最佳,C-statistic达到0.70。
- 更重要的是,混合模型能更好地对人群进行风险分层。例如,它识别出的最高风险10%的人群,包含了未来约30%的癌症病例;而最低风险10%的人群,只包含约3%的癌症病例。这比传统模型(18% vs 5%)的分层能力更强。
- 亚组分析显示,我们的模型在不同种族、绝经状态和家族史的人群中表现一致且优于传统模型。值得注意的是,传统模型(基于白人女性开发)在非裔美国女性数据上表现甚至比随机猜测更差,这凸显了模型泛化性和公平性分析的重要性。


这项研究表明,深度学习模型可以从乳腺X光图像中提取出超越传统风险因素的、与未来癌症风险相关的信息,为实现更个性化的筛查方案提供了可能。



常见陷阱与部署考量 ⚠️


在之前的章节中,我们一起学习了如何构建和分析模型。最后,我们来总结一下在实践中“搞砸”项目的几种常见方式,以及临床部署的考量。

1. 数据收集中的陷阱
最常见的是使用病例对照数据集。公共数据集常包含50%的癌症病例,这与真实世界极低的癌症发病率严重不符。如果阴性病例和阳性病例来自不同时期、不同设备或不同中心,模型很容易学到这些混杂偏差,导致在真实分布下表现不佳。构建一个能反映真实临床场景和人群分布的数据集至关重要。

2. 建模中的陷阱
模型可能会学到与疾病无关的设备特异性伪影。例如,不同X光机生成的图像具有不同的特征,如果数据中设备与疾病分布存在混淆,模型可能会依据设备信息而非病理特征进行预测。这需要通过仔细的数据分析或技术手段(如有条件的对抗性训练)来缓解。
3. 分析中的陷阱
- 忽略亚组分析:仅报告整体性能平均值可能掩盖模型在某些子群体(如特定种族)中表现不佳甚至有害的问题。必须进行全面的公平性评估。
- 混淆“读者研究”与“真实世界影响”:在受控的读者研究中显示有助,不等于在真实的临床工作流中能带来净收益。需要进行前瞻性的临床效用研究。
- 排除“不方便”的病例:为了提高论文中的性能数字而排除复杂病例(如植入物、既往手术史),这会降低模型的临床适用性。
4. 临床部署的挑战
将研究模型转化为临床工具充满工程挑战。需要与医院IT系统集成,处理图像传输、格式转换、结果回写等流程。我们通常采用容器化(Docker)的Web应用来封装模型,并通过API与医院系统交互。需要注意的是,医院IT环境可能对现代开发框架和协议(如HTTP、容器)的支持有限,需要大量的沟通和定制化开发工作。

总结 🎯

本节课中,我们一起学习了机器学习在乳腺X光检查中的应用。
- 我们首先了解了数据收集的细节和医学影像分析中信噪比低、数据不平衡的核心挑战。
- 接着,我们探讨了有效的建模策略,包括使用ImageNet预训练、增大有效批量大小和平衡采样,以实现稳定训练。
- 然后,我们深入分析了将模型用于筛查分诊的潜力,模拟显示其能显著减少假阳性召回而不影响灵敏度。
- 此外,我们还学习了如何构建乳腺癌风险预测模型,该模型结合影像与临床因素,能比传统方法更好地识别高风险个体。
- 最后,我们总结了项目实践中在数据、建模、分析各阶段的常见陷阱,并简要讨论了临床部署面临的实际挑战。

这些工作展示了AI在改善乳腺癌筛查效率和个性化风险评估方面的广阔前景,同时也强调了严谨的验证和以临床价值为导向的重要性。



因果推断课程 P14:第一部分 - 因果推断基础 🧠
在本节课中,我们将要学习因果推断的基本概念。我们将探讨为什么在医疗保健等领域,仅仅依靠相关性进行预测是不够的,以及如何从观测数据中回答因果问题。我们将介绍潜在结果框架、关键假设,并学习一种基础的因果效应估计方法——协变量调整。
概述:从预测到因果
到目前为止,我们讨论的都是纯粹的预测性问题。对于预测,相关性可能就足够了。我们利用数据中的模式来预测结果,而不关心因果方向。
然而,在许多实际场景中,我们真正关心的是因果问题。例如,在医疗保健中,我们不仅想预测谁会患糖尿病,更想知道如何预防糖尿病。这涉及到干预的效果,是一个因果问题。
如果我们错误地将预测模型用于指导干预,可能会造成严重后果。例如,一个模型可能预测某类患者存活时间长,但这是因为他们在数据中接受了有效治疗。如果新患者未接受治疗,基于模型的预测就会完全错误。
因此,我们需要一套数学语言和工具来严谨地思考并回答因果问题。


因果推断的基本设定
与传统的机器学习(输入X,输出Y)不同,因果推断需要考虑三个量:
- X: 个体在干预前的协变量(如年龄、病史、图像数据)。
- T: 干预或处理(如给予哪种药物,剂量多少)。为简化,我们常假设T是二元的(例如,治疗A vs 治疗B)。
- Y: 结果(如血压、生存时间)。
我们通常假设已知因果图的方向:X影响T,X和T共同影响Y。我们的目标是量化T对Y的因果效应,而不仅仅是关联。
注意: 本周我们讨论的是静态处理策略,即基于基线信息X做出一次治疗决策T,然后观察结果Y。下周我们将讨论更复杂的动态策略。
潜在结果与因果问题
为了形式化因果效应,我们引入潜在结果的概念:
- Y(1): 如果个体接受处理(T=1)时会发生的结果。
- Y(0): 如果个体接受对照(T=0)时会发生的结果。
对于任何一个个体,我们只能观察到其中一个潜在结果(事实结果),另一个是反事实结果(未被观察到)。这就是因果推断的根本问题。
我们关心的核心量是:
- 条件平均处理效应: 对于具有特定特征X=x的个体,处理与对照的期望结果之差。
CATE(x) = E[Y(1) - Y(0) | X=x] - 平均处理效应: 在整个人群中的平均效应。
ATE = E[Y(1) - Y(0)]
从观测数据中估计因果效应的挑战

直接从观测数据计算ATE是困难的。例如,简单地比较治疗组和对照组的平均结果(E[Y|T=1] - E[Y|T=0])通常会得到有偏的估计,因为治疗分配T往往与影响结果Y的协变量X相关(即存在混杂)。
上一节我们介绍了因果推断的基本问题和目标,本节中我们来看看要做出有效的因果推断必须依赖哪些关键假设。
关键假设
要从观测数据中一致地估计因果效应,我们需要两个核心假设:
1. 可忽略性(无未观测混杂)
给定观测到的协变量X,处理分配T与潜在结果Y(1), Y(0)独立。
(Y(1), Y(0)) ⟂ T | X
这意味着,在控制了X之后,谁接受处理、谁接受对照就像是随机分配的。所有同时影响处理T和结果Y的因素都必须被观测并包含在X中。如果存在未观测的混杂因子H,此假设被违反,因果估计将是有偏的。
2. 重叠性(共同支持)
对于任何可能的协变量取值x,个体既有可能被分配到处理组,也有可能被分配到对照组。
0 < P(T=1 | X=x) < 1
这意味着,对于数据中的每一类人,我们都观察到了两种处理下的结果(或至少有可能观察到)。如果某类人只接受一种处理,我们无法可靠估计该类人的反事实结果。
倾向得分:
P(T=1|X=x)被称为倾向得分,在因果推断中扮演重要角色。
估计方法之一:协变量调整
在满足上述假设的前提下,我们可以开始估计因果效应。调整公式为我们提供了理论基础:
ATE = E_X [ E[Y | X, T=1] - E[Y | X, T=0] ]
这个公式指出,ATE可以通过先在各协变量层(X=x)内计算处理效应,再对总体求期望来获得。
协变量调整法(又称结果建模、响应面建模)正是基于此公式的一种直观方法:
- 机器学习步骤: 使用数据
(X, T, Y)训练一个预测模型f(X, T),旨在估计E[Y | X, T]。这可以是一个回归模型或任何复杂的机器学习模型。 - 效应估计步骤: 对于数据集中的每个个体i(或总体分布中的样本),计算其反事实预测:
- 预测如果接受处理的结果:
Ŷ_i(1) = f(X_i, T=1) - 预测如果接受对照的结果:
Ŷ_i(0) = f(X_i, T=0)
- 预测如果接受处理的结果:
- 计算ATE: 平均所有个体的个体处理效应预测值。
ATÊ = 1/N Σ [Ŷ_i(1) - Ŷ_i(0)]
这种方法将因果推断问题简化为一个标准的监督学习问题。然而,这种简化有其风险:我们拟合模型f的目标是最小化预测Y的误差,但这并不能保证模型能准确捕捉处理T对Y的因果效应。模型可能会忽略T,仅用X来预测Y,尤其是在高维数据正则化的情况下。
一个简单的数值例子
以下例子展示了天真比较与因果估计的区别:
| 年龄 | 性别 | 运动 | 治疗 (T) | 观测血糖 (Y) | Y(0) | Y(1) |
|---|---|---|---|---|---|---|
| 75 | 男 | 是 | A | 6.0 | 6.0 | 5.5 |
| 45 | 女 | 否 | B | 6.5 | 7.0 | 6.5 |
| 60 | 男 | 是 | A | 5.0 | 5.0 | 4.5 |
| 30 | 女 | 是 | B | 5.5 | 6.0 | 5.5 |
- 天真估计: 比较治疗组均值。
E[Y|T=B] - E[Y|T=A] = (6.5+5.5)/2 - (6.0+5.0)/2 = 6.0 - 5.5 = 0.5
结论:药物B的血糖更高(效果更差)。 - 因果估计 (ATE): 比较潜在结果均值。
E[Y(1)] - E[Y(0)] = (5.5+6.5+4.5+5.5)/4 - (6.0+7.0+5.0+6.0)/4 = 5.5 - 6.25 = -0.75
结论:药物B能更有效地降低血糖(效果更好)。
这个差异源于治疗分配不是随机的(例如,年长男性更可能接受治疗A),导致了混杂偏差。
总结
本节课中我们一起学习了:
- 因果问题的重要性: 在医疗等领域的决策中,我们需要理解干预的因果效应,而不仅仅是预测。
- 基本框架: 引入了协变量X、处理T、结果Y的三元组和潜在结果
Y(1),Y(0)的概念。 - 核心假设: 可忽略性和重叠性是从观测数据中进行因果推断的基石。
- 估计方法: 介绍了协变量调整法,它通过构建结果预测模型
f(X, T)来估算反事实结果,进而计算平均处理效应。 - 挑战: 将因果问题转化为机器学习问题存在风险,因为优化预测精度不一定能保证准确估计处理效应,特别是在高维情境下。


在下一讲中,我们将探讨另一种重要且常用的因果估计方法——基于倾向得分的逆概率加权法,并继续深入讨论因果推断中的挑战。


课程 P15:因果推断(第二部分)🔬
在本节课中,我们将继续学习因果推断。我们将深入探讨两种从观测数据中推断因果效应的方法:协变量调整和倾向评分法。课程将解释这些方法的核心概念、数学原理、各自的优缺点以及它们之间的联系。
概述 📋
在上一节课中,我们介绍了因果推断的基本设置和潜在结果框架。本节课,我们将聚焦于两种具体的推断方法。首先,我们会回顾并深入探讨协变量调整方法,分析模型选择的重要性及其潜在陷阱。接着,我们将介绍倾向评分法,这是一种通过数据重加权来模拟随机对照试验思路的技术。理解这两种方法将为我们从复杂的观测数据中得出可靠因果结论奠定基础。
从协变量调整到模型选择 🧠
上一节我们介绍了因果推断的基本设置,本节中我们来看看第一种具体方法——协变量调整。在无隐藏混淆的假设下,条件平均处理效应可以通过学习一个预测模型 f 来估计,该模型以协变量 X 和处理 T 为输入,预测结果 Y。
条件平均处理效应的计算公式为:
CATE(x) = E[Y(1) | X=x] - E[Y(0) | X=x]
在满足假设的情况下,这等价于:
CATE(x) = E[Y | T=1, X=x] - E[Y | T=0, X=x]
拟合模型 f 后,对个体 x 的CATE估计可通过计算 f(x, T=1) - f(x, T=0) 得到。
然而,此方法的核心挑战在于模型 f 的选择。模型的形式假设至关重要。为了说明这一点,我们考虑一个简单例子。
假设真实的潜在结果由以下线性模型生成:
Y(t) = βX + γt + ε_t,其中 E[ε_t] = 0。
在此模型中,平均处理效应 ATE 恰好是系数 γ。如果我们正确地指定了线性模型形式,那么通过模型拟合得到的 γ 的估计值 \hat{γ} 就是ATE的良好估计。
但是,如果真实数据生成过程包含非线性项,例如:
Y(t) = βX + γt + δX² + ε_t,
而我们错误地假设了线性模型并进行了拟合,那么 \hat{γ} 的估计将是有偏的,其偏差为 δ * E[X²]。这可能导致关于治疗效果的结论完全错误。
这个例子凸显了在协变量调整中,对潜在结果模型做出错误假设的危险性。因此,我们希望使用更灵活、假设更少的模型。

以下是机器学习中常用于因果推断的非参数或半参数模型:

- 高斯过程:可用于对连续值潜在结果进行建模。一种方法是将
Y(1)和Y(0)视为两个独立的高斯过程分别拟合;另一种方法是将X和T共同作为特征,拟合一个联合高斯过程模型。 - 神经网络:可以构建共享底层表示的架构。例如,网络初始层共享,用于学习协变量
X的表示,然后在后续使用不同的“头”网络来分别预测T=1和T=0时的结果。这种架构通常比简单地将X和T一并输入网络效果更好。


匹配法:一种直观的替代方案 👥
除了直接建模,还有一种直观的因果推断方法称为匹配法。其核心思想是为数据集中每个个体寻找一个“双胞胎”——即协变量 X 相似但接受了不同处理的个体,用该双胞胎的观测结果来估计反事实结果。
具体来说,假设我们有一个距离度量 d。对于个体 i,其最近邻匹配 j(i) 定义为:
j(i) = argmin_{j: t_j ≠ t_i} d(x_i, x_j)
即,寻找与 i 的协变量最接近但处理状态不同的个体。
基于此,个体 i 的条件平均处理效应估计值为:
\hat{CATE}_i = (2t_i - 1) * (Y_i - Y_{j(i)})
当 t_i=1 时,此项为 Y_i - Y_{j(i)},用 j(i) 的 Y(0) 来估计 i 的反事实;当 t_i=0 时,则相反。
整个数据集的平均处理效应估计即为所有个体 \hat{CATE}_i 的平均值。
匹配法有其吸引力:
- 可解释性:结论基于具体的相似个体对比,便于领域专家审查。
- 非参数性:不依赖于对结果模型的具体参数形式假设。
但匹配法也面临挑战:
- 依赖距离度量:距离函数的好坏直接影响估计质量。
- 高维数据:在高维协变量空间中难以找到真正接近的邻居。
- 有限样本偏差:在样本量有限时,最近邻估计可能是有偏的。
有趣的是,匹配法可以看作是协变量调整的一个特例,其中函数族 f 被指定为最近邻分类器。在满足一定条件下,当数据量趋于无穷时,匹配法也能给出渐近无偏的估计。
倾向评分法:模拟随机试验 ⚖️

现在,我们转向第二种核心方法——倾向评分法。其基本思想是通过对观测数据进行重新加权,使其在处理组和对照组之间的协变量分布看起来平衡,从而模拟随机对照试验的环境。
倾向评分定义为给定协变量 X 时,个体接受处理 T=1 的条件概率:
e(x) = P(T=1 | X=x)
我们可以使用逻辑回归等机器学习方法来估计倾向评分 \hat{e}(x)。需要注意的是,该方法要求模型能输出校准良好的概率估计。

获得倾向评分后,平均处理效应的估计量(逆概率加权估计量)为:
\hat{ATE} = 1/N * Σ_{i=1}^N [ (t_i * Y_i) / \hat{e}(x_i) - ((1-t_i) * Y_i) / (1 - \hat{e}(x_i)) ]
直觉理解:如果一个个体协变量 X 使其接受处理 T=1 的概率很低(e(x) 小),但事实上他/她确实接受了处理,那么这个样本在数据中就很“稀有”。逆概率加权 (1/e(x)) 会赋予这个样本更大的权重,以抵消这种选择偏差,使得加权后的处理组协变量分布与全样本分布一致。对照组同理。
在随机对照试验的特殊情况下,e(x) = 0.5,该估计量简化为处理组均值与对照组均值之差,与我们熟知的RCT估计量一致。
倾向评分法的优点在于它不需要对结果模型 Y 进行建模,避免了因错误指定结果模型而带来的偏差。但其缺点是对倾向评分估计的准确性非常敏感,特别是在缺乏重叠的区域(即 e(x) 接近0或1),会导致权重极大,估计方差很高。常用的启发式方法是“裁剪”,即设定倾向得分的上下限(如[0.05, 0.95]),但这可能引入偏差。
总结与对比 🎯
本节课我们一起学习了两种从观测数据中进行因果推断的主要方法。

- 协变量调整法:直接对结果
Y进行建模。其有效性严重依赖于对潜在结果模型形式的正确设定。使用灵活的机器学习模型(如神经网络、高斯过程)可以减轻模型误设的风险。 - 倾向评分法:对处理分配机制
T进行建模,并通过逆概率加权来调整数据分布。其有效性依赖于倾向评分估计的准确性和重叠假设的满足程度。
两种方法都需要基于上节课的核心假设:无未观测混淆、因果图正确以及重叠性。缺乏重叠对两种方法都是严峻挑战:对协变量调整而言,它导致某些区域无法估计;对倾向评分而言,它导致极端权重和高方差。


在实践中,还存在结合两者优点的“双稳健估计量”,只要倾向评分模型或结果模型其中之一设定正确,就能得到一致估计,这提供了额外的稳健性。



理解这些方法的原理、假设和局限,是应用因果推断解决实际医学或社会科学问题的关键第一步。



课程 P16:强化学习(第一部分)🎮
在本节课中,我们将学习强化学习的基本概念,特别是如何将其应用于顺序决策问题,例如医疗环境中的患者管理。我们将从回顾上周的因果推理内容开始,逐步过渡到更复杂的、涉及多个时间步骤的决策过程。
概述 📋
上周我们讨论了因果推理,专注于单一步骤的治疗选择。我们知道,许多医学决策涉及跨时间的多个顺序决定。这将是本周讨论的焦点。本次讲座将介绍强化学习的基础,这是一种用于解决顺序决策问题的方法。
从因果推理到顺序决策 🔄
上一节我们介绍了因果推理,本节中我们来看看如何将其扩展到顺序决策。
我们之前介绍了四个量:两个潜在结果(代表在不同治疗选择下的结果)、一组协变量 X 和治疗 T。我们感兴趣的是给定协变量 X 时,治疗 T 对结果 Y 的影响,即条件平均处理效应(CATE)。
我们上周尝试用各种方法识别这个量。然而,一个问题没有过多出现,那就是我们如何使用这个量。我们可能只对其绝对规模感兴趣,但也可能有兴趣设计一个治疗患者的策略。今天我们将重点讨论策略,特别是根据我们对患者的了解,输出选择或操作。
一个很自然的策略是说:如果效果是积极的,我们就治疗患者;如果效果是负面的,我们就不治疗。当然,积极与否是相对于结果的有用性而言的。然而,我们也可以考虑更复杂的策略,例如考虑立法、药物成本或副作用。我们今天不打算深入讨论这些,但在思考时可以记住这一点。

顺序决策示例:败血症管理 🏥

大卫提到,我们现在应该从单一治疗的单步设置转向顺序设置。我的第一个例子是败血症管理。

败血症是感染的并发症,可能产生灾难性后果,导致器官衰竭并最终死亡。它是重症监护室死亡的主要原因之一。因此,能够管理和治疗这种情况非常重要。
治疗败血症时,主要目标是修复感染本身。如果不治疗感染,情况会继续恶化。但即使找到了正确的抗生素,感染性休克或炎症的来源也需要管理很多不同的情况,例如发烧、呼吸困难、低血压、高心率等。这些都是症状,不是根源,但我们仍需管理它们,以确保患者存活和舒适。
当我说败血症管理时,我指的是随着时间的推移管理这些指标。患者在医院里,我们上次讨论过潜在结果和单一治疗选择。我们可以在败血症环境中考虑这一点:一个病人进来,或者已经在医院,可能出现呼吸困难,这意味着他们的血氧很低。我们可能想让他们接受机械通气,以确保获得足够的氧气。这可以看作是一个单一的选择:是否给病人用机械通气。
但我们需要考虑的是,在我们做出选择后会发生什么,这个选择会带来什么进一步的副作用。因为我们希望确保患者在住院期间舒适健康。今天我们将转向顺序决策,特别是早期选择的性质可能排除以后的某些选择。我们将很快看到一个例子。
我们会有兴趣提出一个反复做决定的策略,以优化我们关心的结果,例如将死亡风险降至最低,或者确保患者的生命体征在正确的范围内。本质上,现在可以想象为:在任何时候都有给予药物或干预的选择,并且存在这样做的最佳策略。
顺序决策的级联效应 ⛓️
在脓毒症患者的管理中,一个潜在的选择是让他们接受机械通气,因为他们不能自己呼吸。这样做的副作用是,他们可能会因为插管而感到不适。因此,你可能需要给病人镇静。这是一种由前一个动作触发的动作:如果我们不给病人进行机械通气,也许我们就不会考虑给他们镇静。
当我们给病人打镇静剂时,我们冒着降低他们血压的风险。因此,我们可能也需要管理这一点:如果他们的血压太低,也许我们需要给血管升压剂或液体来提高血压。这可以看作是一个选择的例子,其后果是级联的。
随着时间的推移,我们将面临患者住院期的结束,希望我们成功地管理了患者,结果是好的。我在这里说明的是,对于我们医院或医疗保健系统中的任何一个病人,我们只观察一个轨迹。决策空间的范围本质上非常大。在重症监护室,我们做出的决定数量通常比在随机试验中测试的要多得多。
将所有不同的轨迹想象成随机对照试验中不同的“臂”。进行这样的试验是不可行的。因此,我们今天谈论强化学习的一个重要原因是:学习策略,而不是因果效应。在顺序设置中,可能的行动轨迹空间太大了。

话虽如此,我们现在试图找到本质上导致好结果的策略(例如,选择橙色路径)。我们还需要推理什么是好的结果,对我们代理(例如,医生或算法)的好奖励是什么。我们作为机器学习者产生的策略可能不适合医疗保健环境,我们必须以某种方式将自己限制在现实的事情上。我今天不会太关注这个问题,它将在明天的讨论中提出,以及评估用于医疗保健系统的东西的概念。

强化学习的成功案例 🏆

我将首先简短地提及一些成功的故事。这些不是来自医疗保健环境,而是来自各种电子游戏。这些都是很好的例子,说明当强化学习起作用时,计算机程序最终可以击败人类冠军,例如在围棋或星际争霸中。

但有一件事我想让你记住:在整个演讲中,这些场景与医疗保健环境有很大的不同。我们稍后再讨论这个问题。
强化学习的基本框架 🧩
从广义上讲,这些成功案例可以概括在下面的框架中。强化学习的三个重要量是:
- 环境的状态:游戏的状态、病人的状态、我们想要优化的东西的状态。
- 动作:玩家或代理可以采取的行动。
- 奖励:推动学习本身的回报或结果。
例如,在井字游戏中,状态表示圆和十字的当前位置。我的工作是选择一个可能的行动(一个自由的方块)来放置我的十字。每一个选择都将带领我进入游戏的新状态。我们有一个轨迹或状态的转变。我们努力优化某件事的回报或结果。如果我采取了一个糟糕的行动,导致输掉游戏,我的奖励就是负的。强化学习的基本思路是从未来中学习,避免以糟糕的状态结束。


如果我们把这个类比转移到医疗保健环境,我们可以把病人的状态想象成游戏板,我们开出的治疗处方或干预措施就像是游戏中的动作,病人的结果(例如死亡率或生命体征)就像是游戏中输了或赢了的奖励。
医疗保健不是游戏,但它们有很多共同的数学结构。这就是为什么我在这里做类比。这些量(状态 S、动作 A 和奖励 R)会形成一个叫做决策过程的东西,这就是我们接下来要讨论的。
马尔可夫决策过程(MDP) 📈


决策过程本质上是描述我们访问的数据的世界,或者我们管理代理的世界。通常有一个代理的概念(例如医生),随着时间的推移反复采取行动。时间索引 T 表示时间的索引。代理在时间 t 采取行动 A_t,并在任何时候获得该行动的奖励 R_t。
环境是提供奖励的原因。例如,如果我是医生(代理),我对我的病人采取行动,病人就是环境,回应我的干预。状态 S_t 是病人的状态,但也可能更广泛,包括机器设置、药物可用性等。状态可能是部分观察到的,我可能并不真正了解与我相关的病人的一切。
有两种不同的形式化:当你知道关于状态 S 的一切时(完全可观察),以及当你不完全知道时(部分可观察)。在本次讲座的大部分时间里,我们将专注于完全可观察的情况。

MDP 的具体示例:机械通气

回到我之前给你看的例子:强制机械通气。在这种情况下,他们有一个有趣的奖励结构:他们试图优化的东西是与病人生命体征有关的奖励,以及他们是否保持机械通气。这篇论文的想法是,你不想让病人不必要地接受机械通气,因为它有副作用。
在任何时间点,我们可以考虑给病人开关呼吸机,也处理给他们开的镇静剂。在这个例子中,他们考虑的状态包括病人的人口统计信息(不随时间改变)、生理测量、呼吸机设置、意识水平、镇静剂剂量等。动作包括给病人插管或拔管,以及给药和镇静剂。
这又是一个决策过程的例子。这个过程是这些量(状态、动作、奖励)随时间的分布。

行为策略与目标策略
我们观察到的东西通常被称为行为策略(用 μ 表示)。如果我们去医院看看现在发生了什么,这将是行为策略。这就是我们要学习的。
到目前为止,决策过程非常普遍。但当人们研究顺序过程时,他们所做的一个主要限制是看一个马尔可夫决策过程。它们有一个特定的条件独立结构,我将在下一张幻灯片中演示。
马尔可夫假设本质上说:我们关心的所有量(下一个状态、奖励)仅取决于当前状态和动作,而不依赖于更早的历史。数学上,这意味着:
P(S_{t+1}, R_{t+1} | S_t, A_t, History_{<t}) = P(S_{t+1}, R_{t+1} | S_t, A_t)
这是一个很强的假设。确保马尔可夫假设更有可能的方法是在你的状态中包含更多的东西,包括历史摘要等。
对决策过程的更强限制是假设状态本身随时间独立。这有时被称为上下文强盗。但本质上,如果我们假设状态是独立同分布的,那么我们就回到了上周的内容:针对不同病人的模型,每个时间步骤的动作不依赖于历史。这表明上周的内容是本周的一个特例。它还暗示了强化学习问题比潜在结果问题更复杂。
我们上周做的因果效应估计,只对几个变量的影响感兴趣(单一治疗选择)。在这种情况下,我们将研究我们在前进的道路上采取的这些不同行动的影响。目标可以是即时奖励的即时影响,也可以是一个动作对状态轨迹本身的影响。
强化学习的目标 🎯
我告诉了你我们现在生活的世界(有状态 S、动作 A 和奖励 R),但我还没有告诉你我们试图解决的目标。大多数强化学习的目标是找到一个有良好回报的策略。我们将在这节课中使用的概念是回报和价值。
- 回报
G_t:从时间t开始,遵循策略π所看到的未来奖励的总和。 - 价值
V^π(s):从状态s开始,遵循策略π的预期回报。 - 策略的价值
V^π:对人口中所有病人的预期回报的平均值。
作为一个例子,我们可以想到三个不同的病人,他们从不同的状态开始,根据同样的策略 π 被治疗。因为他们在不同的状态,他们会在不同的时间有不同的动作。在每一个动作之后,我们得到了奖励,最后我们可以总结这些奖励,那就是我们的回报。每个病人对自己的轨迹都有一个值。策略的价值就是这些轨迹的平均值。
这就是我们试图优化的:我们想找到一个策略 π,使 V^π 最大化。
示例:网格世界机器人
这里有一个例子:房间里的机器人。这个世界的规则是:如果你告诉机器人向上,他有 1/8 的概率上升,以均匀的概率去其他地方。奖励是:在绿色盒子里加一,在红色盒子里减一。这些是终止状态。机器人每走一步就会得到负 0.04 的奖励。所以你想提高效率:你想去绿色的盒子,但也想快点做。
我想让你做的是找出什么是最好的策略:在这些不同的方框中,箭头应该以何种方式指向?我们知道转换是随机的,所以你可能需要考虑到这一点。但本质上要弄清楚如何有一个策略给我最大的预期回报。

(经过讨论和观众参与,我们得到了一个接近最优的策略,其核心思想是尽可能远离红色盒子,并高效地走向绿色盒子。)


如何学习策略?🤖
我们有一个策略的例子,我们有一个决策过程的例子。但是我们怎么做?就班级而言,这是一个黑盒实验。强化学习就是试着想出一个策略,以一种严格的方式。

强化学习有三种非常常见的范式,根据它们专注于建模的内容来划分:
- 基于模型的RL:专注于为环境创建一个模型,特别是状态转移模型。
- 基于价值的RL:专注于估计回报或价值函数。
- 基于策略的RL:专注于直接建模和优化策略。

我们今天将专注于基于价值的RL。基于价值的RL最主要的实例是 Q学习。Q学习是动态规划的一个例子。一般的想法是递归的:你知道什么是好的终止状态,然后你想知道如何到达那里,以及如何到达之前的状态等等。
Q学习与动态规划
Q学习试图估计 Q函数 Q^π(s, a),它代表从状态 s 开始并采取动作 a,之后遵循策略 π 的预期回报。Q学习与确定性策略有关:如果我们有一个Q函数,最优策略 π* 是在每个状态选择具有最高Q值的动作:
π*(s) = argmax_a Q^π(s, a)
最好的Q函数称为 Q*,它满足贝尔曼最优性方程:
Q*(s, a) = R(s, a) + γ * max_{a'} Q*(s', a')
其中 s' 是采取动作 a 后到达的下一个状态,γ 是折扣因子(通常小于1,表示未来奖励的现值较低)。
这个方程说:最优状态-动作值等于立即奖励加上下一个状态的最大Q值的折扣值。
问题是我们如何找到 Q*?Q学习的一个好处是,当状态和动作空间是小而离散的,您可以将Q函数表示为一张表。Q学习对离散状态的作用是从某个地方开始(例如,Q值全为零),然后重复以下的不动点迭代更新:
Q(s, a) ← Q(s, a) + α * [R(s, a) + γ * max_{a'} Q(s', a') - Q(s, a)]
其中 α 是学习率。
我们通过一个网格世界的具体例子,演示了Q值如何从终止状态(+1)开始,通过迭代更新,逐渐传播到整个状态空间,从而学习到最优策略。
函数近似
如果我有成千上万的状态和成千上万的行动呢?那是一张大桌子,不仅在内存上不好,统计上也不好。如果我们想观察任何关于状态-动作对的事情,我必须在那种状态下做那个动作。在医院治疗病人时,你不会在每个状态都尝试一切,通常你也不会有无限多的病人。
这就是函数近似的作用。如果你不能将数据表示为表,你可能想用参数函数近似Q函数。这正是我们能做的。我们可以类比上周所做的回归。
拟合Q学习的理念是,用函数近似代替表格表示。我们试图寻找一个函数 Q_θ,使得以下损失最小:
L(θ) = E[(R + γ * max_{a'} Q_θ(s', a') - Q_θ(s, a))^2]
这类似于一个回归问题,其中目标值是 R + γ * max_{a'} Q_θ(s', a')。

但这里有一个问题:这个目标值 Q_θ 本身也是我们估计的。所以通常情况下,我们在更新目标Q和当前Q之间交替。但我还没有告诉你如何评估这个期望(即如何获得数据 (s, a, r, s') 元组)。

离线策略学习与评估 📊
在强化学习中,有几种不同的方法可以获得数据:
- 在线探索:你按照当前的策略与环境交互(例如,玩电子游戏)。在医疗保健中,这相当于尝试你目前的治疗想法,看看会发生什么。这可能有问题,尤其是如果你的策略一开始就很差。
- 随机试验:你在一个人群上随机化动作。在顺序设置中,这需要随机化一系列动作,与你以前看到的临床试验不同。
- 离线策略学习/评估:你观察来自医疗保健系统的历史数据(例如,电子健康记录),其中患者已经被某种行为策略
μ治疗过。你试图根据这些信息提取一个好的策略π。这就是我们接下来要关注的。
当我们从离线策略数据中学习时,我们必须小心。这与上周的混淆问题是一样的。我们观察到的轨迹根据创造它们的临床医生的策略而有偏差,我们想弄清楚不同策略的价值。
和上次一样,我们需要做出类似的假设,但更强:
- 顺序忽略性:在轨迹的任何一点,给定到该点为止观察到的历史(状态和动作),当前的动作与潜在的未来回报无关。这比马尔可夫假设要弱,因为它允许依赖整个历史,但要求我们观察历史上所有的混杂因素。
- 正性:在轨迹的任何一点上,任何行动都应该是可能的,以便我们估计任何可能策略的价值。我们知道这不会是真的。在实践中,我们不会在每一个可能的点上考虑每一个可能的行动。这告诉我们,我们不能估计每一份可能策略的价值,只能估计与数据支持一致的策略的价值(即,那些在数据中至少以某种概率出现过的行动序列)。
回顾与挑战 🧐
最后,回顾一下潜在结果的故事。这是一步决定的想法:病人安娜进来了,我们有治疗A或B的选择,我们想知道在她的特征 X 下,哪个治疗会导致更好的结果 Y。忽略性假设说,给定 X,潜在结果 Y(0), Y(1) 独立于治疗 T。
如果我们再加一个时间点,事情就变得更复杂。如果行动影响未来的状态,或者未来的状态影响未来的奖励,我们就有了一个顺序决策过程。顺序忽略性假设要求我们能够充分地总结历史 H_t,使得给定 H_t,当前动作与未来回报独立。
问题是历史 H_t 通常是一件很大的事情。我们如何表示它?我们可以看一个固定长度的窗口,或者尝试学习一个摘要函数。但这是无法避免的。未观察到的混淆也是一个问题,就像在一步设置中一样,但在顺序设置中,混杂结构可能更复杂。
我们之前看过的游戏(围棋、星际争霸)成功的一个重要原因是完全可观察性和几乎无限的探索。在这些设置中,我们可以通过模拟和自玩来无限探索动态。但在医疗保健中,我们只有有限的病人样本,目前的算法对数据效率要求很高。此外,在现实世界的应用程序中,我们通常有测量误差和噪声。
总结 📝

本节课中我们一起学习了:
- 如何将因果推理从单步决策扩展到顺序决策。
- 强化学习的基本框架:状态、动作、奖励、回报和价值。
- 马尔可夫决策过程(MDP)及其假设。
- 基于价值的强化学习,特别是Q学习和动态规划的思想。
- 如何使用函数近似来处理大的状态-动作空间。
- 离线策略学习的挑战,包括顺序忽略性和正性假设。
- 将强化学习应用于医疗保健等现实世界问题时的关键差异和困难(如部分可观察性、有限数据、测量噪声)。


强化学习为顺序决策问题提供了强大的框架,但在将其应用于像医疗保健这样的高风险领域时,需要格外小心数据的局限性、假设的有效性以及评估的严谨性。在接下来的课程中,我们将更深入地讨论这些实际挑战。


强化学习课程 P17:因果推断与动态治疗策略评估 🧠
在本节课中,我们将继续探讨强化学习的主题,并深入讨论因果推断在动态治疗策略评估中的应用。我们将学习如何评估策略的价值,并介绍G方法在处理治疗混杂反馈时的应用。
强化学习目标回顾 🎯
上一节我们介绍了强化学习的基本目标,即优化期望奖励。本节中,我们来看看这一目标的具体含义及其潜在问题。
强化学习的目标是优化期望奖励,即找到最优策略π*:
[
\pi^* = \arg\max_{\pi} V(\pi)
]
其中,( V(\pi) ) 是策略π的值,定义为期望奖励的总和:
[
V(\pi) = \mathbb{E}\left[ \sum_{t} R_t \right]
]
这里的期望考虑了环境随机性和策略随机性。奖励函数可以在每个时间点定义,也可以仅在最后一步定义。
然而,仅优化期望奖励可能存在问题。例如,如果奖励代表病人的生死,我们可能不仅关心平均奖励,还希望避免高方差或最坏情况的发生。因此,在实际应用中,可能需要考虑其他优化标准,如最坏情况奖励或奖励的分位数。
策略评估方法 🔍
在强化学习中,我们学习了策略迭代和Q学习。现在,我们来看看如何评估策略的价值。
一种评估策略价值的方法是计算 ( V(\pi) ) 的估计值 ( \hat{V}(\pi) )。在Q学习中,可以通过初始状态下的最大Q值来估计:
[
\hat{V}(\pi) = \max_a Q(s_0, a)
]
这种方法依赖于Q函数的准确性。然而,在因果推断场景中,我们可能需要不同的评估方法。
因果推断中的策略评估 📊
在因果推断中,我们通常关注平均治疗效果(ATE)或条件平均治疗效果(CATE)。本节中,我们将探讨如何在因果推断框架下评估策略。
假设我们通过协变量调整方法估计条件平均治疗效果 ( \hat{\tau}(x) ),并基于此构建策略π(x):
[
\pi(x) = \begin{cases}
1 & \text{if } \hat{\tau}(x) > 0 \
0 & \text{otherwise}
\end{cases}
]
策略π的价值可以通过以下公式估计:
[
\hat{V}(\pi) = \frac{1}{n} \sum_{i=1}^n \left[ \pi(x_i) \cdot \hat{f}(x_i, 1) + (1 - \pi(x_i)) \cdot \hat{f}(x_i, 0) \right]
]
其中,( \hat{f}(x, a) ) 是对潜在结果的估计。
然而,这种方法依赖于对潜在结果的准确估计。另一种方法是使用逆倾向加权(IPW)估计器,直接评估策略价值而不估计潜在结果。
逆倾向加权估计器 ⚖️
逆倾向加权估计器提供了一种不依赖潜在结果估计的策略评估方法。以下是其具体形式:
[
\hat{V}{\text{IW}}(\pi) = \frac{1}{n} \sum^n \frac{\mathbb{I}(A_i = \pi(x_i)) \cdot Y_i}{P(A_i | x_i)}
]

其中,( \mathbb{I}(\cdot) ) 是指示函数,( P(A_i | x_i) ) 是倾向得分。

这种方法的优点在于它绕过了对潜在结果的估计,但需要准确的倾向得分。在随机对照试验中,倾向得分通常是已知的;在观测数据中,则需要通过逻辑回归等方法估计。

然而,逆倾向加权估计器可能面临方差过大的问题,特别是当倾向得分很小时。为了解决这个问题,可以采用剪裁倾向得分或使用双鲁棒估计器。
动态治疗策略评估 🏥


在临床环境中,动态治疗策略根据患者随时间变化的特征调整治疗。本节中,我们将介绍G方法在评估动态治疗策略中的应用。
动态治疗策略的评估面临治疗混杂反馈的挑战。当时间依赖性混杂因素受先前治疗影响时,传统统计方法可能导致选择偏差。G方法(如参数G公式、G估计和逆概率加权)专门设计用于处理这种情况。

以下是参数G公式的基本步骤:
- 拟合参数回归模型,包括治疗、混杂因素和结果变量。
- 使用蒙特卡洛模拟,生成在指定策略下的数据副本。
- 估计每种策略下的累积风险。


参数G公式允许我们在治疗混杂反馈存在的情况下,估计动态治疗策略的效果。

实例分析:前列腺癌患者的体育活动干预 🏃♂️

为了具体说明G方法的应用,我们以一项前列腺癌患者的体育活动干预研究为例。该研究旨在评估遵循指南的体育活动对患者生存的影响。
研究使用参数G公式分析观测数据,并模拟了六种不同的体育活动策略。结果显示,遵循指南的体育活动可以显著降低死亡风险。此外,研究还进行了敏感性分析,以评估未测量混杂因素的影响。

通过阴性结果控制分析,研究发现体育活动对问卷无反应几乎没有影响,这支持了体育活动对生存的因果效应。
总结与展望 🌟
本节课中,我们一起学习了强化学习中的策略评估方法,以及因果推断在动态治疗策略评估中的应用。我们介绍了逆倾向加权估计器和G方法,并通过实例分析了前列腺癌患者的体育活动干预。

这些方法为我们提供了强大的工具,用于评估和优化动态治疗策略。然而,仍有许多未探索的方向,例如如何结合领域知识进行敏感性分析,以及如何进一步优化策略以适应个体特征。


希望本节课的内容能帮助你更好地理解强化学习与因果推断在临床决策中的应用。


课程 P18:疾病进展建模 🏥
在本节课中,我们将学习如何对疾病进展进行建模。我们将探讨两种核心方法:一种是用于预测未来疾病状态的监督学习方法,另一种是用于发现疾病亚型的无监督学习方法。课程内容将涵盖这些方法的基本概念、应用实例以及各自的局限性。
概述:我们想要回答的问题 🤔


在研究疾病进展模型时,我们通常希望回答三类问题:
- 预后问题:预测特定患者未来的疾病状态。
- 描述性问题:理解疾病在人群中的典型发展轨迹。
- 疾病亚分型问题:识别患者群体中具有不同疾病特征或进展模式的亚组。
想象一个患者的疾病轨迹图:X轴是时间,Y轴是疾病负担(如症状严重程度)。患者可能经历诊断、治疗、复发等阶段。我们的目标就是量化、预测和理解这些轨迹。


第一部分:预后与监督学习 📈
上一节我们概述了疾病建模的目标,本节中我们来看看如何利用基线信息预测患者的未来状况。

预后问题本质上是一个监督机器学习问题。我们拥有患者在基线(时间零点)时的特征数据(记为向量 X),目标是预测其在未来多个时间点(如6、12、18个月后)的疾病状态(记为 Y_t)。
面临的挑战与多任务学习
直接为每个未来时间点训练独立的预测模型会面临数据稀疏、标签噪声和样本量随时间减少等问题。
以下是解决此问题的一种思路:使用多任务学习方法,联合学习多个时间点的预测模型,并鼓励模型参数之间具有相似性。
核心思想公式化:
假设我们要预测 T 个时间点。我们为每个时间点 t 定义一个线性预测模型,其权重向量为 w_t。损失函数可以写为:
总损失 = Σ_t (预测Y_t的损失) + λ * Σ_{相邻t} ||w_t - w_{t+1}||^2
其中:
- 第一项是各个时间点预测误差的总和。
- 第二项是正则化项,它惩罚相邻时间点模型权重之间的差异,鼓励平滑性。
λ是控制平滑强度的超参数。
这种方法通过共享不同预测任务间的信息,能在数据有限时提升模型性能。
案例研究:阿尔茨海默病预测
一项研究使用多任务学习(具体为凸融合稀疏群套索模型)预测阿尔茨海默病患者的认知评分(如MMSE分数)。模型输入包括基线时的MRI特征、遗传信息和认知测试分数。
结果:与为每个时间点训练独立模型相比,多任务学习模型(通过正则项绑定权重)的预测性能(R²)显著提升,证明了在数据稀疏时共享跨时间信息的好处。
模型权重可视化:分析不同时间点的重要特征发现,有些特征在所有时间点都重要,而有些特征仅对预测近期或远期状态重要,这增进了我们对疾病驱动因素随时间变化的理解。
第二部分:疾病亚分型与无监督学习 🔍
上一节我们介绍了用于预测的监督方法,本节中我们来看看如何利用无监督学习发现疾病亚型。
无监督学习的目标有两个:
- 获得新知:发现数据中自然存在的患者亚组(亚型),这可能有助于理解疾病机制、指导临床试验设计或制定简洁的临床决策规则。
- 缓解过拟合:在数据稀缺的医疗场景中,先进行无监督学习提取结构,再用于监督任务,可以更好地利用有限数据,减少对噪声标签的过拟合。
我们将使用最简单的无监督算法——K均值聚类。
K均值算法步骤简述:
- 随机初始化
K个聚类中心。 - 分配步骤:将每个数据点分配到最近的聚类中心。
- 更新步骤:重新计算每个聚类中所有点的均值,作为新的聚类中心。
- 重复步骤2和3,直到分配不再变化。
案例研究:哮喘亚型发现
一项研究运用K均值聚类分析了多个哮喘患者数据集,旨在发现不同的哮喘亚型。
数据与预处理:特征包括人口统计学、肺功能测量、生物标志物等。连续特征进行Z-score标准化,分类特征进行独热编码。
聚类结果:在初级护理患者数据中,算法识别出三个主要亚型:
- 早发症状主导型:患者非常年轻,哮喘发作频繁且严重。
- 肥胖相关型:以超重女性为主,哮喘症状相对较轻。
- 炎症主导型:介于两者之间。
结果验证与推广:
- 在更严重的二级护理患者数据中重新聚类,前两个亚型再次出现,增加了亚型可靠性的信心。
- 在一个小型随机对照试验数据中,研究者根据已发现的亚型对患者分组,再分析不同治疗策略的效果。虽然整体人群的平均治疗效果为零,但在不同亚型内部,治疗反应存在显著差异。这揭示了治疗效果的异质性,即疗法可能只对特定亚型患者有效。
这个案例表明,无监督聚类可以发现具有临床意义的患者亚型,并能揭示在整体分析中被掩盖的治疗效果差异。
总结与当前方法的局限 📝
本节课我们一起学习了疾病进展建模的两种基本方法:
- 监督学习方法(多任务学习):用于利用基线数据预测患者未来的疾病轨迹。
- 无监督学习方法(K均值聚类):用于发现患者群体中潜在的疾病亚型。

然而,这些方法存在几个主要局限:
- 未区分疾病阶段与亚型:基线聚类可能混淆疾病严重程度(阶段)和真正的疾病亚型。
- 仅使用单时间点数据:忽略了纵向数据中蕴含的丰富时间动态信息。
- 假设单一变异因素:简单聚类无法刻画患者间多维度、多因素的复杂差异。
- 监督与无监督分离:能否将两者优势结合,构建更统一的模型?



在下节课(P19)中,我们将转向概率建模方法,以更自然的方式处理时间对齐、多时间点利用和多因素变异等问题,并探索结合监督与无监督学习的框架。



课程 P19:疾病进展建模 🧬
在本节课中,我们将学习如何仅利用横截面数据(即每个个体在单一时间点的观测数据)来推断疾病的发展阶段。我们将探讨其中的核心挑战、基本假设,并介绍两种不同的建模方法:基于概率图模型的方法和基于伪时间排序的方法。

从直觉开始:一维数据的排序
想象我们有一维数据,每个数据点代表一个个体,我们只在某个时间点观察他们。假设我们确切知道要观察哪个生物标志物。例如,这可能是一个抗体表达水平。
你可以将每个人沿着这条线放置。你可能会猜测,在线的一侧是疾病早期,另一侧是疾病晚期。为什么这是一个合理的猜测?
另一种猜想是什么?为什么不和你的邻居讨论一下,看看能否想出一些替代的猜想?我们的目标是:我们每个人都有一个观测值,每个人都处于疾病的某个未知阶段。我们想对个体进行分类,将其划分为疾病早期和晚期。我给出了一个如何做到这一点的猜想。另一个合理的猜测是什么?

也许区别在于他们患有相同疾病的不同亚型。但在这个例子中,我想坚持一个简单的故事。让我们假设这种疾病只有一种亚型。给定这些数据点,对病人进行分类的另一种方法是什么?也许早期疾病就在这里,当情况恶化时,这个生物标志物开始变得异常,可能向右或向左移动。

根据我们对从人体测量的常见生物标志物及其对疾病进展反应方式的了解,我认为这可能不是一个很自然的猜想,除非你有多种疾病亚型。例如,向右移动的标记对应一种疾病亚型,向左移动对应另一种疾病亚型。另一个猜测会是什么?你们可能错过了简单的一个:可能只有一个高值区域和一个低值区域。完全正确,谢谢。所以这可能是早期疾病,那可能是晚期疾病。


我们都在同一条船上。我们有一些想法,人们可能需要做出哪些假设才能在这里做任何事情。例如,我们可能不得不对连续性做出一些假设:生物标志物可能会逐渐发展,从早到晚,它可能会变得更大,也可能会变小。
如果这真的是我们之前谈到的场景,我们说过早期疾病可能在这里,晚期疾病可能发生在任何一侧。那样的话,人们可以很容易地争辩说,根据我们这里的信息,疾病阶段无法识别,因为你不知道过渡点应该在哪里。是这里吗?这里?这里?事实上,这里也出现了同样的问题:你不知道早期疾病是往这边走还是往那边走。
有什么方法可以解开这个纠缠?假设它只朝这个方向或那个方向,我们怎么才能弄清楚哪个是哪个?我们是否有其他数据?例如,他们还剩多少时间?或者仅仅是年龄?如果我们从一个非常粗略的假设开始:疾病阶段与年龄相关,并且进入研究的人群来自不同的疾病阶段。仅凭这两个假设,你就可以看看这里个体的平均年龄和那里个体的平均年龄。你会说平均年龄较大的是晚期疾病。或者,如果你知道每个数据点对应的死亡时间,你可以比较这些人的平均死亡时间。
我只是想给你一些直觉,说明这在什么情况下是可能的。

挑战升级:二维数据
如果你的数据是这样的呢?现在你有两个生物标志物,维度上升了。我们想知道哪里很早,哪里很晚,这开始变得更具挑战性。

我想让你拥有的直觉是:我们将不得不对疾病的进展做出一些假设,就像我们刚才讨论的那些。我们也必须在某种程度上走运。例如,一个幸运的方法是拥有大量的数据。如果你有海量数据,并且做一个额外的假设:你的数据存在于某个低维流形上,流形的一边是早期疾病,另一边是晚期疾病。那么你可能会从数据中发现那个流形。你可能会猜想流形是这样的(用手勾勒出的轨迹)。但为了做到这一点,你当然需要有足够的数据。
所以现在将是一个权衡:只有横截面数据可能没问题,只要你有很多数据来填满空间,真正识别那个流形。另一种可能很好的方法是:也许你没有纯粹的横截面数据,可能每个病人身上都有两三个样本。然后你可以给这些样本颜色编码。例如,绿色是病人A的第一个、第二个、第三个时间点;红色是病人B的两个时间点;蓝色是病人C的三个时间点。现在,即使数据不密集,我们无法画出曲线,但我们可以开始了解顺序了。我们仍然能够计算出流形可能看起来像这样。
我试图建立关于何时可能从横截面数据建模疾病进展的直觉。但这是一个开放的领域。今天,我会告诉你一些算法,试图建立在做疾病进展建模时的一些直觉。但它们会非常容易崩溃,当我给你的这些假设不成立时,它们就会崩溃。当你的数据是高维的时候,它们就会崩溃。当你的数据看起来像这样,你不仅仅有一个单一的亚型,而是有多个亚型时,它们就会崩溃。这是一个非常活跃的研究领域,我认为在未来几年我们可以取得很大进展。
案例研究:慢性阻塞性肺疾病(COPD)
我将从我自己工作中的一个案例研究开始,我们在慢性阻塞性肺疾病(COPD)的背景下开发了一个从横截面数据中学习的算法。
COPD是一种通常由空气污染或吸烟引起的肺部疾病。它有一个相当好的分期机制,使用肺活量测定仪测量个体在任何一个时间点的肺功能。例如,第一阶段只包括接种疫苗和必要时使用短效支气管扩张剂;第四阶段则建议吸入糖皮质激素、长期吸氧等。

这是一种被合理理解的疾病,因为有很好的分期机制。当我们想了解如何以数据驱动的方式进行疾病分期时,我们应该首先从合成数据开始,或者从治疗一种我们对其真正分期有所了解的疾病开始。这样我们就可以看看我们的算法在这些情况下会恢复什么,是否符合我们的预期。这就是为什么我们选择COPD。
在这项工作中,我们使用电子病历(EMR)中的数据,特别是病人记录的诊断代码。我们假设我们没有肺活量测定仪数据。一般的方法是建立一个疾病进展的生成模型。
在高层次上,这是一个马尔可夫模型。它指定了病人数据随时间的演变分布,根据一些表示疾病阶段和共病的隐藏变量。这些变量总是被假定为未观察到的。我们不会假设我们有很多纵向数据。挑战将是:我们能否利用一到三年的数据,并将其缝合在大量病人身上,以获得这种疾病20年进展的可能图景?

我们要做的是学习这个概率模型的参数,然后从参数中推断病人的实际疾病阶段,从而对他们进行排序,或者模拟来自这个模型的数据,看看20年的轨迹会是什么样子。


模型组件详解
这是病人在任何一个时间点的疾病进展模型。变量 s_t 表示病人在时间 t 的疾病阶段。我们有一个随机变量,用于我们对病人数据的每一次观察。注意,观察可能发生在非常不规则的时间间隔。
s_t 表示模型中的一个离散疾病阶段,可能取值从1到10,其中1表示早期,10表示晚期。这个模型要讨论的是从一个疾病阶段转换到下一个疾病阶段的概率分布。

因为阶段之间的时间间隔不均匀,我们必须有一个考虑到时间间隔的转移分布。我们使用连续时间马尔可夫过程。形式上,从时间 t-1 的阶段 i 转换到时间 t 的阶段 j 的概率,给定时间间隔 Δt,由矩阵指数给出:
P(s_t = j | s_{t-1} = i, Δt) = [exp(Q * Δt)]_{i,j}
其中 Q 是一个矩阵,给出了我们想要学习的参数。
这与典型的隐马尔可夫模型(HMM)形成对比。在典型的HMM中,转移概率通过查找表参数化。这里的故事不同,因为我们不知道时间间隔。直觉上,如果两次观察之间经过了很长时间,我们想允许一个加速的过程,你可能跳过许多阶段。直觉上,这是通过矩阵 Q 乘以 Δt 的缩放来实现的。
参数的数量实际上是状态数的平方。到目前为止有什么问题吗?这个模型的 Q 对所有病人都是一样的。你可能会想象,如果有疾病亚型,每个亚型的 Q 可能不同。
你可以预先指定要建模的阶段数。有很多方法可以尝试选择该参数。例如,你可以使用机器学习中的典型模型选择技术。类似于当一个人做主题聚类时,如果你使用非常少的主题数量,你倾向于学习一些非常粗粒度的主题;如果你用更多的主题,你往往会学到更细致入微的概念。同样的故事也会发生在这里。
那么我们知道疾病的分期吗?这在这里很关键。我假设这里的 s 变量都是隐变量。我们学习该模型的方式是通过最大似然估计,在那里我们忽略了隐藏的变量,就像你在任何EM类型算法中所做的那样。

水平切片:共病与观测
现在我要讲一个水平切片,即其中一个时间点。你会得到这个模型。这些 x 也是隐变量,我们预先指定它们来表征不同的轴,我们想通过它来了解病人的疾病进展。

例如,我们可能想了解每个疾病阶段真正独特的地方:病人的内分泌功能如何?精神状况如何?是否患肺癌?等等。我们要问的是,我们希望能够从这个模型中读出,根据这些轴线,病人通常什么时候发展成糖尿病、变得抑郁、患上肺癌等。

挑战是我们从未在数据中观察到这些数量。相反,我们所观察到的只是实验室测试结果、诊断代码或已执行的程序等,我称之为临床发现。诊断代码给你关于病人疾病状况的信息,但它们和诊断不是一回事,因为有太多的噪音和偏见。

我们要对原始数据建模的方式是使用所谓的噪声或网络。我们假设存在某种生成分布:你看到的观察(如诊断代码)很可能被观察为一个函数,表示病人是否有这些表型或合并症的可能性。概率可以由这些边缘权重来指定。
例如,糖尿病的诊断代码很可能在患者数据中观察到,如果病人真的有糖尿病。但它可能不会记录在每一次访问中。所以这将是一个噪声过程,噪声率将被边缘捕获。
学习算法的一部分是学习转移分布(如Q矩阵),另一部分是学习这种噪声分布的所有参数(即这些边缘权重)。

一个关键问题是:如果我想根据这些轴从模型中读出,但这些轴从未在数据中被明确观察到,我如何使学习算法为这些隐变量赋予意义?否则,如果我们让他们不受约束,你做了最大似然估计,就像在任何因子分析类型模型中一样,你可能会发现一些因素,但它们可能不是你关心的因素。
所以我们引入的隐变量,我们使用了一种叫做“锚定”的技术。领域专家会为每一种共病指定一个或多个锚。这些锚是我们将要推测的观察结果,只能由相应的隐藏变量产生。例如,治疗2型糖尿病的诊断代码,只从 x_1(糖尿病)有一条边。我们明确地将所有其他从共病到该诊断代码的边缘权重设为零。
我们并不预先指定这个边缘权重是多少,我们要考虑到这可能很吵,它并不总是被观察到。但我们要说,这不能用任何其他共病来解释。因此,对于每一种我们想建模的共病或表型,我们将指定少量锚。这对应于图上的一种稀疏性假设。
我们实际上通过一个迭代的过程来得出了这个锚集合。我们指定了一些隐藏变量具有锚,但也让其中一些没有锚定(自由变量)。我们运行学习算法,发现有一些表型似乎真的以病人的疾病为特征。然后为了深入挖掘,我们与领域专家合作,迭代地发现了所有我们想建模的有趣变量。

垂直切片:表型与疾病阶段的关系
现在我要告诉你这些表型与观察到的疾病阶段有何关系。我们假设,给定疾病阶段 s,这些马尔可夫链中的每一个(x_1 到 x_t)都有条件地相互独立。所以疾病阶段 s 把一切都联系在一起。
图形模型显示,中间没有边连接,比如说,糖尿病变量和抑郁症变量。假设这些条件之间的所有相关性都是由疾病阶段变量介导的。这是我们必须做出的一个关键假设。
如果我们不做那个假设,会出什么问题?如果我们有一个看起来像 x_1 和 x_2 之间有边的完整图,并且有边连接到 s 变量。在这种情况下会发生什么?如果我们不假设 x 在给定 s 时条件独立,那么实际上你甚至不需要阶段变量 s,你可以在这些 x 变量上拟合任何分布。模型可以学会简单地忽略 s 变量。这完全不是我们的目标。
通过假设这些 x 变量之间的条件独立性,它会迫使所有的相关性必须由 s 变量介导。它将消除一些否则会存在的不可识别性。这是一个微妙但非常重要的一点。


我们要参数化条件分布。首先,我假设这些 x 都是二进制的:病人要么有糖尿病,要么没有。我假设一旦你已经有了共病,那你一直都有。我还要做一个假设:疾病的后期更有可能发展成共病。从数学上把它形式化为:
P(x_t = 1 | s_t, x_{t-1} = 0) >= P(x_t = 1 | s_{t-1}, x_{t-1} = 0) 当 s_t > s_{t-1}
随着你在疾病阶段的进一步发展,你更有可能观察到这些并发症之一。这是我们在学习算法中加入的一个假设。这只是模型参数上的线性不等式,因此可以在凸优化问题中加入此约束。


学习与评估


我们使用了近4000名患者的数据集来评估,每个病人只观察了一到三年。我们观察到的是264个诊断代码在任何三个月间隔内的存在或不存在。总共有近20万个诊断代码的观察。

我们使用的学习算法是期望最大化(EM)。在E步中,我们必须做近似推理,因为这个模型不容易处理。我们使用了Gibbs采样器,并结合动态规划算法提高了马尔可夫链的混合速率。在M步中,学习连续时间马尔可夫过程的参数有解析闭形式解。
如果今天再这样做,我会考虑用变分推断来学习具有识别网络的似然下限,类似于变分自动编码器。

我们还强制了单调的阶段进展,并对共病和诊断代码之间的图进行了稀疏正则化。
学习结果
以下是一个人学到的。首先,我展示为肾病表型选择的锚变量。你会注意到几件事:权重都远小于一,这意味着观察病人的诊断代码时有噪音。你还看到许多其他的诊断代码可以被肾病共病解释,如贫血、尿路感染等,这与医学文献一致。
另一个例子是肺癌。我们为肺炎指定的只有一个锚,但学习算法自动关联了许多其他东西。
那么你如何知道基本真相?这就是学习算法正在做的。这些权重是学会的。这看起来很像你在文本语料库上进行主题建模时看到的:你会发现一个主题(类似于一个共病),以及一个词主题分布(类似于诊断代码的分布)。

人们可以用这个模型来回答几个最初的问题。第一个是:给定病人的数据,推断病人何时开始患上这些共病,以及在数据收集的三年时间范围内,病人在任何一个时间点处于疾病的什么阶段。模型可以推断病人从第一阶段开始,大约半年后过渡到COPD第二阶段。
使用这个模型可以做的另一件事是根据模型进行模拟,回答“这种疾病20年的轨迹看起来像什么”的问题。这里我展示十年的轨迹。我们扔掉了所有的诊断代码,只关心我们猜测的病人到底发生了什么(那些在训练中没有观察到的 x 变量)。
我们推测,肾脏疾病在疾病的第一阶段非常罕见,并随着从第二阶段过渡到第三、四期而缓慢增加,然后在疾病的第五和第六阶段真的变得普遍。在疾病的第六阶段,超过60%的人有肾病。
这里的时间间隔是根据模型学习到的参数,从一个阶段过渡到下一个阶段所需的平均时间来选择的。你可以看到阶段一、二、三、四之间的转换需要很长时间,而从第四阶段到第六阶段之间的转换时间很短。
对于其他共病:橙色/黄色是糖尿病,黑色是肌肉骨骼状况,红色是心血管疾病。有趣的是,学习算法得出的推论是:即使在COPD的第一阶段(轨迹的早期),也有大量心血管疾病患者。这是可以从医学文献中看到的东西。这只是一个合理性检查,表明模型对一种常见疾病的学习符合医学知识。
这就是我想说的关于基于横截面数据的疾病进展概率模型方法。

伪时间方法
接下来我想谈谈伪时间方法。这是一种非常不同的方法,试图将患者(或细胞)纳入疾病的早期和晚期阶段。这些方法在过去五年里真正普及了,由于生物界单细胞测序实验的爆炸式增长。

单细胞测序旨在理解每个细胞中表达的是什么。在一个非常高的水平上,你取一个固体组织,分离出单个细胞,提取RNA,进行条形码标记、混合、测序,然后解析每个细胞的RNA表达。
这些伪时间算法的目标是获取那种类型的数据,然后试图将细胞排列到某个轨迹上。在现实世界中,细胞随着时间的推移而进化。考虑到你有横截面数据(一组处于不同阶段的细胞),你能以某种方式将它们排列到它们处于不同分化阶段的地方吗?这就是我们想要的目标。
一旦你把细胞排列成阶段,你就可以回答一些非常有趣的科学问题。例如,你可以问各种不同的基因在哪些时间点表达。你可以看到基因A在细胞分化的早期表达非常高,在最后表达不多。这可能会给你新的生物学见解。
这些方法可以立即应用于疾病进展模型。把每个细胞想象成现在的病人,观察数据是该细胞的基因表达。在我们的医疗数据中,观察可能是症状。目标是给出这些横截面观察来对它们进行分类。一旦你进行了排序,你就可以回答科学问题。
有许多不同的方法来解决这个问题。本月早些时候刚刚发表的一篇论文比较了这些不同的轨迹推断方法。这些算法所做的一些假设包括:是否存在多个断开的轨迹(对应不同亚型)?轨迹的拓扑结构是线性的、分叉的,还是循环的?
在临床环境中,分叉可能意味着病人在疾病早期看起来一样,但突然发生了一些事情,导致一些病人往这边走,有些病人走那条路。例如,也许这些病人得到了治疗A,那些病人得到了治疗B。我们甚至可能没有关于病人接受了什么治疗的好数据。那么您可能希望能够直接从数据中发现分叉,然后回到数据的原始来源,找出在这个时间点上是什么区分了这些病人。


方法一:最小生成树(Monocle)
我选择两种方法作为代表性例子。第一种是基于构建最小生成树的方法,例如2014年发表的Monocle算法。
该算法的工作方式如下:
- 降维:从横截面数据开始。第一步是进行降维(如主成分分析PCA或独立分量分析ICA)。本文采用独立分量分析。
- 构建图:在低维空间(通常是二维)中表示所有数据点(细胞)。在每对节点之间绘制一条边,边的权重是两点之间的欧几里得距离。
- 最小生成树:找到该加权图的最小生成树(连接所有节点的树,且总边权重最小)。
- 寻找最长路径:在那棵树上寻找最长的路径。在树上找到最长路径是容易的(不是NP难)。路径的一侧对应于早期阶段,另一侧对应于晚期阶段。该方法可以处理分叉。
- 确定起点/终点:你需要某种方法来区分起点和终点。一些附带信息(如已知的早期/晚期标记)可能变得有用。
这是一个概念上非常简单的方法。
方法二:高斯过程(GP)

接下来我想谈谈一种不同的方法,它试图回到我们之前在讲座中使用的概率方法。这种新方法基于高斯过程。


高斯过程(GP)是函数的分布。对于任何有限的时间点集合 {t_1, ..., t_n},函数在这些点的值 [f(t_1), ..., f(t_n)] 的联合


课程 P2:临床护理概述 🏥


在本节课中,我们将学习临床护理的基本概念、目标、实践过程以及医疗保健系统面临的挑战。我们将从历史视角出发,探讨医疗保健如何从传统治疗发展到现代高科技医学,并理解衡量健康、生活质量以及医疗成本的核心问题。

医疗保健的目标与演变
医疗保健的目标是维持和改善人们的健康。为了理解这个目标,我们首先需要看看医学实践是如何演变的。

很久以前,人们就开始探讨疾病的成因和治疗方法。由于缺乏现代科学方法,早期理论可能显得简单。例如,萨满会利用对药用植物的知识和护理经验来治疗病人。这是一种有效的医疗保健形式,尽管没有太多书面记录。在现代,医生与治疗者之间的互动仍然被认为是医学实践的重要组成部分。
未来学家和医生们强调,治疗师的角色不仅仅是做出正确诊断,还包括说服病人信任并遵循建议。安慰剂效应表明,积极的心态对康复有积极作用。

现代医学则呈现出高科技的一面,例如重症监护室(ICU),病人被各种设备和监控仪器包围,以维持生命。这被认为是当代临床护理的版本。

什么是健康?🤔

如果医学的目标是让人保持健康,那么首先需要定义“健康”。世界卫生组织(WHO)提供了一个全面的定义:健康是身体、精神和社会福祉的完满状态,而不仅仅是没有疾病或虚弱。

这个定义可以进一步分类为:
- 身体健康
- 心理健康
- 社会健康
其中,社会健康尤其难以衡量。


衡量健康最直接的指标之一是预期寿命。数据显示,从1800年至今,全球预期寿命有了显著增长。例如,在1800年的印度,预期寿命约为25岁,而在当时的欧洲富裕国家约为40岁。到1950年,挪威的预期寿命达到70多岁,美国为60多岁。如今,许多国家的预期寿命已大幅提高。
然而,不同地区和人群之间存在显著差异。例如,在美国,白人和黑人之间的预期寿命存在差距,这种差距可能与社会经济或医疗条件有关。
人们如何死亡?💀

了解主要的死亡原因有助于明确医疗保健的重点。在美国2014年的数据中(近年变化不大),主要死因包括:
- 约四分之一死于心脏病。
- 约五分之一死于癌症。
- 其他原因包括慢性下呼吸道疾病、事故、糖尿病、流感及肺炎、肾病、自杀等。
值得注意的是,这些死因大多是慢性、非传染性疾病。这与1850年时许多人死于感染的情况形成了鲜明对比。随着预期寿命延长,人们更多地受到慢性病的困扰。
生活质量与衡量 🧓
除了生存,生活质量同样重要。一个常用的评估模型是计算生命的总价值,公式可以表示为:

生命价值 = ∫(从时间0到死亡时间 T)[生活质量函数 Q(t) × 折现因子 D(t)] dt

其中:
Q(t)衡量在时间t的生活质量。D(t)是折现因子,反映人们对未来健康结果的偏好(通常更看重当下的健康)。
如何衡量生活质量呢?常用的一种方法是评估日常生活活动能力,例如:
- 能否洗澡、穿衣、如厕。
- 能否行走、上下床。
- 能否自己进食、管理财务等。
这些指标常用于评估老年人的生活自理能力。

我们可以用几条曲线来描述人群的健康状态:
- 生存曲线:显示一段时间后还有多少人存活。
- 发病率曲线:显示存活的人中有多少人没有慢性病困扰。
- 残疾曲线:显示有多少人无法自理,需要辅助生活。


理想的医疗目标不仅是延长寿命(将生存曲线右移),更是压缩发病率(让发病率曲线更接近生存曲线),即让人们健康地活得更久,而不是在残疾或病痛中延长生命。

医疗实践的传统任务 🩺
传统的医疗实践围绕三个核心任务展开:
- 诊断:确定病人患有什么疾病。
- 预后:预测疾病可能的发展过程和结果。
- 治疗:采取干预措施来改善预后。

这个过程通常是循环的:
- 病人陈述病情(主诉)。
- 医生进行检查,生成数据(如观察、测量)。
- 解释数据,形成初步诊断假设。
- 基于诊断制定治疗计划。
- 实施治疗。
- 观察结果,收集新数据。
- 根据反馈重新评估诊断和治疗计划,进入下一个循环。

这个循环的速度因病情的紧急程度而异,可能是几小时(住院),也可能是几个月(慢性病管理)。这种持续观察和调整的过程是医疗护理的关键特征。
学习型医疗保健系统 🔄
医疗保健不仅发生在单个病人身上,整个系统也在学习和改进。这涉及多个层面:
- 个体护理循环:如上所述,针对单个病人的诊断-治疗循环。
- 健康管理循环:病人出院后在社区中的健康管理和可能的再入院循环。
- 系统改进循环:观察整个医疗系统的运行,分析数据,建模,计划改进措施,实施干预,并评估效果,从而使系统变得更好。
这就是“学习型医疗保健系统”的理念:将科学进步和信息学知识,作为护理过程中持续产生的副产品,无缝地用于完善和交付最佳实践。


然而,实现这一点面临挑战。传统的“金标准”是随机对照试验,通过随机分配病人到不同治疗组来比较效果。但在真实世界的临床实践中,治疗选择不是随机的,而是基于医生判断,这导致了数据偏差。因此,我们需要强大的技术基础设施来捕获和分析真实世界的大数据。
公共卫生与疾病分类 🦠

医疗保健的另一重要方面是预防疾病和促进公共健康。这包括追踪疾病流行情况、控制感染、隔离患者等。
对疾病进行统一分类是公共卫生工作的基础。国际疾病分类(ICD)系统由世界卫生组织维护,用于统计死因和进行流行病学研究。历史上,约翰·斯诺医生通过绘制伦敦霍乱死亡地图,发现疫情与一个受污染的水泵有关,这是早期流行病学的经典案例。

隔离是控制传染病的传统手段,但需谨慎使用,因为它涉及复杂的伦理、人权和后勤问题(如废物处理)。


医疗保健的费用 💸

医疗费用是医疗系统面临的核心挑战之一。人们对健康有近乎无限的需求,而医疗技术的进步(如昂贵的影像设备、新药)又推高了成本。

数据显示,美国的医疗保健支出占GDP的比例远高于其他发达国家,但其在预期寿命等方面的健康产出却并非最高,这表明可能存在效率问题或浪费。
为了控制成本,曾尝试过多种方法,如管理式医疗(通过审核减少不必要的服务)、按人头付费(给医生或医院固定年度费用来管理病人健康,激励其控制成本而非增加服务)等。但这些方法也带来了新的问题,如可能激励医生减少必要服务。

近年来,政策试图将支付与医疗质量挂钩,例如减少对出院后短期内再入院医院的报销,以激励更好的出院后护理。


总结



本节课我们一起学习了临床护理的广阔图景。我们探讨了医疗保健从古至今的目标演变,理解了健康的多维度定义以及用预期寿命和生活质量衡量的方法。我们分析了当前主要的疾病负担(慢性病),并详细拆解了诊断、预后、治疗的循环护理过程。此外,我们还了解了学习型医疗保健系统的理念、公共卫生的角色以及医疗费用这一驱动系统运作和变革的核心挑战。这些基础知识为我们后续深入探讨医疗数据分析和改进医疗系统奠定了基础。



课程 P20:精准医学 🧬


在本节课中,我们将要学习精准医学的核心概念、技术基础以及如何利用遗传学等分子数据进行疾病亚型分析和个性化治疗。我们将从精准医学的定义出发,探讨其兴起的原因,并深入讲解遗传学基础、数据分析方法以及当前的研究挑战。

什么是精准医学?
精准医学旨在根据个体的基因、环境和生活方式等特征,为其提供量身定制的疾病预防、诊断和治疗方案。其核心在于对疾病进行更精细的亚型划分,而非将一种疾病视为单一实体。
上一节我们介绍了精准医学的目标,本节中我们来看看如何实现疾病的亚分型。

疾病亚分型通常通过聚类分析实现。我们可以在多种数据上进行聚类,例如:
- 人口统计数据
- 共病情况
- 生命体征
- 用药与治疗程序
- 疾病发展轨迹
- 图像相似性
- 遗传学数据
当前,遗传学数据是精准医学的重点,因为人类基因组计划带来了巨大希望:随着我们对基因如何影响疾病的了解加深,将有助于我们为各种疾病找到精确的治疗方法。

精准医学为何在当下兴起?
精准医学的理念并非全新,但其在近年来的蓬勃发展得益于多种因素的结合。
以下是一些关键的驱动因素:
- 分子数据获取能力:如今以极大规模获取患者分子数据的能力是20年前难以想象的。第一个人类基因组测序耗资约30亿美元,而现在成本已降至1000美元以下。
- 诊断与治疗的成功:利用分子信息改进诊断和治疗已取得越来越多成功案例。
- 大数据处理能力:我们拥有了更强大的能力来处理所谓的大数据。
- 利益相关者的迫切需求:美国医疗系统费用持续上升,但质量并未同比提高,这使得各方都迫切寻求新的解决方案。
- 公众态度的转变:公众对收集和使用个人分子数据的态度变得更加开放,因为他们看到了潜在益处可能大于风险。
数据整合与知识公地
一份来自美国国家科学院国家研究委员会的报告提出了一个愿景:像“谷歌地图”整合地理信息一样整合医疗数据。
在谷歌地图中,经纬度坐标系可以叠加邮政编码、建筑、人口普查区、交通等各种信息。在医疗领域,对应的“坐标系”是个体患者。
以下是需要整合的各类患者数据:
- 微生物组数据
- 表观基因组数据
- 基因组数据
- 临床体征与症状
- 环境暴露数据
基于此愿景,美国国立卫生研究院(NIH)启动了“我们所有人”研究计划,旨在招募100万志愿者,持续收集其遗传、临床、环境等多维度数据,以构建一个代表美国人口多样性的“知识公地”,为生物医学研究奠定基础。
疾病分类的演变与挑战


疾病定义本身并非一成不变。历史上,“水肿”曾被视为一种疾病,但现在它被理解为多种潜在疾病(如肺病、心衰、肾病)所表现出的症状。同样,现今定义的“哮喘”未来也可能被细分为多种具有不同根源的亚型。
精准医学的目标正是要深入探究这些症状背后的精确原因。
上一节我们讨论了疾病定义的复杂性,本节中我们来看看如何利用数据空间来识别异常。
我们可以将每位患者的所有数据投射到一个高维的“精准医学模态空间”中。数据在这个空间中通常不会均匀分布,而是聚集在低维流形上。


分析的关键在于识别这些数据簇。如果一个患者落在某个簇的中心,可能代表其对该簇所代表的亚型是“典型”的;若落在簇的边缘或之外,则可能意味着有异常情况发生,值得深入调查。


遗传学基础回顾 🧬
理解精准医学需要基础的遗传学知识。遗传信息传递的核心流程遵循中心法则。

中心法则描述了遗传信息流动的方向:
DNA --(转录)--> RNA --(翻译)--> 蛋白质

以下是关键概念和步骤:
- DNA结构:DNA是双螺旋结构,由碱基对(A-T, C-G)组成。
- 基因:基因是遗传的基本单位,是DNA上编码特定功能产物(RNA或蛋白质)的片段。
- 转录:以DNA为模板合成RNA的过程。
- 翻译:以RNA为模板,在核糖体内合成蛋白质的过程。
- 基因调控:启动子、增强子、抑制子等区域通过调控转录速率来控制基因表达水平。

人类基因组中只有约1.5%的DNA是编码蛋白质的外显子。其余大部分非编码DNA的功能尚未完全明确,但它们绝非“垃圾DNA”,可能参与基因调控等关键功能。
现代观点认为,任何被转录成RNA并具有功能的DNA片段都可被视为基因,其产物不一定必须是蛋白质。
技术进步与成本下降
基因测序成本的下降速度甚至超过了摩尔定律,这是推动精准医学发展的关键。
第一个人类基因组测序耗时多年,耗资约30亿美元。如今,全基因组测序成本已降至数百美元。仅对蛋白质编码区(外显子组)进行测序,成本可低至299美元。甚至对单个细胞的RNA进行测序也已成为可能,成本约每个细胞3.5美元。
许多公司还提供高级分析服务,将测序数据与数据库关联,分析遗传模式,并为临床决策(尤其是在癌症治疗中)提供用药指导建议。
利用基因表达数据进行疾病分型
微阵列和测序技术允许我们大规模测量基因表达水平,从而对疾病进行分子层面的分型。
一项开创性研究(Alizadeh et al., 2000)对淋巴瘤样本进行基因表达聚类分析,成功区分了已知的淋巴瘤亚型,证明了该方法的有效性。
另一项针对乳腺癌的研究(Sorlie et al., 2001)将样本聚类为5个亚型,后续分析显示这些亚型具有显著不同的患者生存率。这表明仅基于基因表达数据的聚类,就能发现具有临床意义的疾病分类。
全基因组关联研究(GWAS)与表型全关联研究(PheWAS)
为了寻找基因与表型(疾病或特征)之间的关联,主要有两种分析思路。
全基因组关联研究(GWAS):从特定表型出发,在全基因组范围内寻找与之相关的遗传变异(如单核苷酸多态性SNP)。结果常以“曼哈顿图”展示,每个点代表一个基因位点与表型关联的显著性。由于同时检验数百万个假设,需要进行多重检验校正(如Bonferroni校正)。
表型全关联研究(PheWAS):与GWAS思路相反,从特定遗传变异出发,在全表型范围内寻找与之相关的疾病或特征。这有助于发现一个基因变异可能参与的多种生物学过程或疾病。
需要注意的是,GWAS发现的许多遗传变异虽然具有统计学显著性,但其效应量(如比值比)往往很小(例如1.1),远低于吸烟导致肺癌的效应量(比值比约为8)。因此,解释和应用这些发现时需要谨慎。
从遗传变异到基因表达:eQTL与贝叶斯网络
遗传变异如何影响表型?一个重要的中间环节是基因表达。表达数量性状基因座(eQTL)研究关注遗传变异与基因表达水平之间的关联。
我们可以建立贝叶斯网络模型来刻画多变量间的因果关系。例如,模型可以描述:遗传变异(G)影响基因表达水平(E),进而影响疾病状态(D)。通过比较不同模型结构(如 G->E->D, G->D->E, G->E & G->D)对数据的拟合程度,可以推断最可能的潜在关系网络。
大规模生物数据库与未来方向
英国生物银行(UK Biobank)等大型前瞻性队列研究收集了数十万参与者的基因、影像、行为、电子健康记录等多维度数据,为大规模GWAS、PheWAS等研究提供了宝贵资源。
基因集富集分析(GSEA) 是一种重要的分析策略。它认为基因通常以通路或功能集的形式协同作用。GSEA不关注单个基因,而是检验预先定义的基因集合(如参与某个代谢通路的所有基因)是否在与表型相关的基因列表中显著富集。这有助于从系统层面理解生物学机制。
目前,精准医学的数据分析仍大量依赖于聚类、矩阵分解(如非负矩阵分解)、贝叶斯网络等经典机器学习方法。尽管深度学习在其它领域取得巨大成功,但在解析复杂基因-表型关系方面,尚未出现公认的、性能显著超越传统方法的“杀手级”深度神经网络应用。这仍是未来重要的探索方向。
总结




本节课中我们一起学习了精准医学的核心理念与技术基础。我们了解到,精准医学通过整合多组学数据(尤其是遗传学数据),利用聚类、GWAS、PheWAS、贝叶斯网络等分析方法,旨在实现对疾病的精细分型和个性化治疗。尽管面临效应量小、数据整合复杂等挑战,但随着测序成本下降和大规模生物数据库的建立,精准医学正在逐步从概念走向临床实践,为改善医疗效果带来了新的希望。



课程 P21:自动化临床工作流 🏥

在本节课中,我们将要学习如何通过自动化工作流来改善医疗保健系统。我们将探讨从制定临床指南到利用数据挖掘和机器学习技术来标准化和优化医疗实践的各种方法。
工作流的重要性与目标
当我开始在这个领域工作时,我并没有意识到工作流这个话题的存在。但在埋头苦干了几十年后,我意识到这是医疗保健中一个显而易见且需要注意的关键方面。
我们在这门课上的目标是改善医疗保健。那么,如何才能做好呢?
在20世纪70年代,当我们开始这项工作时,有一个想法是:我们想了解世界上最好的专家做得最好的是什么。我们希望通过封装他们关于如何做诊断、如何做预后和治疗选择的专业知识,来提高其他非世界级专家的医生的表现。通过在计算机系统中捕获世界级的专业知识,帮助人们找出如何做得更好。这里的真正目标是提高医疗保健系统中每个人的平均表现。我们常说,要把大家的行医水平都提升到更接近世界一流专家的水平。
然而,事实证明,提高平均表现并非最重要的事。后来出现了另一个想法:真正糟糕的是低于平均水平的表现。如果你的表现低于平均水平会导致病人死亡,而你高于平均水平的表现只会在他们的结果中产生适度的差异,那么关注那些最糟糕的医生并让他们以更好的方式行事显然更为重要。

因此,诞生了“协议”的概念。该协议主张用相似的方法治疗相似的病人。其核心价值是减少方差。那么,提高平均值与减少方差,哪一个更好呢?这取决于你的损失函数。如果你的损失函数是不对称的,即表现不佳或低于平均水平带来的负面影响远大于表现高于平均水平带来的正面影响,那么减少方差的协议思想就至关重要。这几乎是医疗系统所采用的方法。

为了帮助你想象,假设在某种任意的尺度上(例如从0到8),我们有一个通常的正态分布。左边是表现不佳的行为,右边是世界级专家的表现(可能在6或7),而表现很差的医生可能在0到1之间,普通医生则在4左右。
这里有两种情况:
- 第一种情况是我们把普通医生的表现提高一点点。
- 第二种情况是我们显著地减少方差,使这个正态分布变得更窄,平均值不变,但消除了表现极端的离群值。
在第二种情况下会发生什么?你需要看看成本函数。假设有一个成本函数,在零水平上表演的人成本极高,而在八级水平上表演的人成本几乎为零,成本呈指数级下降。这表明,如果你能把人们的表现聚集在一个更窄的范围内,你的总成本会下降。在一个假设模型中,通过缩小分布,可以将总成本降低到比单纯提高平均水平更低的水平。
这并不能证明这是正确的想法,但证据可能在于这样一个事实:医疗系统已经采用了这一点,并决定让所有的医生表现得更像普通医生,是改善医疗保健的最佳实际方法。
如何缩小绩效分布:指南与协议

那么,如何缩小绩效分布呢?一种方法是制定指导方针和协议。由一个博学的机构规定诊断和治疗病人的适当方法。
例如,2018年11月,美国心脏病学会和美国心脏协会临床实践指南特别工作组发布了血液胆固醇管理的指南。高胆固醇是危险的,会导致心脏病发作和中风,因此降低人们的胆固醇水平是共识。


他们做的第一件事是,提出了一个颜色编码的概念,说明推荐有多强烈,以及另一种阴影编码,说明证据的水平。

以下是推荐力度的分类:
- I类(强烈推荐):使用“推荐”、“指示”、“有用”、“有效”、“有益”、“应该执行”等词。
- IIa类(获益远大于风险):使用“这是合理的”、“它可能很有用”等词。
- IIb类(获益可能等于或略大于风险):使用“可能是合理的”、“可以考虑”等词。
- III类:无获益(风险等于获益):使用“不推荐”等词。
- III类:有害(风险大于获益):使用“有潜在的危害”、“造成伤害”等词。

以下是证据水平的分类:
- A级(高质量证据):来自多项随机对照临床试验或高质量RCT的荟萃分析,并得到高质量登记研究的证实。
- B级(中等质量证据):来自单项随机试验或非随机研究。
- C级(低质量证据):基于临床经验的专家意见共识,但没有任何形式的分析。
在这份胆固醇指南中,有关于测量低密度脂蛋白和非高密度脂蛋白胆固醇的建议。对推荐的信心是A级,基于高质量证据。它建议在20岁或以上的成年人中,无论是否空腹,都可以进行血脂测量。

另一个例子是关于继发性动脉粥样硬化性心血管疾病的预防(针对已经生病的人)。其中一条建议是:对于75岁或以下的冠状动脉疾病临床病例,应开始或继续高强度他汀类药物治疗,目标是减少50%或更多的低密度脂蛋白。
这很大程度上是学术团体现在试图影响医学实践的方式,目的是减少差异,让每个人都以标准化的方式行事。
你可能看过关于阿图尔·加万德(Atul Gawande)的文章,他是波士顿的外科医生,因提倡使用核对表而声名鹊起。他说,外科医生应该像飞行员一样,在手术前通过一个检查清单来确保所有系统正常工作。这在外科手术中意味着确保拥有所有必要的设备,并知道在各种潜在紧急情况下该怎么办。
我从一篇论文中摘录了这些总结建议:
- 在所有人中强调心脏健康的生活方式。
- 在已经生病的人身上,使用高强度他汀类药物治疗以降低低密度脂蛋白。
- 对于高风险患者,使用每分升70毫克的阈值。
这些是总结建议,希望医生阅读这些文章后,在与病人互动时能记住并遵循。论文中还抽象出了流程图,指导医生根据患者的年龄和风险评估进行分类,并对不同类别给出不同的治疗建议。

然而,当这样的论文发表时,医生实际遵循这些建议的情况有多好呢?答案是不太好。通常需要很多年,这些建议才能被大多数医疗社区接受。例如,大约二十年前,有建议说任何心脏病发作的人都应该接受β受体阻滞剂治疗,即使他们现在没有症状,因为这能减少约35%的重复心脏病发作。但花了十几年时间,大多数医生才开始向病人提出这种建议。

指南的存储与获取:国家交换所
有一个叫做AHRQ(医疗保健研究与质量局)的机构。在本届政府之前,他们运营着一个国家指南交换中心(National Guideline Clearinghouse),发布由不同当局制定的、可供下载和使用的指南。在政府关闭该中心后,指南中心(Guidelines Central)试图接管其中的一些角色。他们的网站上发布了大约2000条指南。

以下是一些例子:
- 通过药物或营养补充剂降低前列腺癌的风险。
- 干细胞移植治疗多发性骨髓瘤。
- 骨髓增生异常综合征和急性髓系白血病的干细胞移植。
他们还发布了许多风险计算器。执业医生或医院可以去获取这些指南,并鼓励或强制医生使用它们来确定诊疗活动。
这是一种自上而下的活动,通常由学术团体将专家聚集在一起思考正确的做法,然后告诉世界其他地方怎么做。
自下而上的活动:护理计划与临床路径
但也有一种自下而上的活动,例如护理计划。护理计划实际上是一个护理学术语。在医院里,真正持续照顾病人的是护士。护士们开发了一套方法来确保他们照顾好病人,其中之一就是制定这些护理计划。
临床路径则是试图将护士在照顾个人时使用的护理计划进行概括,找出照顾特定病人群体的典型方式。

我将以密歇根大学护理中心的一个护理计划为例。这是一个教育组织,试图帮助护士找出如何成为好护士。护理计划通常包含以下列:
- 评估:客观、主观和医学诊断数据。
- 护理诊断:例如“组织完整性受损”。
- 预期结果:护士试图实现的具体目标。
- 计划:包括病人教育等。
- 干预措施:护士计划做的事情。
- 原理:解释为什么这些干预措施能实现目标。
- 成果评价:记录实际实现的结果。
有许多网站提供针对各种病症的模板化护理计划,例如入院护理计划、酒精戒断护理计划等。这是一种尝试列出标准化护理计划的方法。
从数据中挖掘临床路径:机器学习方法

现在,张和他的同事们对一篇论文很感兴趣。他们所做的是:从电子健康记录中获取治疗数据,然后从这些数据中识别患者亚组,接着挖掘常见的治疗模式,再让医学专家评估这些模式,最后这些模式就成为临床路径。这是护理计划对特定亚人群患者的概括。
他们的想法是定义一些抽象概念:
- 事件:一次就诊(如看医生或去医院),包含一套程序、药物和诊断。
- 超级节点:将单次就诊中的事件组合抽象成一个节点。
- 就诊序列:每个病人都有一个由这些超级节点按时间顺序组成的序列。
- 超级对节点:为了捕捉最近两次就诊的信息(而不仅仅是最后一次),他们将连续两次就诊的超级节点组合成一个“超级对”节点,这样马尔可夫链中的每个节点就代表了病人最近两次就诊的情况。
他们最终得到了大约3500个不同的超级对节点。然后,他们使用一个距离函数(基于最长公共子序列)对这些就诊序列进行分层聚类,将患者分成不同的亚组。他们为肾病患者想出了三个主要组别。
然后,他们可以估计这些超级对节点状态之间的转移矩阵,并根据数据的支持程度来观察不同的轨迹。他们可以根据每个状态有多少病例来设置阈值,以确定是否认真对待到或从该状态的转换。
然而,这项研究的一个批评是数据量太少。他们得出的许多组别中病人数量相对较少。一旦有了这些转移矩阵,他们就可以展示某个特定患者群组的典型诊疗模式。例如,一个包含14名严重慢性肾病患者的群组,其典型模式可能显示病人经历了办公室就诊、服药、住院、教育访问,然后不幸死亡。
但即使在一个亚组中,也可以发现非常不同的模式。例如,另一个模式可能显示病人在教育和医生访问之间来回,并存活下来。我认为这是个好主意,但在使用的技术上可能会有改进空间,当然,更多的数据会很有帮助。
群体智慧:订单推荐系统

这里有一个类似的想法,来自杰夫·克兰在里根医院的博士学位研究。他借鉴了亚马逊推荐系统的概念,将其应用到医疗订单上。他记录了里根医院的所有医嘱,建立了一个近似亚马逊推荐系统的模型,提示医生:“其他要求进行以下一系列测试的医生也要求了这项额外的测试,你没有点,也许你应该考虑。”或者反过来提示可能不必要的检查。
他专注于四个不同的临床问题:急诊科背痛、急诊科高血压、紧急护理诊所高血压,以及重症监护室精神状态改变。他使用了里根医院三年的就诊数据,对于每个领域,将自己限制在40个最频繁的订单和10种最常见的共病诊断。
这种方法的一个明显陷阱是:如果医生群体都采用某种并非最佳实践的传统方法,那么推荐系统只会强化这种错误。例如,塞梅尔维斯(Semmelweis)发现让医生洗手可以大幅降低产褥热死亡率,但他的同行们拒绝接受,因为“医生的手是治愈之手”的观念根深蒂固。这是一个群体智慧导致不良结果的案例。
尽管如此,这种方法的吸引力在于,因为它从真实数据中归纳出来,所以倾向于处理更复杂的病例,而不是那种可以简单制定指南的刻板病例。他使用了贝叶斯网络模型来表示可能的医嘱和证据(已完成的订单结果)。匹兹堡大学的“四元组”(Tetrad)系统实现了贪婪等价搜索(Greedy Equivalence Search),用于在贝叶斯网络空间中搜索能很好表示数据的网络结构。

得到的贝叶斯网络节点对应于各种干预措施和条件。然后,可以将特定病人的数据输入网络,固定某些节点的值,并进行贝叶斯推理,计算未观测节点的概率,从而推荐尚未进行的高概率干预措施。这类似于顺序诊断,但模型更复杂。
界面被称为迭代治疗建议算法(Iterative Treatment Recommendation Algorithm),向医生显示病人的问题和当前医嘱,并建议可能要求的新医嘱。他们能够证明,该算法在预测医生下一步实际会做什么方面做得相当好,通常能将正确的建议排在前十名左右。
决策支持系统的实施与监控挑战
现在,我想谈谈决策支持系统实施中的挑战。亚当·赖特曾积极尝试部署决策支持系统。他有一个有趣的插曲:在演示一个用于监测长期使用胺碘酮患者甲状腺和肝功能(TSH和ALT)的警报系统时,他输入了一个假想病例,但警报没有响。调查发现,在2009年,医院系统中胺碘酮的内部代码从40改成了70,但警报规则逻辑从未更新以反映这一变化。因此,随着时间推移,使用新代码开药的患者不再触发警报,直到2013年才发现并修复了这个错误。
另一个例子是儿童铅筛查规则。对两岁儿童的筛查率从每天三四百人下降到零,几年后才被发现。调查发现,规则中增加了两个不完整的条款(与性别和吸烟状况有关),导致规则几乎从不触发。医院的更改日志系统也崩溃了,丢失了日志数据。
这些故事促使他们思考如何持续监控此类问题。他们引入了变点检测(Change Point Detection)的概念。他们建立了一个包含季节性的动态线性模型(因为医疗活动有周内周期)。模型假设输出是输入的某个函数加上高斯噪声,状态根据某种进化方程演变。
他们建立了一个多过程动态线性模型,即数据可能由一组动态线性模型中的一个生成。他们考虑了三种基本模型:稳定模型、附加离群值模型和水平移动模型。通过计算这些模型在给定数据下控制数据生成的概率,可以得到一个“变点得分”。

他们在医院实施了这一监控系统,现在不仅能收到临床警报,还能收到关于“某个规则触发频率低于预期”的监控警报。他们证明,他们的算法在检测此类问题方面比其他方法更有效。
沟通在工作流中的核心作用
在剩下的时间里,我想谈谈其他一些与工作流有关的问题。我们已经讨论过警报,但关于这些警报系统实际上如何工作,有一系列有趣的研究。
贝斯以色列女执事医疗中心有一个聪明的想法:升级警报。例如,如果病人的血钾水平危及生命,系统会向医生发送寻呼机警报。如果医生在20分钟内没有响应,系统会向医生的上级发送警报。如果上级在一小时内没有响应,则会向医院负责人发送警报。这确保了重要警报不会被忽略,但也带来了“过度警觉”和医生反感的问题。
沟通在医疗保健中至关重要。恩里科·科伊拉(Enrico Coiera)曾指出,医疗保健基本上是一项团队运动,大量的行动是关于沟通的,而不仅仅是决策。一项研究显示,医生在查房时,关于病人信息,有25%的时间会查看笔记,50%的时间会询问护士。另一项研究显示,诊所里大约60%的时间花在工作人员之间的交谈上。
科伊拉和格雷夫斯在1998年的一项研究中观察了医院工作人员的沟通模式。在一个班次(约三个半小时)内,高级住院医师有多达24个不同的沟通事件,平均每小时约7个。他们87%的时间用于面对面、电话或寻呼机交流,只有13%的时间用于处理电脑和病人笔记。
因此,考虑引入新的沟通渠道(如语音邮件、电子邮件、Slack等)或政策(如减少不必要的打断),从同步沟通转向异步沟通,可能对改善工作流很重要。
防止遗漏:工作流引擎的构想
最后一个话题是如何防止遗漏任务。医疗保健中最大的错误往往不是因为做出了错误的决定,而是因为有人忘记跟进某事。
部分受到贝斯以色列医院寻呼机升级警报的启发,我认为我们真正需要的是一个工作流引擎,它本质上是一个离散事件模拟器。这种引擎会维护一个时间表,按时间顺序执行任务。关键的是,当一个任务执行时,它可以在未来的时间点上安排另一个任务(例如,安排第二天的随访)。如果某个时间点没有安排应有的任务(例如“完成Y”),引擎就会触发通知或提醒某人。
据我所知,目前还没有医院电子记录系统具备这样的主动工作流引擎能力,但我认为这是一个好主意。
未来的愿景:个人健康守护天使
我想用一个仍然困扰着我们的问题来结束。1994年,我和一些同事提出了“守护天使宣言”(Guardian Angel Manifesto)的想法。这个想法是让病人更多地参与他们自己的护理,因为他们可以跟踪许多系统未能很好跟踪的事情。
构想是:从你父母怀你的时候开始,直到你死后的尸检,会有一个计算进程持续运行。它将负责收集所有关于你的相关医疗保健数据,成为你的电子病历。它还会是活跃的,帮助你与提供者沟通,帮助你了解自身状况,提醒你注意事项,为你安排事务等。

在2000年代中期,谷歌副总裁亚当·博斯沃思(Adam Bosworth)启动了“谷歌健康”(Google Health)项目,更侧重于个人健康记录。他们进行了试点,并与一些合作伙伴(如克利夫兰诊所、CVS等)合作。然而,三年后他们关闭了它。
失败的原因之一是,除了少数合作伙伴,数据无法自动输入系统。这意味着用户必须手动输入整个病史,而医生也不太可能去查看一个外部URL提供的记录。因此,这至今仍是一个尚未实现的愿景,但它仍然是个好主意。
总结

本节课中,我们一起学习了临床工作流自动化的多个方面。我们从提高平均表现与减少方差的理论权衡开始,探讨了通过制定临床指南和协议来标准化医疗实践的方法。接着,我们了解了自下而上的护理计划和从数据中挖掘临床路径的机器学习技术。我们还看到了基于群体智慧的订单推荐系统,以及决策支持系统在实施和持续监控中面临的挑战。我们认识到沟通在医疗团队协作中的核心作用,并探讨了构建主动工作流引擎以防止任务遗漏的构想。最后,我们展望了未来个人健康“守护天使”系统的愿景。理解并优化这些工作流,对于构建更安全、高效和以患者为中心的医疗系统至关重要。



课程 P22:机器学习监管入门 🏛️


在本节课中,我们将学习机器学习与人工智能在医疗健康领域的监管框架,特别是美国食品药品监督管理局(FDA)的监管路径以及机构审查委员会(IRB)的伦理审查流程。我们将探讨如何界定一个产品是否属于医疗器械、不同的审批路径,以及研究人员在开发涉及人类受试者的算法时应遵循的伦理准则。



概述:监管的必要性与挑战
随着算法驱动的健康产品日益增多,明确其监管路径至关重要。监管旨在确保产品的安全性与有效性,同时促进创新。然而,对于软件和算法这类快速迭代的产品,传统的监管模式面临挑战。
上一节我们概述了课程目标,本节中我们来看看监管的核心机构及其职责。
核心监管机构


在医疗健康领域,多个机构共同参与对软件和算法的监督。
以下是主要涉及的机构及其职责:


- 美国食品药品监督管理局(FDA):负责医疗产品的安全性和有效性,促进创新并确保患者能获得高质量产品。其监管核心在于对产品声明的管理。
- 卫生与公众服务部(ONC):负责卫生信息技术,关注数据的存储与互操作性。
- 联邦通信委员会(FCC):监管产品的连接性,例如无线通信设备。
- 联邦贸易委员会(FTC):侧重于消费者保护,打击欺骗性商业行为。在数字健康领域,FTC常处理涉及数据隐私和误导性宣传的问题。

这些机构间的管辖界限有时会模糊,特别是当同一款产品兼具数据存储、诊断建议或治疗功能时。


什么是医疗器械?



根据FDA的定义,医疗器械几乎涵盖了不属于其他中心(如药品、生物制品)管辖的、用于诊断、治疗、预防疾病或影响人体结构功能的任何工具、装置或软件。

核心概念:一个产品是否被认定为医疗器械,关键不在于其硬件或代码本身,而在于制造商的 “预期用途” 和所作出的 医疗声明。例如,完全相同的智能手表应用,如果声称能检测心房颤动(AFib),就可能被视为医疗器械;如果仅显示心率数据,则可能不是。


软件作为医疗器械(SaMD)
FDA提出了“软件作为医疗器械”的概念,特指那些没有硬件组件、其本身 intended use 符合医疗器械定义的软件。
理解产品在技术栈中的位置有助于思考监管策略。许多产品由多层组成:硬件传感器、信号处理算法、诊断算法和用户界面。FDA正在探索将硬件验证与上层软件创新解耦的模块化监管思路。
FDA医疗器械审批路径
FDA为医疗器械设置了基于风险分层的审批路径。
以下是三种主要途径:
- 510(k) 上市前通知:适用于中低风险设备,需证明新产品与已合法上市的“谓词设备”实质性等效。
- De Novo 分类请求:适用于中低风险、且无谓词设备的新型器械。通过后,可为后续类似产品建立新的分类标准。
- 上市前批准(PMA):适用于高风险器械,需要提供严格的科学证据来证明其安全性和有效性。


上一节我们介绍了不同的审批路径,本节中我们来看看一个与监管并行的、保护研究参与者的重要体系。
机构审查委员会(IRB)与人类受试者研究
IRB负责审查和监督涉及人类受试者的生物医学和行为研究,其首要目标是保护参与者的权利、安全和福祉。
何时需要IRB?
当研究活动同时满足以下两个条件时,通常需要IRB审查:
- 是“系统性调查”,旨在发展或贡献“可推广的知识”。
- 涉及“人类受试者”,即研究者通过干预或互动获取个体可识别私人信息或生物标本。
核心概念:可识别私人信息(PHI) 的界定非常关键。除了姓名、地址等直接标识符,像邮政编码(需前三位)、精确日期、超过89岁的年龄等信息,在特定组合下也可能导致个体被重新识别。

IRB审查级别
IRB审查通常分为三个级别:
- 豁免审查:适用于风险极低的研究,例如对完全匿名化数据集的分析。
- 快速审查:适用于风险不高于最小风险的研究,通常由一位IRB委员审查。
- 全面审查:适用于风险高于最小风险的研究,需全体IRB会议讨论。
在敏捷软件开发实践中,需要特别注意区分“项目活动”(如一般性的软件功能开发)和“研究活动”(涉及人类受试者的数据收集与分析),并与IRB密切合作,确保在快速迭代中不损害参与者权益。
如何参与监管进程?
作为开发者和研究者,你可以积极影响监管政策的形成。
以下是参与监管进程的几种方式:
- 提交公众评论:在FDA等机构发布指南草案征求公众意见时,任何人都可以提交评论。来自技术社区的实践性意见极具价值。
- 加入专业社区:参与如“数字医学学会”等新兴专业组织,共同探讨监管新范式。
- 思考新模型:在学术或公共平台提出针对算法监管的新框架设想,例如借鉴临床试验的思维来管理算法在不同人群中的表现。
- 公共服务:通过“总统创新研究员”等项目进入政府机构工作,从内部推动系统改进。
总结与行动呼吁
本节课中我们一起学习了机器学习在医疗健康领域面临的主要监管框架。我们了解了FDA如何根据产品的“预期用途”来界定其是否为医疗器械,并熟悉了510(k)、De Novo和PMA等审批路径。同时,我们明确了在进行涉及人类数据的研究时,必须严格遵守IRB的伦理审查程序以保护参与者。
当前监管规则仍在快速演变中,你的专业知识对于构建合理、有效的监管环境至关重要。我们强烈鼓励你将本节课的思考,特别是对《人工智能/机器学习软件作为医疗器械的行动计划》草案的见解,转化为具体的公众评论并提交。你的声音将被听到,并能帮助塑造未来的技术监管格局。


免责声明:本教程内容基于公开演讲整理,旨在教育目的,不构成法律或监管建议。政策法规不断变化,具体实践请务必咨询相关领域的法律与合规专家。



课程 P23:机器学习中的公平性 ⚖️
在本节课中,我们将要学习机器学习中一个至关重要且日益受到关注的议题:公平性。我们将探讨算法决策在司法、医疗、招聘等领域的应用,理解其中可能存在的偏见,并学习几种衡量和实现算法公平性的技术性概念。
一年多前,我接到一个电话,来自美国国家科学院、工程院和医学院的一个委员会。这是一个由德高望重的学者组成的机构。他们的研究机构被称为国家研究委员会,下设许多不同的委员会,其中之一是科学、技术与法律委员会。这是一个非常有趣的委员会,由大卫·巴尔的摩主持,他曾是麻省理工学院的教授,后来成为加州理工学院的校长,并且是一位诺贝尔奖得主。委员会成员还包括美国哥伦比亚特区巡回上诉法院的法官,这是仅次于最高法院的重要法院。这些成员都是极具影响力的人物。
我们讨论的主题包括区块链与分布式账本、信任、人工智能与决策。我受邀谈论的部分是大数据时代的隐私与知情同意。其他议题还包括法学院中的科学课程、新兴的科学技术与法律问题、利用诉讼针对持不同观点的科学家的问题,以及如何向持怀疑态度的公众传达生命科学进步。这旨在应对当前时代的反科学基调。
我们小组聚焦于人工智能与决策。小组成员包括斯坦福大学的法学教授汉克·格里利,他在这方面做了大量工作;审前司法研究所的Charisse Birdie,她关注法律问题,即许多公司使用软件来预测被告在审前获得保释后是否会按时出庭;斯坦福大学的放射学教授Matt Lundgren,他在构建用于检测肺部疾病的卷积神经网络模型方面做了出色工作;以及犹他大学的教授Suresh Venkata Subramanian,他最初是理论家,后来开始思考隐私与公平问题。我们每个人都做了简短发言,并进行了非常有趣的讨论。
有一件事让我非常惊讶。有人向那位上诉法院法官提问,他是否会雇佣像我们这样兼具计算方法和法律背景的人做他的法庭书记员。他的回答是否定的。他说,法官的角色不是成为专家,而是平衡问题双方的论点。他担心,如果一个书记员有很强的技术背景和观点,可能会使他的决定产生偏见。这让我想起,学习法律是学习如何辩论和取胜,而非寻找绝对真相。法律哲学认为,真相会在双方的激烈辩论中浮现。律师的职责就是尽全力为自己的论点辩护。法学院甚至教导学生,应该能够站在任何案件的任何一方并提出令人信服的论点。法官的这番话强化了这一概念,我觉得很有趣。
自动化决策的广泛应用 🧑⚖️
上一节我们介绍了公平性问题在司法领域的背景,本节中我们来看看自动化决策更广泛的应用。

司法领域是公众最关注的自动化决策应用之一。算法被用于确定各种服务的资格、评估在何处部署卫生检查员和执法人员,以及划定选区界线。所有关于不公正选区划分的讨论,都涉及使用机器学习技术来定制选区,以最大化某一政党获得多数席位的可能性。
这些技术也被用于保释、假释和量刑决定。支持者认为,算法可以为人性判断带来清晰度和精确度,从而减少人类偏见的影响。法官和陪审团都可能存在偏见,通过将决策过程形式化,或许能取得更好的结果。


然而,利用技术决定谁的自由被剥夺以及根据什么条件,也引发了人们对透明度和可解释性的重大关切。我们下周将讨论透明度和可解释性,但今天的重点是公平性。
去年十月有一篇文章提到,在加州,被捕者是否获得保释的决定将部分由计算机算法做出,而非完全由人决定。县官员和法官仍有一定的自由裁量权,但在出现令人震惊的结果之前,算法可能会被常规使用。
对这些保释算法的批评基于许多因素。例如,两个情况完全相同的人,仅仅因为种族不同(一个是白人,一个是黑人),黑人获得保释的机会就低得多。你可能会问,如果算法是从数据中学习的,这怎么可能?这是因为一个复杂的反馈循环:算法从历史数据中学习,如果历史上法官更不愿意允许非裔美国人保释,那么算法就会学会并延续这种偏见。
第二个非常可怕的问题是,这些算法是由私人公司开发的。他们不会公开算法细节,你付钱只能得到答案,而不知道计算过程或训练数据。这使它成为一个真正的黑匣子。
数据缺陷与算法偏见 🔄
数据收集系统的缺陷与司法系统本身的缺陷是相同的。不仅有算法决定你是否能获得保释(这在你审判前是一个相对临时的问题),还有算法对量刑等问题提出建议,例如预测罪犯出狱后再犯的可能性,从而建议更长的刑期。
威斯康星州有一个特殊案例,州最高法院裁定,了解算法的输出结果就足以满足透明度要求,不构成对被告权利的侵犯。许多人认为这是一个令人愤慨的决定,很可能会被上诉并推翻。
另一方面,算法也可能帮助人们远离监狱。例如,有文章讨论用算法分析案件,识别那些真正需要精神治疗而非监禁的人,从而将他们从刑罚系统转入治疗系统。这是使用算法的积极一面。
算法在招聘中的应用 💼
不仅仅是司法领域,关于算法能否比人类更好地进行招聘的讨论也持续了很久。大公司拥有大量的招聘决策和结果数据(哪些是好员工,哪些不是),因此很容易想到使用算法来筛选求职者,并决定面试哪些人。
我有个人的故事。在加州理工学院读本科时,我曾是本科招生委员会的成员。当时学校每年只招收约230名学生,我们会面试前一半的申请者。有一天,一位教授提出一个思想实验:我们应该拒绝已录取的230人,转而录取接下来的230人,看看教授们是否会注意到差异,因为学生能力的分布可能相当平坦。我们认为这不公平、不道德,且浪费了我们的筛选时间,因此没有这样做。
后来,这位教授建立了一个线性回归模型,用申请者的SAT成绩、推荐信等数据来预测他们大二的平均成绩。模型拟合得相当好,但一个令人不安的发现是:如果你的SAT语文成绩特别好,作为加州理工学院的大二学生,你的成绩预测反而可能更差。我们认为因为某人擅长某事而惩罚他是不公平的,尤其是对于一所追求博雅教育的学校。
这是一个例子,说明即使意图良好,算法也可能产生意想不到的、不公平的结果。
定义“公平”的挑战 🤔
那么,我们所说的“公平”究竟是什么意思?如果我们想为算法定义公平性,我们希望算法具有哪些特性?这是一个难以精确定义的概念。
一个良好的起点可能是:不同人群的错误率应该相似。或者说,模型不应强化我们期望社会中不存在的因果关系。另一个典型的公平观念是:相似的人应受到相似的对待,且这种相似性应独立于敏感属性(如种族、性别)。但这给“相似性”的距离函数带来了很大压力:两个人在哪些方面相似?哪些特征你显然不想使用?定义这个函数是一个挑战。
让我展示一个更技术性的思考方式。我们都知道选择偏差、抽样偏差、报告偏差等传统偏见。但我参与的一个例子涉及遗传学:一项主要针对欧洲人的研究发现,某种基因变异与肥厚型心肌病(一种可致年轻人心力衰竭的疾病)高度相关。因此,携带该变异的人被告知预期寿命很短。
但后来发现,许多非洲裔美国人携带这种变异却没有患病。问题在于,最初建立预测模型的人群是欧洲血统,而非非洲血统。同样的故事最近再次上演:一项研究发现,在欧洲人群中发现的骨质疏松遗传风险因素,无法提高对中国人群骨折风险的预测。技术上,偏见从何而来?
康斯坦丁·阿尔费里斯在2006年提出一个分析:在一个完美的世界里,有无数可能的模型可以解释数据关系。我们选择一些模型族进行拟合,并使用梯度下降等技术寻找最优解。设 O 为所有可能模型族中的最优模型,L 为特定学习机制能学到的最佳模型,A 为实际学到的模型。那么,偏差 大致是 O - L(学习方法相对于目标的局限性),方差 是 L - A(特定学习过程导致的误差)。
你可能会说,但机器学习的目的不就是“区分”吗?在法律意义上,“歧视”与统计学上的“区分”不同。一些区分的依据是合理的(如与工作相关),一些是不合理的(如基于种族)。一个教训是:歧视是特定领域的。你不能定义一个普遍适用的歧视概念,因为它与具体决策场景中哪些特征在道德上无关紧要密切相关。
从历史上看,政府试图通过法律规范某些领域,如信贷(《平等信贷机会法》)、就业(《民权法》)、住房(《公平住房法》)。法律承认一些受保护的类别:种族、肤色、性别、宗教、国籍、公民身份、年龄、怀孕、家庭状况、残疾、退伍军人身份,以及某些司法管辖区的性取向。
关于歧视有两种法律学说:差别待遇(不同对待)和差别影响(不同结果)。差别影响学说认为,无论机制如何,如果不同种族或性别群体的结果存在显著差异,就初步证明存在歧视。法院通常认为需要约20%的差异才能构成差别影响。辩护的关键在于证明这种差异是“与工作相关的”或“业务必需的”。
有趣的是,差别待遇(强调程序公平和机会平等)和差别影响(强调结果平等)常常是相互冲突的。机会平等并不总是导致结果平等。
形式化公平性概念 📐
莫里茨·哈特在一场讲座中将问题形式化。考虑一个决策问题,我们有一个模型。设:
X是个人特征集合。A是受保护的特征集合(如种族、性别)。R是分类器或评分函数,是X和A的函数。Y是我们感兴趣预测的结果。
文献中出现了三个主要的公平性标准:
-
独立性:评分函数
R独立于受保护属性A。即P(R|A) = P(R)。这意味着评分必须在整个数据集上通用,不能区分不同受保护类别的人。操作上,可以通过检查不同组间获得特定结果的概率的绝对差或比率(如“四五法则”,即80%的比率)来衡量。但独立性概念有问题:它可能导致在信息较少的组中随机决策,或者当受保护属性是结果的完美预测器时无法满足。 -
分离性:在给定结果
Y的条件下,评分函数R与受保护属性A独立。即P(R|Y, A) = P(R|Y)。这承认受保护属性可能与目标变量相关,但要求模型对不同组中具有相同结果的人给予相似的评分。例如,某种药物对某些亚群效果更好,FDA批准针对这些亚群营销是合理的。分离性允许R和Y相关,即使是完美预测器,并激励减少所有组的错误。 -
充分性:在给定评分函数
R的条件下,结果Y与受保护属性A独立。即P(Y|R, A) = P(Y|R)。这要求不同组的正预测值和负预测值具有一致性。如果评分函数是概率,并且对于获得某个评分的所有实例,其中正例的比例与该评分值相符,则称该评分函数是校准良好的。
一个可怕的消息是:可以证明,除了某些平凡情况,这三个标准中的任何两个都无法同时被满足。它们互不相容。谷歌有一个很好的可视化工具,展示了采用不同公平性概念在合成人群上导致的权衡。
教程中还指出另一个问题:可能存在不同的因果模型(如受保护属性直接影响结果,或通过中介变量影响),它们能产生完全相同的观测数据分布,但从公平性角度解读却完全不同。这使我们无法仅从数据中区分哪种模型(或哪种公平性干预)是正确的。
现实研究案例:医疗领域的公平性 🏥
我想通过几个现实研究案例来结束。其中一项基于艾琳的工作,发表在《美国医学协会杂志-伦理学》上。
我们研究了机器学习模型在识别和减少普通医疗与精神健康护理差距方面的潜力。我们分析了来自麻省总医院和麦克莱恩医院的数据,探究是否存在基于种族、性别和保险类型(作为社会经济地位的代理)的偏见。我们使用主题建模(LDA)从临床笔记中提取特征,并预测30天再入院率。
研究发现,不同亚人群的主题分布存在差异:
- 白人患者更多讨论焦虑和慢性疼痛。
- 黑人、西班牙裔和亚裔患者更多讨论精神病性症状。
- 男性患者更多讨论药物滥用。
- 女性患者更多讨论抑郁。
- 有私人保险(较富有)的患者焦虑和抑郁程度较高。
- 有公共保险(较贫穷)的患者药物滥用问题更多。
在预测性能(错误率)方面,我们也发现了差异:
- 在ICU数据中,模型对男性的预测错误率显著低于女性。
- 对私人保险患者的预测结果优于公共保险患者。
- 在精神健康数据中,差异不那么明显,可能因为数据量较小。
这表明,在我们拥有的数据和所建模型中,确实存在群体偏见。
案例研究:医疗不信任与治疗差异 🤝
最后是威利的研究,关于模拟重症监护数据中医疗不信任的影响。
数据显示,非裔美国人患者使用机械通气的平均时间显著长于白人患者。在另一个更大的eICU数据集中也观察到了类似模式。威利提出的问题是:这种差异是否源于患者与医生之间信任程度的差异,而非纯粹的生理或社会经济因素?
他的方法是首先识别有明显“不信任”标志的病例(如违背医嘱离院、拒绝尸检、拒绝签署同意书、用药依从性差)。然后,他利用这些明确标注的病例训练一个逻辑回归模型,来预测那些没有明显标志的病例的“不信任”倾向。
模型发现,与“不信任”相关的因素包括:患者躁动、被约束、疼痛等。与较低不信任相关的因素包括:患者警觉、有医疗代理人、家属沟通多等。
分析表明,在预测机械通气和升压药使用差异时,高信任度患者与低信任度患者之间的差距,比黑人与白人患者之间的差距更为显著。这暗示,导致治疗差异的根本特征可能不是种族本身,而是与种族相关的医疗不信任。历史事件(如塔斯基吉梅毒实验)可能导致某些群体对医疗系统更不信任。进一步分析表明,这种不信任并非单纯由疾病严重程度解释。
总结与展望 📚
本节课中,我们一起学习了机器学习中的公平性这一复杂而重要的议题。
我们探讨了算法在司法、招聘等领域的应用及其潜在的偏见问题。我们了解到,定义“公平”具有挑战性,并且存在多种形式化的公平性概念(如独立性、分离性、充分性),但它们常常相互冲突,无法同时满足。我们还通过医疗领域的研究案例,看到了偏见在现实数据中的体现,以及如何通过技术手段进行探索和度量。

公平性是一个需要持续研究和讨论的丰富领域,涉及技术、伦理、法律和社会等多个层面。许多大学已经开始开设相关课程,并将伦理观念注入技术教育中。宾夕法尼亚大学的迈克尔·卡恩斯和亚伦·罗斯即将出版《道德算法》一书,预计会引起广泛关注。


在这一领域还有很多工作要做,既要发展技术方法,也要理解社会需求,并将两者匹配起来。



课程 P24:数据集偏移的鲁棒性 🛡️
在本节课中,我们将要学习机器学习模型在面对数据集偏移时的鲁棒性问题。数据集偏移是指模型训练时使用的数据分布与模型实际应用时的数据分布不一致的情况。我们将探讨两种主要的数据集偏移类型:对抗性扰动和自然数据变化,并介绍一些应对策略,包括迁移学习和表示学习方法。
数据集偏移概述

上一节我们介绍了课程主题,本节中我们来看看什么是数据集偏移。考虑以下场景:你是一名数据科学家,在一家医院(例如大众综合医院)精心构建了一个机器学习任务。你确保数据定义清晰,预测标签明确。你在训练数据上训练模型,在测试集上验证,模型泛化良好。你进行图表审查,确保预测内容符合预期。你甚至进行了前瞻性部署,让机器学习算法驱动临床决策支持,一切看起来都很顺利。
这个阶段之后会发生什么?当你进行部署时,当你的相同模型不仅明天被使用,下周、下个月、下一年也被使用时会发生什么?如果你的模型在这家医院运行良好,然后另一家机构(例如妇女医院、旧金山的医院或美国的一些农村医院)想使用同样的模型,它在短期内、长期内或在新的机构中会继续有效吗?这就是我们将在今天的课上讨论的问题。
为什么你的机器学习算法在这种设置下可能无法工作?这是因为当我们进行机器学习时,我们所做的一个核心假设是:你的训练数据与测试数据来自相同的分布。因此,如果你现在转向数据分布已经发生变化的设置,即使你根据原始数据计算的准确率看起来很不错,也没有理由期望它在数据分布发生变化的新设置中继续表现良好。
数据集偏移的示例
上一节我们了解了数据集偏移的概念,本节中我们来看看一些具体的例子。

标签定义变化
下面是一个简单的例子,说明数据分布发生变化意味着什么。假设我们的输入数据是 X,我们试图预测一些标签 Y。Y 可能表示病人是否患有或被新诊断为2型糖尿病。你学习一个从 X 预测 Y 的模型。
现在假设你去了一个新的机构,他们对2型糖尿病的定义发生了变化。也许他们的数据中没有单独编码2型糖尿病,只编码了笼统的“糖尿病”,将1型和2型糖尿病混在一起。1型糖尿病通常是青少年糖尿病,与2型糖尿病是截然不同的疾病。所以现在“糖尿病”的概念是不同的,用例也可能略有不同。很明显,你用来预测2型糖尿病的模型可能无法很好地预测这个新标签。

这是一个典型的数据集偏移例子。在这种情况下,给定 X 的 Y 的分布发生了变化。即使对于同一个人,在两个机构中 Y 的分布 P(Y|X) 也可能不同。这是一种类型的数据集偏移。

协变量偏移
另一种非常不同的数据集偏移是,我们假设 P(Y|X) 在两个分布中相等,唯一可能改变的是 X 的分布 P(X)。这种类型的数据集偏移被称为协变量偏移,它将是今天讲座的重点。
对抗性扰动示例

上一节我们看了标签定义变化,本节中我们来看看协变量偏移的一个具体子类:对抗性扰动。
你们都见过卷积神经网络在图像分类问题中的应用。你可以输入一张狗的照片,它显然被分类为狗。但是,你可以对图像进行微小的修改,在每个像素上添加一个非常小的噪声 ε,从而创建一个新图像。对人眼来说,这两个图像看起来一模一样。然而,当你将原本在无扰动数据上训练的机器学习分类器应用于这个新图像时,它可能被错误地分类为“鸵鸟”。

这一观察发表在2014年一篇名为《神经网络的有趣特性》的论文中,并引发了机器学习社区对对抗性扰动的浓厚兴趣。问题在于:如果你稍微干扰输入,这会如何改变分类器的输出?这能被用来攻击机器学习算法吗?反过来,一个人又该如何防御它?
这是一种数据集偏移,因为实际的标签没有改变(它仍然应该被归类为狗),但输入的分布略有不同,因为我们允许在每个输入中添加一些噪声。在这种情况下,噪声实际上不是随机的,而是对抗性的。

对抗性扰动在医疗领域的应用
我们为什么要关心这类事情?在这门课程中,是因为我希望这种对抗性的数据集偏移(虽然不自然)也将开始出现在计算机视觉和非计算机视觉问题中,包括医学领域。
例如,考虑皮肤病学中的图像分类问题。你得到一张图像作为输入,希望将其分类为某种特定类型的皮肤病(如黑色素瘤)。研究表明,通过对输入进行微小的扰动,可以完全改变分配给它的标签。
一篇论文讨论了如何恶意使用这些算法来谋利。例如,想象一家健康保险公司决定,为了报销病人昂贵的皮肤活检费用,临床医生或护士必须首先拍摄疾病的照片,并将该照片与该程序的账单一起提交。保险公司可能使用机器学习算法来自动检查该程序是否合理。如果不是,它可能会被标记。现在,恶意用户可能会扰乱输入,使得尽管病人的皮肤看起来完全正常,机器学习算法仍可能将其归类为异常,从而可能通过该程序获得报销。
显然这是一个恶意环境的例子。尽管如此,我们希望能够做的是在系统中建立制衡机制,使得这种情况不可能发生。因为对人类来说,很明显不应该被如此微小的干扰所欺骗。那么,你如何构建不那么容易被欺骗的算法?
自然数据变化示例

上一节讨论了人为的对抗性扰动,本节中我们来看看数据因自然原因发生变化的情况。
这个图表来自第五讲,当时我们在风险分层的背景下谈论非平稳性。X轴是时间,Y轴是不同类型的实验室测试结果。颜色表示在某个时间点、某个人群中订购了多少这些实验室测试。我们希望看到的是,如果数据是平稳的,每一行都应该是均匀的颜色。但相反,我们看到在某些时间点(例如每隔几个月),一些实验室测试似乎从未进行过。这很可能是由于数据问题,或者实验室测试提供商的数据丢失,系统出了点问题。
但也会有一些设置,例如,一种实验室测试从未被使用,直到它突然被使用。这可能是因为这是一种新的测试,刚刚被发明或批准,并在那个时间点获得报销。这是一个非平稳性的例子,当然,这也可能导致数据分布的变化。
第三个例子是跨越不同机构。一个极端的例子是美国的医院相对于中国的医院,临床记录将用完全不同的语言书写。一个不那么极端的例子可能是波士顿的两家不同的医院,用于某些临床术语的首字母缩写或速记可能因当地实践而不同。
那么,我们该怎么办?在剩下的演讲中,我将首先简要谈谈人们如何建立人口水平检查来了解发生了什么变化。然后,今天讲座的大部分内容,我们将讨论如何开发迁移学习算法,以及如何思考对抗攻击的防御。
评估算法在新机构的适用性
在我展示第一张幻灯片之前,我想讨论一下:假设你开发了一个机器学习算法,并且它在你的机构运行良好。现在你想知道,这个算法在其他机构行得通吗?你打电话给另一个机构的合作数据科学家,你应该问他们什么问题,以试图理解你的算法是否也能在那里工作?
以下是一些需要考虑的问题:
- 他们定期收集什么样的实验室测试信息?
- 他们有什么样的病人数据?
- 他们是否有类似的数据类型或特征可用于他们的患者群体?
例如,人口可能有差异。波士顿可能会有年轻人和老年人,或者在马萨诸塞州中部,年龄分布的变化会如何影响算法的泛化能力?年轻人的健康模式可能与老年人有很大的不同。也许有些疾病在年龄较大的人群中更流行。所以,如果你的模型是在一群非常年轻的人身上训练的,那么它可能无法很好地泛化到老年人群。
另一个例子与仪器校准有关。特别是在结肠镜检查领域,如果你在收集结肠的视频数据,不同相机设置的不同曝光,或者医生使用的不同技术,都可能导致数据本身的差异。目前还不清楚在一个过程或一种仪器上训练的算法是否会推广到另一个。

这些都是很好的例子。当一个人读到一篇来自临床社区的关于开发一种新的风险分层工具的论文时,你将永远看到一张所谓的“表1”。这张表格描述了研究中使用的人口特征,例如平均年龄、性别、种族、服用的药物、实验室测试结果等。
当你去一个新机构时,新机构接收的不仅仅是算法,还有这张描述算法学习群体的表格。他们可以利用这些知识和一些领域知识来思考:这个模型推广到这个新机构有意义吗?它可能不会的原因是什么?你甚至可以在对新人口进行任何前瞻性评估之前就这样做。

在你们的项目中,几乎所有人都应该有类似于表1的东西,因为这是该领域任何研究的重要组成部分:你正在研究的人口是什么?
数据集文档
近年来,这个问题确实引起了人们的注意,与我上周讨论的“公平与机器学习”话题密切相关。因为你可能会问,基于某些群体构建的分类器是否会推广到另一个人群?如果它所学习的人群非常有偏见(例如,可能都是白人),你可能会问,这个分类器在包括不同种族人群的另一个人群中会很好地工作吗?
这催生了一个概念,最近发表了一份工作草案,称为“数据集的数据表”。这里的目标是标准化描述,引出关于是什么数据集真正影响了你的模型的问题。
我将通过一个例子简单介绍几个元素。一个用于人脸识别研究的数据集的数据表可能包括:数据集的创建动机、组成、数据是如何预处理或清理的。例如,对于此数据集,它将经历以下过程:首先获得原始图像,然后运行人脸探测器,描述面部是如何被检测到的,以及如何删除重复项。
如果你回想一下本学期早些时候医学成像(如病理学和放射学)的例子,必须在那里进行类似的数据集构造。每一步都会产生一些偏见,需要仔细描述,以理解学习到的分类器的偏差是什么。

迁移学习方法
我现在要继续讨论一些更技术性的问题。我们正在做机器学习,现在,种群可能不同,我们该怎么办?我们能不能改变学习算法,希望你的算法能更好地转移到一个新的机构?或者如果我们从那个新机构得到一点数据,我们能利用新机构的少量数据,或者未来一个时间点的数据,重新训练我们的模型,使其在略有不同的分布中表现出色吗?这就是迁移学习的整个领域。

假设你有来自分布 P(X, Y) 的数据,也许我们有一点来自不同分布 Q(X, Y) 的数据。在协变量移位假设下,我们假设 Q(X, Y) = P(Y|X) * Q(X),即给定 X 的 Y 的条件分布没有改变,唯一可能改变的是你在 X 上的分布。假设我们从新的分布 Q 中提取了一些少量的数据,我们如何利用它来重新训练我们的分类器,让它为新的机构做得很好?
我将通过四种不同的方法来做到这一点,从最容易理解的线性模型开始,然后继续深度模型。
方法一:多任务学习与正则化
第一种方法是你已经在本课程中见过几次的东西:我们将把迁移看作是一个多任务学习问题,其中一个任务的数据比另一个任务少得多。
如果你还记得当我们谈到疾病进展模型时,我们引入了正则化权重向量的概念,这样他们就可以互相靠近。当时我们谈论的是预测未来不同时间点疾病进展的权重向量。我们可以在这里使用完全相同的想法。
你把你的线性分类器(在一个非常大的语料库上训练)的权重称为 w_old。然后你解决一个新的优化问题,即最小化损失函数,其中损失是在新训练数据 D(从 Q 分布中提取)上计算的。然后,增加一个正则化项,要求新的权重 w 应该保持在 w_old 附近。
公式表示为:
min_w L(w; D) + λ * ||w - w_old||^2
其中 λ 是一个系数。如果你拥有的新机构数据量非常大,那你就不需要这个正则化项,你可以忽略以前学过的分类器,把一切都修改到新机构的数据上。但像这样的方法特别有价值,如果有少量的数据集移动,并且你只有来自那个新机构的非常少量的标记数据。这样你就可以稍微改变一下你的权重向量。
如果系数 λ 很大,它会说新的 w 不能离旧的 w 太远,所以允许你稍微调整以适应你拥有的少量数据。例如,如果有一个特征在旧数据中能预测,但在新数据集中不再存在(例如,它总是等于零),那么新权重向量中该特征的权重将被设置为零,权重可以被重新分配到其他一些特征。
这是最简单的迁移学习方法,在你尝试更复杂的事情之前,总是先尝试这个。
方法二:手动特征对齐
第二种方法也涉及线性模型,但在这里,我们不再假设原始特征集仍然有用。当你从第一个机构(例如MGH)学习模型,想把它应用到一些新机构(例如UCSF)时,特征集可能发生了很大变化,使得原始特征对新特征集毫无用处。
一个非常极端的例子可能是我之前给出的设置:你的模型是用英语训练的,你想在中文数据上测试。如果你使用词袋模型,这显然是一个无法泛化的例子,因为你的特征完全不同。

那么在那种情况下你会怎么做?你能做的最简单的事是什么?翻译。假设你有一些机器翻译能力,将中文翻译成英文(因为最初的分类器是用英文训练的)。然后你的新特征是翻译函数和原始特征的组合。然后你可以想象做一些微调,如果你现在有少量的数据。
最简单的方法可能是查字典。如果这个词在另一种语言中有类比,你就翻译它。但在你的语言中总会有一些词没有很好的翻译,所以你可能会想象最简单的方法是翻译,但把没有很好类比的词去掉,并强制分类器只使用共享的词汇。

我们在这里讨论的一切都是手动选择决策的例子。所以我们将手动为数据选择一个新的表示形式,这样我们在源数据集和目标数据集之间就有了一些共享的特性。
让我们以电子健康记录(EHR)为例。EHR 1 和 EHR 2 中的概念可能映射到不同的编码。这就像英语到西班牙语的打字翻译。另一个改变可能是某些概念被删除了,比如你在EHR 1里有实验室测试结果,但EHR 2里没有。或者,可能会有新的概念,因此新机构可能拥有旧机构所没有的新类型的数据。

一种方法是从EHR 2中获得少量数据,用它来训练,扔掉EHR 1中的原始数据。当然,如果你只从目标分布中获得少量数据,这将是一个非常糟糕的方法。第二种明显的方法是在EHR 1上训练并直接应用,对于那些已经不存在的概念,就接受性能可能不佳。第三种方法(我们之前提到的)就是在这两个特征集的交集处学习一个模型。
一项研究采用了第三种方法。他们说我们要手动重新定义特征集,以找到尽可能多的共同点。这确实涉及到很多领域知识。他们看到的环境是预测医院死亡率或住院时间等结果。使用的模型是“事件袋”模型。他们记录病人直到预测时间点的纵向病史,查看发生的不同事件(如CVP警报、疼痛存在、给予肝素药物等)。每个事件被编码为一个特征。

当一个人去新机构(EHR 2)时,事件的编码方式可能完全不同。一个人不能仅仅使用原始的特征表示。但人们可以尝试的不是想出一个新的特征集,而是想出一种可以从每个不同数据集导出的特征集。例如,因为MIMIC中的每个事件都有相应的文字描述(如“缺血性中风”、“出血性中风”),人们可以尝试用英语对特征的描述,将其映射成一种共同语言,例如统一医学语言系统(UMLS)。
我们现在要在一个更大的特征集上学习模型,其中“缺血性中风”被编码为一个更一般的概念(如“中风”)。希望即使一些更具体的数据没有出现在新机构的数据中,更多的一些更一般的概念确实出现在那里。然后你要在这个扩展的翻译词汇表上学习你的模型。在新的机构里,你也将使用同样的通用数据模型。通过这种方式,人们希望在你的特征集中有更多的重叠。
为了评估这一点,作者观察了MIMIC中两个不同的时间点,医院使用了两种不同的电子健康记录系统。他们使用这种手动对齐的方法,然后在这个新编码的基础上学习一个线性模型,并通过观察损失了多少性能来比较结果。
结果表明,使用更丰富的原始特征集可以获得更好的预测性能,但必须担心泛化问题。而使用翻译后的通用词汇,虽然在源数据上评估时性能略有下降,但它泛化得更好。当你试图将模型从一个系统推广到另一个系统时,使用翻译词汇的版本显示出明显更好的性能。
方法三:深度表示迁移
有一个问题:我们如何自动地尝试这样的方法?我们如何自动找到数据的新表示形式,这些表示形式可能会从源分布泛化到目标分布?
说到这一点,我们现在要开始思考基于表示学习的方法,其中深度模型特别能够做到这一点。深度神经网络可以切断网络的一部分,并重用这个新位置中数据的一些内部表示。
具体做法是:数据在底部输入,经过许多卷积层和一些全连接层。你决定将在机构A训练好的模型在某个层(例如最后一个全连接层之前)切断。然后,数据的“新表示”就是经过这些层后得到的输出。你把目标分布的数据(可能只有少量)输入到这个截断的网络中,得到它们的表示。然后,你在这些新的表示形式上学习一个简单的模型(例如,使用支持向量机学习一个浅层分类器),或者你可以添加更多的深度神经网络层,然后进行微调。
这些方法都尝试过,在某些情况下,一种方法比另一种更好。我们在本课程中已经见过,在第十三讲中,Adam Yala 在他的方法中尝试了两种方式:使用在ImageNet上预训练的模型进行初始化并微调,以及随机初始化。在他的案例中,他有足够的数据,实际上不需要使用ImageNet预训练模型,随机初始化最终也能达到非常相似的性能。但使用ImageNet初始化然后微调,能更快地达到目标性能。
然而,在医学成像的许多其他应用中,这些技巧变得必不可少,因为你在新的测试用例中没有足够的数据。所以,一个人可以利用从ImageNet任务中学到的过滤器(尽管这与医学成像问题截然不同),然后使用同样的过滤器,加上一套新的顶层,以便对你关心的问题进行微调。
这将是试图在一个深度架构中找到可迁移表示的最简单方法。但你可能会问,如何对时间序列数据、自然语言数据或健康保险索赔序列数据做同样的事情?为此,你真的需要考虑递归神经网络(RNN)。
递归神经网络是一种循环架构,你把一些向量作为输入(例如,在语言建模中,该向量可能是一个独热编码,表示该位置的单词)。它被输入一个循环单元,该单元将之前的隐藏状态与当前输入组合,产生一个新的隐藏状态。你读入完整的输入序列,然后可能根据最后一步的隐藏状态进行分类。

一个简单的循环单元公式是:
s_t = f(W_s * s_{t-1} + W_x * x_t)
其中 s_t 是当前隐藏状态,s_{t-1} 是前一个隐藏状态,x_t 是当前输入,W_s 和 W_x 是权重矩阵,f 是非线性激活函数。
W_x 矩阵的维度是(隐藏状态维度 x 词汇表大小)。如果你有大量的词汇量,这个矩阵会非常大,很快就会导致对稀有单词的过拟合。一个解决方案是使用 W_x 矩阵的低秩表示,特别是引入一个低维瓶颈。你可以让原始输入 x_t(一个独热编码)乘以一个嵌入矩阵 W_e,得到一个低维向量 x'_t(词嵌入)。然后你的循环单元只接受 x'_t 作为输入。这样,嵌入矩阵 W_e



课程 P25:可解释性 🧠
在本节课中,我们将探讨机器学习模型的可解释性。这是一个至关重要的主题,因为复杂的模型(如拥有数十亿参数的GPT-2)虽然强大,但其内部决策过程却难以理解。如果我们无法理解模型,就无法判断其决策是否公平或存在偏见。因此,我们将学习人们为解决这一“黑箱”问题而开发的各种方法。
概述:为什么需要可解释性?
理解复杂模型为何有效并非易事。答案显然不在于某个特定参数的具体数值。在关于公平性的讲座中,我们提到过,如果无法理解模型,就无法检查它是否产生了偏见。本节课将介绍克服模型“高深莫测”问题的不同方法。
人类认知的局限:米勒定律
在深入技术方法之前,了解人类认知的局限性很有帮助。心理学家乔治·米勒在1956年提出了著名的“神奇的数字7±2”理论。该理论指出,人类在信息处理能力上存在限制,例如:
- 我们能区分的不同声音强度等级大约为7±2个。
- 我们能区分的不同颜色数量大约为7±2种。
- 我们能记住的项目数量大约为7±2个。
这表明,如果给人类一个包含20个要点的解释,他们很可能无法完全理解,因为无法同时将所有部分记在脑中。这一观察结果在解释复杂模型时扮演着重要角色,因为它意味着解释不能包含太多不同的因素。
复杂模型的来源与应对策略
复杂模型的出现有多种原因。过拟合是其中之一,但更根本的原因是,世界本身就很复杂。人类并非被设计出来,而是进化而来,这留下了各种复杂的机制。那么,我们该如何处理这个问题呢?
主要有两种应对思路:
- 编造“故事”进行局部解释:对复杂模型进行局部近似,然后解释这个简化后的模型。这就像鲁德亚德·吉卜林写的《原来如此的故事》,用简单、可爱的故事解释复杂现象(如狮子如何得到鬃毛)。在机器学习中,我们也会采用类似方法,对模型在特定情况下的行为进行局部近似和解释。
- 牺牲性能换取可解释性:使用本质上就更简单、更易解释的模型(如决策树、逻辑回归),尽管它们的性能可能略低于最复杂的模型。这种牺牲是值得的,因为模型通常只是辅助人类决策的工具。决策者(如外科医生)需要理解模型的推荐逻辑,才能建立信任。
方法一:局部近似与LIME
上一节我们提到了用“故事”进行局部解释的思路,本节中我们来看看一个具体的实现方法:LIME(Local Interpretable Model-agnostic Explanations)。
LIME的核心思想
LIME 的核心思想是:虽然我们无法理解整个复杂模型 f,但可以针对单个预测实例,在其附近用一个简单的、可解释的模型 g(如线性模型)来近似 f 的行为。
公式化描述如下:
- 设原始数据空间为
X(维度为D)。 - 我们定义一个可解释的表示空间
X'(维度为D',通常D' << D),其变量是二进制的(例如,某个词是否出现,某个图像超像素是否被激活)。 - 复杂模型
f: X -> [0,1](例如,属于某类的概率)。 - 可解释模型
g: X' -> [0,1](例如,线性回归、决策树)。 - 定义一个衡量数据点之间接近度的函数
π_x(z),用于在解释点x附近赋予样本点z不同的权重。 - LIME 通过最小化以下目标函数来寻找最佳解释
g:
其中L(f, g, π_x) + Ω(g)L是损失函数,衡量g在x附近对f的近似程度;Ω(g)是模型g的复杂度惩罚项(如线性模型的非零权重数),以确保解释的简洁性。
操作流程简述:
- 在想要解释的预测点
x附近进行采样。 - 用复杂模型
f为这些采样点生成预测标签。 - 根据接近度
π_x为这些采样点赋予权重。 - 在加权的采样数据上,训练一个简单的可解释模型
g。 - 用
g来解释x的预测结果。
LIME的应用示例
以下是LIME在不同数据类型上的应用:

1. 文本分类
例如,判断一个帖子是关于基督教还是无神论。LIME可以列出对当前预测贡献最大(正面或负面)的词语。
预测:无神论
正面贡献词:”posting”, “host”
负面贡献词:”God”, “Koresh”, “mean”
通过比较不同模型对同一案例的解释,我们可以判断哪个模型的决策依据更合理(例如,依赖“God”一词比依赖“NNP”这样的元数据标签更合理)。

2. 图像分类
例如,识别图片中的物体是“拉布拉多犬”还是“电吉他”。LIME可以将图像分割成“超像素”(颜色/纹理相似的区域),然后指出哪些区域支持或反对某个分类标签。
LIME的评估与局限性
LIME方法可以通过“解释矩阵”来评估整个模型的可信度。该矩阵展示了不同案例下各个特征与模型决策的相关性。通过选择一组能最好地覆盖所有重要特征的案例,可以帮助用户理解模型的整体行为。
然而,LIME也存在批评,主要集中在其距离函数 π_x 的选择上。原始方法中使用固定的距离尺度可能不是最优的。后续研究提出,应根据解释点离决策边界的远近来动态调整邻域大小。
方法二:基于案例的推理与对比解释


另一种解释思路是基于案例的推理。这种方法在法律等领域很常见,即通过引用相似的先例(“盟友”案例)和不同的先例(“敌人”案例)来解释当前决策。
核心思想:
- 盟友:与当前案例预测结果相同的训练样本。
- 敌人:与当前案例预测结果不同的训练样本。
通过展示关键的盟友和敌人案例,并提供对比解释(即“为什么是A而不是B”),可以给出更令人满意和更具洞察力的解释。这种方法改进了距离函数,使其不仅考虑空间距离,还考虑预测差异,从而能更好地识别出对当前决策最具代表性的邻近案例。
方法三:构建本质可解释的模型
上一节我们讨论了如何解释复杂的“黑箱”模型,本节我们来看看另一种根本不同的思路:直接构建本质就可解释的简单模型,并愿意为此牺牲少量性能。
下降规则列表

一个著名的例子是下降规则列表。它是一系列按顺序评估的“如果-那么”规则,规则的风险评分(例如,患病的概率)逐条下降。

示例:
如果 {肿块形状不规则 且 病人年龄 > 60岁},那么 恶性肿瘤概率为 85% (n=230)
否则,如果 {肿块边缘有毛刺 且 病人年龄 > 45岁},那么 恶性肿瘤概率为 78% (n=12)
否则,如果 {肿块边缘模糊 且 病人年龄 > 60岁},那么 恶性肿瘤概率为 69% (n=3)
...
否则,恶性肿瘤概率为 10% (n=100)
这种模型非常容易理解,即使对非技术人员(如医生)也是如此。构建这样的模型本身是一个复杂的优化过程,涉及贝叶斯方法、频繁项集挖掘和蒙特卡洛采样等,但其最终产物是简洁明了的。
性能与可解释性的权衡
研究表明,在许多任务上(如医院30天再入院预测),下降规则列表等可解释模型的性能(如AUC)与逻辑回归、随机森林等相当,有时仅略低一点。然而,其可解释性的优势是巨大的。当模型用于辅助关键决策时,牺牲1%-2%的准确率以换取决策者对模型逻辑的完全理解和信任,通常是值得的。
注意事项:注意力机制不等于可解释性
在追求可解释性的过程中,需要注意区分机制与解释。例如,注意力机制在深度学习模型中非常有用,它能显示模型在决策时“关注”了输入的哪些部分(如图像区域或文本单词)。然而,研究表明,高注意力权重与特征的实际重要性(通过梯度或特征消融法衡量)之间的相关性可能很弱。因此,注意力权重本身并不能直接等同于模型的解释,它只是模型内部运作的一种可视化提示。
总结
本节课中,我们一起学习了机器学习模型可解释性的重要性及主要方法:
- 局部近似解释:以LIME为代表,通过用简单模型局部拟合复杂模型的行为,为单个预测提供解释。其优势是模型无关,但解释是局部的,且距离函数的选择需要谨慎。
- 基于案例的推理:通过展示相似和相反的案例来进行对比解释,更符合人类的推理习惯。
- 构建本质可解释模型:以下降规则列表为代表,直接构建简单、透明的模型,愿意为可解释性牺牲少量性能。这是最直接、最可靠的获得可解释性的途径。

可解释性是确保机器学习模型在医疗等高风险领域被负责任地使用、建立用户信任的关键。目前,这仍然是一个活跃且快速发展的研究领域。



课程P3:深入临床数据 🏥
在本节课中,我们将深入学习临床数据的构成、特点以及处理数据时可能遇到的挑战。我们将通过具体的例子,了解数据中可能存在的陷阱,并探讨如何从复杂的医疗信息中提取有价值的内容。
数据中的陷阱:心率分布之谜
上一节我们介绍了医学数据的重要性,本节中我们来看看一个具体的数据分析案例,它揭示了数据中可能隐藏的陷阱。
几年前,在研究MIMIC-III数据库时,我查看了CareVue系统中患者心率的分布。这个数据库包含了贝斯以色列女执事医疗中心重症监护室约12年间的入院数据。
一个技术难题是,在这段时间的中期,医院的重症监护室从一个旧信息系统(CareVue)切换到了一个新系统(MetaVision)。这两个系统并不完全兼容。
观察来自CareVue的旧数据时,心率分布图显示了一个有趣的现象:分布图上有两个峰值。这并不常见。
为了探究原因,我分别查看了两个系统的心率数据。来自CareVue的数据确实呈现双峰分布,而来自MetaVision的数据则呈现更常见的单峰分布。
这引发了一个问题:为什么在系统切换后,一部分人的心率似乎“变快”了?关键在于,哪部分人的心率更快?
查看统计数据发现,CareVue中的平均心率是108,而MetaVision中是87。但平均值在双峰分布中意义不大。
于是,我尝试只观察成年患者(年龄在1岁到90岁之间)。这时,两个系统的分布看起来非常接近。这意味着,成年患者群体在两个数据集中的年龄构成是相似的。
然而,如果不排除非常年轻或非常年长的患者,就会在CareVue数据中看到一个巨大的峰值出现在0岁。原因是,旧系统(CareVue)也被用于新生儿重症监护室,而新系统(MetaVision)没有,因此没有捕捉到婴儿的数据。
事实上,如果观察整个人群的年龄与心率,会看到两个奇怪的群体:我们讨论的成年人,以及心率更高的婴儿。此外,数据中还有一批“300岁”的老人。
“300岁”是一个数据 artifact(人工痕迹)。根据美国《健康保险携带和责任法案》(HIPAA)的规定,为了保护个人健康信息,不允许记录90岁或以上患者的具体年龄。因为97岁的老人数量很少,如果透露年龄,很容易被识别出来。
因此,数据库中所有90岁或以上的患者都被标记为300岁。这就像我年轻时在加州大学洛杉矶分校做程序员,我们用999.9来表示缺失数据一样。如果不加辨别地将这些数据纳入分析,就会得到错误的结果。
在成年患者中,两个系统的心率数据看起来是相似的。蓝点和红点之间的趋势线表明,随着年龄增长,心率有轻微下降,且两个数据集的趋势一致。
至于“300岁以上”的数据点,那是因为年龄是在测量心率时计算的。如果患者入院时被标记为300岁,并在医院住了六个月,那么到测量时,年龄就变成了300.5岁。
婴儿的心率确实更高。而“老年人”的数据点之所以超过300岁,可能是因为患者出院后又再次入院,系统记录了更多数据。
这个案例的教训是:查看数据时必须非常小心,因为数据中可能包含各种有趣的人工痕迹,很容易误导分析者。



临床数据的类型目录
理解了数据陷阱后,我们来看看临床数据包含哪些主要类型。以下是医院电子健康记录中典型的数据类别:

- 人口统计学数据:保险类型、语言、宗教、生活状况、家庭结构、地点、工作等。
- 生命体征:体重、身高、脉搏、呼吸频率、体温、血压等。这些是就诊时的标准测量项目。
- 药物:处方药、非处方药、非法药物。患者有时会对医疗提供者隐瞒信息。药物协调是一个重要领域,旨在厘清患者实际服用的药物,但记录往往不准确。
- 实验室测试:主要是血液和尿液成分分析,也包括其他体液如粪便、唾液、脑脊液、腹水、关节液、骨髓液、肺部分泌物等。
- 病理学报告:对身体组织(如活检样本或手术切除物)的定性和定量检查。
- 微生物学数据:识别患者体内的微生物,并进行抗生素敏感性测试,以确定有效的药物剂量。
- 液体出入量:跟踪患者体内液体的摄入和排出,对于管理脱水或液体过量至关重要。
- 医疗记录:
- 出院摘要:住院结束时撰写的总结,包括入院原因、治疗过程、主要发现及出院后计划。
- 主治医师记录、住院医师记录、护士记录、各专科会诊记录、转诊医生记录等。
- 急诊科记录:通常是患者与医疗系统的首次接触记录。
- 账单数据:为计费而收集的大量数据,采用标准化格式描述患者状况和所接受的治疗。
- 管理数据:如患者所在的服务单元、在医院内的转移记录等。
- 影像数据:X光、超声、MRI、PET扫描、视网膜扫描、内窥镜图像、皮肤照片等。机器学习技术在解读这些数据方面取得了巨大进展。
- 量化自我数据:来自活动追踪器的数据,如步数、海拔变化、锻炼记录、生命体征、正念状态、情绪、睡眠、疼痛、性活动等。还有“N-of-1实验”的概念,即患者像科学家一样,系统地尝试并记录各种干预措施的效果。


数据实例:患者病情概览
为了更直观地理解这些数据如何呈现,我们来看一个来自MIMIC-III数据库的患者案例幻灯片。


这张幻灯片概述了一位患者的情况:
- 代码状态:患者最初希望全力抢救(“Full Code”),最终转为仅接受舒适护理(“Comfort Measures Only”)。
- 格拉斯哥昏迷评分(GCS):用于量化意识水平。该患者从清醒逐渐恶化到仅能发出无意义的声音,对刺激仅有屈曲反应。
- 生命体征与实验室数据:展示了血小板、肌酐、白细胞计数等指标随时间的变化趋势。
- 药物:包括万古霉素(抗生素)、哌拉西林、氯化钠、地塞米松和葡萄糖等。
- 测量值:心率在后期显著升高,血氧饱和度从良好水平下降到不合理的低值(约60%-50%,正常应高于92%)。
所有这些信息共同描绘出该患者病情急剧恶化并最终死亡的画面。
数据探索:人口统计学分析
现在,让我们对数据库中的数据进行一些基本探索。我们可以分析患者的人口统计学特征。

如果查看数据库中最后一次实验室测量时的患者年龄,会发现重症监护室的患者以老年人居多,年轻人较少。女性和男性的年龄分布曲线相似。
人口统计学因素通常包括以下变量:
- 入院类型:急诊、择期护理等。不同入院类型的年龄分布似乎差异不大。
- 保险类型:支付方的年龄分布差异很大。私人保险在65岁左右急剧下降,这是因为医疗保险通常覆盖65岁及以上的人群。自费患者比例很小,因为医疗费用极其昂贵。
- 入院来源:来自诊所、急诊室、健康维护组织推荐、专业护理机构或院内转移。来自专业护理机构的患者通常更年长。
- 语言:说俄语的患者平均年龄最大,这可能与移民模式有关。
- 种族:总体而言,非裔美国人和西班牙裔患者比白人患者更年轻。这反映了医疗保健中存在的差异和偏见问题。
- 婚姻状况:单身患者的入院年龄似乎更小。
一个有趣的问题是:能否仅从这些人口统计学特征预测医院死亡率?

使用R语言工具进行逻辑回归分析发现,唯一非常重要的预测因素是年龄(老年人死亡风险更高)。如果种族信息“无法获取”,死亡风险也更高,原因尚不明确。其他因素(如语言、婚姻状况)的预测作用不显著。

数据标准化与编码的挑战
从CareVue到MetaVision的系统转换问题,实际上是医疗数据领域一个更大挑战的缩影:缺乏统一标准。每家医院都有自己的记录方式。
例如,在MIMIC数据库中查看处方时,同一次入院可能会有不同的编码系统:
- 医院内部的私有处方代码。
- 来自药物供应商的商业编码系统代码。
- 美国食品药品监督管理局(FDA)分配的国家药品代码(NDC)。
- 还有人类可读的描述。
NDC代码可能是最好的编码系统之一,其结构通常为:前4-5位是标签商(制造商或分销商),中间4位是产品代码(剂型、规格),最后2位是包装代码。然而,由于号码耗尽,现在出现了新旧代码转换的难题。
此外,还有国际人用药品注册技术要求协调理事会开发的MedDRA编码系统、常见操作术语代码以及HCPCS代码等。医院可能还会使用来自行业标准(如First Databank的GSN号码)的代码,造成了冗余。

关于手术操作,数据库中有多个表格,使用不同的编码系统记录手术事件,如ICD-9代码、CPT代码和更新的ICD-10代码。CPT代码归美国医学会所有,受版权保护,使用需付费。
实验室测量也有其编码系统,如LOINC(逻辑观察标识符名称与代码),它是HL7(一个致力于医疗信息标准化的组织)标准的一部分。LOINC旨在为每种实验室测试提供唯一的、有层次结构的名称。
图表事件(如护士在床边录入的数据)包括心率、血氧饱和度、呼吸频率等。在合并数据库中,来自不同系统的相同测量可能被赋予不同标签,这给分析带来了机械性挑战。
输入输出事件(记录患者的液体摄入和排出)同样存在来自不同系统、标签可能不一致的问题。
从数据中挖掘模式:以昼夜变化为例


有一篇有趣的论文探讨了实验室检测结果的昼夜变化模式。研究者发现,在夜间进行的实验室测试,其异常结果的比例更高。这可能是因为在夜间抽血的患者本身病情就更重。

我尝试在MIMIC数据库中复现这项研究,但很大程度上失败了,因为我们没有足够的相关数据(例如白细胞计数的测量次数不多)。

如果观察每小时异常白细胞计数值的比例,确实可以看到在凌晨5点左右异常比例更高,下午3点左右较低,这与那篇论文的发现一致。
然而,建立一个简单的逻辑回归模型来预测死亡率时,只有少数特定小时的数据显示出显著性,这看起来更像是噪音而非有效信号。不同测量值的分布(如存活者与死亡者之间)差异不大,且数据量可能不足。
观察其他实验室指标(如血尿素氮、二氧化碳等),会发现其异常比例随时间确实存在变化。这种变化可能源于人体的昼夜生理节律,也可能源于医疗实践的常规安排。
使用实验室提供的“正常/低/高”标志(这取决于设备校准)进行分析,也能观察到类似的现象:高值比例在夜间上升,低值比例在夜间下降。
但测量完成时间的分布,在正常和异常结果之间有很多相似之处,并未显示出强烈的模式。

新兴数据源与笔记的价值


除了传统临床数据,新兴数据源如可穿戴设备(如智能手表)能提供连续的心率、心率变异性等信息,为健康评估提供了新维度。

影像数据的分析也取得了突破。例如,有研究使用深度学习技术识别肺部CT图像中的肺栓塞,其性能据称优于放射科医生。还有技术能自动分析脑部MRI图像中的白质病变,以识别狼疮。
本节课最后想重点讨论的是临床笔记。文本笔记中包含了大量无法从原始数据中直接获取的人类理解和语境信息。
上学期,我的学生进行了一项练习,向参与者提供患者数据(包括类似之前的可视化摘要和去标识化的临床笔记),让他们预测患者死亡率。结果发现,参与者利用笔记做出的预测略优于随机猜测。反馈机制能帮助他们学习并提高预测准确性。
我个人在参与练习时也发现,护理笔记和出院摘要中的信息比实验室数据的趋势线更有用。部分原因是我更习惯阅读文字,部分原因是人类在笔记中记录的理解层次是原始数据无法替代的。
在MIMIC数据库中,有各种类型的笔记:护理笔记、放射学报告、心电图报告、医生记录和出院摘要等。出院摘要通常非常长(可达数万个字符),是对整个住院过程的总结。护理笔记和医生记录则相对较短。
一段简短的护理笔记可能记录患者的血压状况、药物滴注、伤口感染情况等,为交接班和医疗法律记录提供了重要信息。
一份典型的出院摘要则包含入院原因、既往病史、体格检查结果、相关实验室结果、医院病程、各系统回顾、出院时状况、出院带药、出院后处置计划、随访指示等,信息量巨大。
关于标准化的最后说明
在之前的课程中,你们已经了解了OMOP通用数据模型,这是一种标准化临床数据表示的方法。未来MIMIC数据库的新版本可能会采用OMOP格式。
另一个重要标准是FHIR,它旨在简化不同医疗信息系统之间的数据交换。尽管现实中存在商业壁垒,但该标准正得到越来越广泛的部署。
医疗领域存在大量的术语标准,如用于诊断的ICD-9/10、用于药物的NDC/RxNorm、用于实验室的LOINC、用于精神疾病的DSM-5等。统一医学语言系统整合了约180个不同的术语集,提供了一个一站式查询资源。
总结与要点
本节课中,我们一起深入探讨了临床数据的复杂面貌。

核心要点总结如下:
- 了解你的数据至关重要。第一个关于心率的故事表明,对不了解的数据进行机器学习很可能导致错误结论。
- 数据标准化既困难又耗时。缺乏统一标准导致每家机构都发展出自己的表示方法,造成了互操作性问题。
- 数据清理是主要工作。大约十年前,我的一个博士生在论文中提到,他花了大约一半的时间清理数据。这大致反映了该领域的现状。

虽然处理临床数据充满挑战,但它是从医疗信息中提取价值的基础。在接下来的课程中,我们将学习如何利用这些数据构建模型,并展示可以实现的成果。



课程 P4:风险分层(第一部分) 🏥
在本节课中,我们将要学习风险分层的基本概念、应用场景以及如何利用机器学习方法解决相关问题。我们将从一个具体的案例研究——2型糖尿病的早期发现——入手,探讨风险分层在实践中的应用、面临的挑战以及评估方法。课程的后半部分将包含与行业专家的访谈,分享实际应用中的经验与见解。

什么是风险分层?


风险分层是一种将患者群体划分为不同风险类别的方法,例如高风险患者、低风险患者或中间风险患者。我们进行风险分层的目的,通常是为了根据预测结果采取相应的干预措施。例如,对于高风险患者,我们可以尝试采取预防措施,以防止不良结果的发生。

上一节我们介绍了风险分层的核心目标,本节中我们来看看它与诊断的区别。
风险分层与诊断有很大不同。诊断通常有非常严格的性能标准,误诊可能导致严重后果。而风险分层本质上更为模糊,我们更关注如何将患者尽可能准确地归入不同的风险类别。我们通常更关心阳性预测值等指标,即我们标记为高风险的患者中,实际高风险的比例是多少。此外,风险分层所使用的数据也更为多样化,可能包括患者人口统计学、社会经济信息等,这些信息虽然可能不用于无偏诊断,但会极大地影响风险状况的评估。

风险分层在很大程度上是为了降低美国医疗保健环境的成本。以下是几个风险分层的例子:

- 预测早产儿患严重疾病的风险:例如,传统的阿普加评分。新的研究正在探索如何使用机器学习方法提高预测婴儿发病率的能力。
- 预测急诊科心脏疾病患者是否需要入院:例如,1984年的一项研究使用逻辑回归模型,旨在通过快速识别低风险患者来降低成本。
- 预测患者再住院的可能性:美国政府对此高度关注,并对再住院率高的医院进行处罚。通过预测高风险患者,可以改变出院管理方式(如家访、加强沟通),以降低再入院率。


传统方法与机器学习方法

自从1984年的文章以来,风险分层的方法发生了显著变化。
传统的风险分层方法基于评分系统,如阿普加评分。这些规则通过仔细研究推导,在医疗系统中被广泛使用。然而,它们通常需要手动计算,使用频率可能不高。
在过去的五到十年里,行业迅速转向基于机器学习的方法。这些方法可以处理更高维的特征,解决早期方法的一些关键挑战,并且更容易适应临床工作流程。它们可以获得更高的精度(可能因为使用了更多特征),并且开发速度更快。机器学习方法使得研究人员能够利用现有大数据集,预测即使是罕见的结果。
然而,这些新方法也带来了新的风险,我们将在课程中讨论。
这些模型正在被广泛商业化。例如,Optum公司开发了预测慢性阻塞性肺疾病相关住院率的模型,可以对患者群体进行分层,并深入查看高风险患者的具体情况。
案例研究:2型糖尿病的早期发现 🩺
我们现在进入一个关于早期发现2型糖尿病的案例研究。
这个问题非常重要,因为据估计美国有20.5%的2型糖尿病患者未被确诊。如果我们能识别出当前患病或有患病风险的患者,就可以尝试进行干预,例如减肥计划或药物治疗。
传统方法(如芬兰糖尿病风险评分)通过一系列手动计算的问题来评估风险。但这些评分并未产生预期的影响,部分原因是它们未被充分使用。

我们考虑的改变是:能否利用健康保险公司的数据,使用机器学习方法,自动对数百万患者进行风险评估,从而识别高危人群并进行干预?本案例基于我实验室过去几年的研究工作。

这是一个在支付方层面进行风险分层的例子。
用于这个问题的数据是管理数据,通常来自健康保险公司。数据包括:
- 资格记录:患者参保时间。
- 医疗索赔:诊断代码、程序代码、就诊专家类型、服务地点和时间。
- 药房记录:药物处方、国家药品编码、供应天数、补充次数。
- 实验室测试:测试项目及结果。
该研究人群来自费城,拥有实验室数据的患者约13.5万人。数据中包含大量诊断代码(如高血压)和实验室测试(如肝酶、血红蛋白A1c)。
构建机器学习问题
现在,让我们思考如何将风险分层问题构建为机器学习问题。
我们将问题简化为二分类。我们假设当前时间是2009年1月1日,利用过去的数据构建特征,预测未来某个时间窗口内患者是否会新发2型糖尿病。
我们可以定义不同的预测间隔(如0年、1年、2年间隔)。研究中通常包含一个间隔(如1年),以避免标签泄漏。因为临床医生可能已经怀疑患者患病并开始干预,但我们的算法尚未从数据中捕捉到这些信号。我们更希望找到那些患病风险更出人意料的患者。
数据存在严重的删失问题:
- 左删失:在特征构建窗口期之前没有患者数据。
- 右删失:在预测时间窗口之后没有患者数据(例如患者更换了保险公司)。
对于左删失,我们使用患者过去两年内的任何可用数据,数据较少的患者其特征向量会更稀疏。对于右删失,在这种二分类设置中处理起来更具挑战性。研究中通过改变纳入和排除标准(例如排除标签未知的患者)来忽略它。但这可能引入偏差,例如,患者因确诊糖尿病而更换保险公司,导致其被排除,从而影响模型的普遍性。
机器学习算法与评估
该论文使用的机器学习算法是L1正则化逻辑回归。使用L1正则化的原因之一是它能进行特征选择,有助于防止过拟合,并且可能找到一个只使用少量特征的简洁风险模型(这与传统评分理念一致)。另一个原因是可解释性,便于理解模型使用了哪些特征做预测,也便于在只有部分特征的新环境中部署模型。
以下是研究中使用的特征构建方法:
- 考虑到大量数据缺失,特征多为二元指示器(是否看过某类专家、是否服用过某种药物等)。
- 对于实验室数据,不仅记录是否进行过测试,还衍生出结果是否过低、过高、正常、数值是否上升、下降、波动等特征。
- 为了纳入时间信息,分别为过去6个月、过去24个月以及所有历史数据计算这些特征,并将它们拼接起来,最终形成一个约42,000维的特征向量。
接下来,我们简要讨论如何评估这类模型。
评估风险分层模型的标准与诊断模型有所不同。我们经常使用的一种方法是阳性预测值。即,在模型给出预测后,查看排名前N(如100、1000、10000)的患者中,实际患上糖尿病的有多少比例。我们可能对不同层级感兴趣,因为可以根据干预措施的成本和风险来针对不同数量的患者。例如:
- 低成本干预(如发送提醒短信):可以针对前10,000名患者。研究中的模型在此层级实现了约10%的阳性预测值。
- 高成本干预(如专人上门随访):可能只针对前100名患者。研究中的模型在此层级实现了约15%的阳性预测值,而传统方法则低于一半。
总结


本节课中,我们一起学习了风险分层的基本概念及其在医疗保健中的应用。我们比较了传统的评分系统与现代的机器学习方法,并通过一个2型糖尿病早期发现的案例,深入探讨了如何将临床问题构建为机器学习问题、如何处理数据挑战(如删失)、以及如何评估模型性能(重点关注阳性预测值)。我们还了解到,在实际应用中,除了技术本身,理解临床工作流程、利益相关者动机以及建立信任同样至关重要。在接下来的课程中,我们将继续探讨生存分析等更深入的技术细节。



机器学习与医疗健康应用 第5课:风险分层(第二部分)📊
在本节课中,我们将继续深入探讨风险分层。我们将学习如何从数据中驱动标签、如何评估风险分层模型,并讨论将机器学习应用于医疗保健风险分层时可能遇到的一些微妙问题。最后,我们将引入生存建模的概念,以更优雅地处理事件发生时间预测的问题。
标签驱动:如何知道谁得了糖尿病?🏷️
上一节我们介绍了风险分层的基本概念。本节中,我们来看看如何从原始数据中确定“谁在特定时间窗口内患上了糖尿病”,即如何驱动标签。
在二型糖尿病风险分层的例子中,目标是利用健康保险索赔数据,预测未来一到三年内可能新确诊为二型糖尿病的患者。但核心问题是:我们如何知道某人是否在那个时间窗口内患上了糖尿病?
标签来源的挑战
简单地查看患者是否服用了糖尿病药物(如二甲双胍、胰岛素)是不够的。原因包括:
- 某些药物可能用于治疗其他疾病。
- 患者可能被诊断为糖尿病,但尚未开始治疗。
- 患者可能自费购药,因此在保险索赔数据中没有记录。
因此,我们需要更可靠的方法来定义“阳性病例”。
获取标签的传统方法
传统上,获取可靠标签通常分为两步:
第一步:手动标记(图表回顾)
- 抽取数百名患者的数据。
- 人工审查其电子健康记录(EHR),包括医生笔记、实验室结果、用药记录等,以判断患者是否患有糖尿病。
- 这一步对于理解数据缺陷和建立基本事实至关重要。
第二步:将标签推广到全体人群
通常有两种方法:
- 制定简单规则:例如,定义“如果患者有糖尿病药物记录或异常的糖化血红蛋白(HbA1c)检测结果,则视为糖尿病患者”。但这类规则往往精确度高(阳性预测值高),但召回率低(会漏掉很多患者)。
- 使用机器学习模型推导标签:这是一个“用机器学习解决机器学习问题”的过程。
- 利用第一步中手动标记的少量数据,训练一个模型。该模型的输入是患者的各种数据(实验室结果、药物等),目标是预测“该患者当前是否患有糖尿病”。
- 然后用这个训练好的模型,对整个患者人群进行预测,从而为每个人生成一个概率性的标签。
- 最后,使用这些生成的标签,去解决我们最初的风险预测机器学习任务。
为了进行图表回顾,尤其是在处理健康保险索赔数据时,通常需要构建可视化工具来浏览和理解患者随时间变化的数据轨迹。
模型评估:如何衡量好坏?📈
在得到标签并训练模型后,我们需要评估模型的性能。本节中,我们来看看常用的评估指标及其注意事项。
受试者工作特征曲线与曲线下面积
对于输出概率值的二分类模型,常用受试者工作特征曲线(ROC曲线)进行评估。
- X轴是假阳性率(FPR)。
- Y轴是真阳性率(TPR)。
- 通过调整分类阈值,可以得到一条曲线。曲线越靠近左上角,模型性能越好。
为了用一个数字概括ROC曲线的性能,我们计算ROC曲线下面积(AUC)。
- AUC = 1 表示完美模型。
- AUC = 0.5 表示随机猜测模型(对应从(0,0)到(1,1)的对角线)。
- AUC有一个重要的数学等价定义:它等于“模型将随机选取的一个阳性样本排在随机选取的一个阴性样本之前”的概率。这说明了AUC本质上是一个排序指标,并且对类别不平衡不敏感。
然而,AUC的缺点是它关注整个曲线,而我们实际应用时可能只关心曲线的某一部分(例如,只关注高阈值部分,因为我们只想干预风险最高的少数人)。为此,可以使用部分AUC等指标。
概率校准

当模型输出概率时,我们不仅关心排序,还关心概率值本身的准确性,即校准。
- 校准良好的模型意味着:如果模型预测100个患者的发病概率为70%,那么其中大约70人最终会发病。
- 可以通过校准曲线图来评估:将预测概率分箱(如0-0.1, 0.1-0.2...),计算每个箱内患者的实际阳性事件发生率,并绘制其与预测概率中值的关系。理想情况下,点应落在对角线上。
- 如果某个概率区间的数据点很少,则该点估计的置信区间会很大,解读时需谨慎。

微妙之处与挑战:现实世界并不完美⚠️

将机器学习应用于真实医疗数据时,会遇到许多在理想实验室环境中不存在的挑战。本节中,我们探讨几个关键问题。

数据的非平稳性
医疗数据会随时间发生变化,这称为非平稳性。它会导致模型性能下降。
- 疾病定义变化:例如,糖尿病诊断标准改变,导致不同年份被标记为“糖尿病患者”的人群特征发生变化。
- 检测技术变化:新的实验室检测方法出现,或某项检测因保险报销政策变化而使用率激增,导致特征分布改变。
- 编码系统变更:如从ICD-9疾病编码系统切换到ICD-10,导致特征空间发生剧烈变化。
- 数据源问题:电子病历系统更换、数据合同中断等,导致特定时间段数据缺失。


应对策略:在模型评估时,采用时间外验证。即使用历史数据(如2007-2009年)训练,在未来的数据(如2014-2016年)上测试。这能有效暴露因非平稳性导致的性能衰减。对于编码变更等问题,当前主流做法是人工映射,但如何自动学习稳健的表征是一个开放的研究方向。
受干预结果污染
风险分层模型预测的结果,可能受到历史干预措施的影响,导致因果推断错误。
- 经典案例:预测肺炎患者死亡风险时,模型发现“有哮喘史的肺炎患者死亡风险更低”。这并非因为哮喘有保护作用,而是因为这类患者通常会接受更积极的重症监护(干预),从而改善了预后。
- 问题本质:我们使用特征X预测结果Y,但忽略了中间发生的治疗干预T。Y的好坏可能由T导致,而非直接由X决定。如果根据有偏的预测(认为哮喘患者风险低)而减少干预,可能造成伤害。
当前应对方法(尚不完美):
- 修改模型:对于可解释的模型(如规则列表),人工移除不合理的规则。但这在高维复杂模型中难以实现。
- 重新定义结果:预测干预前的替代指标(如乳酸水平),而非最终结果(如死亡)。
- 形式化为删失问题:将接受治疗的患者视为“删失”,因为不知道如果他们未接受治疗会怎样。这引出了下一部分的生存分析。
更根本的解决方案是使用因果推断框架来形式化该问题,这将在后续课程中深入讨论。
深度学习在EHR数据上的局限
尽管深度学习在图像、文本等领域取得巨大成功,但在电子健康记录(EHR)风险预测任务上,其相对于精心设计的线性模型(如L1正则化逻辑回归)的优势往往很小,甚至不显著。
- 可能原因:
- EHR数据具有多时间尺度、大量缺失、多变量观测的特性,与自然语言等规整序列数据不同。
- 现有特征(如特定实验室指标)是数十年医学研究的结晶,本身信息量就很大且相对独立。
- 简单模型在面对数据分布变化(非平稳性)时可能更具鲁棒性。
- 启示:不应盲目应用最复杂的模型,特征工程、领域知识以及模型的简单性和可解释性仍然至关重要。
重新思考:从分类到生存分析⏳
我们之前将风险分层视为“未来某个时间窗口内是否发生事件”的二分类问题。本节中,我们来看看将其重新定义为预测“事件发生时间”的问题,并介绍生存分析的基本概念。
二分类方法的局限
- 数据利用不足:必须排除在观察窗口内被删失的患者。
- 评估不公:若患者在时间窗口外(如3年零1天)发病,模型预测会被判为错误,尽管它几乎正确。
生存分析框架
生存分析直接对事件发生时间T进行建模,并妥善处理删失数据(即只知道患者在某个时间点之后仍未发生事件,但不知道具体何时发生)。
数据形式变为三元组 (X, T, Δ):
X: 特征。T: 观察到的时间(可能是事件发生时间,也可能是删失时间)。Δ: 指示变量(Δ=1表示T是事件发生时间;Δ=0表示T是删失时间)。
我们关注两个函数:
- 生存函数 S(t|X) = P(T > t | X):表示患者在时间t之后仍然存活的概率。
- 风险函数:表示在存活到时间t的条件下,在接下来瞬间发生事件的概率。
卡普兰-迈耶估计量
这是一种非参数方法,用于估计总体的生存函数(不考虑特征X)。
- 公式:
t_i:第i个事件发生时间。d_i:在时间t_i发生事件的人数。n_i:在时间t_i之前仍存活且未被删失的人数(风险集)。
- 该估计量可以直观地理解为,在每个观察到事件发生的时间点,根据当时“暴露在风险中”的人数更新生存概率。
我们可以分别为不同亚组(如男/女)计算卡普兰-迈耶曲线,并比较其生存差异。要构建考虑特征X的预测模型,则需要使用参数或半参数生存模型(如Cox比例风险模型),这将在后续课程中介绍。
总结🎯
本节课中,我们一起学习了风险分层的后续关键内容:
- 标签驱动:了解了从医疗数据中获取可靠标签的挑战和两种主要方法(规则与机器学习),并认识到手动验证和领域知识的重要性。
- 模型评估:掌握了ROC曲线、AUC和概率校准等核心评估指标,理解了它们的含义、计算方式及适用场景。
- 现实挑战:探讨了将机器学习应用于医疗风险分层时面临的三大微妙问题:数据非平稳性、受干预结果污染以及深度学习在EHR数据上的当前局限。我们认识到在现实世界中部署模型必须考虑这些因素。
- 生存分析入门:为了更精细地预测事件发生时间并处理删失数据,我们引入了生存分析的基本框架,并介绍了非参数的卡普兰-迈耶估计量。



通过本课,你应该对风险分层任务的完整流程、评估方法以及实际应用中必须小心的“陷阱”有了更全面的认识。生存分析为我们提供了超越简单二分类的、更强大的建模工具。



课程 P6:生理时间序列建模 📈
在本节课中,我们将学习如何对生理时间序列数据进行建模。我们将首先回顾生存分析,然后深入探讨两个具体的生理时间序列建模案例:一个是在重症监护室(ICU)中监测病人,另一个是检测心房颤动(AF)。我们将看到,根据可用数据的多少,可以采用从结合领域知识的统计模型到数据驱动的深度学习方法等不同策略。
生存分析回顾 📊
上一节我们介绍了风险分层的概念。本节中,我们来看看如何将其形式化为生存分析问题,而不是一个简单的分类问题。
生存分析旨在预测事件发生的时间(例如死亡、出院),同时处理数据中常见的“删失”情况(即我们只知道事件发生在某个观察时间点之后,但不知道确切时间)。

核心概念与公式

- 事件时间 T: 我们关心的随机变量,表示事件发生的时间。
- 概率密度函数 f(t): 事件在时间
t发生的概率密度。通常我们将其视为条件密度f(t | x),其中x是患者的特征。 - 生存函数 S(t): 事件在时间
t之后发生的概率,即T > t的概率。它是1减去累积分布函数。- 公式:
S(t) = P(T > t) = 1 - ∫_{0}^{t} f(u) du
- 公式:
- 删失数据: 对于某些个体,我们只观察到他们被跟踪到时间
c,而不知道事件是否在c之后发生。这种数据称为右删失数据。

参数化生存模型
在参数化方法中,我们需要为密度函数 f(t) 假设一个具体的参数形式(如指数分布、威布尔分布)。模型的参数(如指数分布的率参数 λ)可以通过特征 x 经由一个模型(如神经网络)来学习。

最大似然估计
为了从包含删失和未删失的数据中学习模型,我们使用最大似然估计。似然函数结合了两种类型观测的概率。
- 对于未删失的观测(事件时间
t_i已知),其贡献为概率密度f(t_i)。 - 对于删失的观测(只知删失时间
c_i),其贡献为生存概率S(c_i),即事件在c_i之后发生的概率。
似然函数公式:
L = ∏_{i: 未删失} f(t_i) * ∏_{i: 删失} S(c_i)
对应的对数似然为:
log L = ∑_{i} [ (1 - δ_i) * log f(t_i) + δ_i * log S(c_i) ]
其中 δ_i 是指示函数(δ_i = 1 表示第 i 个观测被删失)。
模型评估:C统计量
评估生存模型性能的一个常用指标是C统计量(一致性指数)。它衡量的是模型预测的事件发生顺序与实际观察到的顺序的一致性。
直观理解: 对于任何一对可比较的个体(例如,一个个体的事件发生在另一个个体的(删失或未删失)时间之前),我们希望模型赋予先发生事件的个体更高的风险概率(或更低的生存概率)。
公式:
C = (∑_{i,j} I[ S(t_i | x_i) < S(t_j | x_j) ]) / (可比较的对数)
其中,I[...] 是指示函数,求和遍历所有可比较的个体对 (i, j)。
其他评估方法还包括:关注未删失数据的均方误差、计算保留数据的似然值,或将问题转化为二元分类问题(例如,预测是否在3个月内发生事件)后再使用分类指标。
案例一:ICU中的生理时间序列与伪差识别 🏥
上一节我们回顾了生存分析的基础。本节中,我们来看看第一个生理时间序列建模的例子:在ICU中监测病人并识别测量伪差。

在ICU中,病人身上连接着多种探头,持续监测心率、血氧、体温等生理信号。这些信号常因探头脱落、重新校准、药物干预等产生伪差。识别并纠正这些伪差对于准确评估病人状态、减少误报警至关重要。

核心方法:切换线性动态系统

我们面临的情况是:几乎没有标记数据(不知道真实生理状态和伪差发生的确切时间),但对系统的动态有一定领域知识。因此,采用了一个结合领域知识的概率图模型——切换线性动态系统。
模型组件:
- 隐状态
x_t: 表示在时间t病人的真实生理状态(如真实心率)。我们假设其随时间演变遵循一个线性动态系统(或自回归过程),例如:x_t = A * x_{t-1} + ε,其中ε是高斯噪声。 - 切换状态
s_t: 表示在时间t是否发生伪差(如探头脱落)。s_t本身也可以是一个马尔可夫链,模拟伪差持续或切换的概率。 - 观测值
y_t: 表示在时间t实际监测到的信号。它依赖于真实状态x_t和切换状态s_t。- 当
s_t表示“正常”时,y_t接近x_t(带有小噪声)。 - 当
s_t表示“伪差”(如探头脱落)时,y_t与x_t无关,可能遵循另一个分布(如信号丢失、或按已知物理规律衰减)。
- 当
领域知识的融入:
- 对正常心率动态,使用高阶自回归过程建模,以捕捉其平滑性与短期波动。
- 对特定伪差(如温度探头脱落后的冷却),使用指数衰减模型来参数化
y_t在给定s_t和x_t下的条件分布。


学习与推断:
由于 x_t 和 s_t 是隐变量,我们只有观测数据 y_t。论文采用期望最大化(EM)算法进行无监督学习:
- E步: 在给定当前模型参数下,推断隐变量
x_t和s_t的后验分布。 - M步: 基于E步推断出的隐变量分布,更新模型参数以最大化数据的边际似然。
由于精确推断是NP难的,论文采用了近似推断方法(如高斯和近似),并展示了其优于蒙特卡洛近似。
结果: 该方法能有效识别出如血样采集、温度探头脱落等伪差事件,其ROC曲线表现显著优于基线方法,展示了在数据稀缺但领域知识丰富时,精心设计的概率模型的有效性。
案例二:基于深度学习的心房颤动检测 ❤️
上一节我们看到了在数据稀缺时如何利用领域知识建模。本节中,我们来看看另一个极端:当拥有大量数据时,如何用数据驱动的方法解决生理时间序列问题——检测心房颤动。
心房颤动是一种常见的心律失常,增加中风等风险。传统检测方法依赖于信号处理提取特征(如RR间期、波形形态),再结合规则或机器学习分类器。


从传统方法到深度学习
以下是该领域方法演进的一个简述:


- 基于规则的信号处理(2002年): 对心电图信号滤波、寻峰,计算RR间期等特征,根据阈值规则判断。
- 马尔可夫模型(1970年): 对正常和房颤的RR间期序列分别建立马尔可夫模型,通过比较序列似然来检测。
- 传统机器学习(1991年): 提取大量专家定义的特征(如RR间期不规则性度量),输入神经网络等模型进行分类。
- 深度卷积神经网络(2019年,斯坦福研究): 直接端到端处理原始心电图信号序列,无需手动设计特征。
深度学习方法详解


斯坦福大学在《自然·医学》上的研究采用了深度一维卷积神经网络(CNN),关键点包括:
- 数据规模大: 使用来自5万多名患者的9万多条记录,远超以往研究。
- 任务更精细: 不仅区分正常、房颤,还扩展到14种不同心律类别。
- 模型架构:
- 输入: 原始的一维心电图信号片段。
- 核心: 多层一维卷积层。每层使用多个滤波器在信号上滑动,计算局部点积,以自动提取不同层次的波形模式特征。
- 代码示意(一维卷积):
# 假设 signal = [1, 2, 3, 4, 5], filter = [0.5, -0.5] # 卷积结果(‘valid’模式)为: # result[0] = 1*0.5 + 2*(-0.5) = -0.5 # result[1] = 2*0.5 + 3*(-0.5) = -0.5 # result[2] = 3*0.5 + 4*(-0.5) = -0.5 # result[3] = 4*0.5 + 5*(-0.5) = -0.5
- 代码示意(一维卷积):
- 结构: 包含卷积层、池化层(降采样)、全连接层以及残差连接(允许信息跨层传递)。
- 评估:
- 序列度量: 评估模型对长时间序列上每一秒心律分类的准确性。
- 集合度量: 评估模型判断整个记录中是否存在房颤的准确性(更贴近临床诊断需求)。

结果: 该深度模型的诊断性能与心脏病专家小组相当甚至更优,展示了在大数据支持下,端到端深度学习模型能够自动学习到有判别力的特征,超越依赖手工特征的传统方法。这类技术正被应用于智能手表等消费级设备中。
总结 🎯
本节课中我们一起学习了生理时间序列建模的两种主要范式。
- 在数据稀缺但领域知识丰富的场景(如ICU伪差识别),我们可以构建结合领域知识的概率图模型(如切换线性动态系统)。通过融入对系统动态和伪差机制的了解,并利用无监督学习算法(如EM),即使没有大量标记数据,也能取得良好效果。
- 在拥有大量标记数据的场景(如房颤检测),我们可以采用数据驱动的深度学习方法(如一维CNN)。端到端的学习方式能自动从原始数据中提取复杂特征,在任务性能上达到甚至超越传统基于手工特征的方法,尤其在任务复杂度高、数据量充足时优势明显。



在实际应用中,需要根据具体问题的数据可用性、领域知识深度以及对模型可解释性的要求,来选择合适的建模路径。



课程 P7:自然语言处理在医疗保健中的应用 🏥

在本节课中,我们将要学习自然语言处理在医疗保健领域,特别是在临床文本分析中的作用。我们将探讨为什么临床文本至关重要,并介绍几种从这些文本中提取有价值信息的方法,包括术语定位和更复杂的机器学习技术。

为什么我们关心临床文本? 📝
上一节我们介绍了课程概述,本节中我们来看看为什么临床文本分析如此重要。临床文本,如医生的笔记和出院总结,包含了关于患者状况的丰富细节。然而,这些信息通常以非结构化的叙述形式存在,难以直接用于计算分析。
这里有一个来自MIMIC数据库的出院总结示例:
盲人先生是一位79岁的白人男性,有糖尿病和下壁心肌梗死病史。他于11月13日接受了扩大的憩室开放修复术。随后,他出现了呕血和呼吸窘迫,因此被插管。
从这段文本中,我们可以提取出关于“盲人先生”病情的多个关键事实。为了利用这些信息,我们需要将其从自然语言转化为机器可读的结构化数据。
传统方法的局限性:账单代码 📊

在深入NLP方法之前,我们需要了解传统方法的局限性。医疗记录中常用的账单代码(如ICD-9)是为了向保险公司收费而设计的,并非为了精确描述患者病情。

例如,一项2010年左右的研究试图通过账单代码识别类风湿性关节炎患者。结果发现,仅凭一个账单代码,其阳性预测值(PPV)非常低。即使要求有三个相关账单代码,PPV也仅提升至27%。这是因为患者可能因排除某种疾病而接受多项检查,从而累积了多个相同疾病的账单代码,但实际上并未患病。
因此,仅依赖编码数据(如账单代码、实验室值)不足以获得高精度的患者队列。这凸显了从叙述性文本中提取信息的必要性。
利用自然语言处理提升预测能力 🔍



既然我们认识到编码数据的局限性,本节中我们来看看如何利用自然语言处理来提升预测能力。

在该类风湿性关节炎的研究中,研究者构建了一个预测模型。他们使用了来自电子病历的多种数据源:
- 编码数据:实验室值、处方、人口统计数据。
- 叙述文本:护理笔记、放射学报告、出院摘要等。
他们使用了一个名为“HighTech”的系统(在当时是先进的)从文本中提取实体,并进行了以下处理:
- 实体提取:识别疾病、药物、实验室发现等。
- 列表扩展:手动添加表达相同概念的不同说法。
- 否定检测:识别文本中的否定含义(例如,“患者没有胸痛”)。
核心模型:研究者使用逻辑回归来构建预测模型。模型的预测因子是NLP提取的特征和编码特征的组合。
公式示例(逻辑回归):
P(RA=1) = σ(β₀ + β₁*(NLP_RA_mention) + β₂*(Lab_RF_positive) + ...)
其中,σ是sigmoid函数,β是回归系数,NLP_RA_mention等是特征。
结果:仅使用NLP特征,模型达到了约89%的PPV;结合编码数据后,PPV提升至约94%。这证明了临床叙述文本具有巨大的价值。
方法的通用性与挑战 🌐

上一节我们看到了NLP在一个医疗系统中的成功应用,本节中我们来看看这种方法在不同机构间的通用性,以及临床文本分析面临的普遍挑战。


同一研究在范德比尔特大学和西北大学进行了复现。尽管不同医院的电子病历系统、数据提取方式和本地术语存在差异,但模型的性能表现相似,显示出该方法具有一定的通用性。然而,性能估计方式的不同导致了PPV值的差异,这提醒我们需要谨慎评估算法。
临床文本分析本身面临诸多挑战:
- 非标准缩写与笔迹:例如,“SOB”可能表示“呼吸急促”(Shortness Of Breath),而非其字面意思。
- 去识别化:在共享数据前,需要移除受保护的健康信息(PHI),但需小心区分PHI和重要医学术语(如“亨廷顿病”)。
- 信息提取:需要确定实体的时间、确定性以及实体间的关系(如“药物治疗疾病”)。
- 文本摘要:由于电子病历中常见的复制粘贴,文本存在大量重复,如何生成简洁的摘要是一大挑战。
- 任务差异:有些任务需要逐字审查(如去识别化),而有些只需总体判断(如判断患者是否吸烟)。
从语言学到术语定位:实践方法的演变 ⚙️
早期,人们曾尝试用计算语言学的方法完整地解析临床文本,就像分析普通英语一样,但这种方法在实践中非常困难且不实用。
因此,更实用的“术语定位”方法成为了主流。以下是其核心思路:
- 构建术语列表:与医学专家合作,列出所有可能指示目标病症的单词和短语。
- 文本搜索:在临床笔记中搜索这些术语。
- 处理否定:使用规则排除被否定的提及(例如,“无胸痛”)。
一个经典的否定检测算法是NegEx。它的工作原理很简单:
- 如果在UMLS术语的前5个或后5个词内出现特定的否定短语(如“否认”、“排除”、“未见”),则认为该提及被否定。
- 需要处理例外情况(如“革兰氏阴性”中的“阴性”不是否定词)。
尽管简单,但这类规则方法非常有效。
关键资源:统一医学语言系统 🗃️
为了系统化地进行术语定位,我们需要一个标准的医学术语库。这就是统一医学语言系统。
UMLS是一个庞大的元词库,它整合了来自许多生物医学词表和分类系统的概念。它的作用是:
- 概念归一化:将不同术语(如“心肌梗塞”、“心脏病发作”、“急性心梗”)映射到同一个概念标识符(CUI)。
- 提供语义网络:每个概念都有语义类型(如“疾病或综合征”、“药物”)并处于层级关系中。
代码示例(伪代码):
# 假设使用一个UMLS映射工具
text = “患者主诉上肢无力。”
concepts = umls_mapper.lookup(text)
# 输出可能包括:CUI_C1234567 (概念:近端肢体无力), 语义类型: ‘发现’
使用UMLS,我们可以大大扩展术语列表的覆盖范围,并更规范地处理临床文本。
总结与展望 🎯
本节课中我们一起学习了自然语言处理在医疗保健中的关键应用。我们从临床文本的价值出发,探讨了传统编码数据的局限,并深入介绍了通过术语定位和机器学习(如逻辑回归)从叙述文本中提取信息的实用方法。我们还了解了UMLS这一重要资源,以及该方法在不同机构间复现所展现的通用性。


尽管挑战依然存在,例如文本的复杂性、系统间的差异以及向临床工作流程集成的难度,但NLP在改善患者队列识别、辅助临床研究和未来潜在的决策支持方面,前景十分广阔。随着电子病历的普及和计算能力的提升,我们正朝着更智能地利用医疗文本数据的方向稳步前进。



课程 P8:自然语言处理 (NLP) 在临床数据中的应用 🏥
在本节课中,我们将学习自然语言处理技术如何应用于临床数据分析。我们将从传统方法开始,逐步过渡到更现代的深度学习模型,了解它们如何帮助我们从医疗文本中提取有价值的信息。
从短语匹配到机器学习模型


上一节我们介绍了使用简单短语匹配来识别临床数据中的关键信息。本节中我们来看看如何将这种方法复杂化,并引入机器学习。
一篇来自大卫·桑塔格实验室的论文提出了更复杂的版本。他们的起始方式相同:首先确定具有高预测价值的“锚”术语(例如,特定疾病代码或治疗药物),这些术语在患者笔记中出现时能高度准确地指示目标表型。
然后,他们建立了一个模型,试图根据医疗记录中的所有其他信息来预测这些锚术语在文本中的出现。这是一种“银标准”训练方式。模型从这些高质量的锚中学习,并自动发现大量与锚术语相关的其他代理术语,从而扩大了识别范围。
以下是该模型的技术细节:
- 表示方法:本质上使用了词袋表示。
- 上下文处理:掩盖了目标词周围的三个词,以消除短期依赖。
- 模型:使用L2正则化的逻辑回归模型来预测术语出现。
- 扩展:将新发现的预测性特征纳入搜索词汇表。
他们从锚术语构建表型估计器,并为每个新预测器计算校准分数。最终,他们构建了一个联合估计器。评估显示,在八种有标注数据的表型上,模型性能(AUC)在0.83到0.95之间。虽然其他几十种表型缺乏验证数据,但预期性能相似。这表明该方法能有效扩展识别能力。
实体识别与去标识化
上一节我们讨论了如何识别特定表型。本节中我们来看看NLP的另一个关键应用:实体识别,特别是用于保护患者隐私的去标识化。
考虑句子:“亨廷顿先生在位于亨廷顿大道的亨廷顿医院接受了亨廷顿病的治疗。” 其中“亨廷顿”一词在不同上下文中指代不同实体。如果目标是去除可识别个人身份的健康信息,你需要移除“亨廷顿先生”,但保留“亨廷顿病”,并可能根据研究目的决定是否保留医院和街道名称。
在2000年代中期,我们采用了一种“厨房水槽”方法来解决这个问题:
- 标记与特征提取:对文本进行标记,并为每个标记派生多种特征,包括:词汇本身、词性、大小写模式、周围标点、所在文档章节。
- 模式与词典:识别与临床术语匹配的词典条目,以及用于检测电话号码、社保号、地址等的模式。
- 句法分析:使用链接语法解析器获取单词间的句法关系,并将这些关系作为特征。
我们将所有特征(包括词汇、上下文、句法链接特征)输入一个支持向量机模型。尽管产生了数百万个特征,但模型能有效筛选,最终在识别PHI方面达到了约98.5%的精确率和95.25%的召回率,优于基于规则的方法。此方法不仅适用于去标识化,也可用于识别疾病、药物等实体。

利用主题建模预测再入院风险

上一节我们介绍了基于特征工程的实体识别。本节中我们来看看如何使用无监督的主题建模来辅助临床预测任务,例如预测精神病患者的30天再入院风险。
我们与精神科医生合作,试图预测精神病患者30天内的再入院情况。基线模型使用了年龄、性别、保险类型(作为社会经济地位代理)、共病指数等特征。
为了改进预测,我们尝试从临床笔记中提取信息:
- TF-IDF特征:计算术语频率-逆文档频率,选取最具信息量的1000个词作为特征。
- 主题建模(LDA):使用潜在狄利克雷分配模型,将所有笔记视为词袋,自动发现了75个主题。这些主题是无监督生成的,但事后可由专家解释(例如,与“酗酒”、“精神病”相关的主题)。
研究发现,仅使用基线社会人口学和临床变量时,不同风险组间的差异不大。而加入75个主题特征后,模型能更好地区分高风险和低风险再入院患者组,预测性能(AUC)得到显著提升,达到约0.7。虽然这不是极高的预测精度,但提供了有用的增量信息。
另一项更大规模的研究也使用了类似思路,通过分析临床笔记中与情绪“正价性”和“负价性”相关的术语,来预测患者的自杀风险或意外死亡风险,并观察到了明显的风险分层。
张量分解与无监督疾病分类
上一节我们看到了主题建模在预测中的应用。本节中我们来看一种不同的无监督方法:张量分解,用于对淋巴瘤病理报告进行分类。
该研究的目标是仅根据病理报告的文本内容(隐藏诊断结论),通过无监督学习对淋巴瘤类型进行聚类。这很重要,因为淋巴瘤的分类标准时常修订,数据驱动的方法可能帮助发现新的分类特征。
方法的核心是张量分解:
- 张量构建:将数据表示为三维张量。例如,一个维度是患者,第二个维度是报告中出现的单词,第三个维度是从句法解析中提取的“语言概念子图”(表示实体间的关系)。
- 分解原理:类似于矩阵分解(
数据矩阵 ≈ 矩阵A × 矩阵B),张量分解旨在找到核心张量和多个因子矩阵,使得它们的乘积能最佳地重建原始张量(最小化重建损失)。
研究首先对句子进行解析,构建表示实体关系的图,并分解为频繁子图。然后将患者-单词-子图关系构建成张量并进行分解。这种方法(称为TF)的宏观平均精确率和召回率约为0.75,优于仅使用单词或子图的非负矩阵分解方法。它有效地利用了单词、子图和患者之间的三方关系。
语言建模:从N-gram到现代嵌入
上一节我们探讨了特定的无监督学习方法。本节中我们转向NLP的核心基础之一:语言建模,并回顾其从传统方法到现代深度学习的演进。

语言建模的核心任务是:给定一个词序列,预测下一个词的概率分布。一个好的语言模型能捕捉语言的规律性。困惑度是衡量语言模型好坏的标准,困惑度越低,模型越确定。
传统方法是N-gram模型:
- 原理:基于马尔可夫假设,用前N-1个词来预测第N个词。
- 示例:在大型语料库上统计N-gram频率,可以用于随机生成文本。例如,基于莎士比亚作品训练的4-gram模型可以生成看似合理的“莎士比亚风格”文本。
然而,N-gram模型面临数据稀疏问题,且无法捕捉深层语义。现代方法转向词嵌入:
- Word2Vec:通过神经网络学习词的分布式向量表示。它有两种模型:连续词袋模型(用上下文预测中心词)和跳字模型(用中心词预测上下文)。其神奇之处在于,词向量空间中的几何关系可以对应语义关系(例如,
vector(‘King’) - vector(‘Man’) + vector(‘Woman’) ≈ vector(‘Queen’))。 - ELMo:解决了Word2Vec一词一义的问题。它使用双向LSTM,根据词的上下文生成不同的词向量表示,从而处理一词多义。
- BERT:基于Transformer架构。它使用“掩码语言模型”任务进行预训练(随机掩盖输入中的一些词,让模型预测它们),并加入了“下一句预测”任务。BERT在多种NLP基准任务上取得了巨大提升。
- GPT-2:同样基于Transformer,但采用自回归方式(根据上文生成下文)进行训练。它在海量文本和多任务上训练,拥有多达15亿参数,能够生成极其逼真、连贯的文本。

这些现代语言模型通过在大规模语料上预训练,获得了强大的语言表示能力,可以微调后用于各种下游任务,如文本分类、问答、实体识别等。
自动扩展临床概念集
上一节我们介绍了强大的通用语言模型。本节我们回到临床领域,看一个结合了嵌入思想和外部知识源来扩展临床概念集的自动化方法。
目标是开发一种完全自动化、稳健的无监督特征选择方法,用于识别与目标表型相关的概念,且仅利用公开医学知识源,而非特定医院的EHR数据。
方法步骤如下:
- 构建医学词嵌入:使用约500万篇Springer医学文章训练Skip-gram模型,为每个词生成500维向量。
- 计算表型嵌入:取目标表型名称及其在UMLS中的定义,汇总其中单词的词向量(按逆文档频率加权),得到该表型的向量表示。
- 从知识源收集相关概念:从维基百科、Medscape等五个来源,使用命名实体识别技术提取与表型相关的概念。
- 筛选与扩展:保留至少在三个来源中出现的概念以增强置信度。然后,选择K个与表型嵌入余弦距离最近的概念。
- 构建表型估计器:将表型表示为这些相关概念向量的线性组合。
在冠状动脉疾病、类风湿关节炎等五种表型上的实验表明,这种自动扩展方法获得的特征集,其性能与专家精心策划的特征集相当,但所需的人工干预大大减少。
基于深度学习的去标识化器
上一节我们看到了如何利用外部知识。本节中我们来看一个更复杂的、基于深度学习的去标识化器架构示例。
该去标识化器采用多层神经网络架构:
- 字符级双向RNN:在单词的字符序列上运行,以捕捉拼写错误和医学术语的词根结构。
- 词嵌入层:连接字符RNN的输出与预训练的词向量。
- 词级双向RNN:将上述连接向量输入另一层双向RNN,以捕捉上下文信息。
- 前馈神经网络与CRF:对每个词,将RNN输出通过前馈网络计算其属于各类PHI(如姓名、地址)的概率分布。顶层使用条件随机场层来考虑标签间的序列依赖关系(例如,姓名后很可能跟日期)。

该模型通过优化F1分数,在去标识化任务上达到了约99.2%的精确率和99.3%的召回率。需要指出的是,尽管性能很高,但HIPAA法规要求理论上移除所有PHI,任何不完美的技术都可能在法律和实际发布中面临审查。
Transformer架构与注意力机制
上一节我们介绍了基于RNN的深度学习模型。本节中我们深入探讨当前NLP的基石:Transformer架构及其核心——注意力机制。
传统的序列到序列模型(如用于翻译的LSTM)存在瓶颈:需要将整个输入句子编码成一个固定长度的向量。注意力机制的引入允许解码器在生成每个输出词时,“关注”输入句子中最相关的部分。
Vaswani等人进一步提出了《Attention Is All You Need》,认为注意力机制本身足以构建强大模型,从而发明了Transformer:
- 核心:自注意力机制。它计算句子中每个词与其他所有词的相关性权重。
- 多头注意力:并行使用多组注意力机制,让模型同时关注不同方面的信息(类似于CNN中的多个滤波器)。
- 位置编码:由于Transformer不包含循环,需要额外注入单词的位置信息(通常使用正弦/余弦函数)。
- 架构:编码器和解码器均由多层(如6层)相同的模块堆叠而成,每个模块包含多头自注意力层和前馈神经网络层,并伴有残差连接和层归一化。
Transformer完全基于注意力,并行化效率高,能更好地处理长程依赖,成为BERT、GPT等现代预训练模型的基础架构。
总结

本节课中我们一起学习了自然语言处理在临床数据分析中的应用演进。我们从基于规则和词典的简单短语匹配开始,探讨了利用机器学习(如逻辑回归、SVM)从电子病历中自动扩展特征的方法。我们了解了主题建模和张量分解等无监督学习技术在风险预测和疾病分类中的应用。随后,我们深入回顾了语言建模的发展,从传统的N-gram模型到现代的词嵌入(Word2Vec, ELMo)和基于Transformer的预训练模型(BERT, GPT-2)。最后,我们看到了这些先进技术如何被应用于临床领域的具体任务,如自动化概念集扩展和复杂的去标识化。尽管当前最先进的模型在工程上非常成功,但它们与人类理解语言和进行推理的方式之间的关系,仍是一个有趣的科学问题。



课程 P9:将技术转化为临床实践 🏥
在本节课中,我们将探讨如何将人工智能和信息技术转化为临床实践。我们将回顾技术采用的周期,分析历史上的成功与失败案例,并讨论当前在医疗系统中部署决策支持系统所面临的挑战和机遇。

技术采用的“炒作循环” 📈
上一节我们介绍了课程概述,本节中我们来看看技术采用的普遍模式,即“炒作循环”。
技术采用遵循一个可预测的模式,称为“炒作循环”。这个循环始于研发阶段,产生了一些有趣的想法。随后,风险资本家和早期采用者对此感到兴奋,期望值迅速攀升至顶峰。媒体开始宣称这将是一场革命。然而,技术往往无法达到这些过高的期望,导致期望值急剧下降,进入“幻灭的低谷”。一些公司会失败或整合。最终,经过调整和现实检验,技术开始稳步发展,达到“启蒙的斜坡”,并最终进入“生产力高原”,成为被广泛接受和使用的成熟产品。

历史案例:专家系统与IBM沃森 🤖
上一节我们介绍了技术采用的普遍规律,本节中我们来看看两个具体的历史案例。
在20世纪80年代,专家系统曾经历类似的炒作周期。当时,许多公司投入巨资构建专家系统,例如坎贝尔汤公司建立的用于指导清洗汤缸的系统。然而,这些系统并未带来预期的革命性变化,资金随之枯竭,进入了所谓的“AI冬天”。但事实上,许多专家系统技术(如Microsoft Excel中的帮助系统)已悄然融入日常产品中。
另一个著名案例是IBM的沃森(Watson)系统。在游戏节目《危险边缘》中获胜后,IBM试图将其应用于医疗领域,特别是癌症治疗,即“沃森肿瘤学”。营销宣传承诺该系统将通过阅读所有医学文献和病历,为患者提供最佳治疗方案。然而,该系统在实际应用中遇到了巨大挑战。它并未能真正从数据中推导出新知识,而是很大程度上依赖于纪念斯隆·凯特林癌症中心的肿瘤学家手动编写的规则库。最终,像M.D.安德森癌症中心这样的合作伙伴终止了合作,项目未能达到预期目标。
成功的临床决策支持:CPOE系统 ✅
上一节我们看到了过度炒作导致的失败,本节中我们来看看一个更务实且成功的应用:计算机化医生医嘱录入系统。

CPOE系统旨在通过计算机界面影响临床医生的行为。例如,当医生开具一种昂贵药物时,系统可以提示存在一种更便宜但同等有效的替代药物。研究表明,这类系统可以显著降低用药错误率、减少药物不良事件并缩短住院时间。其核心优势在于能自动提示药物相互作用、过敏和过量风险,并可通过更新数据库保持信息时效性。
然而,CPOE系统的采用速度比预期缓慢。阻力之一在于它增加了医护人员的行政负担。例如,药剂师在采用CPOE的医院中,花在“分配任务”(非临床工作)上的时间增加了,而用于直接临床咨询的时间减少了。

医疗技术的传播速度与障碍 🐢⚡

上一节我们讨论了CPOE系统的利弊,本节中我们来看看不同医疗技术的传播速度有何差异。

不同医疗技术的传播速度差异很大。例如,他汀类药物(用于降低胆固醇)在大约五到六年内达到了近乎100%的采用率。冠状动脉支架的采用也非常迅速。相比之下,磁共振成像等昂贵技术的采用则因成本和监管限制而较慢。即使是像β受体阻滞剂(可降低二次心脏病发作风险)这样便宜有效的药物,其临床实践中的采用率也可能只有一半左右。


技术的快速传播往往依赖于“内部倡导者”,即那些积极说服同事采用新技术的专业人士。
确保研究质量与可重复性 🔬
在我们把这些技术强加给世界之前,如何确保它们的质量呢?这是一个棘手的问题。
有研究表明,相当一部分生物医学研究结果难以复现。当一项研究在独立数据集上无法复现时,基于此制定的政策就可能存在问题。这通常是由于“发表偏倚”——只有那些有显著阳性结果的研究才容易被发表,而阴性结果则被埋没。
针对这个问题,有学者建议进行研究注册,即预先声明研究计划,无论结果如何都进行报告。这有助于评估显著结果究竟是真实的效应,还是统计上的偶然发现。另一种方案是像《新英格兰医学杂志》考虑的那样,要求研究结果必须在两个独立数据集上得到复现才能发表。
评估临床AI系统:分阶段方法 📊
上一节我们讨论了研究质量的问题,本节中我们来看看如何系统性地评估临床AI系统。
对临床AI系统的评估应采取分阶段、渐进的方法:
- 回归测试:使用一组固定案例进行自动化测试,确保系统更新不会导致性能下降。
- 不一致性检查:构建工具自动检测模型中的逻辑不一致性。
- 临床医生回顾性评估:在大量历史数据上运行程序,由临床医生判断其建议是否正确。
- 前瞻性非干预性试验:实时运行系统但不将结果告知临床医生,事后评估其准确性。
- 前瞻性对照试验:比较使用系统建议的临床医生与未使用系统的临床医生在患者健康结果上的差异。这是证明系统价值的“终极考验”。
FDA对AI医疗设备的监管 🏛️
食品和药物管理局(FDA)如何监管这些基于AI的医疗设备呢?
FDA将大多数提供临床决策支持的软件视为“动态教科书”,其责任在于使用它的专业临床医生,因此传统上不予直接监管。然而,一旦软件直接向患者提供建议(无专业中介),就会受到FDA监管。
近年来,FDA开始将AI驱动的软件作为医疗设备进行监管。目前已有数十款软件获得批准,主要集中在医学影像分析领域,例如:
- 骨折检测:分析X光图像寻找桡骨远端骨折迹象。
- 糖尿病视网膜病变筛查:通过视网膜照片检测病变。
- 中风预警:分析CT扫描寻找脑血管堵塞迹象。
- 肿瘤追踪:在影像中跟踪肿瘤变化。
FDA正在尝试建立灵活的监管框架,以鼓励创新同时确保安全。
访谈:Adam Wright博士的经验分享 💬
现在,让我们转向Adam Wright博士,听听他在医疗系统内部部署决策支持系统的第一手经验。
Adam Wright是哈佛医学院副教授,在布莱根妇女医院领导临床决策支持工作。他的团队负责确保决策支持系统正常运行。
以下是Adam分享的关键点:
部署的决策支持类型
- 基于规则的系统:早期从药物相关决策支持开始,如药物相互作用警报、剂量支持、过敏检查。
- 预防护理提醒:如提醒进行巴氏涂片检查或他汀类药物治疗。
- 基于机器学习的预测模型:例如预测患者再入院风险或住院跌倒风险,并触发相应干预措施。
挑战与考量
- 阈值设定:如何为风险评分设定行动阈值是一个复杂的成本效益分析问题,需权衡干预成本与不良事件后果。
- 警报疲劳:如果系统产生过多不精确的警报,临床医生会开始忽略它们,甚至指示下级医生覆盖警报。
- 工作流程整合:确定在复杂的医疗团队中,谁应该在何时接收何种信息非常困难。
- 数据质量与可及性:电子健康记录中的数据并非总是结构化或准确的,这限制了复杂模型的输入。
- 模型泛化与再训练:在一个机构训练的模型可能需要在另一个机构的数据上进行验证和重新校准才能有效工作。
技术集成与互操作性
- 集成方式多样,包括使用EHR内置规则引擎、通过数据仓库进行批量处理、利用HL7消息或Web服务进行实时交互,以及开发基于SMART on FHIR等标准的应用程序。
- 新的法规正在推动EHR供应商开放应用程序编程接口,这有望降低第三方应用集成的门槛。
- 然而,专有接口与开放标准在功能和数据完整性上仍存在差距。
评估与迭代
- 团队通过多种方式评估系统效果:监测临床医生对建议的遵从率、进行前后对比研究,甚至在重要情况下进行随机对照试验。
- 目标是证明系统能真正改善临床结果,而不仅仅是增加干扰。
- 需要建立“知识管理”流程,定期更新模型和规则库,防止其过时。
未来展望
Adam对互操作性改善和API开放感到乐观,这使创新应用更易部署。他认为,对于高风险临床决策,人类医生的专业知识在可预见的未来仍不可或缺;但在一些低风险、预测性的任务上,闭环或半闭环的自动化系统是可行且安全的。



在本节课中,我们一起学习了将技术转化为临床实践的复杂历程。我们回顾了技术采用的“炒作循环”,分析了IBM沃森等案例的教训,也看到了CPOE系统带来的切实益处。我们探讨了研究可重复性的重要性、评估临床AI系统的分阶段方法,以及FDA的监管框架。最后,通过Adam Wright博士的分享,我们了解了在真实医疗系统中部署决策支持系统所面临的实际挑战、集成技术和持续评估的必要性。成功的关键在于保持务实、关注工作流程、确保数据质量,并始终以改善患者结局为核心目标。


浙公网安备 33010602011771号