第3章 批次校正必要性:为什么非做不可
好,进入正题之前,我先问大家一个问题。
你辛辛苦苦训练了一个ADMET预测模型,精度看着还行。结果应用到下一批化合物上,预测值全线漂移,跟实际测出来的数据对不上。这时候你是什么心情?
我最初接触这个领域时,就踩过这个坑。花了几周调模型,结果换了个批次的数据,效果直接腰斩。嗯,那时候我才意识到,问题不在模型,在数据本身。
这一章我们就聊聊,到底为什么非做批次校正不可。
3.1 根本原因:受训集与预测集的“来源偏差”
说白了,ADMET预测本质上是一个监督学习问题。我们用一批已知的化合物数据去训练模型,再用这个模型去预测另一批未知的化合物。
问题是,这两批数据往往不是同一个“出身”。
- 实验条件不同:溶剂批次、仪器校准、操作人员,这些都会带来细微的系统误差。
- 化合物骨架差异:早期筛选的化合物可能都是类药性好的小分子,后期开始探索新化学空间,骨架更多样。
- 数据来源混杂:你用的数据可能来自三个公开数据库加两个内部项目。每个来源的测试标准和单位都不完全一致。
我在一个跨项目合作中遇到过这种情况。甲方提供了2000个化合物的Caco-2渗透性数据,我们自己实验室测了500个同类化合物。同样的分子,在两个实验室测出来的数值差了一个量级。如果不做校正,模型学到的根本不是“渗透性”这个物理化学属性,而是“在哪个实验室测的”。
这就是批次效应的真实面目——它会让你模型学到的特征被“实验室标识”或“实验批次”污染,而不是真正有意义的分子结构特征。
3.2 数据层面的影响:原始特征分布漂移
我们来看一个更具体的例子。假设你有一批化合物的LogD数据,来自两个不同批次。
| 批次 | 分子数 | 平均LogD | 标准差 | 数据来源 |
|---|---|---|---|---|
| 训练集批次A | 1500 | 2.4 | 1.1 | 内部实验室(2022) |
| 预测集批次B | 800 | 3.1 | 1.8 | 外包CRO(2023) |
这两个批次的数据如果直接合并训练,模型会以为“LogD=3.1”在训练集里占了很大比例。可实际上,批次B的数据之所以偏高,是因为第三方CRO使用了不同的摇瓶法,溶剂系统和温度控制都不一样。
这种情况下,你训练出来的模型本质上是一个“批次分类器”。
3.3 模型层面的后果:过拟合批次特异噪声
有人说,我用的是深度学习模型,结构越复杂应该越能适应不同分布吧?
恰恰相反。越复杂的模型,越容易把批次效应当作信号来学习。
我见过一个案例,用的是GNN模型,输入的是分子图和实验条件编码。模型在训练集上R²达到0.92,看着很漂亮。拿到新批次的数据后,R²直接跌到0.3。为什么?
可视化隐藏层特征之后,发现训练集里不同批次的分子被分到了几个不同的簇。模型不是在学习分子的性质,而是在学习“这个分子属于第几轮测试”。
你想想看,这种现象在ADMET预测里尤其危险。因为我们通常希望模型学到的是底层的分子物理化学规律,而不是实验人员的工作习惯。
批次未校正 → 特征分布漂移 → 模型学习批次标识而非化学规律 → 预测可靠性下降
3.4 具体场景中的“痛点”分析
我们不说大道理,直接看几个我在实际项目中遇到的典型场景。
场景一:虚拟筛选中的活性悬崖
有些化合物在训练集里被标记为“高活性”,换了个批次再做,活性降了一个数量级。这种“活性悬崖”很多不是真悬崖,而是批次效应导致的假悬崖。如果你不做校正,模型会误判结构类似的分子,把不该筛掉的筛掉。
场景二:不同时间段的预测分数不可比
我前期用模型预测了一批化合物的清除率,经过优化之后又测了一批。同一模型,同一流程,但两次预测的分数分布明显不同。是不是模型劣化了?后来发现是测试批次不同导致的。校正之后,两批预测值就能对齐了。
场景三:多任务学习的耦合效应
在多任务ADMET模型里,同时预测多个指标——比如渗透性、代谢稳定性、毒性。如果其中一个任务的数据存在批次效应,这个噪声会通过共享层污染其他任务的预测。哪怕其他任务的数据质量很好,整体效果也会被拉低。
3.5 不做批次校正的代价清单
| 代价类别 | 具体表现 | 严重程度 |
|---|---|---|
| 模型泛化能力 | 新批次预测精度显著下降,R²可能下跌0.3-0.6 | 高 |
| 化合物排序稳定性 | 同一化合物在不同批次间排名波动剧烈,无法做优先级决策 | 高 |
| 模型可解释性 | 特征重要性被批次标识干扰,无法信任SHAP或Grad-CAM结果 | 中高 |
| 多任务耦合 | 一个任务的批次效应蔓延到其他任务,造成系统性偏差 | 中 |
| 资源浪费 | 重复实验验证假阳性/假阴性,浪费湿实验资源 | 高 |
我曾经接手过一个项目,之前团队没有做批次校正,导致模型在后续连续三个月内都需要反复重训。每次加入新数据,模型就“失忆”一次。从那时候开始,我把“批次校正”放到了数据处理流程的第一步,再也没变过。
3.6 一个更直观的类比
我有一个习惯,喜欢把事情类比到日常。
批次校正,其实就是一个“校准体温计”的过程。你家里三支体温计,一支测出来36.5℃,另一支37.2℃,第三支36.8℃。你以为自己发烧了,其实只是体温计没校准。
ADMET预测也是一个道理。不同批次的实验数据就是不同体温计,你得先知道它们各自的偏差是多少,然后统一换算到同一个参考系,才能做有意义的比较和预测。
3.7 核心脉络:用一个SVG理清逻辑
说了这么多,我画了一张图来总结“为什么非做不可”的完整逻辑链条。你把这个逻辑记住了,以后每次做模型都会下意识问自己:“我这几批数据之间有没有偏差?”
—— 说白了,批次校正不是为了解决“数据不好”的问题,而是为了不让“数据之间的不一致”毁掉你已经做好的大部分工作。
这张图把链路讲得很清楚了:数据合并 → 来源偏差 → 分布漂移 → 模型过拟合噪声 → 最终预测不可靠。而批次校正,就是在“分布漂移”和“过拟合噪声”之间加一道开关。你别指望跳过这一步还能做出高可靠性的模型。
3.8 必须消除的两个常见误解
我和一些同行交流时,发现有两个误解流传很广。这里一并澄清。
误解一:“我用的模型自带正则化,能自动消除批次效应。”
正则化确实能防止过拟合,但它防的是“参数过拟合”,不是“特征被污染”。Dropout和L2正则不会主动去对齐不同批次的数据分布。你想想看,如果两个批次的特征空间本身就偏移了,再强的正则化也救不了。
误解二:“我用的是集成模型,多模型投票能抵消批次效应。”
集成模型确实能降低方差,但如果构成集成模型的每个子模型都接受了同样的偏差数据,它们会朝着同一方向犯错。集成只是一种“平滑”,不是“校准”。
好了,这一章的核心就这么多。记住这三个关键词:来源偏差、分布漂移、噪声过拟合。把这三点理解透,你自然就能判断为什么批次校正是ADMET预测里绕不开的一环。