想象你经营一家火锅店,开业时精心调配了一锅招牌原汤,麻辣鲜香,街坊邻居都爱这一口。你每天早晨尝一口汤底,确认味道没变,才放心开门迎客。但几个月后,你发现老顾客越来越少了——不是你手艺退步,而是附近搬来了一批南方新居民,他们偏爱清淡的菌汤锅。人还是那些人,但口味变了。你的原汤还是那锅原汤,可来吃火锅的人,已经不是当初那批人了。 机器学习模型也一样:模型训练时见到的数据和上线后遇到的数据,就像同一口锅、两批食客。当输入数据的“口味”悄悄改变,模型用老配方硬撑,效果自然越来越差。这种“输入分布变了,但输入到输出的关系没变”的现象,叫协变量漂移。而 PSI 与 KL散度,正是帮你“尝汤底、量口味偏差”的两把尺子。这篇文章,就带你从火锅店的故事出发,把这两把尺子彻底搞懂。

岗位关联

学会协变量漂移的度量方法,你就能在模型效果崩塌之前发出预警,守卫模型健康。这是 AI 工程师做模型监控、确保上线系统长期可靠的核心技能。

目录
  1. 可视化演示
  2. 什么是协变量漂移
  3. 漂移的成因与影响
  4. PSI度量方法
  5. KL散度度量
  6. PSI与KL对比
  7. 阈值设定标准
  8. 监控报警方案
  9. AI 应用场景
  10. Python 演示
  11. 常见误区
  12. 面试题

可视化演示

展示系统处理流水线、实时性能指标曲线及多方案对比分析,包含数据流转、吞吐延迟监控与方案评估。

本节配有交互动效(进入视口后自动加载,约 3KB)。

系统可视化 处理流程:输入→处理→模型→输出 性能监控:实时指标 P=L×T

什么是协变量漂移

店长每天开门前都要尝一口原汤。某天他突然发现,汤还是那个配方、那个火候,但喝起来总觉得哪里不对。仔细一查,原来是昨天采购的辣椒换了品种——花椒还是那个花椒,可辣味的表现方式不一样了。模型世界里的“协变量漂移”,讲的就是这么回事。

协变量(也就是模型的输入特征 X)的分布变了,但输入和输出之间的映射关系 P(Y|X) 并没有变。换句话说,规律没变,变的是“喂给规律的东西”。你训练模型时用的是 A 类人群的数据,线上来的却是 B 类人群——模型还是那个模型,输入却“换了辣椒”。

用数学语言表达:训练时特征服从分布 $P_{\text{train}}(X)$,线上服从 $P_{\text{online}}(X)$,二者不一致时,就发生了协变量漂移。它和“概念漂移”不同,概念漂移是 P(Y|X) 本身变了。协变量漂移像锅底没变但食材换了,概念漂移则是配方彻底改了。

回到火锅店。店长后来发现,汤底没问题、配方没问题,只是来的客人从爱吃辣变成了爱吃鲜。锅还是那口锅,食客却换了人——这就是协变量漂移最直觉的画面。

Ptrain(X)≠Ponline(X),P(Y∣X) 保持不变P_{\text{train}}(X) \neq P_{\text{online}}(X), \quad P(Y|X) \text{ 保持不变}
训练分布与线上分布不一致,但输入到输出的映射规则未变。
  1. 训练分布与线上分布训练集特征服从的分布记为 $P_{\text{train}}(X)$,线上真实请求的特征分布记为 $P_{\text{online}}(X)$,两者通常存在差异。
    Ptrain(X)≠Ponline(X)P_{\text{train}}(X) \neq P_{\text{online}}(X)
  2. 映射关系不变条件概率 $P(Y|X)$ 表示在给定输入 X 时输出 Y 的规律,这个规律本身没有改变。
    P(Y∣X) 保持不变P(Y|X) \text{ 保持不变}
  3. 漂移的本质特征分布变了、规律没变,正是协变量漂移区别于其他漂移类型的核心特征。
    Ptrain(X)≠Ponline(X),P(Y∣X) 不变P_{\text{train}}(X) \neq P_{\text{online}}(X), \quad P(Y|X) \text{ 不变}

漂移的成因与影响

火锅店的口味偏差不是凭空来的。要么是周围搬来了新居民,要么是外卖平台把店铺推给了不同的人群,要么是季节变了——夏天大家爱酸辣开胃,冬天爱浓汤暖身。模型输入分布的变化,往往也来自类似的“外部环境”。

一类成因是客群结构变化:比如做信贷风控的模型,原本服务一线城市白领,后来业务下沉到二三线城市,借款人的收入、职业分布随之改变;又比如推荐系统上线初期用户以年轻男性为主,随着产品出圈,女性用户比例上升。另一类是渠道与场景变化:同样的商品,从 PC 端转向移动端,用户的浏览行为特征完全不同——屏幕小了、时间碎了、点击模式变了。还有一类是环境与季节因素:电商模型在“双 11”前后的流量特征与平日判若两人;天气预测模型随着季节更替,输入的气象特征分布也自然迁移。

这些变化的直接后果,是模型效果衰退。因为模型是从训练数据里学出来的,它默认输入长成训练时那个样子。一旦输入“变了样”,模型就像照着旧菜单做菜的厨师——菜单没变,食材换了,做出来的菜自然不对味。轻则预测准确率下滑,重则产生严重误判:风控模型漏掉坏账、医疗模型误诊、推荐模型推给用户完全不感兴趣的内容。

火锅店应对口味变化,靠的是每天尝汤、看客流量、听顾客反馈。模型也得这样:漂移不可怕,可怕的是发现得太晚。

漂移程度↑⇒模型准确率↓⇒业务损失↑\text{漂移程度} \uparrow \quad \Rightarrow \quad \text{模型准确率} \downarrow \quad \Rightarrow \quad \text{业务损失} \uparrow
漂移越大,模型对真实世界的拟合能力越差,业务风险随之上升。
  1. 漂移程度上升输入分布差异增大,用 $\text{漂移程度} \uparrow$ 表示漂移变量在增大。
    漂移程度↑\text{漂移程度} \uparrow
  2. 准确率下降模型预测准确度随漂移加剧而下滑,记为 $\text{模型准确率} \downarrow$。
    模型准确率↓\text{模型准确率} \downarrow
  3. 业务损失上升准确率下降传导至业务结果,造成经济损失或用户体验恶化。
    业务损失↑\text{业务损失} \uparrow

PSI度量方法

店长想把“味道变了多少”变成一个数字。他每天记录原汤的十项指标:辣度、麻度、鲜度、咸度……开业那天记录一份作为基准,今天再记录一份,两份一对比,就能知道汤底偏离了多少。PSI(Population Stability Index,群体稳定性指标)干的就是这件事。

PSI 的计算思路是:把某个特征的取值范围分成若干区间(分箱),分别计算基准样本和当前样本落在每个区间的百分比,然后对每个区间求“实际占比与预期占比的差”乘以“两者比值的对数”,最后把所有区间的结果加起来。用公式表示:

举个具体例子:某风控模型的特征“年龄”,建模时 30 岁以下占 40%,线上数据中降到 25%。这一箱的贡献就是 $(0.25 - 0.40) \times \ln(0.25/0.40)$,算出来是负数;其他年龄分箱也有各自的贡献,加起来就得到整体 PSI。店长每天拿到的“偏差指数”,就是这样算出来的。

PSI=∑i=1n(实际占比i−预期占比i)×ln⁡(实际占比i预期占比i)\text{PSI} = \sum_{i=1}^{n} (\text{实际占比}_i - \text{预期占比}_i) \times \ln\left(\frac{\text{实际占比}_i}{\text{预期占比}_i}\right)
PSI 把所有分箱上的偏差加权求和,得到一个衡量总体分布偏移程度的单一数值。
  1. 分箱并算占比把特征取值范围分成 $n$ 个区间,基准分布中第 $i$ 个区间的样本占比记为“预期占比”,当前样本占比记为“实际占比”。
    预期占比i=基准区间样本数i基准样本总数\text{预期占比}_i = \frac{\text{基准区间样本数}_i}{\text{基准样本总数}}
  2. 对数比值项计算实际占比与预期占比的比值,再取自然对数,$\ln$ 放大偏差的符号与幅度。
    ln⁡(实际占比i预期占比i)\ln\left(\frac{\text{实际占比}_i}{\text{预期占比}_i}\right)
  3. 差值加权用 $(实际 − 预期)$ 作为权重,让占比变化大的区间贡献更大的分值。
    (实际占比i−预期占比i)(\text{实际占比}_i - \text{预期占比}_i)
  4. 求和汇总把所有分箱的贡献相加,得到整体漂移指数。
    PSI=∑i=1n(实际占比i−预期占比i)×ln⁡(实际占比i预期占比i)\text{PSI} = \sum_{i=1}^{n} \left(\text{实际占比}_i - \text{预期占比}_i\right) \times \ln\left(\frac{\text{实际占比}_i}{\text{预期占比}_i}\right)

