阿明在景区门口开了一家餐厅,开业前在烹饪学院按标准菜谱苦练半年,招牌菜一度好评如潮。可半年后他发现:排队的人没少,好评率却悄悄下滑。原来游客结构变了——以前是口味清淡的南方客,如今是偏爱咸香的北方客。菜还是那道菜,可“客人”变了。这就是数据漂移:模型没变,但模型面对的世界变了。聪明的餐厅不会坐等差评,而是建立一套“记台账—试新菜—小范围上新—看反馈”的闭环。AI 模型上线后也一样:用漂移检测发现问题,用主动学习挑选最该补的样本,用灰度发布安全更新,形成持续进化的闭环。本篇就用阿明餐厅的经营智慧,把这个闭环讲透。

岗位关联

掌握主动学习闭环,你就能在 MLOps 与模型监控岗位上独立搭建“检测—标注—更新—验证”的完整链路,让线上模型长期保持稳定效果,成为团队里“懂落地”的那个人。

目录
  1. 可视化演示
  2. 数据漂移认知
  3. 漂移检测指标
  4. 主动学习选样
  5. 模型更新策略
  6. 安全发布验证
  7. 闭环运营节奏
  8. AI 应用场景
  9. Python 演示
  10. 常见误区
  11. 面试题

可视化演示

展示数据漂移检测、主动学习采样、模型增量更新与灰度发布闭环。

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

数据漂移检测机制 KS检验检测训练与线上数据分布差异 PSI超过0.25触发重度漂移警报启动闭环 Drift = KS + PSI > Threshold 双指标检测确保漂移发现不遗漏

数据漂移认知

阿明在景区门口开了一家餐厅,开业前他在烹饪学院苦练半年,按教材里的标准菜谱做出了一道道拿手菜。刚开业时客人好评如潮,可半年后他发现,排队的人还是那么多,好评率却悄悄下滑。原来游客结构变了:以前是口味清淡的南方客,如今是偏爱咸香的北方客。菜还是那道菜,可“客人”变了——餐厅的手艺和市场错位了。这就是数据漂移的雏形:模型没变,但模型面对的世界变了。

在机器学习里,模型上线那一刻,训练时见过的数据分布和线上真实数据的分布就会开始分道扬镳。业务环境、用户习惯、季节政策,任何一环变化,都会让线上数据悄悄偏离训练时的模样。当这种偏离大到一定程度,模型在新数据上的预测就会失准,就像阿明拿清淡菜谱招待北方客人一样别扭。这种“错位”不是一次性的,而是持续发生的,所以我们需要一套机制去感知它、量化它、应对它。

数据漂移主要分两类。一类是协变量漂移:输入特征本身的分布变了,比如客人的口味偏好特征整体右移,但“口味和点菜”之间的规律没变——相当于客群变了,评判标准没变。另一类是概念漂移:输入和输出之间的规律变了,比如以前“辣度越高客人越满意”,现在因为大家嗓子疼,“辣度越高差评越多”——相当于顾客的评判标准本身变了。两类漂移都会让模型效果下滑,但应对方式略有不同,检测时要分别关注特征分布和预测关系。

阿明意识到问题后没有立刻重学厨艺,而是先要搞清楚:到底哪类菜不受欢迎了?客人的口味变了多少?这就像做漂移检测——先量化“变了个啥、变了多少”,才能决定改哪道菜。下一节,我们看看餐厅的“口味台账”是怎么记的。

Ptrain(X,Y)≠Pcurrent(X,Y)\displaystyle P_{train}(X, Y) \neq P_{current}(X, Y)
通俗说明:训练时见到的那套“输入与标签相伴出现的规律”,和当下真实世界的规律,已经不再是同一个规律。
  1. 训练联合分布$P_{train}(X, Y)$ 表示模型训练时见过的“输入 X 和标签 Y 一起出现的规律”,相当于烹饪学院教材里那套“什么客人点什么菜”的统计。
    Ptrain(X,Y)\displaystyle P_{train}(X, Y)
  2. 当前联合分布$P_{current}(X, Y)$ 表示当前线上真实数据呈现的“输入与标签的规律”,相当于今天进店客人真实的点菜习惯。
    Pcurrent(X,Y)\displaystyle P_{current}(X, Y)
  3. 不等号$\neq$ 表示两者已经不一致,当差异超过容忍范围,模型就需要进入“改菜单”的更新流程。
    ≠\displaystyle \neq

漂移检测指标

阿明开始做“菜品热度台账”——每晚关店后,他翻看每道菜的点击率、复购率和差评词云,和上月对比。如果某道菜的受欢迎曲线明显偏离历史,他就知道这道菜要改。AI 模型监控也是一样,我们需要一套客观指标,定期比较“训练时的分布”和“当前的分布”,用数字说话,而不是凭感觉。

最常用的指标是 KS 检验和 PSI。KS 检验像“看两条曲线离得最远的那一段有多远”:它把训练分布和当前分布都画成累积曲线,找出同一位置上两条曲线差距最大的点。差距越大,说明分布错位越严重。计算时先对每个取值位置求两条累积曲线的差值绝对值,再在所有位置里取最大值,这个最大值就是 KS 统计量。

PSI 则是“分桶对比”:把特征值按训练时的分布切成若干个桶,看每个桶里当前数据的占比和训练时的占比偏离了多少。可以把它理解为“每个桶里人群变动的总和”——先算每个桶的期望占比和实际占比,再求对数偏离并加权求和,最后把所有桶的偏离加起来,得到全局漂移分数。经验阈值约定:PSI 小于 0.1 表示稳定,0.1 到 0.25 之间表示需关注,超过 0.25 表示显著漂移,应该触发告警。

有了 KS 和 PSI,阿明每天关店后花五分钟就能读完“口味台账”:绿区放心,黄区留意,红区必须动刀。同样,模型监控系统把这两个指标做成定时任务,超过阈值就告警,闭环的“发动机”就这样被点着了。

KS=max⁡x∣Ftrain(x)−Fcurrent(x)∣\displaystyle KS = \max_x \left| F_{train}(x) - F_{current}(x) \right|
通俗说明:PSI 把特征切成 N 个桶,逐个桶计算“实际占比 A 与期望占比 E 的偏差对数”,再求和,得分越高漂移越重。
  1. 期望占比$E_i$ 是训练数据在第 i 个桶里的占比,相当于“历史菜谱里该口味应有的客群比例”。
    Ei\displaystyle E_i
  2. 实际占比$A_i$ 是线上数据在第 i 个桶里的实际占比,相当于“今天该口味实际的客群比例”。
    Ai\displaystyle A_i
  3. 对数偏离$\ln(A_i / E_i)$ 把“实际比期望多还是少”放大成可累加的偏离量,比值越远离 1,偏离越大。
    ln⁡(AiEi)\displaystyle \ln\left(\frac{A_i}{E_i}\right)
  4. 加权求和$(A_i - E_i)$ 作为权重乘以对数偏离,再用 $\sum_{i=1}^{n}$ 把所有桶的偏离加起来,得到全局漂移分数。
    ∑i=1n(Ai−Ei)×ln⁡(AiEi)\displaystyle \sum_{i=1}^{n} (A_i - E_i) \times \ln\left(\frac{A_i}{E_i}\right)

主动学习选样

警报响了,口味漂移确认,接下来该“改菜”了。但改菜有个现实约束:老师傅的精力有限,不可能把几百道新菜全部试吃一遍。阿明的做法是:挑最没把握的菜去问老师傅。那些闭着眼都能做好的招牌菜,不用问;那些味道模棱两可、连自己都拿不准的新尝试,才值得花老师傅的时间。这就是主动学习的直觉——把宝贵的标注资源,花在模型最“心虚”的地方。

主动学习的核心思想是:不是随机抽样本去标注,而是带着“哪里最不懂”的问题去选样本。最常用的策略是不确定性采样:对候选样本逐一过一遍当前模型,看预测概率有多“纠结”。概率五五开、模型毫无把握的样本,恰恰是信息量最大的样本——标注它,相当于用最小成本补上模型最大的盲区。度量不确定性最经典的工具是信息熵:预测概率越平均,熵越大,模型越没把握。

光看不确定性还不够,还要讲多样性:如果 300 个待标注样本全是同一个簇里的“近亲”,标完等于只补了一个盲区。所以工程上常用聚类或相似度过滤做二次筛选,让挑出来的样本尽量覆盖不同区域。同时每个周期要定标注预算——比如 500 条,预算决定了采样数量,也决定了更新成本。预算有限时,不确定性优先;预算充裕时,再加多样性约束。

