← M09 MLOps 與部署 M09 MLOps 與部署

M09.06|模型監控與觀測:讓 AI 系統持續健康運作

部署只是開始 — 真正的挑戰是確保模型在真實世界不悄悄變差

L2-系統部署-模型維運監控 L2-AI技術應用-效能評估
模型監控 資料漂移 概念漂移 效能退化 A/B測試 觀測性 預警系統 線上評估
📋

本講學習重點

資料漂移和概念漂移有什麼差別?
PSI 指標如何判斷分佈偏移的嚴重程度?
模型在沒有新標籤的情況下,如何偵測效能退化?
影子模式和金絲雀部署分別適用什麼情境?
線上 A/B 測試與離線評估的最大差異是什麼?

資料漂移(Data Drift):輸入特徵的統計分佈與訓練時不同;概念漂移(Concept Drift):輸入和輸出之間的真實關係改變

PSI(Population Stability Index):PSI < 0.1 穩定,0.1–0.2 需注意,> 0.2 需立即調查;KS 檢定用來判斷兩個分佈是否相同

代理指標監控:當真實標籤延遲時,用業務指標(點擊率、退款率)作為模型效能的代理信號

影子模式(Shadow Mode):新模型接收真實流量但不影響決策,用於上線前的無風險評估

金絲雀部署(Canary):先讓 5–10% 流量走新模型,確認無問題後逐步擴大到 100%

多維度監控:輸入特徵分佈、預測分佈、業務指標(轉換率)、系統指標(延遲、吞吐量)缺一不可

告警設計:靜態閾值 vs 動態基準線(考慮週期性波動,如週末效應)

📌 模型監控是 MLOps 的核心能力,目標是在模型效能悄悄退化時能及早偵測。監控需要覆蓋四個層面:輸入資料品質、預測分佈偏移、業務效果代理指標、系統健康指標。因為真實標籤往往有延遲(標籤延遲問題),必須依賴代理指標提供早期預警。影子模式和金絲雀部署是降低新模型上線風險的標準實踐,而線上 A/B 測試則提供了最終的因果效果驗證。
模型監控與觀測:讓 AI 系統持續健康運作

🎙️ Podcast(中文)

0:00 / 0:00

一句話搞懂

模型監控就是替你部署的 AI 安裝「健康追蹤器」——因為訓練時的世界和上線後的真實世界會隨著時間越來越不一樣,任何沒有監控的模型都在默默衰老;好的監控系統能在模型效能明顯下滑「之前」就發出警報,讓你有時間在用戶發現問題前先行修復,而不是等到業績掉了才事後追查。


白話解說

為什麼模型上線後會變差

想像你在 2023 年用當時的消費資料訓練了一個信用評分模型,那時台灣的通膨率在 2% 左右,房貸利率是 1.5%,外食費用一個月平均 5,000 元。你的模型學習到「每月可支配收入 3 萬元的人,還款能力是 X」這樣的規則。

到了 2025 年,通膨已累積上升,利率調高,同樣月薪 3 萬元的人,實際可支配所得因物價上漲而縮水了 15%,還款壓力和 2023 年根本不是同一回事。你的模型還在用 2023 年學到的規則做預測,它不知道「世界已經變了」。

這就是 模型退化(Model Degradation) 的本質:模型是在某個時間點的世界快照上訓練出來的,而真實世界在不斷演化。退化不是模型出了 bug,而是模型對世界的「理解」逐漸過時了。

資料漂移 vs 概念漂移:兩種不同的「變了」

退化的原因主要分成兩大類,理解這個區別對於設計正確的監控策略非常重要:

資料漂移(Data Drift):輸入資料的統計特性改變了,但輸入和輸出之間的真實關係沒變。例如,你的電商推薦系統原本主要服務 25–35 歲的用戶,但最近一波行銷活動吸引了大量 55 歲以上的新用戶——模型的輸入分佈(用戶年齡)大幅偏移了。這個問題的嚴重程度取決於模型是否曾在類似分佈的資料上訓練過;如果 55 歲用戶的購買行為和 25 歲用戶根本不同,而模型從未見過這個族群,效能必然下滑。

概念漂移(Concept Drift):輸入特徵和預測目標之間的真實關係改變了。前面的信用評分例子就屬於這類——「月收入 3 萬元」這個特徵所代表的「還款能力」,在通膨前後有本質上的差異。概念漂移通常更難偵測,因為輸入資料的分佈可能看起來沒有明顯變化,但模型的預測和現實的偏差卻在悄悄擴大。新冠疫情期間,幾乎所有在疫情前訓練的消費行為模型都遭遇了劇烈的概念漂移——「用戶去電影院」從「高消費能力信號」變成了「幾乎不可能發生的事件」。

PSI 和 KS 檢定:量化分佈偏移的工具

發現了「可能有漂移」之後,需要有客觀的量化指標來判斷嚴重程度。最常用的兩個工具是:

PSI(Population Stability Index,族群穩定性指數):這個指標把特徵的分佈分成若干個桶(通常 10–20 個),比較訓練時的分佈和當前分佈在每個桶的比例差異,最後加總成一個單一數值。業界的標準判讀是:PSI < 0.1 表示分佈穩定,無需擔心;0.1 ≤ PSI < 0.2 表示分佈有輕微偏移,需要留意;PSI ≥ 0.2 表示分佈已明顯偏移,需要立即調查是否重新訓練。PSI 的優點是直覺、易懂、有業界公認的閾值;缺點是對分桶方式敏感。

KS 檢定(Kolmogorov-Smirnov Test):這是一個統計假設檢定,比較兩個分佈的累積分佈函數(CDF)的最大距離,並給出「兩個分佈是否顯著不同」的 p 值。KS 檢定對分佈的形狀變化很敏感,不需要分桶,但對於類別型特徵無法直接使用(需改用卡方檢定)。

實際的監控系統通常同時計算多個指標,並為每個重要特徵分別建立監控基準線,而不是只看整體的「平均漂移」。

標籤延遲問題:最大的監控難點

監控最理想的方式當然是「直接觀察模型的準確率是否下滑」。但這在實務中面臨一個根本的困難:標籤延遲(Label Latency)

以貸款違約預測模型為例,模型今天做出預測「這個人大概率不會違約」,但真正的標籤(他最終有沒有違約)要 6–12 個月後才知道。在這漫長的等待期間,你根本沒有辦法直接計算「現在的準確率是多少」。

解決方案有以下幾種:

代理指標監控(Proxy Metrics):使用和真實效能高度相關的業務指標作為代理。信用評分模型可以監控「核准的貸款中,30 天逾期率」作為短期代理(比等 12 個月快得多);推薦系統可以監控點擊率、購買率、退貨率等業務指標;醫療診斷模型可以監控「模型建議追蹤但後來被醫生推翻的比例」。代理指標不完美,但是你在等待真實標籤時唯一能做的事。

人工標記(Human-in-the-Loop):對於高風險決策,建立一個持續的人工抽樣標記流程——每天隨機抽取 1–2% 的預測結果,由人工給出正確標籤,這樣就能在小樣本上即時計算模型的真實準確率。成本較高,但提供了最直接的品質信號。

快速反饋設計:在系統設計時刻意縮短標籤延遲。例如電商商品評分預測,與其等用戶自願留評(可能幾週後),不如在購買後 3 天主動推送一個五星評分的快速問卷,把反饋週期壓縮到 3 天,讓監控更即時。

監控架構:四個層面缺一不可

完整的模型監控不能只看一個維度,而必須同時覆蓋四個層面:

輸入資料品質監控:缺失值比例是否異常升高?類別特徵是否出現訓練時未見過的新值(Unknown Category)?數值特徵的分佈是否偏移(PSI、KS 檢定)?這一層的問題通常是最快能偵測到的。