KL散度度量

火锅店长还有另一种衡量“配方差异”的思路:把基准配方和当前配方各自看作一种“概率分布”,然后问一个问题——如果我一直用基准配方去描述当前这锅汤,平均会丢失多少信息?这个“信息丢失量”,在信息论里就是 KL散度(Kullback-Leibler Divergence,相对熵)。

KL散度的定义是:用分布 Q 去近似分布 P 时,额外需要的信息量。公式如下:

KL散度有一个重要性质:不对称。拿火锅打比方,问“从辣锅到清汤锅信息变了多少”和“从清汤锅到辣锅信息变了多少”,答案是不同的。因为 KL 散度的权重来自“出发分布”。这也意味着它天然适合度量“基准 → 当前”这一方向的漂移。在模型监控中,PSI 与 KL 散度实际是同源的——计算连续型特征的 PSI,本质上就是在做 KL 散度的离散化近似。

DKL(P∥Q)=∑xP(x)ln⁡(P(x)Q(x))D_{\text{KL}}(P \| Q) = \sum_{x} P(x) \ln\left(\frac{P(x)}{Q(x)}\right)
KL散度衡量两个概率分布之间的差异,注意它不是对称的:KL(P‖Q) ≠ KL(Q‖P)。
  1. 遍历所有取值对所有可能的输入取值 $x$ 求和,$P(x)$ 是基准分布的概率。
    ∑xP(x)\sum_{x} P(x)
  2. 对数比值$\ln(P(x)/Q(x))$ 度量在该取值上,P 与 Q 相差的比例有多“出乎意料”。
    ln⁡(P(x)Q(x))\ln\left(\frac{P(x)}{Q(x)}\right)
  3. 加权平均用 $P(x)$ 作为权重,对每个取值的对数比值做加权平均。
    DKL(P∥Q)=∑xP(x)ln⁡(P(x)Q(x))D_{\text{KL}}(P \| Q) = \sum_{x} P(x) \ln\left(\frac{P(x)}{Q(x)}\right)

PSI与KL对比

店长的工具箱里有两把尺:一把是 PSI,一把是 KL 散度。它们师出同门,但脾气不同。PSI 是 KL 散度离散化后的特例,两者在连续分布离散化场景下数值几乎一致。但 PSI 的可解释性更强——它是“百分比差 × 对数比”的加和,每个分箱贡献多少一清二楚;而 KL 散度更抽象,它来自信息论,单位是“纳特”或“比特”。

从形式上看,PSI 与 KL 散度的本质联系可表示如下:当用分箱近似替代连续分布时,PSI 等价于对称化的 KL 散度。

工业界选型时,PSI 是绝对主流:它对称、有成熟阈值、各分箱可解释,风控、推荐、搜索领域都在用。KL 散度则在学术研究和无监督场景更常见——比如衡量两个文本主题分布、两个模型输出分布的差异。回到火锅店,店长日常用 PSI 就够了;可如果要研究“辣度和麻度到底哪个维度变化更本质”,他可能得把 KL 散度拆开来细细分析。核心原则:给监控系统的指标,要选可解释、有阈值的;给研究分析的指标,可以选更精致的。

PSI≈DKL(P∥Q)+DKL(Q∥P)2\text{PSI} \approx \frac{D_{\text{KL}}(P\|Q) + D_{\text{KL}}(Q\|P)}{2}
PSI 与 KL 散度的关系就像“把 KL 的两个方向平均一下”,因此 PSI 天然是对称的。
  1. 前向 KL$D_{\text{KL}}(P\|Q)$ 以基准分布 P 为权重,衡量从 P 到 Q 的信息偏差。
    DKL(P∥Q)D_{\text{KL}}(P\|Q)
  2. 反向 KL$D_{\text{KL}}(Q\|P)$ 以当前分布 Q 为权重,衡量反向偏差。
    DKL(Q∥P)D_{\text{KL}}(Q\|P)
  3. 取平均近似 PSI两个方向的 KL 取平均,得到对称性更好的 PSI 近似值。
    PSI≈DKL(P∥Q)+DKL(Q∥P)2\text{PSI} \approx \frac{D_{\text{KL}}(P\|Q) + D_{\text{KL}}(Q\|P)}{2}