老师傅每周末来一次,阿明把攒了一周“最没把握的十道菜”端过去,老师傅尝一口就能给出准确判断。不浪费老师傅一分钟,还能精准补上菜品库里最弱的环节——这就是“预算有限,聪明标注”的学问,也是主动学习在工业界最值钱的地方。

H(x)=−∑k=1Kp(yk∣x) log⁡p(yk∣x)\displaystyle H(x) = -\sum_{k=1}^{K} p(y_k | x) \, \log p(y_k | x)
通俗说明:熵 H(x) 衡量“模型对样本 x 有多纠结”,越纠结熵越大,越值得交给专家标注。
  1. 预测概率$p(y_k | x)$ 是模型认为样本 x 属于类别 k 的概率,相当于主厨对“这道菜属于咸口还是甜口”的把握程度。
    p(yk∣x)\displaystyle p(y_k | x)
  2. 对数项$\log p(y_k | x)$ 表示该概率携带的信息量,概率越接近 1 信息量越小,越接近 0 信息量越大。
    log⁡p(yk∣x)\displaystyle \log p(y_k | x)
  3. 求和$\sum_{k=1}^{K}$ 把 K 个类别的信息量加总,得到整个预测分布的混乱程度。
    ∑k=1K\displaystyle \sum_{k=1}^{K}
  4. 负号$-$ 保证熵为正数——概率越平均,熵越大;概率越一边倒,熵越小。
    −\displaystyle -

模型更新策略

老师傅给了意见,但阿明不会把老菜谱扔掉重写——他是在老菜谱的基础上,融入新试吃的结果,做“融合改良”。直接抛弃老规则,万一新口味只是短期风潮,餐厅会两头不讨好。模型更新也一样:新标注样本虽然反映了最新变化,但历史数据里藏着长期稳定的规律,两边都不能丢。

模型更新分两种姿势。增量学习:在旧模型基础上,用新标注样本做少量迭代,快但容易“遗忘老知识”,也就是灾难性遗忘。全量重训:把老数据和新标注样本合并,从零开始重新训练,稳但成本高。工业界的折中做法是:新老数据按比例混合,既保留历史规律,又吸收新变化。混合比例要看漂移程度——漂移越剧烈,新样本权重越大。

重训完成不等于可以上线。先做离线效果评估:在留出的近期真实样本上对比新旧模型,看准确率、召回率是否提升。同时跑一遍回归测试:用历史关键样本测试集打一遍,确保修好漂移的同时没把老功能搞坏——就像改了十道菜,不能把招牌菜的味道也改没了。

阿明把改良菜写进菜谱,但菜单上新前,他先在内部试菜会上让全店员工盲测打分,分数不达标绝不上架。模型更新也是一样,离线评估就是那场“内部试菜会”,过不了关,后面的发布流程根本走不到。

Dnew=Dold∪Slabeled\displaystyle D_{new} = D_{old} \cup S_{labeled}
通俗说明:新的训练集 = 老数据 + 主动学习挑出的新标注样本,两边都保留。
  1. 老数据集合$D_{old}$ 是历史积累的训练数据,相当于餐厅保留的老菜谱库。
    Dold\displaystyle D_{old}
  2. 新标注样本$S_{labeled}$ 是主动学习挑出来、经过人工标注的新样本,相当于老师傅新确认的改良菜。
    Slabeled\displaystyle S_{labeled}
  3. 并集运算$\cup$ 把两者合并,表示重训时既学老规律也学新变化,工程上还会给两边配权重。
    ∪\displaystyle \cup
  4. 新训练集$D_{new}$ 是重训用的完整数据集,实际使用时需防止新样本占比过小被老数据淹没。
    Dnew\displaystyle D_{new}

安全发布验证

内部试菜通过,阿明准备把新菜端上桌。但他不会第二天就把所有老菜撤掉——万一客人不买账,一天就砸了口碑。他先做 A/B 实验:随机让 10% 的客人只能看到新菜单,另一部分客人看老菜单,对比两拨人的满意度。A/B 实验的核心是随机分流和统计显著性:两拨用户特征要均衡,样本量要够,对比指标(满意度、复购率)要提前定好。

