1. ADMET 预测与 PCA 质控概述
说起来,ADMET 预测这件事,在药物研发里越来越重要了。
数据量暴涨,但质量却参差不齐——你有没有遇到过“垃圾进,垃圾出”的窘境?
我记得刚入行的时候,同事递给我一份 ADMET 预测数据,里头一堆异常值,结果用那个模型去筛选候选分子,真是浪费了整整 3 周实验资源。
打那以后,我养成了一个习惯:不管谁的预测数据进来,先做质控,再谈建模。
1.1 ADMET 预测到底在预测什么?
说白了,ADMET 是一串英文首字母拼起来的:
吸收 (Absorption)、分布 (Distribution)、代谢 (Metabolism)、排泄 (Excretion)、毒性 (Toxicity)。
打个比方:你设计了一个分子,想让它当口服药。
吸收 决定它能不能穿过肠壁;分布 决定它能不能到达靶点;代谢 和 排泄 决定它能在体内撑多久;毒性 则是一条红线——过了就得重来。
量化这些性质,以前全靠动物实验,烧钱又耗时。
现在算法抬了头,尤其是 QSAR / 机器学习模型 能在几天内跑出成千上万个分子的预测值。
但问题也来了——数据太脏,模型再好也救不了。
核心矛盾:预测模型的精度,往往受限于输入数据的质控水平。
你想想看,连训练集都有离群点,模型学到的“规律”还能靠谱吗?
1.2 PCA 是怎么粘上 ADMET 的?
PCA —— 主成分分析 —— 听起来像个统计学术语。
但其实它在我这里就三个作用:降维、去噪、可视化。
ADMET 特征呢?少则几十维,多则上千维。
比如 logP、分子量、氢键供体数、极性表面积、溶解度……一堆数字堆在一起,你根本看不出来哪些样品是“可疑”的。
PCA 能把高维数据压缩到两三个主成分上。
于是,那些藏在 50 个特征里的异常样品,一下子就飞出了 95% 置信椭圆 —— 这就是我想要的质控抓手。
个人习惯:拿到一份新的 ADMET 预测数据后,我第一件事不是跑模型,而是做一次 PCA + 置信椭圆的快速质控。
这么做至少能筛掉 10–20% 的错误录入或离群化合物。
1.3 为什么质控必须前置?
我在项目里遇到过几次,因为质控没做好,导致后面整个模型的 Q² 和 R² 都偏低。
花了大量时间去调参,最后发现是数据里混进了结构错误的分子 SMILES。
质控前置给你带来的好处,我列了个表:
| 环节 | 没有 PCA 质控 | 做了 PCA 质控 |
|---|---|---|
| 特征空间可见性 | 盲人摸象,只能看单变量统计 | 全局看到样品在特征空间里的分布 |
| 离群点检出 | 靠人工经验或极值判断,漏检多 | 基于马氏距离 / 置信椭圆自动化标记 |
| 共线性问题 | 特征冗余,模型不稳定 | PCA 降维后消除共线性,模型更稳健 |
| 批次效应 | 不同实验室的预测数据混杂 | PCA 投影直接暴露批次差异,可矫正 |
说白了,质控就是建模的下限保卫战。
别小看这个步骤,它往往能守住你后面几个月的建模工作量。
1.4 整个流程长什么样?
我给这个课程画了一张框架图,你扫一眼就能明白本章的核心逻辑:
嗯,这里要注意:特征标准化这一步别跳。
我见过不少人直接拿原始 logP 和分子量去跑 PCA,结果 PC1 几乎被分子量这一个变量完全主导了——这是典型的一个变量就撑死了方差,反而把真正的多变量离群点给藏住了。
避坑指南:我曾经接手过一个外包项目的数据,对方说“已经做过质控了”。
结果我 PCA 投影一看,有一个样品飘到了 10 个标准差之外——原来他们根本没跑标准化,那个样品的分子量比其他化合物大了 3 倍。
1.5 你需要什么工具?
这个课程主要用 Python 生态 + 少量命令行工具。
我建议你先把这些装好:
# 基础数据科学生态
numpy >= 1.21
pandas >= 1.3
scikit-learn >= 1.0
matplotlib >= 3.4
seaborn >= 0.11
# 化学信息学工具
rdkit >= 2021.09
# 交互式可视化(可选)
plotly >= 5.5
装好后,跑一行简单的读取加 PCA,就能看到你的 ADMET 数据在质控前的“素颜”了:
import pandas as pd
from sklearn.decomposition import PCA
from sklearn.preprocessing import StandardScaler
# 读取你的 ADMET 预测数据(示例路径)
df = pd.read_csv("admet_predictions.csv")
# 选取数值特征列
features = ["logP", "MW", "HBA", "HBD", "TPSA", "logS"]
X = df[features]
# 标准化
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)
# PCA 降到 2 维
pca = PCA(n_components=2)
X_pca = pca.fit_transform(X_scaled)
# 快速查看前两个主成分的方差解释率
print("Explained variance ratio:", pca.explained_variance_ratio_)
我通常会 在这步之后直接画一个散点图 + 置信椭圆,离群点一眼就能扫出来。
后面几章节我会手把手教你怎么画这个质控图。
1.6 本章要点回顾
- ADMET 预测 靠的是数据驱动的 QSAR / 机器学习模型,但输入数据的质量直接决定模型上限。
- PCA 质控 本质是用降维 + 可视化把高维特征空间的异常暴露出来。
- 标准化不可省略:不做标准化,PCA 容易被尺度过大的变量绑架。
- 质控一定要前置:数据进模型之前,先花 10% 的时间做质控,能省掉后面 40% 的 debug 时间。