第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使用了不同的摇瓶法,溶剂系统和温度控制都不一样。

这种情况下,你训练出来的模型本质上是一个“批次分类器”。

注意: 分布漂移不只会影响回归任务。对于分类任务(比如是否具有hERG毒性),漂移会导致决策边界偏移。一个原本处于临界区的分子,可能因为批次效应被错误地划到有毒一侧。

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正则不会主动去对齐不同批次的数据分布。你想想看,如果两个批次的特征空间本身就偏移了,再强的正则化也救不了。

误解二:“我用的是集成模型,多模型投票能抵消批次效应。”

集成模型确实能降低方差,但如果构成集成模型的每个子模型都接受了同样的偏差数据,它们会朝着同一方向犯错。集成只是一种“平滑”,不是“校准”。

一个实用建议: 你可以用简单的可视化检查来判断是否需要校正。把不同批次的数据用PCA或者UMAP投影到二维空间。如果不同批次的数据点自动聚成了独立的簇,不用怀疑,批次效应已经严重影响了你的数据。这时候就必须做校正。

好了,这一章的核心就这么多。记住这三个关键词:来源偏差、分布漂移、噪声过拟合。把这三点理解透,你自然就能判断为什么批次校正是ADMET预测里绕不开的一环。