預測分佈監控:模型輸出的機率分佈是否改變?例如信用評分模型若突然輸出大量「極高風險」評分,可能不是真的違約風暴,而是模型接收到了品質異常的輸入資料。

業務效果監控:這才是最終關心的東西——轉換率、違約率、用戶滿意度等業務指標。業務指標的變化可能滯後(有延遲),但它是判斷「模型退化是否真的影響業務」的最終證據。

系統健康監控:推論延遲(P50、P95、P99 分位數)、吞吐量(QPS)、錯誤率、記憶體和 GPU 使用率。這一層和 MLOps 的 DevOps 面向高度重疊,但不可忽視——一個推論延遲從 50ms 突然升到 500ms 的模型服務,即使準確率沒下降,也會嚴重損害用戶體驗。


應用場景

場景 主要漂移類型 代理指標 監控頻率建議
電商推薦系統 資料漂移(用戶行為隨季節變化) 點擊率、加購率、訂單金額 每小時
信用評分模型 概念漂移(宏觀經濟環境變化) 30 天逾期率、核准率 每日
詐欺偵測系統 概念漂移(詐欺手法不斷演化) 人工審核推翻率、漏報案例率 即時 / 每小時
醫療影像診斷 資料漂移(不同醫院設備差異) 醫生覆核不一致率 每週(設備更換後立即)
自然語言處理客服 概念漂移(用語和議題隨時間演變) 人工轉接率、客戶滿意度 每日
廣告出價模型 資料漂移(競爭對手行為、市場競價環境) ROAS、CPA 每小時
搜尋排名模型 概念漂移(用戶搜尋意圖和期望演化) 零結果率、用戶重新搜尋率 每日

常見誤區

誤區 1:「只監控準確率,準確率沒掉就沒問題」

這是最危險的監控盲點。準確率是一個落後指標(Lagging Indicator)——等到準確率明顯下滑時,模型已經在錯誤地服務用戶很長一段時間了,尤其在有標籤延遲的場景(如信用評分、醫療診斷)中,你可能要等 6–12 個月後才能觀察到準確率退化,但模型實際上早在 3 個月前就已經開始失準了。

更完整的監控策略必須包含領先指標(Leading Indicators):輸入特徵分佈的 PSI 指標異常(在準確率退化之前就會發出信號),預測分佈的突然偏移(模型突然開始給出大量高信心錯誤預測),業務代理指標的輕微惡化(在用戶大量投訴之前,可能先看到退款率微升)。理想的監控體系應該是「在準確率下滑前 1–3 個月就收到警告」,而不是「準確率已經掉到不可接受的程度才被發現」。

此外,「準確率」本身也可能掩蓋問題。一個詐欺偵測模型的整體準確率是 99%,但如果它把所有欺詐案例都漏掉了(召回率 = 0),整體準確率還是因為「99% 的交易本來就是正常的」而顯得很高。分層的指標(按照用戶群、地區、時間段分別看)比全局準確率更能發現局部問題。

誤區 2:「設定一個固定的告警閾值就好了,超過就發警報」

靜態閾值(Static Threshold)聽起來很簡單直覺,但在實際應用中往往導致兩種問題:要麼告警太靈敏(每到週末或假日就觸發,因為用戶行為本來就和工作日不同),要麼閾值設得太寬鬆(真正的問題被忽略,因為閾值是按「最壞的正常情況」設定的)。

電商的轉換率在雙 11 當天比平時高 300%,在隔天又回落到正常水準——如果你的告警是「轉換率比過去 7 天平均值低 10% 就警報」,雙 11 過後的正常回落每年都會觸發誤報。

正確的做法是使用動態基準線(Dynamic Baseline):用統計模型對指標的正常波動建模,考慮周期性效應(週一到週日各有不同的正常範圍)、節日效應、長期趨勢,然後在「超出正常波動範圍的統計顯著程度」時才觸發告警。這類方法稱為異常偵測(Anomaly Detection),可以用簡單的移動平均 ± N 個標準差,也可以用 Prophet 等專門的時序預測模型來建立動態基準。此外,告警應該設置不同的嚴重程度(Info、Warning、Critical),避免所有告警都用同樣的方式通知,導致「告警疲勞(Alert Fatigue)」讓工程師開始忽略告警。

