4. 域与分布偏移分析
在多数据集联合训练中,真正让模型“翻车”的往往不是数据量不足,而是训练域与目标域之间的分布不一致。若把源域记作 P_s(X, Y),目标域记作 P_t(X, Y),那么联合分布的差异可以沿不同路径分解。工程上最常用的四类偏移是:协变量偏移、标签偏移、概念偏移与条件偏移。识别它们,决定了后续该做重加权、重采样、伪标签、还是直接做特征对齐。
P(X, Y) = P(X) · P(Y|X) = P(Y) · P(X|Y)。协变量偏移看 P(X),标签偏移看 P(Y),概念偏移看 P(Y|X),条件偏移看 P(X|Y)。四者并非互斥,真实场景常是混合偏移。
四类偏移的识别逻辑
协变量偏移(Covariate Shift):输入分布变化,但标签生成机制不变,即 P_s(Y|X) = P_t(Y|X),而 P_s(X) ≠ P_t(X)。典型场景是训练集来自白天道路图像,部署时是夜间图像;或医疗训练数据来自 A 医院设备,推理时来自 B 医院设备。识别信号是:输入特征统计量(均值、方差、直方图、嵌入分布)明显漂移,但同一输入下的标注规则一致。
标签偏移(Label Shift / Prior Shift):类别先验变化,但类条件分布不变,即 P_s(X|Y) = P_t(X|Y),而 P_s(Y) ≠ P_t(Y)。例如训练集正负样本 1:1,线上真实流量正负比 1:100。识别信号是:混淆矩阵中各类的预测比例与真实先验不一致,且类内特征分布相对稳定。
概念偏移(Concept Shift):输入到标签的映射本身改变,即 P_s(Y|X) ≠ P_t(Y|X)。例如“垃圾邮件”的定义随季节变化,或金融风控中“违约”的判定标准调整。识别信号是:即使输入分布相似,模型在目标域上的条件错误率显著上升,且错误集中在特定类别或特定区域。
条件偏移(Conditional Shift):给定标签时输入分布变化,即 P_s(X|Y) ≠ P_t(X|Y)。它常与标签偏移同时出现,例如同一疾病在不同人群中的影像表现不同。识别信号是:类内特征分布发生漂移,而类别先验可能不变。
度量方法与工程流程
识别偏移不能只靠肉眼看损失曲线。推荐按“先粗后细、先无监督后有监督”的顺序推进:
- 特征级监控:对每个关键特征计算源域与目标域的均值、方差、分位数,并用 PSI(Population Stability Index)或 KS 检验做告警。
- 域分类器:训练一个二分类器区分样本来自源域还是目标域。若 AUC 显著高于 0.5,说明域间存在可区分差异;再通过特征重要性定位漂移维度。
- 分布距离度量:在嵌入空间计算 MMD 或 Wasserstein 距离,作为联合训练时的对齐损失或早停指标。
- 标签侧诊断:用混淆矩阵估计目标域类别先验,若预测比例与源域先验差异大,优先怀疑标签偏移。
- 条件侧诊断:固定标签后比较类内特征分布,若类内距离大而类间距离小,则条件偏移显著。
# 域分类器 AUC 快速诊断示例
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import cross_val_score
import numpy as np
X = np.vstack([X_source, X_target])
y_domain = np.array([0]*len(X_source) + [1]*len(X_target))
clf = LogisticRegression(max_iter=1000)
auc = cross_val_score(clf, X, y_domain, cv=5, scoring="roc_auc").mean()
print(f"Domain classifier AUC = {auc:.3f}")
# AUC ≈ 0.5:域不可分,偏移弱
# AUC > 0.8:域强可分,需重点处理
案例:跨医院影像分类的偏移诊断
假设源域是 A 医院 2 万张胸部 X 光片,目标域是 B 医院 5 千张。训练前先做三件事:第一,用域分类器得到 AUC=0.91,说明存在强协变量偏移,主要来自设备灰度与分辨率差异;第二,统计标签先验,A 医院肺炎阳性率 32%,B 医院 18%,存在明显标签偏移;第三,固定“肺炎”标签后比较影像嵌入,类内 MMD 较大,说明条件偏移同时存在。此时若只做简单的类别重加权,无法解决设备差异;正确做法是“图像标准化 + 域对抗特征对齐 + 目标域先验校正”组合拳。
常见误区与复盘清单
| 误区 | 表现 | 纠正方式 |
|---|---|---|
| 把偏移等同于数据量不足 | 盲目扩增源域数据,目标域指标不升 | 先做域分类器 AUC 与分布距离诊断 |
| 只用准确率判断偏移 | 整体准确率尚可,但少数类崩溃 | 分类别、分域报告指标与混淆矩阵 |
| 忽略标签偏移 | 阈值校准失效,召回率骤降 | 估计目标域先验,做 logit adjustment |
| 把概念偏移当协变量偏移处理 | 重加权后仍无法收敛 | 检查 P(Y|X) 是否变化,必要时重新标注 |
P(X)、P(Y)、P(Y|X)、P(X|Y) 的估计,而目标域标签往往缺失。工程上应优先使用无监督指标(域分类器、MMD、特征统计)做初筛,再在少量目标域标注上做条件侧确认,避免过度依赖不可得的监督信号。