实验通过后,进入灰度发布:新模型流量从 5% 起步,逐步放大到 20%、50%,最后 100%。每一步都盯监控指标,一旦恶化立刻暂停放量。灰度发布最关键的保障是回滚机制:每个阶段都保留一键切回旧模型的能力,像餐厅后厨永远留着老菜单的底稿。判断灰度是否值得继续,最直观的指标是效果提升量——新模型的业务指标减去旧模型的业务指标。

发布后的线上监控不能停:继续监控 PSI、KS 和业务指标,形成“发布后观察期”。观察期内新模型的告警阈值可以更敏感,一旦效果回退,回滚和诊断流程自动触发。安全发布不是不犯错,而是犯了错能快速、可控地退回来。

阿明的新菜单从 1 号桌试点到全店推广,每一步都记录客人表情,稍有不满就亮出“老菜单紧急恢复”的底牌。灰度发布和回滚机制,就是 AI 模型上线的“老菜单底稿”。

Uplift=Accnew−Accold\displaystyle Uplift = Acc_{new} - Acc_{old}
通俗说明:提升量 = 新模型准确率 − 旧模型准确率,只有为正且显著才算有效。
  1. 新模型效果$Acc_{new}$ 是新模型在验证集或线上实验桶里的准确率,相当于新菜单客人的满意率。
    Accnew\displaystyle Acc_{new}
  2. 旧模型效果$Acc_{old}$ 是旧模型在同样数据上的准确率,相当于老菜单客人的满意率。
    Accold\displaystyle Acc_{old}
  3. 差值$Uplift$ 表示净提升,提升为正才值得放量,为负或接近 0 就该暂停或回滚。
    Uplift\displaystyle Uplift

闭环运营节奏

菜单多久改一次?天天改,客人会觉得这家店不稳定,后厨也累垮;一年不改,口味早就跟不上了。阿明定下规矩:平时每周只做微调,只有当口味台账连续亮红灯时才启动大改。这就是闭环的运营节奏:更新频率和触发条件必须事先定好,不能拍脑袋。

触发条件一般由漂移指标驱动:设定连续 N 个检测窗口内告警次数的占比阈值,超过才触发,避免单次抖动引发无效更新。比如最近 7 天每小时检测一次,共 168 个窗口,其中 100 个窗口 PSI 超阈值,告警浓度约 60%,超过预设线就触发重训。更新频率则看业务变化速度:电商大促期间可能每天一个版本,稳定期可能两周一版。频率不是越勤越好,每次更新都有人工标注和发布验证的成本,频率要和收益匹配。

成本控制是闭环能长期跑下去的关键:人力标注有预算,重训有算力开销,发布有试错风险。工程上会把更新流程做成可配置的流水线,自动触发、自动回归、人工审批上线,每一步都有成本和收益的台账。持续迭代则是把每一轮漂移的样本、标注、效果沉淀下来,反哺下一轮的采样策略和阈值设定。

一年后,阿明的餐厅已经形成肌肉记忆:台账自动更新,试菜会定期召开,新菜单小步快跑。客人觉得这家店“永远懂我”,其实背后是一套不停自我修正的闭环。AI 模型想要长期可靠,靠的不是一次训练的神话,而是这种主动学习闭环的日常修行。

falert=NalertNwindow\displaystyle f_{alert} = \frac{N_{alert}}{N_{window}}
通俗说明:最近一段窗口里告警次数占比超过阈值(如 60%),才启动一轮闭环更新。
  1. 告警次数$N_{alert}$ 是最近一段时间内,PSI 或 KS 超阈值触发的告警窗口个数。
    Nalert\displaystyle N_{alert}
  2. 总窗口数$N_{window}$ 是统计的总检测窗口个数,比如最近 7 天每小时一个窗口就是 168 个。
    Nwindow\displaystyle N_{window}
  3. 占比$f_{alert}$ 表示告警的“浓度”,浓度高说明漂移是持续性的而非偶发抖动,才值得投入更新成本。
    falert\displaystyle f_{alert}

AI 应用场景

信贷风控模型监控

阶段:模型监控与持续更新(MLOps)

解决的问题:传统风控评分卡上线后,客群结构变化(如新增年轻用户、政策调整)会导致评分分布漂移,坏账率上升。人工定期重训成本高且滞后,等发现问题时损失已经发生。

具体案例:某消费金融公司每月用 PSI 监控 20 个核心特征的分布,当 PSI 超过 0.25 且多个特征同时告警时,自动触发主动学习:从近 30 天新客里用熵采样挑出 500 条“模型最没把握”的样本,交给风控专家标注是否逾期,融合老数据全量重训,先灰度 10% 流量验证 KS 回落和坏账率下降,再逐步全量。

电商推荐系统热点的概念漂移

阶段:在线学习与推荐策略更新

解决的问题:大促或突发热点会让用户兴趣发生概念漂移——平时“性价比优先”,大促时“品牌优先”,推荐模型若不更新会推荐一堆没人点的东西。全量重训跟不上热点变化速度。

具体案例:某电商平台在大促期间把更新频率从两周一次提升到每天一次:每小时检测点击率分布与购买转化特征的 PSI,超过阈值就用不确定性采样从当天曝光未点击的样本中挑出高熵样本,由运营团队快速标注兴趣标签,增量微调排序模型,灰度 20% 流量对比点击率和 GMV,确认提升后再全量。

智能客服新意图识别

阶段:NLU 模型的持续标注与迭代

解决的问题:用户会不断发明新话术、出现新意图(如新政策咨询),老模型经常误判为“其他”或胡乱匹配,体验差且难以提前枚举所有情况。

具体案例:某银行智能客服每天把“模型置信度低于 0.5 且被用户反复转人工”的对话收集起来,用熵采样挑出 200 条典型对话,交给业务专家标注新意图,每周融合老语料做一次增量训练,通过 A/B 实验验证转人工率和满意度后灰度上线,新意图识别率提升 18%。

Python 演示

python55 行
import numpy as npfrom sklearn.ensemble import RandomForestClassifierfrom sklearn.metrics import accuracy_score def compute_psi(expected, actual, buckets=10):    # 计算 PSI, 衡量两批数据分布的差异    min_v = min(expected.min(), actual.min())    max_v = max(expected.max(), actual.max())    edges = np.linspace(min_v, max_v, buckets + 1)    exp_hist, _ = np.histogram(expected, bins=edges)    act_hist, _ = np.histogram(actual, bins=edges)    exp_pct = exp_hist / exp_hist.sum() + 1e-6    act_pct = act_hist / act_hist.sum() + 1e-6    psi = np.sum((act_pct - exp_pct) * np.log(act_pct / exp_pct))    return psi def uncertainty_sampling(model, pool_x, budget):    # 主动学习: 挑模型最没把握的高熵样本    proba = model.predict_proba(pool_x)    entropy = -np.sum(proba * np.log(proba + 1e-12), axis=1)    idx = np.argsort(entropy)[::-1][:budget]    return idx rng = np.random.RandomState(42)train_x = rng.normal(0, 1, (2000, 4))train_y = (train_x[:, 0] + 0.5 * train_x[:, 1] > 0).astype(int) model = RandomForestClassifier(n_estimators=50, random_state=42)model.fit(train_x, train_y) # 线上数据发生漂移: 特征均值右移, 决策边界也微调drift_x = rng.normal(0.9, 1.2, (1000, 4))true_y = (drift_x[:, 0] + 0.5 * drift_x[:, 1] - 0.7 > 0).astype(int) psi = compute_psi(train_x[:, 0], drift_x[:, 0])print("线上首特征 PSI=%.3f" % psi)if psi > 0.1:    print("PSI 超过 0.1, 触发主动学习闭环") budget = 300pick_idx = uncertainty_sampling(model, drift_x, budget)new_x = drift_x[pick_idx]new_y = true_y[pick_idx] # 新老数据融合后全量重训mix_x = np.vstack([train_x, new_x])mix_y = np.concatenate([train_y, new_y])model.fit(mix_x, mix_y) # 对比重训前后的线上效果base = RandomForestClassifier(n_estimators=50, random_state=42)base.fit(train_x, train_y)before = accuracy_score(true_y, base.predict(drift_x))after = accuracy_score(true_y, model.predict(drift_x))print("重训前准确率=%.3f, 重训后=%.3f" % (before, after))
目的:完整模拟“检测漂移 → 主动学习选样 → 融合重训 → 效果对比”的闭环,跑完能看到 PSI 超阈值触发更新,以及重训后准确率回升。
  1. compute_psi(train_x[:, 0], drift_x[:, 0])用 PSI 检测第一个特征在训练集与线上数据间的分布偏移,相当于每晚翻口味台账。
  2. exp_pct = exp_hist / exp_hist.sum() + 1e-6把频数转成占比,加极小值防止除零,保证对数可算。
  3. entropy = -np.sum(proba * np.log(proba + 1e-12), axis=1)对每个样本计算预测熵,熵越大模型越没把握。
  4. idx = np.argsort(entropy)[::-1][:budget]按熵从大到小排序后取前 budget 个,这就是“挑最没把握的菜问老师傅”。
  5. if psi > 0.1:漂移指标超过关注线才触发闭环,避免天天空转。
  6. mix_x = np.vstack([train_x, new_x])老数据和新标注样本纵向合并,构成重训数据集。
  7. before = accuracy_score(true_y, base.predict(drift_x))用旧模型在漂移数据上的准确率做基线,才能算出重训的净收益。

常见误区

误区我看到 PSI 超过 0.25 就立刻判断“模型已经坏了”,并且拿这个指标当唯一依据写故障报告,认为漂移等于效果下降。

正解PSI 和 KS 只度量输入分布的偏移,不等于预测效果本身。有的特征虽然分布变了,但恰好变的都是对决策无关紧要的区域,效果几乎不受影响;有的场景标签质量变了,PSI 不大但效果已经崩了。所以漂移指标是“信号”,业务效果指标是“结果”,两者要一起看:先看信号定位风险,再看结果确认损失,才能决定要不要启动更新。

为何常见:因为漂移往往伴随效果下降,初学者容易把相关关系当成因果关系,省掉了“验证效果”这一步。

误区一收到告警,我马上重训模型,训练一结束就直接 100% 替换线上老模型,觉得越快修复越好。

正解直接全量替换风险极高:新模型可能在部分老场景上回归,影响面是全部用户。正确流程是先离线评估、跑回归测试,再 A/B 实验验证,然后灰度从 5% 逐步放量,全程保留一键回滚能力。更新本身是“有风险的操作”,不是“修复动作”。

为何常见:只看到“更新能修复漂移”,没看到“更新动作本身可能引入新问题”,急于求成。

误区我以为只要数据是新的,随机抽样标注和主动学习效果差不多,反正都是给模型补新知识。

正解随机抽样会把宝贵的标注预算浪费在模型已经很有把握的样本上——那些样本即使标了,对模型提升也极小。主动学习用不确定性采样加多样性采样,专门挑“模型最纠结、分布最盲区”的样本,同样的预算能带来明显更大的效果提升。随机抽 500 条和主动挑 500 条,重训后的准确率可能差好几个百分点。

为何常见:随机抽样实现最简单,且直觉上“新数据都代表新分布”,忽略了不同样本的信息密度差异。

误区既然漂移会持续发生,那我就每天重训、每天发布,总觉得更新频率越高模型就越贴近线上。

正解每次更新都有人工标注成本、算力开销和发布风险。更新太频繁,一方面会把偶发波动当趋势学进去,导致模型震荡;另一方面团队会被繁重的标注和验证拖垮。正确做法是设定触发条件过滤抖动,再按业务变化速度和 ROI 决定频率:大促期间加密,稳定期放缓。

为何常见:把“持续优化”误解成“次数越多越好”,忽略了成本约束和噪声风险。

面试题

Q1. 关于 PSI 指标的经验阈值,下列哪种判断正确?

单选题 · easy

  • A.PSI 大于 0.1 表明完全无需关注
  • B.PSI 大于 0.25 提示漂移显著← 正确答案
  • C.PSI 大于 0.5 才需要开始监控
  • D.PSI 永远等于模型准确率

答案:B。PSI 的经验约定是小于 0.1 稳定、0.1 到 0.25 需关注、大于 0.25 显著漂移应告警。PSI 衡量的是分布偏移,和准确率不是一回事,所以 D 错;B 符合约定,为正确答案。

Q2. KS 检验统计量的核心含义是?

单选题 · easy

  • A.两个分布的最大累积差距← 正确答案
  • B.两个分布的均值大小差值
  • C.两个分布的方差大小比值
  • D.两个分布的线性相关系数

答案:A。KS 统计量是两条累积分布曲线在所有位置上差值的最大值,像“两条曲线之间最宽的裂缝”。它不关心均值差、方差比或相关性,所以 A 正确。

Q3. 主动学习不确定性采样最常采用哪种度量?

