之前小夕因專案需要研究了一小陣子的不均衡(文字)分類問題,不過沒有研究得太過深入,也沒有總結出一套成體系的處理思路。正好今天發現資料探勘大佬「微調」在知乎上寫了一個言簡意賅又很具有實際操作價值的回答,於是分享給大家啦~
模型如何評價
先談談這種極端的類別不平衡的評估問題,我們一般用的指標有(前兩個是全域性評估,最後一個是點評估):
ROC曲線下的面積(AUC_ROC)
mean Average Precesion(mAP),指的是在不同召回下的最大精確度的平均值
Precision@Rank k。假設共有n個點,假設其中k個點是少數樣本時的Precision。這個評估方法在推薦系統中也常常會用。
選擇哪個評估標準需要取決於具體問題。而在上線前怎麼確定你的模型已經達標?這個需要AB test,每個公司都有不同的標準,很難一概而論。重點是新系統至少要比現有系統在某方面有了提升,而全新模型至少應該符合從業者的基本預期。也要認識到大部分情況下上線的模型都不可能是完美的,我的個人建議是可以利用「已有的監督模型+人工」做主動學習(active learning)。比如先上線一個不完美的模型,每次將模型預測中最不確定的部分(預測值在臨界點附近的樣本)交給人工驗證,並重新訓練逐步提高模型預測的精準度。
如何解決問題
至於如何處理資料不平衡的問題,最傳統的思路還是使用過取樣和欠取樣等。相關資料大家看的比較多的是08年的Survey Paper [1],比較新和前沿的做法可以參考[2],可以至少讀一下Related Works部分了解一下這些年來常用的非平衡資料處理方法有哪些。比較科普的文章可以參考我的回答:
微調:欠取樣(undersampling)和過取樣(oversampling)會對模型帶來怎樣的影響?
https://www.zhihu.com/question/269698662/answer/352279936
裡面也介紹了一些常用的工具。去年其實也寫過一篇類似的文章,可以參考:
如何處理資料中的「類別不平衡」?
https://zhuanlan.zhihu.com/p/32940093
如果上述方法表現依然不好,還有幾個方法可供嘗試:
有監督的整合學習:可以先用取樣的方法建立k個平衡的訓練集,每個訓練集上單獨訓練一個分類器,並對k個分類器結果取平均。一般在這種情況下,每個平衡訓練集上都需要使用比較簡單的分類器,如邏輯迴歸。其實在實際使用中,這種方法不一定會比整合樹模型更好,可能還不如使用xgboost。但在複雜問題上多嘗試一些手段是好的,說不定有奇效。
無監督的異常檢測:異常檢測指的是從資料中找到那些異常值,比如你案例中的“廣告”。無監督的異常檢測一般依賴於對於資料的假設,比如廣告和正常的文章內容很不相同,那麼一種假設是廣告和正常文章間的歐式距離很大。無監督異常檢測最大優勢就是在不需要資料標籤,如果在對資料假設正確時效果甚至可以比監督學習更好,尤其是當獲取標籤成本很高時。具體的科普文章可以參考我的回答:
微調:資料探勘中常見的『異常檢測』演算法有哪些?
https://www.zhihu.com/question/280696035/answer/417091151
「異常檢測」開源工具庫推薦
https://zhuanlan.zhihu.com/p/37132428半監督異常整合學習:如果把1和2的思路結合起來,你可以試試半監督的方法,具體做法可以參考[3]。簡單而言,你可以現在原始資料集上使用多個無監督異常方法來抽取資料的表示,並和原始的資料結合作為新的特徵空間。在新的特徵空間上使用整合樹模型,比如xgboost,來進行監督學習。無監督異常檢測的目的是提高原始資料的表達,監督整合樹的目的是降低資料不平衡對於最終預測結果的影響。這個方法還可以和我上面提到的主動學習結合起來,進一步提升系統的效能。當然,這個方法最大的問題是運算開銷比較大,需要進行深度優化。
高維資料上的半監督異常檢測:考慮到文字檔案在轉化後往往維度很高,可以嘗試一下最近的一篇KDD文章[4],主要是找到高維資料在低維空間上的表示,以幫助基於距離的異常檢測方法。
總結來看,我建議從以下順序嘗試:
直接在資料上嘗試有監督的整合學習(方法1)
直接在資料上使用多種無監督學習,觀察哪一類演算法的效果更好(方法2)
結合以上兩點(方法3)
如果以上方法都不管用,嘗試方法4
使用方法1, 3,4時,可以加入主動學習
如果以上方法均不奏效,最靠譜的還是找更多人做資料標註,畢竟資料為王。從效果上看往往是「監督學習>>半監督學習>無監督」,能用監督就不要依賴無監督。
資料探勘專案的本質就是試錯,所以很難有確定的答案。拋開準確率不談,另外的重要因素包括系統的效率和耦合度。前者指的是運算開銷,後者指的是設計與維護開銷,這些在設計方案時都要考慮到。最終上線的版本不一定是最強力的那個,往往是最適合的那個。
參考文獻
[1] He, H. and Garcia, E.A., 2008. Learning from imbalanced data. IEEE Transactions on Knowledge & Data Engineering, (9), pp.1263-1284.
[2] Roy, A., Cruz, R.M., Sabourin, R. and Cavalcanti, G.D., 2018. A study on combining dynamic selection and data preprocessing for imbalance learning. Neurocomputing, 286, pp.179-192.
[3] Zhao, Y.; Hryniewicki, M.K. XGBOD: Improving Supervised Outlier Detection with Unsupervised Representation Learning. In Proceedings of the International Joint Conference on Neural Networks (IJCNN), Rio, Brazil, 8–13 July 2018.
[4] Pang, G., Cao, L., Chen, L. and Liu, H., 2018. Learning Representations of Ultrahigh-dimensional Data for Random Distance-based Outlier Detection. arXiv preprint arXiv:1806.04808.