ADMET 预测模型概述:定义、应用场景与 QSAR 的关系
做药物研发的朋友都清楚,一个化合物活性再好,如果吸收差、代谢快、毒性大,基本就告别临床了。ADMET 预测模型就是专门对付这些问题的。我个人习惯把它叫做「成药性安检员」——在合成之前先帮你筛一遍,省得花了半年合成出来,一测发现肝毒性超标。
1.1 什么是 ADMET?
ADMET 是五个英文单词的缩写:
- A – Absorption(吸收):药物怎么进入血液循环,口服能不能到靶器官。
- D – Distribution(分布):药物在体内跑得开不开,会集中在哪些组织。
- M – Metabolism(代谢):肝脏里的酶会怎么改造它,会不会产生有毒代谢物。
- E – Excretion(排泄):最终怎么排出体外,半衰期长不长。
- T – Toxicity(毒性):对人体有没有急性毒性、遗传毒性、心脏毒性等。
说白了,ADMET 就是描述一个化合物在生物体内完整命运的框架。我们做预测模型,就是试图用计算的方法提前知道这些性质。
我记得刚入行时接过一个项目,一个先导化合物活性 IC50 达到 1 nM,团队都很兴奋。结果我拿它跑了一下 Caco-2 通透性预测,数值低得离谱。后来补测了实验,果然是 P-gp 底物,口服生物利用度不到 5%。从那时候起,我就一直把 ADMET 预测放在活性筛选之前。
1.2 应用场景:你会在哪里用到 ADMET 预测?
几乎整个药物发现阶段都能用上。我把常见场景列了出来:
| 场景 | 典型问题 | 预测目标 |
|---|---|---|
| 虚拟筛选 | 数百万化合物里怎么挑? | 先过 ADMET 门槛,再挑活性 |
| 先导优化 | 修饰哪个位点能提高代谢稳定性? | 代谢位点、清除率 |
| 候选化合物评估 | 这个分子上临床会不会出事? | hERG 风险、肝毒性、遗传毒性 |
| 药物-药物相互作用 | 会不会抑制 CYP 酶? | CYP 抑制/诱导 |
| 制剂设计 | 水溶性差,做成盐还是前药? | 溶解度、logP、pKa |
你想想看,如果没有这些预测模型,每个候选都得做一套体内动物实验,成本高、周期长。现在很多大平台已经能做到上千个化合物一天跑完所有基础 ADMET 预测。
1.3 ADMET 预测与 QSAR 的关系
很多人会问:ADMET 预测和 QSAR 是一回事吗?不是,但它们的关系非常紧密。
QSAR(定量构效关系)是一类方法学——用统计或机器学习建立分子结构与某个性质之间的定量关系。而 ADMET 预测是 QSAR 最重要的应用领域之一。说白了,QSAR 是「怎么造模型」的工具,ADMET 是「拿模型去预测什么」的领域。
我的理解更直白:QSAR 给了一把尺子,ADMET 是这把尺子要量的其中一个房间。你完全可以用 QSAR 方法预测活性、选择性、亲和力,但放在 ADMET 场景下,尺子量的是吸收、代谢、毒性这些药代性质。
关键区别对比
| 维度 | QSAR | ADMET 预测 |
|---|---|---|
| 研究范畴 | 方法学,涵盖各种性质预测 | 应用领域,专攻药代/毒性 |
| 建模目标 | 定性或定量关系 | 具体 ADMET 参数 |
| 常用描述符 | 分子量、logP、拓扑指数等 | 同时需要生理相关描述符(如 pKa、电荷状态) |
| 验证难点 | 内部交叉验证为主 | 必须做体外/体内实验验证,否则没有临床可信度 |
| 典型工具 | MOE、Schrödinger、scikit-learn | ADMET Predictor、StarDrop、GastroPlus 等专用平台 |
在实际项目中,我常用 scikit-learn 和 RDKit 自己搭 QSAR 模型,然后专门针对某个 ADMET 终点(比如 CYP2D6 抑制)做训练。下面是一个最简单的例子——用随机森林预测 logD(其实 logD 就是分布相关的参数):
import pandas as pd
from rdkit import Chem
from rdkit.Chem import Descriptors
from sklearn.ensemble import RandomForestRegressor
# 假设 smi_list 是分子 SMILES 列表,y 是实验 logD 值
def calc_descriptors(smi):
mol = Chem.MolFromSmiles(smi)
return [
Descriptors.MolWt(mol),
Descriptors.MolLogP(mol),
Descriptors.NumHAcceptors(mol),
Descriptors.NumHDonors(mol)
]
X = pd.DataFrame([calc_descriptors(s) for s in smi_list])
model = RandomForestRegressor(n_estimators=200, random_state=42)
model.fit(X, y)
# 预测新分子
pred = model.predict([calc_descriptors('CC(=O)Oc1ccccc1C(=O)O')])
print(pred)
这段代码很粗糙,但刚好说明了 QSAR 方法怎么套到 ADMET 预测上。实际工作中我们还需要处理数据平衡、适用域、外部验证等一系列问题,这个系列后面会详细讲。
1.4 核心知识框架
我把本章的知识结构画成一张 SVG 图,方便你快速理解整体的逻辑关系:
这张图把 ADMET 定义、应用场景、QSAR 方法和验证策略串联了起来。你可以看到,QSAR 是中间的方法桥梁,而验证策略则决定了这个模型在实际项目中能不能用、好不好用。接下来整个课程的 30 章,都会围绕「怎么选验证策略」这个核心问题展开。