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 道題,覆蓋基線、標準化偏移、樣本量保護、警示門檻值與聚合指標。
繼續閱讀: