對抗驗證(Adversarial validation)


交叉驗證(Cross Validation)是常用的一種用來評估模型效果的方法。當樣本分布發生變化時,交叉驗證無法准確評估模型在測試集上的效果,這導致模型在測試集上的效果遠低於訓練集。

對抗驗證(Adversarial Validation),並不是一種評估模型效果的方法,而是一種用來確認訓練集和測試集的分布是否一致的方法。它的本質是構造一個分類模型,來預測樣本是訓練集或測試集的概率。如果這個模型的效果不錯(通常來說AUC在0.7以上),那么可以說明我們的訓練集和測試集存在較大的差異。具體步驟如下:

  1. 構建一個樣本的分類器,該二分類器的任務用於區分樣本來源於訓練集,還是測試集。因此,需要為原始數據新增一個標簽列,將訓練集中的樣本標記為0, 測試集中的樣本標記為1,樣本的特征是數據中已有的特征,或者衍生的新特征,生成新的訓練數據集;
  2. 將新的訓練數據集進行划分,保留部分樣本作為該樣本分類任務的測試集T, 利用分類算法(XGBoost, LightGBM)等對數據集進行訓練,AUC作為模型指標
  3. 在測試集T中進行驗證,如果模型效果AUC在0.5左右,說明該樣本分類模型無法區分樣本來源訓練集,還是測試集,說明原始數據中訓練集,測試集分布是一致的;如果AUC較大,如0.9, 說明樣本分類器很容易區分樣本,間接說明訓練集與測試集存在很大差異;
  4. 根據第3步的結論,對於分布一致的,正常對目標任務訓練即可。對於分布不一致的,可以繼續進行樣本挑選的嘗試。利用上述樣本分類器模型,對原始的訓練集進行打分預測,並將樣本按照模型分從大到小排序,模型分越大,說明與測試集越接近,那么取訓練集中的TOP N 的樣本作為目標任務的驗證集,這樣即可將原始的樣本進行拆分得到訓練集,驗證集,測試集。那么線上模型驗證時,在這樣的數據上調參得到的模型,如果在驗證集上效果穩定,那么應用在測試集上,大概率結果是一致的

如此,完成了local CV的構建。有了上述的思路,可以做進一步的擴展(在可容忍的模型誤差范圍內),利用樣本分類模型,挑選與測試集相近的訓練集,做樣本的反向選擇,挑選合適訓練樣本進行模型訓練。

對抗驗證作為一種特征篩選方法時,可以找出時序波動明顯的特征,幫我們快速找到在訓練集和測試集上不穩定的特征。步驟如下:

  1. 對划分的訓練集和驗證集(測試集)進行二元編碼, e.g. 訓練集增加一個ad_target=1,驗證集增加一個ad_target=0
  2. 訓練一個簡單的二分類模型,目標是對ad_target做二分類
  3. 每次訓練只使用一個特征,記錄模型收斂時驗證集的AUC
  4. 迭代步驟3直到遍歷所有特征,對特征按照AUC指標從高到底排序
  5. 重點分析AUC較高所對應的特征,經驗閾值可以選0.7,0.8;注意缺失值問題
  6. auc越高,代表越能區分出訓練集和測試集,可以選擇丟棄這些特征


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM