老李是清水河水文站的监测员,在河边一待就是十二年。他每天同一时刻记录水位,慢慢摸清了这条河的“性格”:春天融雪涨水,夏天时有洪峰,秋天回落,冬天枯水。下游水电站按这套规律安排发电,就像机器学习模型按训练数据学习规律一样。 可有一年秋天,曲线突然不对劲:本该回落的水位反而持续走高,整整一个多月。水电站按老经验调度,发电效率骤降,还差点延误泄洪决策。老李翻出十二年记录一对比,发现不是某几天的小波动,而是整条“水位分布”都变了样——河的“性格”改了。 AI 模型也会遇到同样的事。训练时学的规律来自过去的分布,上线后真实数据悄悄改变,模型的判断便开始失灵。工程上把这种变化叫做数据漂移。好在工程师有两把“水文尺”:一把比较累计曲线找最大裂口,一把按区间盘点占比偏移。在分布彻底变形前,它们会提前拉响警报——这就是本文要介绍的两大漂移检测利器。

岗位关联

掌握 KS/PSI 漂移检测,是 AI 从业者搭建模型监控体系的第一块基石。它能让你在线上事故发酵前定位漂移特征、判断是否重训,既是 MLOps 工程师的核心技能,也是算法团队从“能上线”走向“可运维”的分水岭。

目录
  1. 可视化演示
  2. 漂移基本概念
  3. KS检验原理
  4. PSI计算过程
  5. 阈值设定经验
  6. 工程落地实践
  7. 模型性能联动
  8. AI 应用场景
  9. Python 演示
  10. 常见误区
  11. 面试题

可视化演示

展示KS检验CDF最大距离度量与PSI分箱稳定性指标的漂移检测过程,交互切换查看两种检测方法及三级告警体系。

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

KS检验:CDF最大距离度量 参考与当前CDF最大垂直差D为KS统计量 扫描线遍历定位最大距离点 D=max|F1-F2| KS对分布整体形状变化敏感

漂移基本概念

老李的巡检日志里有一张“水位分布表”,记录每个水位区间出现的天数。他看的不只是今天的流量,而是整体形态:夏天的河均值高是正常的,冬天的河若是出现夏天的高均值,才是真正的异常。在数据监控中,形状变了、分布漂了,比某个单点值异常更值得警惕。

机器学习模型的学习对象,是训练集里特征 X 的分布 P_train(X)。部署上线后,模型每天吃进的是真实世界的线上数据,特征分布记为 P_online(X)。当两个分布产生系统性偏差,模型见过的规律不再成立——这就是特征漂移,工程上常称为“训练-服务偏差”(training-serving skew)。

特征漂移的直接后果是模型性能衰减:信贷评分卡对客群的排序能力下降,推荐模型的点击率下滑。为了及时捕捉变化,工程上定义基线窗口(训练期或部署初期)与观察窗口(当前滚动数据),用统计量量化两个窗口的分布差异,并在超过阈值时触发告警。整体触发条件可写成如下公式:

水电站不会因为单日流量的高低就去改变调度策略,而是盯住整个季节的分布形态;模型监控同样不能看一两条样本,要看整批特征的分布是否“换了一副性格”。一旦分布越过红线,就要准备进入排查与重训流程——这正是后面几节要逐步展开的工具箱。

Drift=Dist⁡(Ptrain(X),  Ponline(X))>θ\displaystyle \text{Drift} = \operatorname{Dist}\left(P_{\text{train}}(X),\; P_{\text{online}}(X)\right) > \theta
这个公式的通俗意思是:当“历史河流性格”与“当前河流表现”的差异超过设定红线时,模型就要拉响警报。
  1. 训练分布 P_train(X)训练集中特征 X 的分布形状,相当于老李记录的“往年河流性格”,是判断漂移的基准线。
    Ptrain(X)\displaystyle P_{\text{train}}(X)
  2. 线上分布 P_online(X)部署上线后实时流入样本的特征分布,相当于当前河水的实际表现。
    Ponline(X)\displaystyle P_{\text{online}}(X)
  3. 距离函数 Dist(·)度量两个分布差异的函数——工程师通常用 KS 距离或 PSI 来充当这位“体检医生”。
    Dist⁡(Ptrain(X),  Ponline(X))\displaystyle \operatorname{Dist}\left(P_{\text{train}}(X),\; P_{\text{online}}(X)\right)
  4. 阈值 θ超过这条线才认定漂移,用来过滤小波动引发的频繁误报。
    θ>0\displaystyle \theta > 0

KS检验原理

老李发现异常后,做了一张“累积对比图”:横轴是水位,纵轴是“水位不超过某个值的天数占比”。两条曲线一条对应往年,一条对应今年。曲线几乎重合,说明河流性格没变;若在某个水位区明显拉开,说明今年在那个水位区间停留的时间完全变了。

这套思路正是 KS 检验(Kolmogorov-Smirnov Test)的核心:不比较均值,而比较两个分布的累积分布函数(CDF)之间的最大距离。CDF 可以理解为一条从 0 涨到 1 的“排队曲线”,F(x)=P(X≤x),直观反映数据落在某个取值之下的累计比例。

现实中的真实分布未知,我们用样本经验分布来近似:把每条样本的取值“排队”,统计不超过 x 的比例,就得到经验累积分布函数。将基准窗口与线上窗口的两条经验曲线画在一起,两者垂直距离最大的地方,就是两个分布差异最明显的位置,记为 KS 统计量:

其中经验分布函数的定义为:

老李后来发现,最大裂口出现在高水位区——今年秋汛把更多天数推入高水位带,说明“高水位占比”整体抬升。算法世界里,KS 值大意味着特征取值发生了系统性的“搬家”:模型学到的判定边界已经错位,这比单纯比较均值变化更全面、更敏感。

Dn=max⁡x∣F^1(x)−F^2(x)∣\displaystyle D_n = \max_{x}\left|\hat{F}_1(x) - \hat{F}_2(x)\right|
F^(x)=1n∑i=1nI(Xi≤x)\displaystyle \hat{F}(x) = \frac{1}{n}\sum_{i=1}^{n}\mathbb{I}\left(X_i \le x\right)
D_n 就是两条累计曲线被拉开的“最大裂口”。裂口越大,说明两个窗口的特征分布越不像同一群数据。
  1. 指示函数 I(X_i≤x)一个只输出 0 或 1 的“开关”,当样本取值不大于 x 时记 1,否则记 0。
    I(Xi≤x)\displaystyle \mathbb{I}\left(X_i \le x\right)
  2. 累积比例把所有开关结果加起来再除以样本数 n,得到“不超过水位 x 的样本比例”,即经验累积分布函数。
    F^(x)=1n∑i=1nI(Xi≤x)\displaystyle \hat{F}(x) = \frac{1}{n}\sum_{i=1}^{n}\mathbb{I}\left(X_i \le x\right)
  3. 求差取绝对值对同一个 x,用基准曲线 F1 减线上曲线 F2 并取绝对值,衡量该点上的分歧大小。
    ∣F^1(x)−F^2(x)∣\displaystyle \left|\hat{F}_1(x) - \hat{F}_2(x)\right|
  4. 取最大值在所有 x 上找出最大的垂直距离,这就是 KS 统计量 D_n。
    Dn=max⁡x∣F^1(x)−F^2(x)∣\displaystyle D_n = \max_{x}\left|\hat{F}_1(x) - \hat{F}_2(x)\right|

PSI计算过程

除了累积曲线,老李还有一本“分箱台账”:把水位从低到高切成 10 个区间,每月统计各区间天数占比。往年 10 月,六成天数落在中低水位带;今年同期,四成天数挤进高水位带。占比一旦明显偏移,台账立刻暴露问题。

PSI(Population Stability Index,群体稳定性指数)就是这本台账的数字化版本。计算分四步:先对特征分箱,一般取 10 箱;计算训练基准期各箱样本占比 Expected;再计算线上观察期各箱占比 Actual;最后逐箱计算偏离贡献并累加。其公式如下:

分箱数量像老李划分水位带一样讲究:带太粗会掩盖局部偏移,带太细则一场小雨就让比例乱跳。10 箱是兼顾灵敏度与稳定性的行业惯例,而 PSI 把全箱偏移累加成一根综合指数,比单看某个水位带更全面。

PSI=∑i=1k(Actuali−Expectedi)ln⁡(ActualiExpectedi)\displaystyle \text{PSI} = \sum_{i=1}^{k}\left(\text{Actual}_i - \text{Expected}_i\right)\ln\left(\frac{\text{Actual}_i}{\text{Expected}_i}\right)
每一箱的贡献都非负:占比没变则贡献为 0,占比一涨一跌都会被“对数权重”放大。PSI 越大,代表各水位带的占比搬家越剧烈。
  1. 分箱数 k把特征取值范围切成 k 个区间,通常取 10 箱,相当于把河流分成 10 个水位带。
    k=10\displaystyle k = 10
  2. 期望占比 Expected_i训练基准期内第 i 箱的样本占比,是老李“往年同期的水位分布”。
    Expectedi=基准期第 i 箱样本数基准期总样本数\displaystyle \text{Expected}_i = \frac{\text{基准期第 } i \text{ 箱样本数}}{\text{基准期总样本数}}
  3. 实际占比 Actual_i线上观察期内第 i 箱的样本占比,是“今年实际的水位分布”。
    Actuali=线上第 i 箱样本数线上总样本数\displaystyle \text{Actual}_i = \frac{\text{线上第 } i \text{ 箱样本数}}{\text{线上总样本数}}
  4. 对数权重ln(Actual_i/Expected_i) 反映该箱偏移的方向与相对幅度,占比涨跌都按“倍数”被放大。
    ln⁡(ActualiExpectedi)\displaystyle \ln\left(\frac{\text{Actual}_i}{\text{Expected}_i}\right)
  5. 累加求和每个箱子的(实际占比 − 期望占比)× 对数权重全部相加,得到衡量全局漂移的 PSI。
    PSI=∑i=1k(Actuali−Expectedi)ln⁡(ActualiExpectedi)\displaystyle \text{PSI} = \sum_{i=1}^{k}\left(\text{Actual}_i - \text{Expected}_i\right)\ln\left(\frac{\text{Actual}_i}{\text{Expected}_i}\right)

阈值设定经验

老李的台账上画着红黄绿三条线。这不是随手画的,而是多年经验:绿色区域内的波动属于正常起伏,黄色区域要加密观测,红色区域必须立刻上报。KS/PSI 的阈值设定,本质是在“及时抓漂移”与“避免误报疲劳”之间找平衡。

PSI 的行业经验阈值已经形成共识,通常用三档判断漂移严重程度:

KS 检验则通过临界值判定显著性:当 D_n 超过临界值时,认为两个分布显著不同。双样本 KS 在 95% 置信水平下的近似临界值为:

阈值不是死的:核心风控特征的 PSI 红线可以收紧到 0.15,非核心画像特征放宽到 0.3;告警成本高(值班人力有限)就适当放宽,避免“狼来了”效应。老李的经验同理——关乎下游安全的主河道用严标准,支流小渠宽一点无妨。

