(資料處理)Data leakage

Ben Hu
4 min readFeb 2, 2020

--

Kaggle Course: Data leakage

Data leakage (or leakage)一般有兩大類:

Target leakage 和 Train-Test Contamination.

Target leakage

這裡舉一個例子說明。

這裡有一個是否有接受抗生素的變數,這個變數基本上和是否有肺病是高度相關的。因此這邊你只要用這個變數放入X,你的訓練結果都會有好。

問題是,你真正把模型拿去用的時候,你不會有這種變數,更容易是有人肺病,才會去把抗生素。一個作法是,不要拿目標變數生成後的相關變數,這個相關變數會leakage預測結果,而且你實際使用時,你不會有這種事後的變數。

Train-Test Contamination

這種發生在,進行前處理時,把要驗證的資料也一起進行前處理了。這樣你要驗證的資料和訓練資料都會獲得很好的預測,但是你實際在生產時的環境,那些資料不會被前處理,預測就會很糟糕了。這聽起來很蠢,可是當前處理的程序變的複雜,還是會發生的。

範例

這個例子,我們會示範偵測leakage和移除

如果要跑起來,要進入Kaggle, 載入新資料 AER Credit card

我們用這個資料來預測是否可以收請信用卡。

載入資料

準備資料

因為是小型資料,我們會跑Cross validation

根據經驗呢?第一次用一個基本模型跑就那麼高,怪怪的,我們來確認一下資料。

因為是示範目的,這邊作者直接挑出有問題的expenditure變數,並進一步調查。

實際上,會建議去還是一定要做一個基本程度的EDA分析,看看相關性,瞭解每一個變數的意義等。

以這個例子來說,作者分析後發現,

沒卡的人且沒消費的比例,100%。
有卡但沒消費的,2%。
這個消費大概就是收到卡後的消費。有卡才會消費,所以有卡沒消費的比例很低,而沒有卡當然無法消費,所以比例100%,

因此,這個變數基本上就是申請卡之後才有的。拿這個去預測是否有沒有卡,這就是一個典型Target leakage的例子

接著,這邊作者也砍掉active 和 majorcard, 這兩個變數。因為無法確認是什麼意思。心態上,小心比建立一個錯誤的模型好

這個8x比較make sense了,畢竟是一個簡單的模型。如果原本的leaky模型,會更差。

總結

Data leakage可以是一個multi-million dollar mistake。意思就是,搞半天,模型在生產後無法用,這是很成本很高的失敗,千萬要小心。

  • 探索變數非常重要
  • 對變數之間的關係、預測結果等有基本常識,當然也是需要經驗
  • 小心的進行前處理,以避免驗證與訓練資料集的混用

程式碼可以看這邊

--

--

Ben Hu

What I cannot create, I do not understand — Richard Feynman