剛剛遇到一些一直困擾我關於生產ML系統的問題。大家都很在意輸出指標——準確率、精確率、召回率——但當這些指標下降時,問題已經很嚴重了。真正的問題其實發生在更早的階段,也就是輸入層。



我一直在閱讀一種完全顛覆傳統的方法。不是監控模型的輸出,而是監測你的輸入資料是否仍然像在訓練時那樣運作。聽起來很簡單,但實作上卻很巧妙。

這個核心想法是利用最近鄰(nearest neighbors)進行密度估計,並配合KL divergence(KL divergence)來判斷。原因很簡單:你先從訓練資料建立一個基準,然後用滑動視窗持續比較進入的資料與基準的差異。當KL divergence(KL divergence)突然超過設定的閾值,就代表資料已經偏移了。這不需要假設資料的分布,也不需要打開模型內部來檢查。

想像一下,一個在疫情前行為資料上訓練的電商推薦引擎。顧客偏好改變、購物模式演變,但傳統的監控可能要幾天才察覺。這個利用最近鄰(nearest neighbors)的方法可以立即捕捉到——你的特徵向量不再符合原本的分布,提前被標記出來,性能還沒明顯下降就已經警示。

實務上,細節也很重要。視窗大小很關鍵——太小會追蹤噪音,太大則可能錯過快速變化。閾值校準也是如此。一個可靠的方法是將你的同質訓練資料分成連續的視窗,計算成對的KL divergence(KL divergence),然後用第95或第99百分位作為閾值。

至於k值的選擇,取樣本數的平方根是一個合理的起點。較大的k使密度估計較不敏感但較平滑,較小的k則能捕捉異常但容易過擬合噪音。

在大規模應用中,可以透過抽樣策略、近似最近鄰庫如Annoy或Faiss,以及平行處理來管理。你不需要從零重新計算,只是逐步更新滾動統計數據。

這個方法的最大優點是它的模型無關性。無論你是用簡單的分類器還是複雜的模型,都可以使用。它本質上建立了一個預警系統,能在模型察覺到資料偏移之前就先行警示。這種防禦性工程,正是讓生產系統保持穩定的關鍵。
查看原文
此頁面可能包含第三方內容,僅供參考(非陳述或保證),不應被視為 Gate 認可其觀點表述,也不得被視為財務或專業建議。詳見聲明
  • 打賞
  • 留言
  • 轉發
  • 分享
留言
請輸入留言內容
請輸入留言內容
暫無留言