第一章:ADMET预测模型概述与常见错误分类
各位搞药物设计的同行,今天我们聊聊ADMET预测模型里那些坑。
我习惯把ADMET模型比作药物分子的「筛选漏斗」。分子设计得再花哨,最后过不了吸收、分布、代谢、排泄、毒性这几关,一切归零。但这几年我在项目中见过太多人把模型预测结果当成「圣旨」,出了问题第一反应是「模型不准」——其实很多错不在模型,在人。
好,咱们从头捋一遍。
1.1 ADMET到底在预测什么?
先快速对齐几个概念。ADMET不是一个指标,是一组性质。
| 缩写 | 全称 | 一句话解释 | 常见的预测终点 |
|---|---|---|---|
| A | Absorption | 药物怎么进到血液里 | Caco-2通透性、人结肠腺癌细胞系渗透性、F(口服生物利用度) |
| D | Distribution | 药物在体内怎么跑 | 血浆蛋白结合率、表观分布容积、组织/血浆分配比 |
| M | Metabolism | 药物被哪些酶改造 | CYP450抑制/诱导、代谢稳定性(半衰期)、代谢产物鉴定 |
| E | Excretion | 药物怎么排出去 | 肾清除率、胆汁排泄、转运体介导的排泄 |
| T | Toxicity | 药物有没有毒 | hERG、AMES致突变、肝毒性、心脏毒性 |
我个人的经验:不要试图用一个模型预测所有ADMET性质。你想想看,溶出度和肝微粒体稳定性的物理机制天差地别,用一个骨架硬套两个任务,结果通常两边都不讨好。
1.2 常见错误类型:我在项目里踩过的那些雷
做ADMET预测模型时,错误基本集中在三个层面。我把它们分成「数据层」「模型层」和「应用层」。你对照着看看自己栽在哪个坑里过。
数据层错误
- 数据质量不过关:我在一家药企做过内部数据集清洗。同一批化合物测了两遍,Caco-2值差出两个数量级。问下来是实验员用了不同的pH缓冲液。数据源有系统误差,模型学出来就是错的。
- 数据分布不均:训练集里90%是阴性样本,模型学会了全判阴性——准确率还特别高,但完全没有预测能力。
- 结构重复或近重复:同一个骨架以略微不同的结构重复出现,模型在训练集里过拟合了结构相似性,而不是真正的理化性质关联。
模型层错误
- 特征工程出问题:别人做hERG预测用了一堆2D指纹,我也照搬。结果模型的AUC很高,但换一个骨架完全失效。后来发现我的分子骨架本来就和训练集高度相似——说白了,模型背的是结构模板,而不是毒性机制。
- 验证方式不对:随机划分训练集测试集?我建议你用时间戳划分,或者按骨架聚类划分。随机划分会让模型看到太多结构近似的化合物,泛化能力被严重高估。实际应用时一见面孔新一点的分子,模型立刻「掉分」。
- 超参数拍脑袋:我记得有次跑CYP2D6抑制预测,其他人用的是LightGBM,默认参数就跑出了不错的AUC。我换成深度神经网络,调了一个月的参数,结果还不如人家的默认配置。不是深度模型不好,是我在小数据集上强行上深度学习,数据量不够,模型学不到泛化的模式。
应用层错误
- 适用范围外推:模型的适用域(Applicability Domain)是个常被忽略的东西。你用一个训练自含氟最多两个原子的模型,去预测含三氟甲基的分子?我曾经在项目里干过这种事,结果预测的logD和实测差了2.5个单位。模型根本没见过这类碎片,预测就是「自由发挥」。
- 单一指标迷信:只看R²或AUC就下结论。R²高不代表模型能正确排序,AUC高不代表在阳性样本上预测准。在ADMET场景里,漏掉一个有毒的分子比误报十个无毒分子更致命。
避坑指南:我曾经把一个hERG预测模型投入项目时,只看了测试集AUC=0.92。实际筛完300个类似化合物,只找出了3个真的hERG高风险。模型把大部分阳性都判成了弱阳性——AUC高是因为它在阴性样本上预测得特别准。阴性样本占了98%。嗯,这个教训挺深刻的。
1.3 错误排查思路:给你个工作流
做ADMET预测模型,别出了错就开始改架构加数据。我建议从下面四条线入手排查。我首推「从失败用例反向追溯」的思路——先定位最离谱的预测错例,再反推问题出在哪个环节。
下面这张图是我自己做排查时画的:
这张图我自己项目里一直在用。
发现预测结果离谱时,别急着调模型。先查数据,再查特征和验证方式,最后查适用范围。我个人最多遇到的情况是数据层出问题,尤其批次效应——不同批次的实验条件有差异,但被当作同一分布喂给了模型。
在实际项目中,核心排查思路可以用一句话概括:从预测误差最大的样本切入,反向分析每个环节的贡献。具体来说:
- 收集误差分布:在测试集或新数据上,找到预测值与实测值偏差最大的前5~10个案例。
- 数据端检查:这些案例有没有实验记录不清、数据拼接错误、单位不一致?我在某次排查中发现pH数据被混用了,因为实验记录里部分样本的pH是7.4,另一部分是6.8。模型学会了区分pH,而不是区分性质。
- 特征端检查:出错的分子有没有特殊子结构?它们包含训练集中极少见的片段?如果是,该考虑扩充数据或做AD域过滤。
- 模型端诊断:重新做一次骨架划分的验证。如果模型AUC大幅下降,说明泛化能力不够。我建议跑个简单的基线模型(比如随机森林+ECFP4),和你的复杂模型对比一下,看看复杂模型「好」在哪里——有时候基线就够用。
- 最终决策:如果所有策略都试过误差依旧大,那就接受模型在当前化学空间下不可用。强行部署只会给你更多项目麻烦。
一个小技巧:我每次做ADMET模型都会输出一张「预测误差 vs 训练集最近邻距离」的散点图。如果误差随着结构相似度降低而增大,说明模型外推能力不好——这是AD域外推问题的经典信号。
好,本章我们覆盖了ADMET的基本概念、我把最常遇到的错误归了类,也给出了一个实用的排查工作流。从下一次章节开始,我们会逐类深入,用实际案例拆解每种错误该怎么定位、怎么修。先有个全景印象,后面学起来更有底气。