1. ADMET 预测概述与交叉验证的重要性

ADMET 预测,说白了就是帮我们回答一个问题:这个化合物到底能不能成药?

吸收(Absorption)、分布(Distribution)、代谢(Metabolism)、排泄(Excretion)和毒性(Toxicity)——这五个词加起来,是药物研发能不能走下去的关键。我做了七八年的 ADMET 预测,亲眼见过不少活生生的例子:体外活性数据漂亮得不行,一上动物实验就出问题,要么肝毒性爆表,要么生物利用度低得离谱。

嗯,为什么会这样?

核心原因很简单:你建立的预测模型,没有经过严格可靠的验证。或者说得再直白一点——你拿来做模型评估的样本,跟模型训练时看到的样本太“像”了,导致评估结果虚高。

这就是交叉验证要解决的核心问题。

一句话总结:ADMET 预测模型的可靠性,取决于你如何验证它。交叉验证不只是一个技术细节,它是保证模型泛化能力、避免“过拟合欺骗”的第一道防线。

1.1 为什么 ADMET 预测比活性预测更需要交叉验证?

我刚开始接触 ADMET 建模时,总觉得跟做活性预测(比如 pIC50 预测)没什么区别。但很快发现——这两者根本不是一回事。

对比维度活性预测ADMET 预测
数据量通常较大(>10万)较小(几千~几万)
标签异质性实验室统一标准实验条件差异大
分布偏移相对可控化学空间分布极不均匀
过拟合风险中等极高

你看,ADMET 数据集通常来自不同实验室、不同批次的实验,数据噪声大、结构多样性差。这时候你还拿传统的数据随机分割来验证,结果很容易“好看但不真实”。

我自己踩过最深的一个坑,就是用随机打乱的 5 折交叉验证评估了一个 CYP 抑制模型,R² 接近 0.85,结果一到外部测试集直接掉到 0.3 以下。后来复盘才发现——数据里有大量的同系物聚在一起,随机分割把相似结构分到了训练和测试两边,评估结果虚高。

1.2 交叉验证在 ADMET 中的核心作用

交叉验证不是万能的,但它能帮你解决三个最实际的问题:

  • 评估真实性:通过多次训练-测试划分,你能更真实地估计模型在未见数据上的表现。
  • 稳定性诊断:不同折的结果波动大,说明模型对数据的某些子集敏感,你需要看看是不是数据本身有问题。
  • 超参数选择:没有可靠的验证,你根本不知道模型参数该往哪个方向调。交叉验证能给出一个相对稳定的评价标准。

我个人习惯,在任何一个 ADMET 项目开始时,先画一张验证策略的流程图。现在我就把它画出来。

ADMET 交叉验证策略整体框架 1. 数据收集与清洗 2. 分层 / 骨架 / 时间感知分裂 K 折交叉验证 嵌套交叉验证 外部验证集验证 3. 稳定性评估与偏差分析 4. 报告评估指标与置信区间 所有验证策略应在模型训练前确定

这张图概括了我在项目中实际采用的验证流程。从数据准备到最终的指标报告,每一步都有明确的输入输出。

一个小技巧:我建议你在做 ADMET 项目时,把上面的流程固化成一个脚本模板,每次启动新任务就自动执行一次。省得自己漏掉步骤。

1.3 常见的验证陷阱,你中了几个?

我记得有一次给一个新团队做培训,我问他们用了什么验证方式,所有人回答都是“5折交叉验证”。再一问——数据随机分割。这几乎是个教科书级的问题。

常见的陷阱包括:

  • 随机分割假象:ADMET 数据通常有很强的化学空间聚类,随机分割会高估模型性能。
  • 单次划分赌运气:只用一次 train/test split 就下结论,结果严重依赖划分的随机性。
  • 忽略时间依赖性:很多 ADMET 数据是分批产生的,时间维度上的分布偏移是真实存在的。
  • 交叉验证与特征选择混在一起:在外部循环之外做特征选择,相当于提前“看了答案”。

警告:如果你在交叉验证的循环内部使用了整个数据集的统计信息(比如归一化时的均值和方差),你的评估结果已经产生偏差了。务必在每一折内部分别计算。

1.4 交叉验证怎么选?我的推荐清单

我根据自己的项目经验,总结了一个选型参考表。场景不同,验证策略完全不同。

场景推荐验证策略折数建议
数据量 < 500,且结构多样留一法(LOO)或 10 折n 或 10
数据量 500 ~ 5000分层 K 折(按骨架或活性区间)5 ~ 10
数据量 > 5000K 折 + 独立外部测试集5
有时间顺序的数据时间感知序列分割按时间点划分
超参数需要同时调优嵌套交叉验证外 5 内 3 或 外 5 内 5

你可能会问:为什么折数要跟着数据量走?

因为折数越多,每次训练的样本量越接近全体,偏差越小,但方差会增大。数据量少的时候,这种 trade-off 需要你仔细权衡。

我的一个核心建议:永远不要在 ADMET 预测上用“默认”的随机交叉验证。你至少要搞清楚你的数据是不是有化学空间上的聚类,或者时间上的分布漂移。否则你得到的 R²、AUC 再漂亮,也只是自欺欺人。

好了,这一章我们聊了 ADMET 预测的背景、交叉验证为什么如此重要,以及验证策略的整体框架。后面的章节我会深入每一种验证方法的具体实现和代码细节。