1. ADMET 预测概述:背景、应用场景与常见任务

做药物设计这么多年,我越来越觉得 ADMET 预测才是真正的「守门员」。先说说概念吧。

ADMET 是五个词的首字母:吸收(Absorption)、分布(Distribution)、代谢(Metabolism)、排泄(Excretion)、毒性(Toxicity)。说白了,就是化合物进入体内后的一系列命运。你想想看,一个化合物活性再漂亮,如果到了体内被肝脏快速代谢掉,或者毒性太大,那前面做的所有优化都白费了。

我遇到过不少团队,把全部精力放在提高活性上,结果到动物实验阶段才发现 PK 数据惨不忍睹。回头再改结构,时间成本、资金成本都翻了好几倍。

1.1 为什么 ADMET 如此重要

如果你去翻翻药物研发的历史数据,会发现一个扎心的事实:约 40% 的临床候选药物因为 ADMET 问题被淘汰。这不是小概率事件,而是行业常态。

  • 活性强 ≠ 成药性好:很多高活性化合物溶解性差,口服吸收率不到 10%。
  • 选择性高 ≠ 安全性高:比如有些化合物对靶点很专一,但会抑制 hERG 离子通道,引发心脏毒性。
  • 体外数据好 ≠ 体内表现好:代谢稳定性、血浆蛋白结合率这些因素,体外很难完全模拟。

我个人习惯是在项目早期就引入 ADMET 筛选,而不是等到优化完活性再补做。这样做的好处很明显——避免「活性好、ADMET 差」的无效迭代。

核心观点:ADMET 预测不是药物研发的「后期验证」,而是「早期决策」的一部分。越早介入,研发效率越高。

1.2 常见的 ADMET 预测任务

ADMET 预测涉及的具体任务很多,我把最常见的整理成一张表,方便你快速了解。

类别 常见任务 简单描述 为什么重要
吸收 Caco-2 渗透性、口服生物利用度、溶解度 评估化合物能否被肠道吸收进入血液循环 口服药物必须跨过这道门槛
分布 血浆蛋白结合率、血脑屏障穿透、组织分布体积 化合物在体内不同组织间的分配情况 影响药效持续时间和靶点可及性
代谢 肝微粒体稳定性、CYP 酶抑制/诱导、代谢产物预测 肝脏对化合物的代谢速度和方式 决定药物的半衰期和代谢性药物相互作用
排泄 肾清除率、胆汁排泄、半衰期预测 化合物从体内被清除的途径和速率 影响给药方案和蓄积毒性
毒性 hERG 抑制、AMES 致突变性、肝毒性、急性毒性 LD50 评估化合物可能引发的毒性反应 直接关系到临床安全性

这里我想强调一点:不同任务的数据量和数据质量差异很大。比如 Caco-2 渗透性数据相对规整,而肝毒性数据往往不平衡(大部分化合物无毒,少数有毒)。这种不平衡在后续做交叉验证时,需要特别注意分层策略。

1.3 应用场景:从虚拟筛选到临床前优化

ADMET 预测覆盖了药物研发的多个阶段,每个阶段侧重点不同。

  • 虚拟筛选阶段:对几万甚至几十万个化合物批量预测,快速过滤掉 ADMET 性质最差的那批。说白了就是个「粗筛」,通常用简单模型,比如基于分子指纹的随机森林就够了。
  • 先导化合物优化:此时候选化合物数量少一些,可能需要更精确的回归模型。我记得有个项目需要预测大鼠口服生物利用度,我们用了梯度提升树配合留一法交叉验证,效果比单纯用线性模型好很多。
  • 候选化合物评估:这个阶段要出报告给毒理部门,模型的不确定性必须量化。交叉验证的方差、预测区间都要展示出来。

我曾经遇到一个坑:在虚拟筛选阶段用了太复杂的模型(比如图神经网络),结果候选化合物只有几十个的时候,模型预测效果反而变差了。后来我总结,模型复杂度要和数据量匹配,不是越高级越好。

避坑提醒:不同应用场景下,对模型「可解释性」的要求也不同。虚拟筛选可以接受黑盒模型,但到了临床前评估阶段,药代研究团队通常会要求你解释哪些结构片段导致代谢稳定性差。这时候,树模型的特征重要性或者 SHAP 值就很有用了。

1.4 数据质量:ADMET 预测的根基

不管模型多先进,如果数据质量不行,一切白搭。我在整理公共数据集时发现几个普遍问题:

  • 数据来源不一致:不同实验室的测量条件不同,直接合并会导致批次效应。
  • 数据稀疏性:比如血浆蛋白结合率数据很多,但血脑屏障穿透数据很少。
  • 数据噪声:有些实验重复性差,同一个化合物在不同批次里的测量值能差一倍。

对于这些问题,我的建议是:交叉验证策略必须考虑数据分组。如果数据来自多个实验室,最好按实验室来源做分组交叉验证,而不是简单随机拆分,否则会高估模型泛化能力。

嗯,下面这张图梳理了 ADMET 预测的总体知识脉络,方便你建立全局感。

ADMET预测知识体系框架图 ADMET预测核心知识体系 虚拟筛选 先导化合物优化 候选化合物评估 五大预测任务 吸收 分布 代谢 排泄 毒性 机器学习模型 随机森林 / XGBoost / GNN 数据基础 公共库 + 内部实验数据 验证策略 交叉验证 / 外部验证 交叉验证策略(本课程核心) K折 分层/留一/随机 时间/分组 最终目标:获得可靠、可泛化的ADMET预测模型

1.5 那些年我踩过的坑(与交叉验证的交集)

讲到这里,我想分享几个实际教训。虽然是第一课,但这些经验能帮你理解为什么交叉验证在 ADMET 预测中如此重要。

  • 教训一:直接随机拆分,后果严重。我曾经有个项目预测血浆蛋白结合率,数据来自 4 个不同实验室。随机交叉验证做出来 R² 0.8,看着不错。结果用按实验室分组交叉验证一测,R² 直接掉到 0.5。原来模型学到了实验室偏差,而不是真实的结构-性质关系。
  • 教训二:忘记数据不平衡。有一次预测肝毒性,毒性样本只占 5%。简单 K 折下,有的折里一例毒性样本都没有,模型根本学不到东西。后来改用了分层 K 折,每个折里的正例比例保持一致,效果才稳定下来。
  • 教训三:时间维度没考虑。我收集了一批近 5 年的数据,用随机交叉验证去验证模型,结果还挺好。但用时间序列交叉验证(早期数据训练,近期数据验证),效果就差很多。因为化合物设计和筛选策略在变化,训练集和测试集的数据分布会漂移。

个人建议:刚开始学习 ADMET 预测时,先别急着跑模型。花点时间搞清楚你的数据来源、分布和潜在偏差。你会发现在数据上多花 1 小时,能省下后面调模型 10 小时。

嗯,以上就是 ADMET 预测的概览。从下节课开始,我们会正式进入交叉验证的实操部分,包括具体的 Python 代码实现和不同场景下的验证策略选择。