阈值设定标准

有了偏差数值,店长还得定规矩:数值到什么程度算正常,什么程度要警觉,什么程度必须关店整改?PSI 的行业通用标准,就是这样一套规矩。

经验阈值如下:PSI < 0.1 表示分布基本稳定,模型可放心继续服役;0.1 ≤ PSI < 0.25 表示分布出现中度漂移,需要排查原因、关注趋势;PSI ≥ 0.25 表示分布发生显著漂移,必须立即介入,考虑重训、回滚或下架。

但店长深知,标准是死的,客群是活的。高价值客户占比 0.1% 的特征,漂移 0.2 可能无伤大雅;而决定放款的核心变量,漂移 0.15 就该拉响警报。阈值必须结合业务风险做校准:风险敏感场景收紧阈值,稳定场景放宽阈值。此外,PSI 只衡量特征分布变化,不解释“变化是好事还是坏事”——商户评分特征大变,可能意味着客群升级,也可能意味着数据异常,需要人工复核。

PSI<0.1:无偏移0.1≤PSI<0.25:需关注PSI≥0.25:需处理\text{PSI} < 0.1 : \text{无偏移} \qquad 0.1 \le \text{PSI} < 0.25 : \text{需关注} \qquad \text{PSI} \ge 0.25 : \text{需处理}
PSI 阈值分级是工业界经验标准,具体数值应结合业务风险做校准。
  1. 健康区间PSI 小于 0.1 时,实际分布与基准分布差异很小,模型稳定。
    PSI<0.1\text{PSI} < 0.1
  2. 关注区间PSI 介于 0.1 与 0.25 之间时,漂移已可感知,应加强监控频率。
    0.1≤PSI<0.250.1 \le \text{PSI} < 0.25
  3. 处理区间PSI 大于等于 0.25 时,分布已显著改变,必须启动干预流程。
    PSI≥0.25\text{PSI} \ge 0.25

监控报警方案

店长最终搭建了一套完整的“尝汤巡检制度”:每天开门前测汤底,午市后再测一次,晚上打烊前再测一次;每个指标单独记录,超过黄色警戒线就缩短巡检间隔,超过红色警戒线直接停售排查。模型监控的报警方案,结构完全相同。

监控粒度上,既要监控“整体预测分布”的 PSI,也要监控“每个关键特征”的 PSI。整体预测分布变了,说明模型输出行为在变;单个关键特征变了,往往能定位到具体原因——比如“年龄特征 PSI 飙升”,马上能联想到客群结构变化。监控频率上,通常按天或按小时计算 PSI,并在离线任务跑完后自动产出报表。分级告警则将 PSI 结果映射为三档:绿灯(正常)、黄灯(预警,通知监控值班群)、红灯(告警,触发出至高优先级工单并通知模型负责人)。

报警之后必须有预案。预案与回滚机制包括:第一步,查看漂移最大的特征明细,判断是数据质量问题还是真实业务变化;第二步,若是数据问题,修复采集链路;若是业务变化,评估影响面;第三步,效果下滑明显时,动用“影子模型”灰度验证新模型,或直接回滚到旧版本,同时启动重训流程。火锅店的经营哲学在这里同样成立:汤底变质不可怕,可怕的是没人尝、尝了不当回事。

