分布偏移,数据集偏移,协变量偏移,标签偏移,概念偏移
分布偏移 和 数据集偏移
目前普遍认为,分布偏移即为数据集偏移。
数据集偏移的定义出自《Dataset Shift in Machine Learning》。该书将 数据集偏移(Dataset Shift) 确立为一个总称,指代所有训练联合分布与测试联合分布不一致的情况:
书中虽然主要用 "Dataset Shift",但也多次使用了 "Distributional change" 或 "Shift in distribution" 来描述这一现象。随着时间推移,为了强调统计分布这一数学本质,"Distribution Shift" 逐渐在 NeurIPS/ICML 等顶级会议中取代了 "Dataset Shift" 成为主流术语。
协变量偏移 标签偏移 概念偏移
根据数据集偏移的公式:
根据贝叶斯公式
![]()
可以将这个总的偏移拆解为三个主要的子类别。这有助于我们定位问题到底出在输入端、输出端,还是中间的映射机制上。
数据集偏移
-
输入分布变了 (X 变)----->协变量偏移 (Covariate Shift)
-
输出分布变了 (Y 变)----->先验概率偏移 (Prior Probability Shift)
-
映射规则变了 (X-----> Y 变)-----> 概念漂移 (Concept Drift)
具体理解的例子:
1. 协变量偏移 (Covariate Shift)
——“病人换了一波人,但病还是那个病”
-
场景:
-
训练环境:你的模型是在大学校医院的数据上训练的。来的一般都是20岁左右的年轻人,身体强壮,免疫反应快。
-
测试/应用环境:你把这个模型部署到了养老院。
-
-
发生了什么变化?
-
输入分布 P(X) 变了:训练集里的 X(年龄)集中在20岁,测试集里的 X 集中在80岁。老年人的基础体温可能偏低,白细胞反应也不如年轻人剧烈。模型在一个它“不熟悉”的输入区域(高龄区域)运行。
-
规则 P(Y|X) 没变:流感病毒的致病机理没变。无论是老人还是年轻人,如果出现了特定的高烧和病毒载量,依然是流感。医学原理(规则)是通用的。
-
-
后果:
由于模型在训练时很少见到80岁的数据,它可能把老年人“体温37.5度(低烧)”误判为正常,因为在年轻人看来37.5度不算大事。但实际上对老人来说这已经是流感征兆了。这就是因为输入分布变化导致的预测偏差。
2. 先验概率偏移 (Prior Probability Shift)
——“病人还是那波人,但爆发了大流行”
-
场景:
-
训练环境:你的模型是在夏天(非流感季)采集的数据。这时候来医院看发烧的人,绝大多数是普通感冒或吃坏了肚子,真正得流感的比例很低(比如只有 1%)。
-
测试/应用环境:模型在冬天(流感大爆发季)上线了。这时候来医院发烧的人,可能有 50% 都是流感。
-
-
发生了什么变化?
-
标签分布 P(Y) 变了:训练时流感概率为0.01,测试时流感概率为0.5。
-
反向特征 P(X|Y) 没变:得流感的人的症状表现(发烧、浑身疼)并没有因为季节改变而改变。
-
-
后果:
你的模型学会了“流感很罕见”这个先验知识。当面对一个症状模棱两可的病人时,模型会倾向于保守地预测“不是流感”(因为夏天确实大概率不是)。但在流感大爆发期,这种保守会导致大量的漏诊。你需要告诉模型:“现在世道变了,满大街都是流感,请大胆一点预测。”
3. 概念漂移 (Concept Drift)
——“病已经不是那个病了”
-
场景:
-
训练环境:模型是用2020年以前的流感毒株数据训练的。那时候流感的典型症状是高烧、肌肉酸痛。
-
测试/应用环境:病毒发生了变异(或者出现了一种口罩病毒,但被当作流感筛查)。新的毒株症状变了,它不再引起高烧,而是主要表现为失去嗅觉、腹泻。
-
-
发生了什么变化?
-
映射规则 P(Y|X) 变了:
-
过去:X(高烧)---->Y(流感)
-
现在:X(高烧)---->Y(有可能是流感)
-
现在:X(腹泻和没嗅觉)---->Y(流感)
-
-
-
后果:
这是最致命的。模型的核心判断逻辑失效了。哪怕病人特征没变(还是年轻人),患病率也没变,但模型依然会对着“嗅觉丧失”的病人说“你没病”,因为在旧的知识库(概念)里,流感是不掉嗅觉的。这时候,旧模型必须推翻重练。
关于分布偏移
既然叫做分布偏移,那么分布都是什么?为什么带分布偏移的时序预测文章都拿均值和方差来做文章?
实际上,分布特征源于时序的经典四阶矩
1. 一阶矩:均值 (Mean) —— 描述“中心位置”
- 定义:数据的平均值。
![]()
- 物理含义:数据的重心在哪里。
- 对应的时间序列特征:趋势。
- 在分布偏移中的体现:如果一阶矩发生变化,称为概念漂移中的均值漂移。
- 例子:股票价格从10元涨到100元,虽然波动率可能没变,但中心位置(均值)变了。
2. 二阶矩:方差 (Variance) —— 描述“离散程度”
- 定义:数据偏离均值的程度的平方期望。
![]()
- 物理含义:数据的胖瘦/宽窄。方差越大,分布越“扁平宽大”;方差越小,分布越“瘦高集中”。
- 对应的时间序列特征:波动率或能量。
- 在分布偏移中的体现:如果二阶矩发生变化,称为异方差性。
- 例子:静止期的信号噪音很小(低方差),突变期的信号噪音剧烈(高方差)。
3. 三阶矩:偏度 (Skewness) —— 描述“不对称性”
- 定义:标准化后的三阶中心矩。

- 物理含义:分布是**“左偏”还是“右偏”**。
- 偏度 = 0:对称分布(如正态分布)。
- 偏度 > 0 (右偏/正偏):长尾在右边,大部分数据集中在左边。
- 偏度 < 0 (左偏/负偏):长尾在左边。
- 对应的时间序列特征:极端值的方向性。
- 在分布偏移中的体现:意味着数据生成的机制发生了结构性变化。
- 例子:金融危机前,收益率可能是对称的;危机时,经常出现暴跌(负偏,左尾变长)。
4. 四阶矩:峰度 (Kurtosis) —— 描述“尾部厚度/尖锐度”
- 定义:标准化后的四阶中心矩。通常需要减去3得到“超值峰度”。

- 物理含义:分布的**“厚尾”程度**。
- 峰度 > 3 (Leptokurtic):尖峰厚尾。意味着**极端异常值**出现的概率比正态分布高得多。
- 峰度 < 3 (Platykurtic):低峰薄尾。意味着数据比较平均,缺乏极端值。
- 对应的时间序列特征:极端事件的概率(黑天鹅事件)。
- 在分布偏移中的体现:意味着极端风险的概率分布发生了变化。
- 例子:平时电网负荷很平稳(低峰度),但某个月频繁出现极高或极低的负荷冲击(高峰度),即“厚尾效应”增加。
这个可视化可以更轻松的理解:


题外话:为什么叫一阶矩,二阶矩?矩是矩阵吗?一阶二阶是啥?
1. 为什么叫“矩”?跟矩阵有关系吗?
绝对没有关系。
-
矩阵 (Matrix):是一个长方形的数字表格,用来存数据或做变换的。
-
矩 (Moment):是一个单一的数值(标量),用来描述一堆数据长什么样。
那为什么叫“矩”?
这个词是从物理学借过来的。
在物理里,你肯定听过“力矩”。
-
力矩 = 力*距离
-
转动惯量(惯性矩) = 质量*距离的平方
统计学家发现,概率分布的公式跟物理里的力学公式长得一模一样,所以直接把物理名词借用过来了:
-
物理:物体有质量,分布在空间中。
-
统计:数据有概率,分布在数值轴上。
你可以把概率密度函数想象成一块有形状的铁板:
-
一阶矩就是找这块铁板的重心在哪里(均值)。
-
二阶矩就是这块铁板转动起来难不难(转动惯量/方差)。
2. 为什么叫“一阶”和“二阶”?
“阶”(Order)仅仅代表公式里的**指数(次方)**是多少
一些不同的观点
分布偏移在时序预测中时,这几类偏移主要体现在什么地方呢?
假设我们训练了一个 AI 模型,任务是:根据“当天的最高气温” (x),预测“当天的用电量” (y)。
训练数据(基准状态):
-
季节: 秋天(9月-10月)。
-
状态: 气温舒适(20℃左右),大家不怎么开空调,生活规律正常。
-
模型学到的规律 $f(x)$: 气温每升高 1℃,用电量几乎不变(因为本来就不开空调)。
现在,我们把这个模型直接用到不同的场景下,看看三个概念分别长什么样:
1. 协变量偏移 (Covariate Shift) -> 输入 x 的范围变了
场景发生: 突然入冬了,寒潮来袭。
-
发生了什么:
-
训练时的气温 x 都在 15℃ ~ 25℃ 之间。
-
今天的气温 x 突然变成了 -5℃。
-
-
模型的困惑:
-
模型:“训练的时候没见过 -5℃ 这种数据啊,难以映射输出值?(Out of Distribution)”
-
-
本质:
-
P(x) 变了(输入分布变了)。
-
虽然物理规律可能没变(越冷越要开暖气),但因为输入值超出了模型见过的范围,模型可能会给出一个完全离谱的随机预测。
-
-
一句话总结: “这题超纲了,这种 x 我没做过。”
2. 先验概率漂移 (Prior Probability Shift) -> 输出 y 的范围变了
场景发生: 夏天来了,且小区扩建了。
-
发生了什么:
-
训练时的用电量 y 都在 10度 ~ 15度(平均值 12.5)。
-
现在的用电量 y 普遍在 50度 ~ 80度(平均值 65)。
-
-
模型的困惑:
-
即便输入气温 x 还是 25℃(虽然少见,但假设有凉爽的夏夜),模型依然倾向于预测 12.5度 左右,因为它的“记忆”里,用电量就不可能超过 20 度。
-
-
本质:
-
P(y) 变了(标签分布变了)。
-
标签的整体**均值(Mean)**飙升,**方差(Variance)**也变大了。模型如果不进行重归一化(Re-normalization),预测值会严重偏低。
-
-
一句话总结: “答案的量级变了,我还在填个位数的答案,正确答案却是两位数。”
3. 概念漂移 (Concept Drift) -> 规律 P(y|x) 变了
这是最坑爹的情况。
场景发生: 突然疫情爆发,全城居家隔离(Lockdown)。
-
发生了什么:
-
今天是 10月15日,气温 20℃(和训练集一样,完美的 x)。
-
旧规律(训练时): 20℃ -> 大家都在公司上班 -> 家里没人 -> 用电量 低。
-
新规律(现在的): 20℃ -> 大家都被封在家里 -> 全天开电脑、做饭、电视 -> 用电量 高。
-
-
模型的困惑:
-
模型自信满满:“这题我会!气温 20℃,根据我学的规律,用电量肯定是 5度!”
-
现实打脸: 实际用电量是 30度。
-
-
本质:
-
P(y|x) 变了(映射关系变了)。
-
输入 x 看起来很正常,输出 $y$ 的数值看起来也在合理范围内,但是输入和输出之间的逻辑关系反转了。
-
-
一句话总结: “题我都见过,但以前选A是对的,现在选A变成错的了。”
一个具体的例子就是Dish-TS,改论文标签中就包含了 Distribution Shift 这个范围。
Dish-TS 认为,在时序预测中,分布偏移不仅仅是时间 t 带来的变化,而是**输入空间(Input Space/Lookback)与输出空间(Output Space/Horizon)**之间统计特征(主要是均值和方差)的不匹配。
他们将分布偏移分解为两类:
(1) 空间内偏移 (Intra-space Shift) 也就是协变量偏移
- 定义:指输入窗口(Lookback Window)内部的数据分布随时间发生了改变。
- 数学直觉:对于不同的时刻 i 和 j,其输入窗口 X_i 和 X_j 的统计量不同:
![]()
- Dish-TS 的解释:这是传统非平稳性的直接体现。比如股票市场的波动率在某个月突然变大,导致输入数据的“风格”变了。
- 对应的问题:如果模型只设置为平稳的输入,就无法处理剧烈波动的输入。
(2) 空间间偏移 (Inter-space Shift) 也就是先验概率偏移
- 定义:指同一个样本中输入窗口(Lookback)与预测窗口(Horizon)之间的分布发生了改变。
- 数学直觉:对于同一个时刻t ,其输入 X_t 和输出 Y_t 的统计量不同:
![]()
- Dish-TS 的解释:这是时序预测特有的。例如在上升趋势中,输出窗口的均值显著高于输入窗口的均值。
- 关键洞察:传统的归一化方法(如 RevIN)用输入的统计量去还原输出,这忽略了 Inter-space Shift,导致预测结果不仅发生滞后,而且幅值完全错误。
显然这种分类不适应于直接划分到数据集偏移,因为数据集偏移说的是训练集和测试集,这个方法说的是输入窗口和输出窗口。输入窗口和输出窗口同时存在于训练集和测试集,都是吃进去96个(输入)吐出去(输出)96个或者n个。
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐


所有评论(0)