在重新回顧 Kaggle 近期的 IEEE-CIS Fraud Detection 的比賽中,發現有人提到一個 Features selection 的方法 Adversarial validation。
Problem 在建立模型時常常都會遇到 training set 與 testing set 的分佈存在明顯的差異的,而在分佈不相同的狀況下,即使我們使用 Kfold 的方法來驗證 model,也不會得到較好的結果,因為在驗證所取得的 validation set 也會與 testing set 有著分佈上的差異。
在現實的處理方法,可以透過重新收集數據或是一些處理手段,來取得 training set 與 testing set 分佈相同的,但在資料的比賽中, training set 與 testing set 都是給定好的數據,並無法做其他跟改,而面對這樣的狀況, Adversarial validation 就是一個很好來處理這樣的問題。
Mothed 其實 Adversarial validation 的概念非常簡單,只需要幾個步驟:
將 training set 與 testing set 合併,並標注新的 target column is_train ($training = 1, testing = 0$) 建立一個 classifier 將 training set 的預測機率按照 Ascending 的方式排序,由小排到大。 取 Top $n\%$ 的數據當作 validation set 藉由這樣的方式所取得的 validation set 在分佈上就與 testing set 相似,如果 model 在 validation 上取得好的預測結果,那相對地也能反映在 testing set。