3. 批次效应概述
做ADMET预测的人,十有八九都会碰到一个“隐形杀手”——批次效应。我最早接触这玩意儿是在一个化合物库的ADMET筛选项目里,明明同一种化合物,换个批次测出来的LogD差了快1.5个单位,起初还以为是实验出错了。后来才发现,这事在药物研发里太常见了。
今天我们就把它彻底说清楚:批次效应到底是什么、从哪冒出来的、以及它怎么偷偷毁掉你的ADMET模型。
3.1 什么是批次效应
简单讲,批次效应就是“因为实验操作或测量环境的非生物学差异,导致同一样本在不同批次测试中产生系统性偏差”。
举个例子你就懂了:同一个化合物库的100个分子,第一批和第二批用同一方法测Caco-2渗透性,但第二批的Papp值整体偏高0.3个单位。这个偏移不是化合物本身的性质,而是实验引入的“假信号”。
我习惯把批次效应比作拍照时的滤镜——文件没变,但滤镜不同,出来的色调就变了。ADMET数据里的“滤镜”,就是批次。
3.2 产生原因
为什么会发生?我经历过好几次,总结下来主要有这几类“元凶”:
- 实验条件波动:温度、湿度、细胞传代次数、孵育时间等,差半小时结果可能就不同。
- 试剂/耗材批次:不同批次的胎牛血清、溶剂、色谱柱,甚至96孔板的生产批次,都会引入变量。
- 操作人员:手工操作(比如液液萃取、细胞铺板)不同人员之间很难完全一致。
- 仪器/检测平台:换了台质谱仪,或者同一个仪器经过维保调校后基线漂移。
- 实验设计本身:有些实验室习惯先把所有化合物的A测完再测B,时间跨度大了,批次效应自然出现。
关键认知:批次效应不是“数据脏”,它是实验过程中不可避免的系统噪声。你的任务不是消灭它(根本做不到),而是检测并校正它。
3.3 对ADMET预测的影响
在ADMET建模中,批次效应带来的后果很直接——模型学到的“规律”可能不是化合物结构的贡献,而是批次的人为偏差。
具体来说:
- 引入假阳性/假阴性:一个化合物在A批测出来渗透性优秀,换到B批却一般。你信哪批?如果按批次分割训练集和测试集,模型性能会被严重高估或低估。
- 降低模型泛化性:模型在新实验室、新批次数据上表现暴跌。我就遇到过客户拿着自己实验室的溶解性数据,套用公开模型预测,结果R²只有0.2——一问,原来是公开数据用了老批次试剂。
- 混淆真实信号:PCA等降维方法本来想展示化合物结构聚类,结果画出来却是按批次分的堆。此时你再做QSAR,变量重要性可能全是噪音。
避坑指南:我曾经在一个Caco-2数据集中发现,批次的方差贡献甚至超过了化合物本身的结构方差。这时直接建模等于用“批次标签”做预测,而非ADMET性质。
注意:不要把批次效应和“生物学变异”搞混。生物学变异是真实的组间差异,比如不同个体肝微粒体活性不同;批次效应是测量过程引入的伪差异。误把批次当生物学信号,建模结果毫无意义。
下面这张图可以帮你看清批次效应的全貌:
在实际项目中,我经常先用简单的箱线图或密度图扫一眼数据,看各个批次的中位数、方差有没有明显漂移。如果发现某批数据整体偏高或偏低,基本就中招了。
举个例子,你有一份PAMPA渗透性数据:
import pandas as pd
import matplotlib.pyplot as plt
df = pd.read_csv('admet_pampa.csv')
# 假设有列:batch, compound, Papp
df.boxplot(column='Papp', by='batch')
plt.title('Papp by Batch - quick check')
plt.show()
运行后一看箱线图,批次A的中位数明显高于B和C,那就说明批次效应存在。别慌,后面几章我们会用PCA从高维角度定量检测它。今天先把概念吃透——批次效应的本质是“实验标尺变了”,不是化合物本身变了。
记住一句话:在ADMET建模中,不理解批次效应,你建的模型可能只是一张“实验操作回忆录”。