Kaggle知識點:缺失值處理方法
本文轉(zhuǎn)載自:Coggle數(shù)據(jù)科學(xué) 公眾號
在進(jìn)行數(shù)據(jù)挖掘的過程中,理解和清洗數(shù)據(jù)是最耗費時間的事情。你應(yīng)該知道數(shù)據(jù)是如何產(chǎn)生的,哪些特征對業(yè)務(wù)有影響,只有這樣你才能給出最好的數(shù)據(jù)結(jié)果。
在本文中,我們將介紹缺失值的產(chǎn)生原因和缺失值具體的處理方法。
問題1:為什么有缺失值?
現(xiàn)實世界中的數(shù)據(jù)在大多數(shù)情況下都有很多缺失的數(shù)據(jù)。每個值丟失的原因可能不同??赡苡袛?shù)據(jù)丟失或損壞,或者也可能有特定原因。
缺失值產(chǎn)生的原因
數(shù)據(jù)丟失背后的一些可能原因(產(chǎn)生過程、傳輸過程、存儲過程):
人們不會在數(shù)據(jù)收集調(diào)查中提供有關(guān)某些問題的信息。
數(shù)據(jù)是從各種可用的過去記錄中積累的,而不是直接積累的。
數(shù)據(jù)收集過程中的不準(zhǔn)確也會導(dǎo)致數(shù)據(jù)丟失。
缺失值類型
數(shù)據(jù)丟失的原因多種多樣,但整體可以將它們分為三個主要組:完全隨機(jī)丟失、隨機(jī)丟失、不隨機(jī)丟失。
完全隨機(jī)缺失 (MCAR)
現(xiàn)象:缺失的數(shù)據(jù)不遵循任何特定模式,它們只是隨機(jī)的。
特點:不可能用其余的變量數(shù)據(jù)來預(yù)測這些值,數(shù)據(jù)的缺失與其余變量無關(guān)或獨立。
案例:如在數(shù)據(jù)收集過程中,由于粗心大意丟失了特定樣本
隨機(jī)丟失 (MAR)
現(xiàn)象:數(shù)據(jù)在特定子集中丟失
特點:可以借助其他功能來預(yù)測數(shù)據(jù)是否存在/不存在,無法自己預(yù)測丟失的數(shù)據(jù)。
案例:如在數(shù)據(jù)收集過程中,有一些默認(rèn)選項,可以不做填寫
不隨機(jī)丟失 (NMAR)
現(xiàn)象:確實的數(shù)據(jù)遵循某種模式,且與數(shù)據(jù)樣本相關(guān)。
特點:刪除行/列、插補(bǔ)等常用方法將不起作用,缺失的數(shù)據(jù)與字段相關(guān)。
案例:如在數(shù)據(jù)收集中,采集者根據(jù)字段來選擇填寫某些字段。
問題2:如何分析缺失值?
在Pandas中可以很方便的使用isnull
函數(shù)來計算是否包含缺失值。
missing_values=train.isnull().sum()
同時也可以使用missingno
庫來查看缺失值的分布規(guī)律:
bar
:統(tǒng)計每列缺失值的次數(shù)matrix
:統(tǒng)計缺失值和行數(shù)分布規(guī)律heatmap
:統(tǒng)計列缺失值的相關(guān)性dendrogram
:統(tǒng)計列確實的組合性
問題3:缺失值需要處理嗎?
處理缺失值可以從兩個角度考慮:
從數(shù)據(jù)角度
:如果某列的缺失比例大于某一閾值(如大于90%),則可以考慮剔除列;類似的對行的角度也可以這樣操作。從模型角度
:如果使用樹模型則不用考慮處理,其他模型則需要進(jìn)行填充或者剔除。
問題4:缺失值如何填充?
使用值填充
使用特殊值填充是最簡單的填充方法,主要的優(yōu)勢是速度,可能會帶來一定的噪音。
數(shù)值列:中位數(shù)、中位數(shù)、特殊值
類別列:眾數(shù)、特殊值
最近鄰樣本填充
如果數(shù)據(jù)集的行按照日期維度進(jìn)行組織,則可以考慮使用時序信息完成填充:
向前填充
向后填充
前后填充
如果數(shù)據(jù)集的行沒有時序信息,使用KNN模型可以選擇最近鄰的樣本,然后從樣本的維度完成填充。
使用模型預(yù)測
數(shù)據(jù)樣本各列之間存在聯(lián)系,此時可以從列與列的關(guān)系完成缺失值填充。
使用回歸/分類模型預(yù)測列:使用其他列作為特征,待填充列作為標(biāo)簽;
使用自編碼器預(yù)測缺失值:使用缺失數(shù)據(jù)作為輸入,完整數(shù)據(jù)作為標(biāo)簽,完成自監(jiān)督訓(xùn)練。

免責(zé)聲明:所載內(nèi)容來源互聯(lián)網(wǎng),僅供參考。轉(zhuǎn)載稿件版權(quán)歸原作者和機(jī)構(gòu)所有,如有侵權(quán),請聯(lián)系我們刪除。