專項練習 · 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 道題,覆蓋基線、標準化偏移、樣本量保護、警示門檻值與聚合指標。

打開練習

繼續閱讀: