第一章 ADMET概述:从失败的教训说起
说起ADMET,我得先讲个故事。刚入行那会儿,我负责一个激酶抑制剂项目。体外活性IC₅₀做到0.5 nM,酶选择性也漂亮,数据发到团队群里大家都挺兴奋。结果一测肝微粒体稳定性——半衰期不到3分钟。这化合物进了肝脏就跟冰块掉进热水一样,瞬间没了。后来查文献才知道,类似的故事在工业界天天发生:很多化合物体外活性极好,但因为ADMET问题倒在临床前或临床试验里。
说白了,ADMET就是药物分子跟人体之间的“相处之道”。你设计的分子再漂亮,如果人体不接纳它,一切都是零。这一章咱们先把ADMET是什么、为什么重要、有哪些常见性质、数据从哪里来,捋清楚。
1.1 为什么我把它放在课程第一讲?
以前做药物筛选,大家更关注“能不能结合靶点”。后来行业里有个统计:约40%的候选药物因为药代动力学问题被淘汰。你看,这个比例比因为毒性被淘汰的还要高。所以现在我们谈药物研发,ADMET不是“锦上添花”,而是“生死线”。
我个人的习惯是:开始一个新项目前,先查一遍现有类似分子的ADMET数据。这能帮你避开很多坑。比如,如果你发现某个骨架的CYP抑制特别强,那后面做结构优化时就得留个心眼。
| 阶段 | ADMET失效占比 | 典型问题举例 |
|---|---|---|
| 先导优化 | ~30% | 代谢不稳定、被动渗透差 |
| 临床前试验 | ~25% | 肝毒性、CYP抑制 |
| 临床试验I期 | ~10% | 生物利用度低、半衰期短 |
| 临床试验II期 | ~5% | 心脏hERG毒性 |
避开这个坑: 我曾经在筛选早期只看活性和选择性,等到需要做体内实验时才发现P-gp底物导致脑暴露量几乎为零。从那以后,我把ADMET预测提前到虚拟筛选阶段。
1.2 常见的ADMET性质——不是所有性质都重要
你先理解这个:ADMET是吸收(Absorption)、分布(Distribution)、代谢(Metabolism)、排泄(Excretion)和毒性(Toxicity)的缩写。每个字母下面又有几十个具体性质。但实际项目里,没必要所有性质都追踪。我一般优先关注下面这几项:
- 吸收: Caco-2渗透性、PAMPA、人结肠腺癌细胞系(Caco-2)表现、溶解度。记住,没有溶解度一切都是空谈。
- 分布: 血浆蛋白结合率(PPB)、表观分布容积、血脑屏障穿透(logBB)。
- 代谢: 肝微粒体稳定性(HLM)、CYP450酶抑制(尤其是CYP3A4/2D6/2C9)、代谢产物鉴定。
- 排泄: 肾清除、胆汁排泄、半衰期。嗯,这里常用体外肝细胞清除率来做预测。
- 毒性: hERG抑制(心脏毒性)、Ames试验(遗传毒性)、LD₅₀、肝毒性标志。
你会发现这些性质之间还有耦合关系。比如,高血浆蛋白结合率会降低游离药物浓度,进而影响分布和毒性。所以做特征选择时,不能单变量看。
核心思路: ADMET筛选本质上是个多目标优化问题。你得找到那个平衡点——活性够强,同时药代和毒性可接受。
1.3 数据从哪里来?——那些我常用的数据库
你以为做ADMET预测全靠计算?那是不可能的。所有模型都需要高质量实验数据来训练和验证。下面是我个人积累的数个数据来源,算是个避坑指南吧。
1.3.1 公共数据库
- ChEMBL:欧洲分子生物学实验室的化合物活性数据库。包含大量ADMET实验数据,但需要清洗。我习惯用Python的
chembl_webresource_client批量拉取。 - PubChem BioAssay:美国NCBI的公共数据库。毒性数据很多,尤其是Ames和CYP抑制。
- DrugBank:已上市药物和候选药物的详尽信息。适合做对照验证。
- Tox21:专攻毒性的高通量筛选数据,包含12个核受体和应激反应通路。
1.3.2 商业数据库(选讲)
- ADMET Predictor(Simulations Plus):业界用得比较多的商业模型,自带训练好的模型库。
- StarDrop:Optibrium的产品,在ADMET三维可视化上体验不错。
这里有个常见的误区:有人觉得公共数据免费又好用,直接拿来做特征工程。但很多公共数据存在批次效应、实验条件不一致。我曾经从ChEMBL拉了一大堆Caco-2数据,发现同一化合物在不同实验室的结果能差两个数量级。所以,数据清洗这一步不能省。
注意: 你从公共数据库拿到的ADMET数据,最好记录下assay类型和实验条件。比如“CYP3A4抑制”有不同底物法(如咪达唑仑 vs 睾酮),IC₅₀不能直接混用。
1.4 本章知识体系——一张图看懂ADMET全景
下面这张图把ADMET的核心概念串了一遍。你可以看到从化合物结构出发,经过吸收、分布、代谢、排泄、毒性五步,最后决定它能不能成药。我们这门课后面会逐一深挖每个环节的特征筛选方法。
1.5 实战前的最后提醒:数据预处理很关键
很多人拿到数据就急着跑模型。我之前也踩过这个坑:从多个数据库合并后没去重,结果模型训练时同一化合物出现两次,导致过拟合严重。所以我把数据清洗的常用步骤贴在这里,也是我们后面会用到的套路:
# 基础数据清洗示例(Python伪代码)
# 1. 删除缺失值严重的列(比如缺失率 > 30%)
# 2. 对于数值型ADMET性质,统一单位(比如Caco-2渗透性单位统一为nm/s)
# 3. 去除重复分子(使用InChI或Canonical SMILES去重)
# 4. 处理离群点:检查实验值是否在合理范围(如logP一般在-2~8之间)
# 5. 合并多源数据时记录来源列,方便后续误差分析
避坑指南: 我曾经直接从PubChem下载CSV,没检查单位是cm/s还是nm/s,结果Caco-2渗透性差了几个数量级。后面花了两天时间才定位到问题。所以拿到数据第一件事:确认单位、确认assay protocol。