状态={稳定,PSI<0.1轻度漂移,0.1≤PSI<0.25严重漂移,PSI≥0.25\displaystyle \text{状态} = \begin{cases}\text{稳定}, & \text{PSI} < 0.1 \\[4pt]\text{轻度漂移}, & 0.1 \le \text{PSI} < 0.25 \\[4pt]\text{严重漂移}, & \text{PSI} \ge 0.25\end{cases}
这相当于说:两条累计曲线的最大裂口,大到不可能是抽样巧合时,才判定“河流性格真的变了”。
  1. 样本容量 n1 与 n2两个窗口的样本量,样本越大,临界值越小,检验越敏锐。
    n1,  n2\displaystyle n_1,\; n_2
  2. 常数 1.3695% 置信水平对应的系数,来自 KS 检验临界值表。
    1.36\displaystyle 1.36
  3. 整体判定D_n 超过这条临界线即认为分布差异显著,是“最大裂口大到不可能是巧合”的量化表达。
    Dn>1.36n1+n2n1n2\displaystyle D_n > 1.36\sqrt{\frac{n_1 + n_2}{n_1 n_2}}

工程落地实践

后来水文站升级成自动化监测网:多传感器、定时采样、自动告警,老李从“人肉巡检”变成“系统值守”。模型监控的工程化也是同样的逻辑,要把 KS/PSI 从手工脚本变成 7×24 小时哨兵。

第一步是设计监控窗口。窗口样本量直接决定检测灵敏度:样本太少,占比估计抖动剧烈;样本太多,告警延迟变高。工程上常用最小可检测漂移量 δ 来估算所需窗口大小:

第二步是特征分组与分级监控:数值特征用 KS + PSI 双指标,离散特征以 PSI 为主;按业务重要性分 P0/P1/P2 三级,P0 特征阈值更严、告警优先级更高。第三步是告警响应:告警去重、分级推送(邮件→IM→电话)、关联工单系统,值班工程师按 SOP 排查根因。

完整的自动化流水线是:定时调度取数 → 计算 KS/PSI → 写入指标库 → 面板展示 → 超阈值告警 → 工单追踪 → 根因记录沉淀。老李的监测网最终能自动值守,但最关键的一环仍是报警之后的确定性响应——没有 SOP 的告警只是噪音而已。

n≥(z1−α/2δ)2\displaystyle n \ge \left(\frac{z_{1-\alpha/2}}{\delta}\right)^{2}
这条公式回答“要攒多少样本才能有把握看清漂移”——想捕捉更细微的变化,就需要更大的观测窗口。
  1. 分位数 z95% 置信度对应约 1.96,表示对告警可靠程度的要求。
    z0.975≈1.96\displaystyle z_{0.975} \approx 1.96
  2. 最小可检测漂移 δ期望捕捉的最小占比变化,需求越精细,δ 越小,所需样本越多。
    δ>0\displaystyle \delta > 0
  3. 平方求窗口按此公式计算每天或每小时的聚合窗口,保证监控统计功效,避免“看了等于没看”。
    n≥(1.96δ)2\displaystyle n \ge \left(\frac{1.96}{\delta}\right)^{2}

模型性能联动

老李不仅看水位,还看下游渔获量。水位异常时渔获通常会下滑,但偶尔也会滞后甚至短暂上升。模型监控同样要打通“原因侧”(特征漂移)与“结果侧”(性能指标)两条通道。

特征漂移与性能衰减并非完全同步:模型泛化能力强时,轻微漂移不造成性能下降;反过来,概念漂移发生时特征分布未变、性能却在恶化。因此需要一个衡量“最近手感”的指标——滑动窗口准确率(SWA):

重训决策把原因侧与结果侧合成一条规则:

重训不是终点。工程上必须配套版本管理与回滚预案:新模型灰度放量,旧模型保留、可一键回滚;若漂移来自数据管道 Bug,应先修复数据而非盲目重训。老李会同时保留旧调度表和新参数表,新表未经完整季节验证绝不全面切换——AI 系统也应如此,留好“退路”才能放心前行。

SWAt=1W∑i=t−W+1tI(y^i=yi)\displaystyle \text{SWA}_t = \frac{1}{W}\sum_{i=t-W+1}^{t}\mathbb{I}\left(\hat{y}_i = y_i\right)
SWA 只看最近 W 条样本上的表现,相当于老李每天清点近一周的渔获量,而不是看年初到现在的大平均数。
  1. 特征漂移超红线PSI ≥ 0.25 表示特征分布严重变形,原因侧已拉响警报。
    PSI≥0.25\displaystyle \text{PSI} \ge 0.25
  2. 窗口性能跌破基线SWA 较历史基线下滑超过容忍差 ε,结果侧确认模型确实变差。
    SWAt<SWAbase−ε\displaystyle \text{SWA}_t < \text{SWA}_{\text{base}} - \varepsilon
  3. 逻辑或 ∨两侧信号满足其一就触发重训评估,两者都不满足则持续观察。
    PSI≥0.25  ∨  SWAt<SWAbase−ε\displaystyle \text{PSI} \ge 0.25 \;\lor\; \text{SWA}_t < \text{SWA}_{\text{base}} - \varepsilon

AI 应用场景

信贷风控评分卡的客群漂移监控

阶段:模型部署与监控(MLOps)

解决的问题:传统方式靠月度人工复盘模型区分度(KS/AUC),周期长且属于事后诸葛;经济周期、产品策略调整会让申请人的特征分布快速变化,评分卡悄悄失效。AI 化方案是每日自动对核心特征(年龄、收入、负债比)计算 KS 与 PSI,超阈值即告警,并直接定位是哪个特征在漂移。

具体案例:某消费金融公司的贷前评分卡在 2023 年三季度监控到“收入负债比”特征 PSI 从 0.05 飙升至 0.31。排查发现某合作渠道集中导入了大量高资质客群,评分卡阈值不再适配。团队将该渠道流量降级,并在两周内用新客群数据完成重训,避免了大范围误拒。

电商推荐系统的行为特征监控

阶段:模型监控与告警

解决的问题:推荐模型依赖用户近期行为特征(近 7 天加购数、点击率),大促、节假日等活动会让行为分布短暂偏移,若用固定阈值会频繁误报。AI 化方案是对特征分组、分类目设定动态阈值,并联动业务日历做同环比对照。

具体案例:双 11 前三天,“近 7 天加购数”特征的 PSI 普遍超过 0.25,告警群被刷屏。值班工程师结合大促日历判断为周期性波动而非真实漂移,将监控策略切换为“同环比对照”模式,避免了误触重训;大促结束后特征分布回落,模型恢复稳定。

Python 演示

python36 行
import numpy as npfrom scipy import stats  def calc_psi(expected, actual, bins=10):    """用等频分箱计算 PSI 漂移指数."""    cuts = np.percentile(expected, np.linspace(0, 100, bins + 1))    cuts[0] = -np.inf    cuts[-1] = np.inf    exp_ratio = np.histogram(expected, bins=cuts)[0] / len(expected)    act_ratio = np.histogram(actual, bins=cuts)[0] / len(actual)    exp_ratio = np.clip(exp_ratio, 1e-6, None)    act_ratio = np.clip(act_ratio, 1e-6, None)    psi = np.sum((act_ratio - exp_ratio) * np.log(act_ratio / exp_ratio))    return psi  def drift_report(expected, actual, bins=10):    """输出 KS 与 PSI 联合漂移报告."""    ks_stat, p_value = stats.ks_2samp(expected, actual)    psi = calc_psi(expected, actual, bins)    if psi < 0.1:        level = "稳定 (PSI < 0.1)"    elif psi < 0.25:        level = "轻度漂移 (0.1 <= PSI < 0.25)"    else:        level = "严重漂移 (PSI >= 0.25)"    print("KS 统计量: %.4f, p 值: %.4e" % (ks_stat, p_value))    print("PSI 指数: %.4f, 判定: %s" % (psi, level))  if __name__ == "__main__":    rng = np.random.default_rng(42)    train_feature = rng.normal(35, 8, 50000)    online_feature = rng.normal(43, 10, 50000)    drift_report(train_feature, online_feature)
目的:用 scipy 计算 KS 统计量与 p 值,并用 NumPy 实现等频分箱的 PSI,输出一条类似“体检报告”的漂移判定结果。
  1. cuts = np.percentile(expected, np.linspace(0, 100, bins + 1))按训练期分布计算等频分箱边界,相当于老李按历史规律划分水位带。
  2. cuts[0] = -np.inf` / `cuts[-1] = np.inf首尾设为无穷,保证线上新样本无论取值多大都能落入某个箱子。
  3. np.histogram(expected, bins=cuts)[0] / len(expected)统计各箱样本数并转为占比,得到期望占比 Expected。
  4. np.clip(exp_ratio, 1e-6, None)用极小值兜底,避免某箱占比为 0 时 log 计算崩溃。
  5. psi = np.sum((act_ratio - exp_ratio) * np.log(act_ratio / exp_ratio))逐箱累加,得到 PSI 综合漂移指数。
  6. stats.ks_2samp(expected, actual)直接调用 scipy 完成双样本 KS 检验,返回统计量与 p 值。
  7. if __name__ == "__main__":入口:构造两组正态特征模拟线上漂移,输出完整报告。

常见误区

误区我用 scipy 跑完 KS 检验,看到 p 值等于 0.0001,立刻慌了,赶紧把重训工单提上去——这不就是“漂移显著”的铁证吗?

正解p 值只回答“分布有没有差异”,不回答“差异有多大”。样本量很大时,一个业务上无关紧要的 0.01 偏移也会让 p 值趋近于 0。正确顺序是先看效应量(KS 统计量 D_n 本身、PSI 数值)是否越过工程阈值,再看模型性能是否真的下滑,最后才决定是否重训。老李不会因为某天水位高了 1 厘米就重写调度方案,他会观察整个水位季的曲线。

为何常见:教科书把“p<0.05“当成显著性金标准,初学者容易混淆”统计显著“与”业务重要”两个概念。

误区监控面板上所有特征的 PSI 都低于 0.1,模型肯定很健康,可以半年不用管。

正解PSI 只覆盖“特征分布是否漂移”这个原因侧信号;特征没变,不代表特征与标签的关系没变。市场环境、业务规则变化会引发概念漂移,此时特征分布稳定但模型输出已经失真。因此必须同时监控滑动窗口准确率、预测分布等结果侧指标,形成闭环。老李的河水没问题,不代表下游鱼群就一定安全。

为何常见:面板上最显眼的漂移指标容易让人产生“数据健康=模型健康”的错觉,忽略了监控体系的另一半。

误区为了让 PSI 更精细,我把分箱数设成 100,结果每天都有特征报警,搞得大家都麻木了。

正解分箱过细会使每箱样本量不足,占比估计方差急剧放大,PSI 虚高,产生大量误报。工程惯例是 8~10 箱,且要保证每箱有足够样本支撑。分箱数与窗口样本量要一起设计,箱宽好比老李的水位带宽度——带太窄,一场小雨就足以让相邻水位带的占比乱跳。

为何常见:“粒度越细越精确”的直觉在统计估计中不成立,样本量约束才是决定性因素。

误区只要某特征 PSI 超过 0.25,我就立刻重训模型;重训完再看漂移检测,果然变绿了,问题解决了。

正解重训前必须定位漂移根因:是上游数据管道 Bug(字段串位、单位改变)?是特征工程口径变更?还是真实客群变化?若是前者,修数据问题即可,重训没有意义;若是后者,重训之后还要灰度验证、准备版本回滚。漂移报警只是起点,不是终点。老李发现水位异常后,第一件事是检查测量仪,而不是先改调度表。

为何常见:运维压力下容易形成“报警→重训”的条件反射,跳过了根因分析这个最重要的环节。

面试题

Q1. PSI 计算结果为 0.31,最合理的解读是什么?

单选题 · easy

  • A.特征分布非常稳定无异常
  • B.发生严重漂移需要排查← 正确答案
  • C.属于轻度漂移应观察等待
  • D.说明模型效果非常好

答案:B。PSI≥0.25 是行业常用的“严重漂移”红线,0.31 已越过该线,应视为严重漂移并立即排查原因、评估重训。A 是 PSI<0.1 的语义,C 是 0.1~0.25 的语义,D 与漂移检测无直接关系。就像水位分布偏离历史水位带太多时,老李必须立刻上报而不是继续观望。

Q2. KS 检验比较的是两组数据之间的什么?

单选题 · easy

  • A.对比两组样本的均值与方差
  • B.对比模型精确率和召回率
  • C.对比两组样本的累计分布函数← 正确答案
  • D.对比两个不同模型的准确率

答案:C。KS 检验比较两个样本的经验累积分布函数(CDF)之间的最大垂直距离,关注“小于等于某值的比例”整条曲线的形态差异。A 是 t 检验或方差分析的思路,B、D 是模型评估指标。相当于老李对比的是“水位不超过某高度的天数比例曲线”,而不是单纯比平均水位。

Q3. PSI 公式中 Expected_i 表示什么?

单选题 · mid

  • A.线上实时样本的占比情况
  • B.模型预测为正类的比例
  • C.训练基准样本的占比情况← 正确答案
  • D.特征缺失值的统计占比

答案:C。Expected_i 指训练基准期内第 i 箱的样本占比,是“往年的水位带占比”,作为对照基准;Actual_i 才是线上实时占比。A 说的是 Actual 的定义,B、D 与 PSI 公式无关。记忆要点:Expected 是期望值/基准值,永远来自训练期。

Q4. 大数据量下 KS 检验的 p 值极易小于 0.05,正确应对方式是什么?

单选题 · mid

  • A.直接判定模型已经完全失效
  • B.将显著性阈值调整为更小
  • C.放弃 KS 改用 PSI 检测
  • D.结合统计量与业务影响判断← 正确答案

答案:D。大样本下即使分布差异微小,p 值也会远小于 0.05,这就是统计显著性与实际重要性的区别。正确做法是结合 KS 统计量大小、PSI 数值和业务影响综合判断。A 是过度反应,B 调阈值治标不治本,C 换工具不解决效应量问题。老李不会因为一次微小水位差就改全盘调度方案。

Q5. 二值特征线上 1 的占比从 20% 升到 60%,哪种方法最直接反映这种偏移?

单选题 · hard

  • A.KS 检验看累计距离差值
  • B.方差分析看组间均值差
  • C.PSI 看占比偏移最直接← 正确答案
  • D.相关系数看线性相关性

答案:C。二值特征本质是两个占比(p 和 1−p)。当 1 的占比从 20% 涨到 60%,分箱后各箱占比发生大幅偏移,PSI 直接刻画了这种“份额搬家”。KS 也能检测但不如 PSI 直观,B 更适合连续变量的组间比较,D 衡量的是相关性而非占比变化。

Q6. PSI 分箱数在工程实践中一般取多少箱为宜?

单选题 · easy

  • A.通常采用 2 箱分箱
  • B.通常采用 5 箱分箱
  • C.与样本数量保持一致
  • D.通常 10 箱左右为宜← 正确答案

答案:D。行业惯例是取 10 箱左右(等频或等宽均可),兼顾统计稳定性与灵敏度。箱太少(2~5 箱)会掩盖区间内的局部偏移,箱太多则每箱样本不足、噪声放大,C 的说法没有实际意义。分箱就好比老李划分水位带,10 条带刚刚好。

Q7. 监控窗口样本量 n 与最小可检测漂移量 δ 的关系是?

单选题 · hard

  • A.样本越多可检测漂移越小← 正确答案
  • B.漂移越大所需样本越多
  • C.样本量与检测灵敏度无关
  • D.样本越少检测越灵敏

答案:A。监控灵敏度与样本量呈平方根关系:n ≥ (z/δ)²,样本量越大标准误越小,能捕捉到的最小漂移 δ 就越小。B 说反了——δ 越大所需样本越少;C、D 与统计常识矛盾。这是设计监控窗口时的核心权衡:窗口太长报警慢,太短噪声大。

Q8. 关于特征漂移检测,以下说法正确的有哪些?

多选题 · mid

  • A.PSI 对分箱占比变化敏感← 正确答案
  • B.KS 关注累计曲线的最大距离← 正确答案
  • C.监控特征就无需监控性能
  • D.报警后应立刻重训模型

答案:AB。PSI 逐箱比较占比偏移,KS 比较累计分布最大距离,二者互补,A、B 正确。C 错在“只监控特征即可”——特征没漂移也可能有概念漂移;D 错在“立刻重训”——应先排查数据管道与特征口径。完整的监控体系要“原因侧+结果侧”双通道。

Q9. 以下哪些情况可能导致特征漂移误报?

多选题 · hard

  • A.上游数据管道出现 Bug← 正确答案
  • B.特征工程口径发生变化← 正确答案
  • C.节假日引起的周期波动← 正确答案
  • D.训练集采样随机种子一致

答案:ABC。上游 Bug(如字段串位、单位改变)、特征口径变化(如金额单位从元改万元)、节假日周期性波动都会让特征分布短期异常,却未必代表真实业务漂移,属于典型误报源。D 的随机种子一致恰好保证训练集可复现,与误报无关。老李的经验是:报警后先问“是不是测量设备出了问题”。

Q10. PSI 处于哪个区间属于轻度漂移?

单选题 · easy

  • A.PSI 取值小于 0.1 区间
  • B.PSI 大于等于 0.25 区间
  • C.0.1 到 0.25 属于轻度区间← 正确答案
  • D.任意负数均为轻度漂移

答案:C。PSI 行业经验值:<0.1 视为稳定,0.1~0.25 为轻度漂移需关注,≥0.25 为严重漂移触发告警。A 是稳定区间,B 是严重区间,D 中负数在 PSI 中不可能出现——因为每箱贡献 (A−E)·ln(A/E) 恒为非负。记住“红绿灯”:绿 <0.1、黄到 0.25、红即告警。