恭喜!您已部署獨角獸模型。 模型應可全年無休運作,不會發生任何問題。如要確保模型能持續提供準確預測結果,請務必監控機器學習 (ML) 管道。
編寫資料結構定義,驗證原始資料
如要監控資料,請編寫資料必須符合的規則,持續比對資料與預期的統計值。這組規則稱為「資料結構定義」。請按照下列步驟定義資料架構:
瞭解功能的範圍和發布情形。如為類別特徵,請瞭解可能的值組合。
將瞭解內容編碼至資料結構定義。以下是規則範例:
- 請確保使用者提交的評分一律介於 1 到 5 之間。
- 確認「the」一字出現頻率最高 (適用於英文文字功能)。
- 確認每個類別特徵都設為一組固定可能值中的值。
根據資料結構定義測試資料。您的結構定義應能偵測資料錯誤,例如:
- 異常狀況
- 類別變數的值超出預期
- 資料分布情形異常
撰寫單元測試來驗證特徵工程
雖然原始資料可能通過資料結構定義,但模型不會根據原始資料進行訓練。而是以經過特徵工程處理的資料訓練模型。舉例來說,模型會根據正規化的數值特徵進行訓練,而非原始數值資料。由於經過特徵工程處理的資料可能與原始輸入資料大相逕庭,因此您必須分別檢查經過特徵工程處理的資料和原始輸入資料。
根據您對特徵工程資料的瞭解,編寫單元測試。舉例來說,您可以編寫單元測試,檢查下列條件:
- 所有數值特徵都會經過縮放,例如介於 0 和 1 之間。
- 經過 one-hot 編碼的向量只包含一個 1 和 N-1 個零。
- 轉換後的資料分配符合預期。舉例來說,如果您使用 Z 分數進行正規化,Z 分數的平均值應為 0。
- 離群值 會經過處理,例如縮放 或裁剪。
查看重要資料切片的指標
有時,成功的整體會掩蓋不成功的子集。換句話說,整體指標表現出色的模型,在特定情況下仍可能做出糟糕的預測。例如:
您的獨角獸模型整體表現良好,但在預測撒哈拉沙漠的狀況時,表現不佳。
如果您是滿意整體 AUC 的工程師,可能不會注意到模型在撒哈拉沙漠中的問題。如果每個區域的預測準確度都很重要,則您需要追蹤每個區域的成效。與撒哈拉沙漠對應的資料子集稱為「資料切片」。
找出感興趣的資料切片。 然後,將這些資料切片的模型指標與整個資料集的指標進行比較。檢查模型在所有資料切片中的表現,有助於消除偏誤。詳情請參閱「公平性:評估偏誤」。
使用實際指標
模型指標不一定能衡量模型的實際影響。 舉例來說,變更超參數可能會提高模型的 AUC,但這項變更對使用者體驗有何影響?如要評估實際影響,您需要定義個別指標。舉例來說,您可以對模型使用者進行問卷調查,確認模型預測使用者會看到獨角獸時,他們是否真的看到了。
檢查訓練/應用偏差
訓練/提供偏移是指訓練期間的輸入資料與提供期間的輸入資料不同。下表說明兩種重要的偏斜類型:
| 類型 | 定義 | 範例 | 解決方法 |
|---|---|---|---|
| 結構定義傾斜 | 訓練和服務輸入資料不符合相同的結構定義。 | 模型持續根據舊資料訓練,但服務資料的格式或分布情況有所變更。 | 使用相同的結構定義驗證訓練和服務資料。 請務必另外檢查結構定義未檢查的統計資料,例如遺漏值的比例。 |
| 特徵偏斜 | 訓練和服務期間的工程設計資料不同。 | 訓練和服務的特徵工程程式碼不同,產生不同的工程資料。 | 與結構定義偏差類似,請對訓練和服務工程資料套用相同的統計規則。追蹤偵測到的偏斜特徵數量,以及每個特徵的偏斜樣本比例。 |
訓練/應用偏差的原因可能很細微。請務必考量模型在預測時可用的資料。訓練期間,請只使用服務時可用的功能。
練習:確認理解程度
假設您有一家網路商店,並想預測特定日期的收益金額,您的機器學習目標是使用顧客人數做為特徵,預測每日收益。
答案:問題在於您不知道預測時的顧客人數,也就是當天銷售完成前。因此,即使這項功能能準確預測每日收益,也沒什麼用處。同樣地,訓練模型並取得出色的評估指標 (例如 0.99 AUC) 時,請尋找可能影響標籤的這類特徵。
檢查標籤洩漏情形
標籤外洩是指您嘗試預測的實際資料標籤,不慎進入訓練特徵。有時很難偵測標籤洩漏。
練習:確認理解程度
假設您建構二元分類模型,預測新住院病患是否罹患癌症。您的模型會使用下列功能:
- 病患年齡
- 病患性別
- 先前健康狀況
- 醫院名稱
- 生命徵象
- 測試結果
- 遺傳
標籤如下:
- 布林值:患者是否罹患癌症?
您會仔細分割資料,確保訓練集與驗證集和測試集完全隔離。模型在驗證集和測試集上的表現極佳,指標也十分出色。很遺憾,這個模型在實際環境中,對新病患的表現非常糟糕。
答案:模型的其中一項特徵是醫院名稱。 某些醫院專門治療癌症。在訓練期間,模型很快就發現分配到特定醫院的患者很可能罹患癌症。因此,醫院名稱成為權重很高的特徵。
在推論時,大多數病患尚未分派到醫院。 畢竟,這個模型的目的是診斷患者是否罹癌,然後根據診斷結果將患者分派到合適的醫院。因此,在推論期間,醫院名稱特徵尚未提供,模型被迫依賴其他特徵。
在整個管道中監控模型年齡
如果服務資料隨時間演變,但模型未定期重新訓練,模型品質就會下降。追蹤模型以新資料重新訓練的時間,並設定警報的年齡門檻。除了在提供模型時監控模型年齡,您也應在整個管道中監控模型年齡,以避免管道停滯。
測試模型權重和輸出內容在數值上是否穩定
在模型訓練期間,權重和層輸出內容不得為 NaN (非數字) 或 Inf (無限)。編寫測試,檢查權重和層輸出內容的 NaN 和 Inf 值。 此外,請測試某一層的輸出內容是否超過一半不為零。
監控模型成效
獨角獸出現預測工具比預期更受歡迎!您收到大量預測要求,訓練資料也更多。您可能會覺得這很棒,但隨後會發現模型需要越來越多的記憶體和時間才能完成訓練。您決定按照下列步驟監控模型效能:
- 依程式碼、模型和資料版本追蹤模型成效。這類追蹤功能可協助您找出效能下降的確切原因。
- 針對新模型版本,測試每秒的訓練步驟數,並與先前版本和固定門檻進行比較。
- 設定記憶體用量門檻,找出記憶體流失問題。
- 監控 API 回應時間並追蹤百分位數。雖然 API 回應時間可能超出您的控制範圍,但回應速度緩慢可能會導致實際指標不佳。
- 監控每秒回答的查詢次數。
測試在放送資料上執行的即時模型品質
您已驗證模型。但如果記錄驗證資料後,獨角獸行為等實際情境發生變化,該怎麼辦?那麼服務模型的品質就會下降。不過,由於實際資料不一定會加上標籤,因此很難在放送時測試品質。如果放送資料未標示,請考慮進行下列測試:
調查預測結果顯示顯著統計偏誤的模型。請參閱「分類:預測偏差」。
追蹤模型的實際指標。舉例來說,如果您要分類垃圾內容,請比較預測結果與使用者回報的垃圾內容。
在部分查詢中提供新版模型,以減少訓練和服務資料之間可能出現的差異。驗證新的服務模型時,請逐步將所有查詢切換至新版本。
請記得使用這些測試,監控預測品質的突然和緩慢下降。
隨機
讓資料生成管道可重現。假設您想新增特徵,瞭解這項特徵對模型品質的影響。為確保實驗結果公正,除了這項新功能,資料集應完全相同。因此,請確保資料生成中的任何隨機性都可以確定:
- 為隨機數字產生器 (RNG) 設定種子。播種可確保 RNG 每次執行時都會以相同順序輸出相同值,重新建立資料集。
- 使用不變的雜湊鍵。 雜湊是分割或取樣資料的常見方式。您可以對每個範例進行雜湊處理,並使用產生的整數決定要將範例放在哪個分割中。每次執行資料產生程式時,雜湊函式的輸入內容不應變更。如果您想視需要重新建立雜湊值,請勿在雜湊值中使用目前時間或隨機數字。
上述方法適用於資料取樣和分割。
雜湊的注意事項
再次假設您正在收集搜尋查詢,並使用雜湊值納入或排除查詢。如果雜湊鍵只使用查詢,那麼在多天的資料中,您會一律納入或一律排除該查詢。一律納入或排除查詢是不好的做法,因為:
- 訓練集中的查詢會較不多元。
- 評估集會是人為設定的難題,因為評估集不會與訓練資料重疊。事實上,在放送期間,您會在訓練資料中看到部分即時流量,因此評估結果應反映這點。
您可以改為對查詢 + 查詢日期進行雜湊處理,這樣每天都會產生不同的雜湊值。