警报级别={无事,PSI<0.1预警,0.1≤PSI<0.25告警,PSI≥0.25\text{警报级别} = \begin{cases} \text{无事,} & \text{PSI} < 0.1 \\ \text{预警,} & 0.1 \le \text{PSI} < 0.25 \\ \text{告警,} & \text{PSI} \ge 0.25 \end{cases}
以 PSI 分级为核心的监控体系,让漂移在造成实质损失之前就被发现。
  1. 条件判断将计算出的 PSI 值按阈值划分为三个区间。
    PSI<0.1\text{PSI} < 0.1
  2. 中段预警PSI 处于 0.1 到 0.25 之间时,系统提示预警状态。
    0.1≤PSI<0.250.1 \le \text{PSI} < 0.25
  3. 高段告警PSI 超过 0.25 时,系统进入告警状态,触发人工介入。
    PSI≥0.25\text{PSI} \ge 0.25

AI 应用场景

信贷风控模型特征漂移监控

阶段:模型部署与监控

解决的问题:信贷风控模型上线后,借款人客群随业务下沉不断变化。传统做法靠人工抽样检查样本分布,周期长、覆盖不全。用 PSI 每日扫描模型的关键特征(年龄、收入、负债率等),一旦发现收入特征的 PSI 超过 0.15,立即触发预警,风险团队就能在坏账率上升之前排查原因。

具体案例:某消费金融公司上线了一个信用评分模型,3 个月后“月收入”特征的 PSI 从 0.05 升至 0.31。监控系统自动告警,数据分析师发现业务拓展到了三线以下城市,新客群收入分布整体下移。团队随即用新客群数据微调模型阈值,并在 1 周内完成重训,避免了一场大规模坏账。

推荐系统兴趣分布漂移追踪

阶段:特征工程与在线评估

解决的问题:推荐系统的用户兴趣随时间、热点事件快速变化,不监控会导致推荐内容越发偏离用户当前兴趣。KL 散度在这里派上用场:把用户对内容类别的偏好视为概率分布,用 KL 散度对比“上周的兴趣分布”和“本周的兴趣分布”。

具体案例:某短视频平台发现“知识类内容消费占比”的 KL 散度连续 7 天上升,系统提示运营团队用户兴趣正在从娱乐向知识迁移。运营据此调整了推荐策略的探索比例,提前布局知识类内容供给,用户停留时长提升了 12%。

计算机视觉模型上线环境分布校验

阶段:模型部署前验证与上线后监控

解决的问题:CV 模型常在训练集与线上图像分布不一致时表现骤降。利用 PSI 对图像特征(如颜色直方图、亮度分布)做分布一致性检查,上线前即可发现训练集与线上数据的明显偏差。

具体案例:某安防公司的人脸识别模型在北方冬季上线后,检出率下降。监控系统对图像亮度特征的 PSI 计算发现高达 0.4,原因是训练集以下午的明亮光线为主,而线上大量是雾霾天和夜间低照度图像。团队补充了低照度增强样本后重新训练,检出率恢复。

Python 演示

python45 行
import numpy as np  def kldiv(p, q):    p = np.clip(np.asarray(p, dtype=float), 1e-12, None)    q = np.clip(np.asarray(q, dtype=float), 1e-12, None)    p = p / p.sum()    q = q / q.sum()    return float(np.sum(p * np.log(p / q)))  def psi_score(actual, expected, n_bins=10):    bins = np.percentile(expected, np.linspace(0, 100, n_bins + 1))    bins[0], bins[-1] = -np.inf, np.inf    bins = np.unique(bins)    exp_cnt, _ = np.histogram(expected, bins=bins)    act_cnt, _ = np.histogram(actual, bins=bins)    exp_rate = exp_cnt / len(expected)    act_rate = act_cnt / len(actual)    psi = 0.0    for a, e in zip(act_rate, exp_rate):        if a == 0 or e == 0:            continue        psi += (a - e) * np.log(a / e)    return psi  def simulate_shift(n, mu, sigma):    return np.random.default_rng(42).normal(mu, sigma, n)  if __name__ == "__main__":    reference = simulate_shift(3000, 35, 8)    current = simulate_shift(3000, 42, 9)    psi = psi_score(current, reference)    kl = kldiv(np.histogram(current, bins=12, density=True)[0],               np.histogram(reference, bins=12, density=True)[0])    print("PSI=%.4f" % psi)    print("KLD=%.4f" % kl)    if psi < 0.1:        print("stable: no alarm")    elif psi < 0.25:        print("watch: investigate drift")    else:        print("alert: retrain needed")
目的:用模拟数据演示 PSI 与 KL 散度的计算,并给出报警判断。
  1. def psi_score(actual, expected, n_bins=10):定义 PSI 计算函数,以预期分布的分位数为分箱边界。
  2. bins = np.percentile(expected, np.linspace(0, 100, n_bins + 1))用预期分布的分位数切出 10 个等频区间,保证每箱都有样本。
  3. bins[0], bins[-1] = -np.inf, np.inf把首尾边界扩展到无穷,兜住超出范围的异常值。
  4. psi += (a - e) * np.log(a / e)每个分箱算“差值乘对数比”,累计得到 PSI。
  5. def kldiv(p, q):定义 KL 散度函数,先做裁剪防止除零。
  6. p = p / p.sum()把频数转为概率分布,保证求和为 1。
  7. simulate_shift(3000, 42, 9)模拟均值从 35 漂移到 42 的当前数据,制造协变量漂移。
  8. np.histogram(current, bins=12, density=True)[0]把连续数据离散成 12 个 bin 的密度值,供 KL 计算使用。
  9. if psi < 0.1:按行业标准对 PSI 结果做三级报警判定。

常见误区

误区我以为 PSI 超过 0.25,模型就一定会崩,直接下架重训就行。实际上 PSI 高可能只是某个特征分布变了,但模型可能依然稳健。

正解PSI 衡量的是“输入分布的变化幅度”,不是“模型效果的变化幅度”。就像火锅底料变了,但如果顾客本来就更喜欢新口味,营业额反而涨了。PSI 高只说明变了,不说明变好还是变坏。正确的做法是先看 PSI 最高的特征是不是关键特征,再看模型实际效果指标(如 AUC、准确率)是否同步下滑,两者结合才能判断是否要动模型。

为何常见:因为 PSI 与模型效果在大多数场景下同向变化,初学者很容易把相关性当成因果性。

误区我觉得 KL 散度就是两个分布之间的距离,既然叫“散度”,那 P 到 Q 和 Q 到 P 应该一样大。

正解KL 散度不具备对称性。从辣锅到清汤锅的“意外程度”和从清汤锅到辣锅的“意外程度”完全可能不同。因为 KL 用的是“出发分布”做权重:KL(P‖Q) 用 P 的概率做加权,KL(Q‖P) 用 Q 的概率做加权。所以监控方案里如果要对称指标,用 PSI;如果要研究“基准到当前”的方向性信息,用 KL 散度时务必固定方向。

为何常见:很多初学者接触的是欧氏距离、余弦距离这类对称度量,天然默认所有“距离”都对称。

误区我看到 PSI 低于 0.1 就觉得万事大吉,继续安心喝茶。但往往没过多久模型还是出了问题。

正解PSI < 0.1 只说明“整体分布”没有显著变化,但可能存在内部结构变化:比如年龄分箱中各区间占比完全没变,但每个年龄段内部的收入结构发生了大幅迁移。分箱这种操作会“抹平”箱内的细粒度变化。因此,除了 PSI,还要搭配分位数对比、均值方差监控等细化手段,就像火锅店不只测整体咸度,还得单独测辣度和麻度。

为何常见:PSI 的“分箱聚合”特性导致它对箱内变化不敏感,初学者往往不知道这个局限。

误区我记住了 0.1 和 0.25 这两个数,对所有特征一律套用,不加区分。

正解0.1 和 0.25 是行业经验值,适用于“大多数常规特征”。但不同特征对业务的影响权重不同:核心风控特征漂移 0.15 就可能造成巨大损失,而无关紧要的展示特征漂移 0.4 也未必需要处理。实践中要做阈值校准:根据历史数据确定每个特征的 PSI 基线,结合业务风险等级调整阈值,风险敏感场景收紧,低频场景放宽。

为何常见:教材和文章都写“0.1/0.25”,给初学者一种精确数值的错觉,忽略了阈值背后的业务逻辑。

误区KL 散度来自信息论,理论更漂亮、公式更简洁,我觉得直接用 KL 散度监控更专业。

正解工业监控实践中 PSI 更受青睐,因为 PSI 是对称的、有成熟阈值体系、每个分箱的贡献可解释,且与 KL 散度在离散化场景下数值几乎等价。KL 散度的优势在于理论分析和无对称要求的场景。工具不分高下,只分合不合适。就像测温可以用体温计也可以用红外热像仪,日常巡检用体温计就够了。

为何常见:初学者容易把“理论更深刻”等同于“实践更好用”,忽略了可解释性和工程成熟度的重要性。

面试题

Q1. 协变量漂移的准确定义是?

单选题 · easy

  • A.输入特征分布变化,映射关系不变← 正确答案
  • B.输入特征分布不变,映射关系变化
  • C.模型参数随着训练数据自动更新
  • D.输出标签的分布发生系统性偏移

答案:A。协变量漂移指输入 X 的分布改变、但 P(Y|X) 不变,就像火锅店换了食客但配方没变。B 描述的是概念漂移,C 是模型更新,D 是标签漂移,均不符合定义。

Q2. PSI 的中文全称是?

单选题 · easy

  • A.概率标准区间
  • B.群体稳定性指标← 正确答案
  • C.参数敏感指数
  • D.预测稳定区间

答案:B。PSI 全称 Population Stability Index,译为群体稳定性指标,用于衡量特征分布在不同时间窗口间的稳定性。其余选项均为杜撰。

Q3. 某特征 PSI = 0.18,按行业标准应如何处置?

单选题 · mid

  • A.完全正常,无需关注
  • B.出现中度漂移,需排查原因← 正确答案
  • C.必须立即停用模型
  • D.直接判定为数据质量问题

答案:B。0.1 ≤ PSI < 0.25 属于“需关注”区间,应加强监控和排查原因。A 是 PSI < 0.1 的处置,C 是 PSI ≥ 0.25 的处置,D 将结论绝对化,漂移可能来自真实业务变化而非数据问题。

Q4. KL 散度的一个重要性质是?

单选题 · mid

  • A.永远等于零
  • B.满足三角不等式
  • C.具有对称性
  • D.不具对称性← 正确答案

答案:D。KL 散度以“出发分布”为权重,KL(P‖Q) 与 KL(Q‖P) 一般不相等,不具备对称性。它也不满足三角不等式,因此不是严格意义上的距离度量。A 仅在两个分布完全相同时成立。

Q5. 以下哪个说法最符合 PSI 与 KL 散度的关系?

单选题 · mid

  • A.两者毫无关联
  • B.PSI 是 KL 散度离散化的近似← 正确答案
  • C.KL 散度是 PSI 的平方根
  • D.PSI 与 KL 作用完全相反

答案:B。对连续分布做分箱离散化后,PSI 本质上就是对称化的 KL 散度近似。两者同源,并非无关或相反。C、D 均无数学依据。

Q6. 计算 PSI 时,若某个分箱实际占比为 0,最合适的处理方式是?

单选题 · hard

  • A.直接忽略该分箱
  • B.用极大值替换零值
  • C.跳过该分箱,不加入求和← 正确答案
  • D.将该箱归并入相邻分箱

答案:C。实际占比为 0 时 $\ln(0/e)$ 无定义且趋近负无穷,不能参与求和。工程上通常跳过该分箱,或做微小平滑(如加极小值)。A 的“忽略”不严谨,B 会严重扭曲结果,D 改变了分箱结构,C 是工业界最常用做法。

Q7. 关于 PSI 阈值的业务校准,以下说法正确的是?

单选题 · hard

  • A.所有特征必须使用统一阈值 0.1
  • B.高风险特征应收紧阈值,低风险特征可放宽← 正确答案
  • C.阈值越低监控效果越好,越低越安全
  • D.阈值只需在模型上线时设定一次

答案:B。阈值需结合业务风险校准:高风险特征收紧、低风险特征放宽。A 忽略特征重要性差异;C 过度收紧会产生大量无效告警;D 阈值应随数据周期迭代调整。

Q8. 以下哪个场景最容易引发协变量漂移?

单选题 · easy

  • A.模型代码被修改
  • B.线上客群从一线城市扩展到下沉市场← 正确答案
  • C.服务器从物理机迁移到云服务器
  • D.特征排序逻辑保持不变

答案:B。客群变化是最典型的协变量漂移成因——输入特征的整体分布发生迁移。A 是代码变更,C 是基础设施变更,D 不涉及分布变化,都不会直接引发输入分布漂移。

Q9. 以下哪些属于协变量漂移的常见成因?

多选题 · mid

  • A.用户客群结构自然演化← 正确答案
  • B.业务渠道从 PC 端切换到移动端← 正确答案
  • C.季节更替导致行为特征变化← 正确答案
  • D.模型训练代码的日志打印调整

答案:ABC。客群演化、渠道切换、季节更替都会改变输入特征分布,属于协变量漂移成因。D 只是日志代码调整,不影响特征分布,与漂移无关。

Q10. 关于 PSI 与 KL 散度的工程选型,下列说法正确的有?

多选题 · hard

  • A.PSI 具有对称性,适合给监控报警使用← 正确答案
  • B.KL 散度方向性明确,适合研究基准到当前的偏差← 正确答案
  • C.PSI 每个分箱的贡献可解释,便于定位漂移特征← 正确答案
  • D.KL 散度比 PSI 更适合所有工程场景,应全面替代

答案:ABC。PSI 对称、可解释、有阈值,适合做监控;KL 散度非对称但方向性信息丰富,适合做定向研究;PSI 分箱结构天然支持逐箱归因。D 过于绝对,KL 无成熟阈值体系,不应全面替代 PSI。