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 预测。

我曾经踩过的一个坑: 直接用单一模型预测 hERG,结果 IC50 显示安全,但后续电生理实验却发现有 late current 问题。原因是那个模型只训练了传统的阻断数据,没覆盖特殊机制。所以光看一个指标是不够的,一定要多维度交叉验证。

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 预测模型概述知识框架 ADMET 预测模型概述 ADMET 定义 Abso → Distribution Metabolism → Excretion Toxicity 应用场景 虚拟筛选 先导优化 候选评估 QSAR 方法 分子描述符 → 统计/ML 模型 回归/分类 → 定量关系 验证策略(本课程核心) 内部验证 · 外部验证 · 适用域 AUC · RMSE · 混淆矩阵 经验提醒 ADMET 模型不能只看 R² 必须做外部验证! 工具推荐 开源:RDKit + sklearn 商业:ADMET Predictor

这张图把 ADMET 定义、应用场景、QSAR 方法和验证策略串联了起来。你可以看到,QSAR 是中间的方法桥梁,而验证策略则决定了这个模型在实际项目中能不能用、好不好用。接下来整个课程的 30 章,都会围绕「怎么选验证策略」这个核心问题展开。

小结一下: ADMET 预测模型不是玄学,它是基于 QSAR 方法学、针对药代和毒性终点的工程实践。理解 ADMET 的五个维度、认清 QSAR 与 ADMET 的区别、记住「验证是模型的灵魂」,这三句话能帮你先建立一个扎实的认知框架。
我的一个实用习惯: 每次开始一个新 ADMET 建模项目前,我都会先画一张类似上面那样的知识图——把目标终点、可用数据源、潜在特征、预期验证方式写出来。这能避免你掉进「盲目堆模型」的坑。你也试试看?