機(jī)器學(xué)習(xí)作為一門(mén)科學(xué),不可避免的是,科學(xué)本身是基于歸納得到經(jīng)驗(yàn)總結(jié),必然存在歷史經(jīng)驗(yàn)不適用未來(lái)的情況(科學(xué)必可證偽)。這里很應(yīng)景地講一個(gè)小故事--By 哲學(xué)家羅素:
(資料圖片僅供參考)
農(nóng)場(chǎng)有一群火雞,農(nóng)夫每天來(lái)給它們喂食。經(jīng)過(guò)長(zhǎng)期觀察后,一只火雞(火雞中的科學(xué)雞)得出結(jié)論,“每天早上農(nóng)夫來(lái)到雞舍,我就有吃的”,之后每天的經(jīng)歷都在證實(shí)它的這個(gè)結(jié)論。但是有一天,農(nóng)夫來(lái)到雞舍,沒(méi)有帶來(lái)食物而是把它烤了,因?yàn)檫@天是圣誕節(jié),做成了圣誕節(jié)火雞。
通過(guò)有限的觀察,得出自以為正確的規(guī)律性結(jié)論的,結(jié)局如是此。以這角度,我們?nèi)タ碅I/機(jī)器學(xué)習(xí)的應(yīng)用,也能看到很多類似的例子。
機(jī)器學(xué)習(xí)是研究怎樣使用計(jì)算機(jī)模擬或?qū)崿F(xiàn)人類學(xué)習(xí)活動(dòng)的科學(xué),是基于一系列假設(shè)(基本的如,獨(dú)立同分布假設(shè))歸納得到經(jīng)驗(yàn),進(jìn)行預(yù)測(cè)的過(guò)程。
也不可避免的,機(jī)器學(xué)習(xí)中也可能出現(xiàn)預(yù)測(cè)的數(shù)據(jù)與訓(xùn)練數(shù)據(jù)不滿足同分布,歷史數(shù)據(jù)經(jīng)驗(yàn)不那么適用了!導(dǎo)致預(yù)測(cè)效果變差或失效的情況。這就類似我們考試的時(shí)候,發(fā)現(xiàn)這類型的題目我沒(méi)有見(jiàn)過(guò),歇菜了...
一、什么是數(shù)據(jù)不滿足同分布
實(shí)際預(yù)測(cè)與訓(xùn)練數(shù)據(jù)不滿足同分布的問(wèn)題,也就是數(shù)據(jù)集偏移(Dataset shift),是機(jī)器學(xué)習(xí)一個(gè)很重要的問(wèn)題。
從貝葉斯定理可得P(y,x) = P(y|x) * P(x) = P(x|y) * P(y),當(dāng)輸入空間的邊緣概率分布P(x) , 輸出空間的標(biāo)簽分布P(y) 以及表示該機(jī)器學(xué)習(xí)任務(wù)的條件概率分布 P(y|x) 之中,有任一項(xiàng)因素發(fā)生偏移導(dǎo)致訓(xùn)練數(shù)據(jù)與預(yù)測(cè)數(shù)據(jù) P(y,x)造成差異,即為數(shù)據(jù)集偏移現(xiàn)象。
不同因素對(duì)應(yīng)著如下三種情況得數(shù)據(jù)偏移:
Covariate shift:協(xié)變量偏移(統(tǒng)計(jì)學(xué)中的協(xié)變量即機(jī)器學(xué)習(xí)中的特征的概念), 指的是輸入空間的邊緣概率分布P(x),也就輸入特征x分布變化導(dǎo)致的偏移。這個(gè)應(yīng)該是最為常見(jiàn)的,比如圖像識(shí)別任務(wù)中,訓(xùn)練時(shí)輸入的人臉圖像數(shù)據(jù)沒(méi)戴口罩,而預(yù)測(cè)的時(shí)候出現(xiàn)了很多戴口罩人臉的圖像。再如反欺詐識(shí)別中,實(shí)際預(yù)測(cè)欺詐用戶的欺詐行為發(fā)生升級(jí)改變,與訓(xùn)練數(shù)據(jù)的行為特征有差異的情況。
Prior probability shift:先驗(yàn)偏移,指的是標(biāo)簽分布P(Y) 差異導(dǎo)致的。比如反欺詐識(shí)別中,線上某段時(shí)間欺詐用戶的比例 對(duì)比 訓(xùn)練數(shù)據(jù) 突然變得很大的情況。
Concept shift:映射關(guān)系偏移,指P(y|x) 分布變化,也就是x-> y的映射關(guān)系發(fā)生變化。比如農(nóng)場(chǎng)的火雞,本來(lái)x是【 早上/農(nóng)夫/來(lái)到/雞舍】對(duì)應(yīng)著 y是【火雞被喂食】,但是圣誕節(jié)那天這層關(guān)系突然變了,x還是【 早上/農(nóng)夫/來(lái)到/雞舍】但對(duì)應(yīng)著 y是【火雞被烤了】..hah,留下心疼的口水..
二、為什么數(shù)據(jù)不滿足同分布
可能導(dǎo)致數(shù)據(jù)不滿足同分布的兩個(gè)常見(jiàn)的原因是:
(1)樣本選擇偏差(Sample Selection Bias) :分布上的差異是由于訓(xùn)練數(shù)據(jù)是通過(guò)有偏見(jiàn)的方法獲得的。
比如金融領(lǐng)域的信貸客群是通過(guò)某種渠道/規(guī)則獲得的,后面我們新增加營(yíng)銷渠道獲客 或者 放寬了客戶準(zhǔn)入規(guī)則。這樣就會(huì)直接導(dǎo)致實(shí)際客群樣本比歷史訓(xùn)練時(shí)點(diǎn)的客群樣本更加多樣了(分布差異)。
(2)不平穩(wěn)環(huán)境(Non-stationary Environments):由于時(shí)間上的或空間上的變化導(dǎo)致訓(xùn)練與測(cè)試環(huán)境不同。
比如金融領(lǐng)域,預(yù)測(cè)用戶是否會(huì)償還貸款的任務(wù)。有一小類用戶在經(jīng)濟(jì)環(huán)境好的時(shí)候有能力償還債務(wù),但是由于疫情或其他的影響,宏觀經(jīng)濟(jì)環(huán)境不太景氣,如今就無(wú)法償還了。
三、如何檢測(cè)數(shù)據(jù)滿足同分布
可能我們模型在訓(xùn)練、驗(yàn)證及測(cè)試集表現(xiàn)都不錯(cuò),但一到OOT(時(shí)間外樣本)或者線上預(yù)測(cè)的時(shí)候,效果就掉下來(lái)了。這時(shí)我們就不能簡(jiǎn)單說(shuō)是模型復(fù)雜導(dǎo)致過(guò)擬合了,也有可能是預(yù)測(cè)數(shù)據(jù)的分布變化導(dǎo)致的效果變差。我們可以通過(guò)如下常用方式檢測(cè)數(shù)據(jù)分布有沒(méi)有變化:
3.1 統(tǒng)計(jì)指標(biāo)的方法
通過(guò)統(tǒng)計(jì)指標(biāo)去檢測(cè)分布差異是很直接的,我們通常用群體穩(wěn)定性指標(biāo)(Population Stability Index,PSI), 衡量未來(lái)的樣本(如測(cè)試集)及訓(xùn)練樣本評(píng)分的分布比例是否保持一致,以評(píng)估數(shù)據(jù)/模型的穩(wěn)定性(按照經(jīng)驗(yàn)值,PSI<0.1分布差異是比較小的。)。同理,PSI也可以細(xì)化衡量特征值的分布差異,評(píng)估數(shù)據(jù)特征層面的穩(wěn)定性。PSI指標(biāo)計(jì)算公式為 SUM(各分?jǐn)?shù)段的 (實(shí)際占比 - 預(yù)期占比)* ln(實(shí)際占比 / 預(yù)期占比) ),介紹可見(jiàn):指標(biāo)。其他的方法如 KS檢驗(yàn),KDE (核密度估計(jì))分布圖等方法可見(jiàn)參考鏈接[2]
3.2 異常(新穎)點(diǎn)檢測(cè)的方法
可以通過(guò)訓(xùn)練數(shù)據(jù)集訓(xùn)練一個(gè)模型(如 oneclass-SVM),利用模型判定哪些數(shù)據(jù)樣本的不同于訓(xùn)練集分布(異常概率)。異常檢測(cè)方法可見(jiàn):異常檢測(cè)算法速覽
3.3 分類的方法
混合訓(xùn)練數(shù)據(jù)與測(cè)試數(shù)據(jù)(測(cè)試數(shù)據(jù)可得情況),將訓(xùn)練數(shù)據(jù)與測(cè)試數(shù)據(jù)分別標(biāo)注為’1‘和’0‘標(biāo)簽,進(jìn)行分類,若一個(gè)模型,可以以一個(gè)較好的精度將訓(xùn)練實(shí)例與測(cè)試實(shí)例區(qū)分開(kāi),說(shuō)明訓(xùn)練數(shù)據(jù)與測(cè)試數(shù)據(jù)的特征值分布有較大差異,存在協(xié)變量偏移。
相應(yīng)的對(duì)這個(gè)分類模型貢獻(xiàn)度比較高的特征,也就是分布偏差比較大的特征。分類較準(zhǔn)確的樣本(簡(jiǎn)單樣本)也就是分布偏差比較大的樣本。
四、如何解決數(shù)據(jù)不滿足同分布4.1 增加數(shù)據(jù)
增加數(shù)據(jù)是王道,訓(xùn)練數(shù)據(jù)只要足夠大,什么場(chǎng)面沒(méi)見(jiàn)過(guò),測(cè)試數(shù)據(jù)的效果自然也可以保證。
如上面的例子,作為一只農(nóng)場(chǎng)中的科學(xué)雞,如果觀察到完整周期、全場(chǎng)景的數(shù)據(jù),或者被灌輸一些先驗(yàn)知識(shí),就能更為準(zhǔn)確預(yù)測(cè)火雞的命運(yùn)。
但是現(xiàn)實(shí)情況可能多少比較無(wú)奈,可能業(yè)務(wù)場(chǎng)景的原因限制,并不一定可以搞得到更多數(shù)據(jù),諸如聯(lián)邦學(xué)習(xí)、數(shù)據(jù)增強(qiáng)等方法也是同樣的思路。
4.2 數(shù)據(jù)增強(qiáng)
在現(xiàn)實(shí)情況沒(méi)法新增數(shù)據(jù)的時(shí)候,數(shù)據(jù)增強(qiáng)(Data Augmentation)是一個(gè)備選方案,在不實(shí)質(zhì)性的增加數(shù)據(jù)的情況下,從原始數(shù)據(jù)加工出更多的表示,提高原數(shù)據(jù)的數(shù)量及質(zhì)量,以接近于更多數(shù)據(jù)量產(chǎn)生的價(jià)值。
其原理是通過(guò)對(duì)原始數(shù)據(jù)融入先驗(yàn)知識(shí),加工出更多數(shù)據(jù)的表示,有助于模型判別數(shù)據(jù)中統(tǒng)計(jì)噪聲,加強(qiáng)本體特征的學(xué)習(xí),減少模型過(guò)擬合,提升泛化能力。具體可見(jiàn):數(shù)據(jù)增強(qiáng)方法
4.3 選擇數(shù)據(jù)
我們可以選擇和待預(yù)測(cè)樣本分布比較一致的數(shù)據(jù)做模型訓(xùn)練,使得在待預(yù)測(cè)樣本的效果變得更好。
這個(gè)方法看起來(lái)有點(diǎn)投機(jī),這在一些數(shù)據(jù)波動(dòng)大的數(shù)據(jù)競(jìng)賽中很經(jīng)常出現(xiàn),直接用全量訓(xùn)練樣本的結(jié)果不一定會(huì)好,而我們更改下數(shù)據(jù)集劃分split的隨機(jī)種子(如暴力for循環(huán)遍歷一遍各個(gè)隨機(jī)種子的效果),或者 人工選擇與線上待預(yù)測(cè)樣本業(yè)務(wù)類型、 時(shí)間相近的樣本集用于訓(xùn)練模型(或者 提高這部分樣本的學(xué)習(xí)權(quán)重),線上數(shù)據(jù)的預(yù)測(cè)效果就提升了。
4.4 半監(jiān)督學(xué)習(xí)
半監(jiān)督學(xué)習(xí)是介于傳統(tǒng)監(jiān)督學(xué)習(xí)和無(wú)監(jiān)督學(xué)習(xí)之間,其思想是通過(guò)在模型訓(xùn)練中直接引入無(wú)標(biāo)記樣本,以充分捕捉數(shù)據(jù)整體潛在分布,以改善如傳統(tǒng)無(wú)監(jiān)督學(xué)習(xí)過(guò)程盲目性、監(jiān)督學(xué)習(xí)在訓(xùn)練樣本不足導(dǎo)致的學(xué)習(xí)效果不佳的問(wèn)題。
通過(guò)半監(jiān)督學(xué)習(xí),訓(xùn)練時(shí)候可以充分捕捉數(shù)據(jù)整體潛在分布,同理也可以緩解預(yù)測(cè)數(shù)據(jù)分布有差異的問(wèn)題。半監(jiān)督分類常用的做法是,通過(guò)業(yè)務(wù)含義或者模型選擇出一些雖然無(wú)標(biāo)簽的樣本,并打上大概率的某個(gè)標(biāo)簽(偽標(biāo)簽)加入到訓(xùn)練數(shù)據(jù)中,驗(yàn)證待預(yù)測(cè)樣本的效果有沒(méi)有變好。
經(jīng)典的如金融信貸領(lǐng)域的拒絕推斷方法(參考鏈接[6]),我們可以從貸款被拒絕的用戶中(這部分用戶是貸款的時(shí)候直接被拒絕了,沒(méi)有"是否違約"的標(biāo)簽),通過(guò)現(xiàn)有信貸違約模型(申請(qǐng)?jiān)u分卡)預(yù)測(cè)這部分拒絕用戶的違約概率,并把模型認(rèn)為大概率違約的用戶作為壞樣本加入到訓(xùn)練樣本中,以提升模型的泛化效果。
4.5 特征選擇
對(duì)于常見(jiàn)的協(xié)變量偏移,用特征選擇是一個(gè)不錯(cuò)的方法。我們可以分析各個(gè)特征在分布穩(wěn)定性(如PSI值)的情況,篩選掉分布差異比較大的特征。需要注意的是,這里適用的是篩掉特征重要性一般且穩(wěn)定性差的特征。如果重要特征的分布差距也很大,這就難搞了,還是回頭搞搞數(shù)據(jù)或者整整其他的強(qiáng)特征。特征選擇方法可見(jiàn):python特征選擇
4.6 均衡學(xué)習(xí)
均衡學(xué)習(xí)適用與標(biāo)簽分布差異(先驗(yàn)偏移)導(dǎo)致的數(shù)據(jù)集偏移。均衡學(xué)習(xí)的方法可以歸結(jié)為:通過(guò)某種方法,使得不同類別的樣本對(duì)于模型學(xué)習(xí)中的Loss(或梯度)貢獻(xiàn)是比較均衡的,以消除模型對(duì)不同類別的偏向性,學(xué)習(xí)到更為本質(zhì)的決策。
比如原反欺詐訓(xùn)練樣本中,好壞樣本的比例是1000:1,但到了預(yù)測(cè),有時(shí)實(shí)際的好壞樣本的比例是10:1。這時(shí)如果沒(méi)有通過(guò)均衡學(xué)習(xí),直接從訓(xùn)練樣本學(xué)習(xí)到模型,會(huì)先天認(rèn)為欺詐壞樣本的概率就是很低的,導(dǎo)致很多欺詐壞樣本的漏判。
不均衡的任務(wù)中,一方面可以通過(guò)代價(jià)敏感、采樣等方法做均衡學(xué)習(xí);另一方面也可以通過(guò)合適指標(biāo)(如AUC),減少非均衡樣本的影響去判定模型的效果。具體可見(jiàn):一文解決樣本不均衡(全)
最后,機(jī)器學(xué)習(xí)是一門(mén)注重實(shí)踐的科學(xué),在實(shí)踐中驗(yàn)證效果,不斷探索原理。
僅以此文致敬我們的數(shù)據(jù)科學(xué)雞啊。
參考鏈接:
1、理解數(shù)據(jù)集偏移 https://zhuanlan.zhihu.com/p/449101154
2、訓(xùn)練/測(cè)試集分布不一致解法總結(jié)
3、訓(xùn)練集和測(cè)試集的分布差距太大有好的處理方法嗎 https://www.zhihu.com/question/265829982/answer/1770310534
4、訓(xùn)練集與測(cè)試集之間的數(shù)據(jù)偏移(dataset shift or drifting) https://zhuanlan.zhihu.com/p/304018288
5、數(shù)據(jù)集偏移&領(lǐng)域偏移 Dataset Shift&Domain Shift https://zhuanlan.zhihu.com/p/195704051
6、如何量化樣本偏差對(duì)信貸風(fēng)控模型的影響?https://zhuanlan.zhihu.com/p/350616539
-推薦閱讀-
深度學(xué)習(xí)系列
1、一文概覽神經(jīng)網(wǎng)絡(luò)模型2、一文搞定深度學(xué)習(xí)建模預(yù)測(cè)全流程(Python)3、一文弄懂CNN及圖像識(shí)別(Python)機(jī)器學(xué)習(xí)系列1、一文解決樣本不均衡(全)2、一文全覽機(jī)器學(xué)習(xí)建模流程(Python代碼)3、一文速覽機(jī)器學(xué)習(xí)的類別(Python代碼)...更多原創(chuàng)文章,請(qǐng)關(guān)注個(gè)人博客:https://github.com/aialgorithm/Blog關(guān)注【算法進(jìn)階】領(lǐng)福利回復(fù)【課程】:即可免費(fèi)領(lǐng)取Python、機(jī)器學(xué)習(xí)、AI 等精品課程資料大全回復(fù)【加群】:可提問(wèn)咨詢、共享資源...與群內(nèi)伙伴一起交流,共同進(jìn)步或掃碼,備注“加群”
關(guān)鍵詞: