數據與特徵

資料洩漏(data leakage)

/ DAY-tuh LEE-kij /

資料洩漏,是指有資訊悄悄溜進了你的模型,而在真實預測的那一刻,模型本不該合法地擁有這些資訊——就像一個考前背了標準答案的學生。這名學生在模擬考上光芒四射,到了真考卻一敗塗地。洩漏所造就的模型,開發時看起來驚艷無比,部署後卻慘痛失靈。

它主要藏在兩種形態裡。標籤洩漏(target leakage)是指某個特徵裡偷偷包含了答案,或包含了只有在答案揭曉之後才會有的東西——比如,用一個記錄「所開處方」的欄位去預測病人是否患病,而這個欄位只有在診斷做出之後才會存在。訓練—測試汙染(train-test contamination)則是測試集的知識滲進了訓練——在劃分之前就在整份資料上擬合縮放器或插補、在全部資料上做特徵選擇,或讓同一個人的記錄同時跨在訓練側和測試側。在所有這些情形裡,模型實際上都在偷看它在野外不會擁有的答案。

為何重要:洩漏是「實驗室裡考了99%的模型一上生產線就垮掉」最常見的單一原因,而它之所以陰險,正在於數字會一直好看下去,直到現實迎面撞來。防禦之道是一套嚴格的紀律:先劃分資料,再僅從訓練那一份裡去學習每一個變換(縮放、插補、編碼、特徵選擇),並對每一個特徵反覆追問:「在我需要做預測的那一刻,我真的會知道這個嗎?」

一個用來預測哪些病人會住院的模型達到了98%的準確率——靠的是一個叫「出院日期」的特徵。可是,只有當一個人已經住院之後,你才會有出院日期。這個特徵其實是答案的偽裝;把它去掉,誠實的準確率就跌到了遠更可信的72%。

一個只有事後才會知道的特徵,其實是答案的偽裝。

如果一個結果好得不像真的,那麼先懷疑洩漏,再去慶祝。補救之道永遠是同一套儀式:先劃分,預處理只在訓練集上擬合,並逐一審查每個特徵在預測時刻是否真的拿得到。

又稱
leakagetarget leakagetrain-test contamination数据泄露标签泄露資料洩漏目標洩漏