3. ADMET数据集划分策略
在ADMET模型验证中,数据集划分策略往往比模型算法本身更能决定评估结论的可信度。同一个分子集合、同一套特征和同一个算法,仅因划分方式不同,测试集上的AUC可能相差0.1以上,适用域的形状也会完全不同。原因在于:ADMET数据本质上是“分子结构—性质”的映射,分子之间存在骨架、官能团、理化环境上的相似性。如果划分时让相似分子同时出现在训练集和测试集,模型只需“记住”相似结构就能取得高分,这种分数无法反映它对全新化学空间的预测能力。
本节围绕四种主流划分策略展开:随机划分、骨架划分、时间划分和聚类划分。理解它们的核心,是理解“划分单元”和“相似性泄漏”这两个概念。随机划分以单个分子为单元;骨架划分以Murcko骨架为单元;时间划分以时间戳为单元;聚类划分以相似性簇为单元。划分单元越粗,训练集与测试集之间的结构重叠越少,评估越严格,但测试集分布也可能偏离真实应用场景。
随机划分是最常见的做法:用train_test_split或类似函数按比例抽取,例如80%训练、10%验证、10%测试。它的优点是实现简单、类别分布容易保持,适合数据量小、分子多样性高的场景。但它的致命弱点是相似性泄漏。假设数据集中有200个他汀类分子,随机划分后训练集和测试集都会包含他汀类骨架,模型在测试集上表现优异,却可能对全新的杂环骨架完全失效。因此,随机划分的AUC通常最高,但最不可信。
骨架划分以Murcko骨架为分组单位。Murcko骨架是把分子中的侧链全部去掉后保留的环系与连接子。实现时先用RDKit计算每个分子的骨架SMILES,再按骨架分组,确保同一骨架的所有分子只出现在一个子集中。例如:
from rdkit import Chem
from rdkit.Chem.Scaffolds import MurckoScaffold
from sklearn.model_selection import GroupShuffleSplit
scaffolds = [MurckoScaffold.MurckoScaffoldSmiles(
mol=Chem.MolFromSmiles(smi)) for smi in smiles_list]
gss = GroupShuffleSplit(n_splits=1, test_size=0.2, random_state=42)
train_idx, test_idx = next(gss.split(smiles_list, groups=scaffolds))
骨架划分的测试集AUC通常比随机划分低0.08~0.15,这个下降不是模型变差了,而是评估变诚实了。它回答的问题是:“模型能否预测训练集中从未出现过的骨架?”如果你的应用场景是虚拟筛选全新化合物库,骨架划分才是正确的验证方式。
时间划分按数据的时间戳排序,用早期数据训练、近期数据测试。ADMET数据常来自不同年份的文献或内部实验批次,时间划分能模拟真实部署中的分布漂移。例如,用2015—2020年的化合物训练,用2021—2023年的化合物测试。如果测试AUC明显低于随机划分,说明数据分布随时间发生了漂移,模型需要定期重训。时间划分的前提是数据带有可靠的时间字段,且时间跨度足够大。
聚类划分先用分子指纹(如Morgan指纹)计算相似性,再用Butina或KMeans聚类,把整个簇分到同一子集。这样既避免了相似性泄漏,又能控制训练集和测试集的化学多样性。聚类划分的关键参数是相似性阈值或簇数量:阈值过高会导致簇过多、测试集过小;阈值过低会导致簇过大、测试集多样性不足。常用Tanimoto阈值0.6~0.7作为聚类切割点。
四种策略对适用域评估的影响同样显著。随机划分下,测试集几乎全部落在训练域内,适用域覆盖率接近100%,无法暴露域外失效问题。骨架划分和聚类划分会主动制造域外样本,适用域覆盖率可能降到60%~80%,此时才能检验适用域判别器是否有效。时间划分则同时引入结构漂移和分布漂移,是检验适用域鲁棒性的最严格场景。
最后需要强调:划分策略没有绝对优劣,只有与目标是否匹配。一个常见的错误是只用随机划分报告高AUC,却在真实筛选中失败。更稳健的做法是采用“双轨验证”:随机划分用于评估模型在同分布下的拟合能力,骨架划分或时间划分用于评估泛化能力,两者结合才能给出可信的ADMET模型验证结论。