更多深度文章,請關注:https://yq.aliyun.com/cloud
這篇博客主要介紹處理不平衡數據的技巧,那么什么是不平衡數據呢?比如說一位醫生做了一個病例對照研究,數據集由病例10人和對照990人組成,建立好一個邏輯回歸模型后,并對建立的模型進行內部驗證,居然發現其正確率高達99%,然后把他興奮壞了,覺得可以將該成果發表到頂級期刊上,從此走上人生巔峰。然而,我們可以發現,該模型不管怎么預測,都能得到正常的結果,所謂的99%的正確率,原來是建立在1000個人中10個病例都發現不了的基礎上。從這個例子可以看出,當遇到不平衡數據時,以總體分類準確率為學習目標的傳統分類算法會過多地關注多數類,從而使得少數類樣本的分類性能下降。
介紹
不平衡數據廣泛存在于各個領域,但在二分類問題中尤其常見,表現為其中的一個類別所占的比例遠遠高于另外的一個類。比如:銀行欺詐檢測、市場營銷、網絡入侵檢測等領域。
這些領域中的數據集有哪些共同點呢?可以發現在這些領域中使用的數據通常不到1%,但一旦發生就是一件“有趣”的事件(例如使用信用卡的欺詐者的違規交易,用戶點擊廣告或原本已損壞的服務器在掃描其網絡)。然而,大多數機器學習算法對于不平衡數據集都不能很好地工作。以下七種技術可以幫助我們訓練分類器來檢測異常類。

1. 使用正確的評估指標
對使用不平衡數據生成的模型應用不當的評估指標是相當危險的。想象一下,模型訓練數據如上圖所示,若使用精度來衡量模型的好壞,將所有測試樣本分類為“0”的模型將具有很好的準確性(99.8%),但顯然這種模型不會為我們提供任何有價值的信息。
在這種情況下,可以應用其他評估指標替代精度指標,例如:
- 準確度/特異度:有多少個選定的實例相關。
- 召回率/靈敏度:選擇了多少個相關實例。
- F1評分:準確度和召回率的調和平均數。
- Matthews相關系數(MCC):觀察和預測的二元分類之間的相關系數。
- ROC曲線下的面積(AUC):真陽性率與假陽性率之間的關系。
2. 重新采樣訓練集
除了使用不同的評估標準外,還可以使用不同的數據集。有兩種方法使不平衡的數據集來建立一個平衡的數據集——欠采樣和過采樣。
2.1. 欠采樣
欠采樣是通過減少豐富類的大小來平衡數據集,當數據量足夠時就該使用此方法。通過保存所有稀有類樣本,并在豐富類別中隨機選擇與稀有類別樣本相等數量的樣本,可以檢索平衡的新數據集以進一步建模。
2.2. 過采樣
相反,當數據量不足時就應該使用過采樣,它嘗試通過增加稀有樣本的數量來平衡數據集,而不是去除豐富類別的樣本的數量。通過使用重復、自舉或合成少數類過采樣等方法(SMOTE)[1]來生成新的稀有樣品。
注意到欠采樣和過采樣這兩種方法相比而言,都沒有絕對的優勢。這兩種方法的應用取決于它適用的用例和數據集本身。另外將過采樣和欠采樣結合起來使用也是成功的。
3. 以正確的方式使用K-fold交叉驗證
值得注意的是,使用過采樣方法來解決不平衡問題時應適當地應用交叉驗證。這是因為過采樣會觀察到罕見的樣本,并根據分布函數應用自舉生成新的隨機數據,如果在過采樣之后應用交叉驗證,那么我們所做的就是將我們的模型過擬合于一個特定的人工引導結果。這就是為什么在過度采樣數據之前應該始終進行交叉驗證,就像實現特征選擇一樣。只有重復采樣數據可以將隨機性引入到數據集中,以確保不會出現過擬合問題。
K-fold交叉驗證就是把原始數據隨機分成K個部分,在這K個部分中選擇一個作為測試數據,剩余的K-1個作為訓練數據。交叉驗證的過程實際上是將實驗重復做K次,每次實驗都從K個部分中選擇一個不同的部分作為測試數據,剩余的數據作為訓練數據進行實驗,最后把得到的K個實驗結果平均。
4. 組合不同的重采樣數據集
成功泛化模型的最簡單方法是使用更多的數據,問題是像邏輯回歸或隨機森林這樣開箱即用的分類器,傾向于通過舍去稀有類來泛化模型。一個簡單的最佳實踐是建立n個模型,每個模型使用稀有類別的所有樣本和豐富類別的n個不同樣本。假設想要合并10個模型,那么將保留例如1000例稀有類別,并隨機抽取10000例豐富類別。然后,只需將10000個案例分成10塊,并訓練10個不同的模型。

如果擁有大量數據,這種方法是簡單并且是可橫向擴展的,這是因為可以在不同的集群節點上訓練和運行模型。集合模型也趨于泛化,這使得該方法易于處理。
5. 用不同比例重新采樣
之前的方法可以很好地將稀有類別和豐富類別之間的比例進行微調,最好的比例在很大程度上取決于所使用的數據和模型。但是,不是在整體中以相同的比例訓練所有模型,所以值得嘗試合并不同的比例。如果10個模型被訓練,有一個模型比例為1:1(稀有:豐富)和另一個1:3甚至是2:1的模型都是有意義的。一個類別獲得的權重依賴于使用的模型。

6. 集群豐富類
Sergey Quora提出了一種優雅的方法[2],他建議不要依賴隨機樣本來覆蓋訓練樣本的種類,而是將r個群體中豐富類別進行聚類,其中r為r中的例數。每個組只保留集群中心(medoid)。然后,基于稀有類和僅保留的類別對該模型進行訓練。
7. 設計自己的模型
所有之前的方法都集中在數據上,并將模型保持為固定的組件。但事實上,如果設計的模型適用于不平衡數據,則不需要重新采樣數據,著名的XGBoost已經是一個很好的起點,因此設計一個適用于不平衡數據集的模型也是很有意義的。
通過設計一個代價函數來懲罰稀有類別的錯誤分類而不是分類豐富類別,可以設計出許多自然泛化為稀有類別的模型。例如,調整SVM以懲罰稀有類別的錯誤分類。

結束語
本文不是一個排外的技術列表,而是處理不平衡數據的一些建議。沒有適合所有問題的最佳方法或模型,強烈建議嘗試不同的技術和模型來評估哪些方法最有效并嘗試創造性地結合不同的方法。同樣值得注意的是,在不平衡類別發生的許多領域中,隨著“市場規則”的不斷變化,需要檢查過去的數據是否過時。
推薦閱讀
作者信息
Ye Wu在營銷和銷售預測方面具有會計和實踐經驗的背景,在IE商學院攻讀業務分析與大數據碩士學位。
Rick Radewagen是一位有抱負的數據科學家,擁有計算機科學的背景,在IE商學院攻讀業務分析與大數據碩士學位。
本文由北郵@愛可可-愛生活老師推薦,阿里云云棲社區組織翻譯。
文章原標題《7 Techniques to Handle Imbalanced Data》,作者:Ye Wu, Rick Radewagen,譯者:海棠,審閱:6816816151
附件為原文的pdf
文章為簡譯,更為詳細的內容,請查看原文