誤區 3:「影子模式測試通過了,新模型就可以直接 100% 上線」

影子模式(Shadow Mode)是一種非常有用的測試方式:讓新模型接收真實流量、做出預測,但預測結果不影響任何真實決策,只記錄下來和現有模型做比較。這個方法能發現很多在離線評估中沒有暴露的問題(如特定邊緣情境下的極端預測、未見過的輸入格式導致的系統異常)。

但影子模式有一個根本的侷限:它無法測試「部署後用戶行為的反饋迴路」。舉例來說,推薦系統的新模型在影子模式下生成的推薦列表,用戶從未真正看到,所以你無法知道用戶會不會點擊這些推薦——而用戶是否點擊,正是評估推薦模型最重要的信號。影子模式測試「模型的技術運行是否正常」,但不能測試「模型的業務效果是否如預期」。

因此,正確的新模型上線流程是:影子模式(確認技術運行無問題)→ 金絲雀部署(5–10% 流量,觀察業務指標)→ 逐步擴大(25%、50%、100%)→ 搭配回滾機制(若業務指標惡化立即切回舊模型)。直接從影子模式跳到 100% 上線,跳過了金絲雀部署這個最重要的「實際用戶反饋」驗證環節,風險遠比想像的高。


小練習

練習 1:設計監控方案

你的公司剛上線了一個電商商品「動態定價」模型,根據需求、庫存、競爭對手價格等 15 個特徵,每 10 分鐘自動調整商品售價。模型在上線三個月後,業務團隊反映「最近轉換率下滑,懷疑定價太高」。

請設計一個完整的模型監控方案,說明:

  1. 需要監控哪些指標(至少包含四個層面)?
  2. 哪個指標應該要最早發現問題(領先指標)?
  3. 如何判斷是「模型漂移」還是「競爭對手降價導致的正常商業反應」?

練習 2:解讀監控告警

你收到以下監控告警,請逐一判斷每個告警的可能原因,並排列處理的優先順序:

告警 告警內容
A 特徵「用戶年齡」的 PSI = 0.35(昨天還是 0.08)
B 模型預測的「高風險比例」從平均 5% 突然升到 40%
C 模型推論延遲 P99 從 80ms 升到 2,500ms
D 轉換率比過去 30 天平均低 2%(今天是週一,上週週一是平均值)
E 訓練特徵「商品類別」出現了 127 個之前未見過的新類別值
查看答案 **練習 1:動態定價模型監控方案** **四個層面的監控指標**: 1. **輸入資料品質層**:15 個特徵各自計算每日 PSI(訓練分佈 vs 近 7 天分佈),特別關注「競爭對手價格」和「需求量」這兩個最容易漂移的特徵;監控每個特徵的缺失值比例(若資料來源 API 故障,可能某個特徵突然全為 null);監控每 10 分鐘的更新頻率是否正常(推論次數驟降可能代表服務中斷)。 2. **預測分佈層**:監控模型輸出的定價分佈(平均定價、P10/P50/P90 分位數);監控單次定價調整的幅度分佈(若模型突然輸出極端價格,如某商品價格調高 500%,立即觸發人工審核);監控不同商品類別的定價走勢是否符合常識。 3. **業務效果層**:每小時轉換率(對應每個定價決策);每日訂單金額和利潤率;加購率和退貨率(若定價過高導致退貨率升高,是重要代理信號);用戶流失率(定價異常可能加速用戶轉向競爭對手)。 4. **系統健康層**:推論延遲(P50、P99);每 10 分鐘排程的成功率;定價更新的覆蓋率(是否所有商品都如期更新);記憶體和 CPU 使用率。 **最早的領先指標**:特徵的 PSI 異常(可在業務指標下滑之前 1–5 天偵測到)以及預測分佈的偏移。轉換率的下滑是落後指標,因為需要等用戶實際瀏覽和決定是否購買才能觀察到。 **區分模型漂移 vs 競爭對手降價**: - 若是模型漂移:輸入特徵分佈 PSI 會升高,預測價格的分佈可能偏移,但競爭對手的定價資料源本身不會有異常(競爭對手特徵的 PSI 正常)。 - 若是競爭對手降價:「競爭對手價格」特徵的 PSI 會升高(分佈已偏移,因為競爭對手整體降價),但其他特徵的分佈不一定改變。此時模型是「正確地反應了輸入」(根據競爭對手降價,模型也調低了本站定價),但轉換率下滑可能是因為競爭對手降得更多,而非模型有問題。 - 解法:同時監控「本站定價 vs 競爭對手定價的差距分佈」——若差距擴大(本站相對更貴了),需要調整模型策略,而非重新訓練。 --- **練習 2:告警優先順序與原因分析** **優先順序排列:C > B > A ≥ E > D** **告警 C(最高優先)— 系統層面的嚴重問題**:P99 延遲從 80ms 升到 2,500ms,這代表 1% 的最慢請求需要等待 2.5 秒,對動態定價系統而言可能導致定價決策來不及在用戶瀏覽時完成更新。可能原因:推論服務的記憶體不足(模型被換出 swap)、資料庫查詢變慢、GPU 資源被其他程序佔用、服務器過載。這是系統可用性問題,需要立即處理,否則會影響所有的業務運作。 **告警 B(次高優先)— 預測分佈的極端偏移**:高風險比例從 5% 跳到 40%,這個幅度(8 倍)幾乎不可能是正常的真實風險變化,最可能是輸入資料出現了品質問題(某個關鍵特徵的值全部異常)或模型服務本身出現了 bug(如特徵標準化的參數被錯誤更新)。需要立即檢查:這 40% 的高風險預測是針對哪些交易?輸入資料是否有異常? **告警 A(第三優先)— 資料層面的分佈偏移**:PSI 從 0.08 升到 0.35,一日之內如此劇烈的變化,很可能是資料來源出了問題(如資料管道的 bug、上游資料庫被清空又重新填入)而非真實的用戶年齡分佈改變。需要調查:資料管道是否有錯誤?昨天的資料是否正常?PSI 是否在所有特徵上同時升高(可能是全面性資料問題),還是只有「用戶年齡」這一個特徵? **告警 E(第四優先)— 訓練分佈外的新類別值**:出現 127 個新商品類別,這可能導致使用 One-Hot Encoding 的模型對這些新類別全部輸出「未知類別」的預測,效能可能下滑。需要確認:這些新類別是真實的新商品線,還是資料清洗問題(類別名稱格式改變)?若是真實新品,需要更新特徵處理邏輯並重新評估模型是否需要加入這些類別的訓練資料。 **告警 D(優先最低)— 可能是正常波動**:週一本來轉換率就比週末低,2% 的差距需要看是否有統計顯著性,以及和歷史上同一天的比較。在沒有更多資訊的情況下,這個告警更可能是監控閾值設計不佳(沒有考慮週期性效應)而非真正的問題,應該先確認其他四個告警都解決後再評估。

關鍵字自我檢核

✅ 模型監控 ✅ Model Monitoring ✅ 資料漂移 ✅ Data Drift ✅ 概念漂移 ✅ Concept Drift ✅ 效能退化 ✅ Performance Degradation ✅ 觀測性 ✅ Observability ✅ 特徵分佈 ✅ Feature Distribution ✅ PSI指標 ✅ Population Stability Index ✅ KL散度 ✅ KL Divergence ✅ 影子模式 ✅ Shadow Mode ✅ 金絲雀部署 ✅ Canary Deployment ✅ 預警閾值 ✅ Alert Threshold ✅ 線上A/B測試 ✅ Online A/B Testing ✅ 標籤延遲 ✅ Label Latency