专项练习 · 10 分钟阅读

Python 模型监控练习:漂移与告警

监控不是堆满数字的仪表盘,而是一组小型比较。这些练习建立基线、衡量偏移、判断证据是否足够,并只记录真正需要的聚合值。

练习:比较当前均值与基线

选择一个数值特征和一段基线窗口。均值之差是最简单的第一信号,容易解释,但它没有考虑基线本身的波动。

baseline = [10, 12, 14]
live = [13, 15, 17]
shift = sum(live) / len(live) - sum(baseline) / len(baseline)
print(round(shift, 2))

三个单位的偏移

练习:标准化差距

把均值偏移除以基线标准差。结果更容易跨特征比较,但仍然需要结合业务确定阈值。

import statistics

baseline = [10, 12, 14]
live = [13, 15, 17]
gap = (sum(live) / len(live) - sum(baseline) / len(baseline)) / statistics.pstdev(baseline)
print(round(gap, 2))

约 1.84 个基线标准差

练习:证据足够才告警

只有两个值的当前窗口可能因偶然产生惊人的均值。先用最小样本量做门槛,再应用阈值。返回具体原因,告警才容易排查。

import statistics

def check(baseline, live, min_n=5, threshold=1.0):
    if len(live) < min_n:
        return "collect more data"
    baseline_std = statistics.pstdev(baseline)
    if not baseline_std:
        return "baseline has no variation"
    gap = (sum(live) / len(live) - sum(baseline) / len(baseline)) / baseline_std
    return "alert" if abs(gap) >= threshold else "watch"

baseline = [10, 11, 12, 13, 14]
print(check(baseline, [14, 15, 16, 17, 18]))
print(check(baseline, [15, 16]))

带着原因告警

练习:跟踪预测比率

流量变化时,比率通常比原始计数更有用。比较正例预测、错误或回退在窗口中的占比。比率同样需要样本量保护。

baseline = [0, 0, 0, 0, 1]
live = [0, 0, 1, 1, 1]
base_rate = sum(baseline) / len(baseline)
live_rate = sum(live) / len(live)
print(round(live_rate - base_rate, 2))

比率之差

练习:记录聚合值,不记录身份

很多故障监控只需要计数表。除非需求明确且保留策略获批,否则不要记录原始提示词、用户文本或标识符。先聚合。

events = ["ok", "ok", "error", "ok", "error"]
counts = {}
for event in events:
    counts[event] = counts.get(event, 0) + 1
total = len(events)
print({key: round(value / total, 2) for key, value in counts.items()})

记录计数和比率,不记录原始记录

你的练习清单

常见问题

应该多久监控一次?

既要能及时发现有意义的变化,又不能被噪声淹没。合适频率取决于流量和风险。

漂移告警说明模型坏了吗?

不一定。漂移是调查信号,模型可能仍然准确,只是输入分布发生变化。

可以记录提示词来排查漂移吗?

只有在需求明确、必要授权、严格访问控制和保留期限下才可以。优先使用聚合统计或脱敏样本。

练习监控信号

12 道题,覆盖基线、标准化偏移、样本量保护、告警阈值与聚合指标。

打开练习

继续阅读: