Data Leakage — 為什麼你的模型離線超神、上線超爛?
資料洩漏就像考試作弊:
先把資料切成 train/test,所有預處理只在 train 上做,test 用 train 的參數轉換。
用 sklearn Pipeline 把預處理和模型包在一起,自動在每個 fold 內重做。
時間序列永遠用過去預測未來,不能隨機切分。
如果某特徵跟目標相關性異常高(>0.95),很可能是洩漏。
| 來源 | 例子 | 對策 |
|---|---|---|
| 前處理洩漏 | 用全資料算均值填補/縮放 | 只 fit 訓練折、放 pipeline |
| 目標洩漏 | 特徵其實含未來或目標資訊 | 檢查特徵是否事後才知 |
| 時間洩漏 | 用未來資料預測過去 | 依時間切分、時序 CV |
| 重複/群組 | 同人同事件跨訓練測試 | 按群組切分 |
資料洩漏是 iPAS 最常考的陷阱題(中級科目二與三)。重點:訓練時不當用到測試或未來的資訊,導致評估虛高、上線後大幅落差。易混點:常見來源是切分前就對全資料標準化、特徵選擇或重取樣、用未來資料預測過去、或特徵藏有目標的代理變數;前處理要放進管線、在折內做。情境:辨識某做法為何會洩漏、如何避免。
想練情境題與詳解 → AI 學習與考證地圖
訓練時不慎用到實際上線時拿不到、或屬於驗證/測試的資訊,使評估分數虛高,但上線後表現崩盤,是實務中最常見的隱形陷阱。
前處理在切分前對全資料做(標準化、PCA、特徵選擇)、用未來資訊預測過去、放進與目標幾乎等價的特徵(target leakage)、重複樣本跨訓練與測試。
先切分再做前處理、把所有前處理包進 pipeline 並只在訓練折擬合、時間序列用時序切分、檢查可疑地「過好」的特徵與分數。
異常高(如接近 100%)常是洩漏的徵兆,真實任務很少完美;應回頭檢查特徵是否含目標資訊、或前處理是否洩漏。
用「是否已付款」預測「是否成交」,但付款本身就是成交結果;或用只有確診後才會有的欄位去預測是否確診,都會造成上線無效。