课程导论:ADMET预测的重要性与分子描述符的核心作用
大家好,我是老周。做计算化学这行快十五年了,今天咱们聊聊ADMET预测。说实话,我刚入行那会儿,总觉得这玩意儿就是锦上添花,真正拍板还得靠实验数据。直到有一次,我们一个辛辛苦苦筛了两年的先导化合物,在动物实验阶段因为肝脏毒性翻了车……嗯,从那以后,我再也不敢小看ADMET预测了。
为什么ADMET预测这么重要?
你想想看,一个新药从研发到上市,平均要花10-15年,投入超过10亿美元。而其中因为ADMET性质不良导致的失败,占了临床候选药物的40%以上。这不是个小数目。
我给大家拉个数据,看着更直观:
| 失败原因 | 占比 | 典型问题 |
|---|---|---|
| ADMET性质不良 | 40-45% | 毒性、代谢快、吸收差 |
| 疗效不足 | 25-30% | 靶点结合力弱、选择性差 |
| 商业原因 | 10-15% | 市场规模、竞争格局 |
| 临床安全性 | 10-12% | 脱靶效应、免疫原性 |
| 其他 | 5-10% | 配方、生产、专利 |
看到了吗?ADMET问题是头号杀手。我有个朋友在药企做早期筛选,他们一个项目组的35个候选分子,ADMET预测能筛掉28个。剩下那7个,最后真正走到临床的只有1个。这就是现实。
什么是ADMET?
ADMET是五个英文单词的缩写:
- 吸收 (Absorption) —— 药物能不能被人体吸收?口服还是注射?
- 分布 (Distribution) —— 药物到了体内会跑到哪些器官?够不够快?
- 代谢 (Metabolism) —— 肝脏会不会把它降解掉?半衰期多长?
- 排泄 (Excretion) —— 从哪排出去?肾脏还是肠道?
- 毒性 (Toxicity) —— 会不会伤肝?有没有心脏毒性?
说白了,ADMET就是在问:这药进了人体后,怎么走、怎么用、怎么走、安不安全。每一个环节出了问题,前期投入基本就打了水漂。
我的小技巧:在做ADMET预测时,不要只看单一性质。我习惯先把吸收和毒性这两头盯死——吸收不好的,后面再有效也白搭;毒性不过关的,代谢再稳定也没用。
分子描述符在这里扮演什么角色?
讲完ADMET的重要性,咱们来聊聊它的核心工具——分子描述符。
你想想,ADMET预测本质上是个数学建模问题。我们给模型输入分子的结构信息,输出预测的ADMET性质数值。那么,怎么把分子结构变成计算机能懂的数学语言?就是靠分子描述符。
我做了这么多年模型,有个很深的体会:模型的好坏,七分靠描述符,三分靠算法。同样的神经网络,你用对了描述符,预测准确率能翻一倍。反过来,描述符选错了,再好的算法也救不了。
举个例子,我之前带一个实习生做Caco-2细胞渗透性预测。他选了20多个分子描述符,模型跑出来R²才0.3。我一查,他用的全是拓扑指数,什么Wiener指数、Zagreb指数,没有一个反映极性和氢键。后来我把极性表面积、氢键受体供体数加进去,模型R²直接跳到0.78。你看,选对描述符就是这么关键。
分子描述符的类型
分子描述符分很多种,我给大家梳理一下:
| 类型 | 代表描述符 | 适合预测的性质 |
|---|---|---|
| 2D拓扑描述符 | Wiener指数、分子连接性指数 | 理化性质、分配系数 |
| 3D分子场描述符 | CoMFA、CoMSIA | 结合亲和力、选择性 |
| 量子化学描述符 | HOMO/LUMO能级、静电势 | 反应活性、代谢位点 |
| 药效团描述符 | Golpe、CATS | 靶点相互作用、毒性 |
| 指纹图谱描述符 | ECFP4、MACCS | 多样性分析、相似性搜索 |
| 分子性质描述符 | LogP、TPSA、HBD/HBA | ADMET几乎所有性质 |
每种描述符都有自己的长处和短板。比如ECFP4指纹,做相似性搜索特别好,但用在定量预测上就不太灵光。而LogP和TPSA这类基础性质描述符,虽然简单,却是ADMET预测的常青树——我敢说,90%的ADMET模型都离不开它们。
核心要点:选择分子描述符,不是越多越好,而是要对症下药。预测水溶性就多放极性描述符,预测代谢稳定性就考虑量子化学参数。一个真正好的模型,通常只用5-15个深思熟虑的描述符,而不是50-100个随便堆砌的变量。
一个简单的例子:计算分子描述符
讲了这么多理论,咱们看段代码。用RDKiT算几个常用描述符,其实很简单:
from rdkit import Chem
from rdkit.Chem import Descriptors
mol = Chem.MolFromSmiles('Cc1ccccc1O') # 对甲基苯酚
logp = Descriptors.MolLogP(mol)
tpsa = Descriptors.TPSA(mol)
hbd = Descriptors.NumHDonors(mol)
hba = Descriptors.NumHAcceptors(mol)
mw = Descriptors.MolWt(mol)
print(f'LogP: {logp:.2f}')
print(f'TPSA: {tpsa:.2f} Ų')
print(f'氢键供体: {hbd}')
print(f'氢键受体: {hba}')
print(f'分子量: {mw:.2f} Da')
这段代码算出来的这五个描述符,搭配别的特征,基本就能搭一个不错的ADMET模型框架。我个人习惯在写预测管线时,先把这套基础描述符跑通,再一步步加更复杂的参数。
注意了:算LogP的时候,不同工具包的结果可能差很多。RDKiT算出来的和ChemAxon算出来的,有时候能差0.5个Log单位。所以我在项目里会统一用一个工具,全程保持一致,不然最后模型预测的可靠性会大打折扣。
这张图帮你理清思路
好了,说了这么多,咱们用一张图来总结ADMET预测和分子描述符之间的关系。这也是本课程的整体框架:
从这张框架图你就能看出来,分子描述符是连接分子结构和ADMET预测模型的桥梁。桥搭得稳不稳,直接决定了预测准不准。在接下来的29章里,我会带着大家逐一深入每种描述符的原理、计算方法和选择策略,一起把这座桥搭好。
好的,今天的课就到这里。咱们下次见。