单选题 · mid

  • A.样本时间戳距离最近
  • B.预测概率的熵值最大化← 正确答案
  • C.预测概率的置信度最高
  • D.样本在特征空间最稀疏

答案:B。不确定性采样挑“模型最纠结”的样本,常用信息熵 H(x) 度量:预测概率越平均,熵越大,越值得标注。置信度最高反而说明模型已经很有把握,不用标;时间戳和稀疏度不是不确定性采样的度量。

Q4. 灰度发布新模型时,流量分配最稳妥的做法是?

单选题 · mid

  • A.一天内从零直接升至一百
  • B.从百分之五逐步放大观察← 正确答案
  • C.始终保持百分之五十分桶
  • D.只在线下测试环境试运行

答案:B。灰度发布应从 5% 小流量起步,逐步放大到 20%、50%、100%,每步都盯监控指标,恶化就暂停。直接全量风险大,固定 50% 无法渐进,只在线下运行则没有线上验证价值。

Q5. 下列哪些属于数据漂移的主要类型?

多选题 · mid

  • A.协变量漂移指特征分布变化← 正确答案
  • B.概念漂移指规律本身变化← 正确答案
  • C.标签漂移指类别分布变化← 正确答案
  • D.参数漂移指权重自动改变

答案:ABC。协变量漂移是 P(X) 变了,概念漂移是 P(Y|X) 变了,标签漂移是 P(Y) 变了,三者都是数据漂移的常见类型。模型参数不会自己“漂移”,参数变化是重训的结果而非漂移类型,D 错。

Q6. 关于概念漂移和协变量漂移,下列说法正确的是?

单选题 · hard

  • A.概念漂移指 P(X) 变化协变量是 P(Y|X) 变化
  • B.概念漂移指 P(Y|X) 变化协变量是 P(X) 变化← 正确答案
  • C.二者本质相同只是检测方法存在差异
  • D.概念漂移只出现在分类模型不发生回归

答案:B。协变量漂移是输入分布 P(X) 变了,但输入和输出的关系没变;概念漂移是 P(Y|X) 变了,即规律本身变了。两者本质不同,检测侧重点也不同;概念漂移在回归模型中同样存在,D 错。

Q7. 模型重训前的离线效果评估,正确做法是?

单选题 · mid

  • A.仅观察训练集损失是否继续下降
  • B.对比新旧模型的参数差异大小
  • C.在近期真实样本上新旧模型对比← 正确答案
  • D.直接看模型推理速度是否变快

答案:C。离线评估要用留出的近期真实样本(代表线上分布)同时跑新旧模型,对比准确率、召回率等指标,判断重训是否真的缓解了漂移。训练集损失下降可能是过拟合,参数差异大不等于效果好,推理速度和效果无关。

Q8. 安全发布新模型到线上,常用保障手段包括?

多选题 · hard

  • A.随机分流开展 A/B 效果实验← 正确答案
  • B.灰度发布逐步放大新流量← 正确答案
  • C.保留一键回滚旧模型能力← 正确答案
  • D.全量替换后立刻删除旧版本

答案:ABC。安全发布三件套是 A/B 实验验证效果、灰度发布控制风险、回滚机制兜底。全量替换后删除旧版本等于放弃退路,一旦新模型有问题无法快速恢复,是典型的错误操作。

Q9. 闭环更新触发条件设计上,更合理的做法是?

单选题 · mid

  • A.出现一次告警就立即触发重训
  • B.完全由开发人员拍脑袋做决定
  • C.等到准确率归零后才开始更新
  • D.连续多窗口超阈值才启动更新← 正确答案

答案:D。单次告警可能是偶发抖动,立刻重训会把噪声当趋势学进去;合理做法是统计最近 N 个窗口的告警占比,超过阈值(如 60%)才触发更新。靠拍脑袋或等效果归零都太主观或太滞后。

Q10. 主动学习闭环中人工标注参与哪些环节?

多选题 · easy

  • A.标注主动学习挑出的高熵样本← 正确答案
  • B.审核模型输出的可疑结果← 正确答案
  • C.制定标注预算与更新触发规则← 正确答案
  • D.自动修改模型的内部网络结构

答案:ABC。人的参与体现在三处:标注挑选出的高熵样本、审核可疑输出、制定预算和触发规则。修改网络结构是训练算法的职责,不是人工标注环节,D 错。