分類問題是機(jī)器學(xué)習(xí)的研究重點(diǎn),而后者在實(shí)踐中常常碰到非均衡數(shù)據(jù)集這個(gè)難題壮虫。非均衡數(shù)據(jù)集(imbalanced data)又稱為非平衡數(shù)據(jù)集,指的是針對(duì)分類問題,數(shù)據(jù)集中各個(gè)類別所占比例并不平均妄均。
比如在網(wǎng)絡(luò)廣告行業(yè),需要對(duì)用戶是否點(diǎn)擊網(wǎng)頁上的廣告進(jìn)行建模哪自。為了處理方便丰包,我們記“點(diǎn)擊廣告”為類別1,“不點(diǎn)擊廣告”為類別0壤巷。因此這是一個(gè)二元分類問題邑彪。在訓(xùn)練模型的歷史數(shù)據(jù)里有1000個(gè)數(shù)據(jù)點(diǎn)(1000行),其中類別1的數(shù)據(jù)點(diǎn)只有10個(gè)胧华,剩下的990個(gè)數(shù)據(jù)全部為類別0寄症。這就是一個(gè)非均衡數(shù)據(jù)集,類別之間的比例為99:1矩动。與二元分類問題類似有巧,多元分類問題同樣會(huì)面對(duì)非均衡數(shù)據(jù)集這個(gè)難題。不過在這個(gè)問題上悲没,多元分類的處理的方案與二元的相似篮迎,因此為了表述簡潔利于理解,下面的討論將針對(duì)二元分類問題。
非均衡數(shù)據(jù)集在現(xiàn)實(shí)中是十分常見的甜橱。它給模型搭建帶來了困難逊笆,如果不小心處理,會(huì)導(dǎo)致得到的模型結(jié)果毫無意義岂傲。在討論這個(gè)話題之前难裆,讓我們稍稍離題一下,來看看所謂的準(zhǔn)確度悖論(accuracy paradox)譬胎。
注意:本篇文章的完整代碼在這里下載
一差牛、準(zhǔn)確度悖論
對(duì)于二元分類問題,模型的預(yù)測結(jié)果按準(zhǔn)確與否可以分為如下4類堰乔,見表1偏化。
其中,TP和TN這兩個(gè)部分都表示模型的預(yù)測結(jié)果是正確的镐侯,這兩者之和的比例越高侦讨,說明模型的效果越好。由此可以定義評(píng)估模型效果的指標(biāo)——準(zhǔn)確度(accurary苟翻,ACC)韵卤。
準(zhǔn)確度這個(gè)指標(biāo)看似很合理,但面對(duì)非均衡數(shù)據(jù)集時(shí)崇猫,這個(gè)指標(biāo)會(huì)嚴(yán)重失真沈条,甚至變得毫無意義。來看下面這個(gè)例子:數(shù)據(jù)集里有1000個(gè)數(shù)據(jù)點(diǎn)诅炉,其中990個(gè)為類別0蜡歹,而剩下的10個(gè)為類別1,如圖1所示涕烧。
模型A對(duì)所有數(shù)據(jù)的預(yù)測都是類別0月而,因此這個(gè)模型其實(shí)并沒有提供什么預(yù)測功能。但它的準(zhǔn)確度卻高達(dá)99%议纯。模型B的預(yù)測效果其實(shí)很不錯(cuò):對(duì)于類別1父款,10個(gè)數(shù)據(jù)里有9個(gè)預(yù)測正確;而對(duì)于類別0瞻凤,990個(gè)數(shù)據(jù)里有900個(gè)預(yù)測正確憨攒,但它的準(zhǔn)確度只有90.9%遠(yuǎn)低于模型A。
這就是所謂的準(zhǔn)確度悖論:面對(duì)非均衡數(shù)據(jù)集時(shí)阀参,準(zhǔn)確度這個(gè)評(píng)估指標(biāo)會(huì)使模型嚴(yán)重偏向占比更多的類別浓恶,導(dǎo)致模型的預(yù)測功能失效。這也是之前文章(分類模型的評(píng)估(一))討論模型評(píng)估時(shí)结笨,我們并沒有介紹準(zhǔn)確度這個(gè)指標(biāo)的原因包晰。事實(shí)上湿镀,分類模型的評(píng)估(二)里討論的AUC(曲線下面積)在面對(duì)非均衡數(shù)據(jù)集時(shí),也能保持穩(wěn)定伐憾,不會(huì)發(fā)生如準(zhǔn)確度悖論這樣的失真勉痴。
二、一個(gè)例子
非均衡數(shù)據(jù)集除了會(huì)引起準(zhǔn)確度悖論外树肃,它對(duì)搭建模型有什么影響呢蒸矛?下面通過一個(gè)簡單的例子來說明這個(gè)問題。我們按公式(2)產(chǎn)生模型數(shù)據(jù)胸嘴,其中變量為因變量雏掠;
為自變量;
為隨機(jī)擾動(dòng)項(xiàng)劣像,它服從邏輯分布乡话。
由此可見,產(chǎn)生的模型數(shù)據(jù)完美地符合邏輯回歸模型的假設(shè)耳奕。因此使用邏輯回歸對(duì)數(shù)據(jù)建模绑青,得到結(jié)果按理說應(yīng)該非常好。但事實(shí)上屋群,當(dāng)數(shù)據(jù)集是均衡時(shí)闸婴,也就是說類別1所占比例大約為0.5時(shí),模型效果是還不錯(cuò)芍躏。但當(dāng)類別1所占比例接近0時(shí)邪乍,也就是數(shù)據(jù)集是非均衡時(shí),模型的效果就很差了对竣。雖然數(shù)據(jù)集里類別1的個(gè)數(shù)不變庇楞,但模型的預(yù)測結(jié)果幾乎都是類別0,如圖2a所示柏肪。正如上面討論的那樣,ACC這個(gè)指標(biāo)在非均衡數(shù)據(jù)集里會(huì)失真芥牌,而AUC則可以保持穩(wěn)定烦味,能正確衡量模型的好壞,如圖2b所示壁拉。
上面的例子從直觀上展示了非均衡數(shù)據(jù)集對(duì)搭建模型的影響谬俄。那么造成這種結(jié)果的原因是什么呢?從數(shù)學(xué)角度來講弃理,邏輯回歸參數(shù)的估算公式如下:(懲罰項(xiàng)并不影響這里的討論溃论,因此我們?cè)诖耸÷缘魬土P項(xiàng)。)
在這個(gè)公式里痘昌,每個(gè)數(shù)據(jù)點(diǎn)的權(quán)重都是一樣的钥勋,都為1炬转。也就是說,模型對(duì)于類別1所承受的損失為:算灸。這個(gè)值幾乎等于模型對(duì)于類別0所承受的損失:
扼劈。如果某一類別的數(shù)據(jù)特別多,不妨假定為類別0菲驴,那么在類別1某點(diǎn)的附件荐吵,極有可能存在大量的類別0。在這種情況下赊瞬,根據(jù)公式(3)先煎,模型會(huì)選擇“犧牲”類別1,從而導(dǎo)致預(yù)測結(jié)果幾乎都為類別0巧涧。
上面的結(jié)論并不只針對(duì)邏輯回歸這個(gè)分類模型薯蝎,對(duì)于其他分類模型,也同樣成立褒侧。
三良风、解決方法
針對(duì)非均衡數(shù)據(jù)集,最常見也是最方便的解決方案是修改損失函數(shù)里不同類別的權(quán)重闷供。以邏輯回歸為例烟央,將它的損失函數(shù)改寫為公式(4)。
當(dāng)類別1所占比例很少時(shí)歪脏,則增加疑俭,也就是增加模型對(duì)于類別1所承受的損失,反之亦然婿失。在大多數(shù)情況下钞艇,類別權(quán)重的選擇原則是,類別權(quán)重等于類別所占比例的倒數(shù)豪硅,如程序清單1中第7哩照、8行代碼所示。經(jīng)過權(quán)重調(diào)整后懒浮,訓(xùn)練模型的數(shù)據(jù)集相當(dāng)于回到了均衡狀態(tài)飘弧。權(quán)重調(diào)整的代碼非常簡單,如第10行代碼所示砚著,通過“class_weight”參數(shù)調(diào)整各個(gè)類別的權(quán)重。事實(shí)上稽穆,“class_weight”也可以被賦值為“balanced”,即“class_weight= 'balanced'”柱彻,這時(shí)模型會(huì)自動(dòng)調(diào)整各個(gè)類別的權(quán)重豪娜。
程序清單1 非平衡數(shù)據(jù)集
1 | from sklearn.linear_model import LogisticRegression
2 |
3 | def balanceData(X, Y):
4 | """
5 | 通過調(diào)整各個(gè)類別的比重,解決非均衡數(shù)據(jù)集的問題
6 | """
7 | positiveWeight = len(Y[Y>0]) / float(len(Y))
8 | classWeight = {1: 1. / positiveWeight, 0: 1. / (1 - positiveWeight)}
9 | # 為了消除懲罰項(xiàng)的干擾绒疗,將懲罰系數(shù)設(shè)為很大
10 | model = LogisticRegression(class_weight=classWeight, C=1e4)
11 | model.fit(X, Y.ravel())
12 | pred = model.predict(X)
13 | return pred
經(jīng)過權(quán)重調(diào)整后,模型的結(jié)果如圖3所示惕虑。在處理非均衡數(shù)據(jù)集時(shí),調(diào)整權(quán)重后的模型會(huì)錯(cuò)誤地將很多類別0的數(shù)據(jù)預(yù)測為類別1磨镶。這與我們之前在上一節(jié)里的分析是一致的:類別1的權(quán)重增加后溃蔫,模型會(huì)因“刻意地珍惜”類別1,而選擇“犧牲”類別0琳猫。盡管如此,調(diào)整之后的整體效果明顯優(yōu)于調(diào)整之前的(調(diào)整之后的AUC更大)统刮。值得注意的是,ACC和AUC這兩個(gè)評(píng)估指標(biāo)幾乎相等侥蒙,所以圖形上它們兩者重疊在了一起匀奏。
對(duì)于非均衡數(shù)據(jù)集,還有一些其他的解決方法娃善,比如通過重新抽樣(sampling),把多的類別變少或把少的類別變多坯台。具體的細(xì)節(jié)在此就不做展開討論了瘫寝。
四、廣告時(shí)間
這篇文章的大部分內(nèi)容參考自我的新書《精通數(shù)據(jù)科學(xué):從線性回歸到深度學(xué)習(xí)》滥搭。
李國杰院士和韓家煒教授在讀過此書后捣鲸,親自為其作序闽坡,歡迎大家購買愁溜。
另外外厂,與之相關(guān)的免費(fèi)視頻課程請(qǐng)關(guān)注這個(gè)鏈接