文章目錄[隱藏]
在進行數據挖掘的過程中,理解和清洗數據是最耗費時間的事情。你應該知道數據是如何產(chan) 生的,哪些特征對業(ye) 務有影響,隻有這樣你才能給出最好的數據結果。
在本文中,我們(men) 將介紹缺失值的產(chan) 生原因和缺失值具體(ti) 的處理方法。
問題1:為什麽有缺失值?
現實世界中的數據在大多數情況下都有很多缺失的數據。每個(ge) 值丟(diu) 失的原因可能不同。可能有數據丟(diu) 失或損壞,或者也可能有特定原因。
缺失值產生的原因
數據丟(diu) 失背後的一些可能原因(產(chan) 生過程、傳(chuan) 輸過程、存儲(chu) 過程):
- 人們不會在數據收集調查中提供有關某些問題的信息。
- 數據是從各種可用的過去記錄中積累的,而不是直接積累的。
- 數據收集過程中的不準確也會導致數據丟失。
缺失值類型
數據丟(diu) 失的原因多種多樣,但整體(ti) 可以將它們(men) 分為(wei) 三個(ge) 主要組:完全隨機丟(diu) 失、隨機丟(diu) 失、不隨機丟(diu) 失。
完全隨機缺失 (MCAR)
-
現象:缺失的數據不遵循任何特定模式,它們(men) 隻是隨機的。
-
特點:不可能用其餘(yu) 的變量數據來預測這些值,數據的缺失與(yu) 其餘(yu) 變量無關(guan) 或獨立。
-
案例:如在數據收集過程中,由於(yu) 粗心大意丟(diu) 失了特定樣本
隨機丟失 (MAR)
-
現象:數據在特定子集中丟(diu) 失
-
特點:可以借助其他功能來預測數據是否存在/不存在,無法自己預測丟(diu) 失的數據。
-
案例:如在數據收集過程中,有一些默認選項,可以不做填寫(xie)
不隨機丟失 (NMAR)
-
現象:確實的數據遵循某種模式,且與(yu) 數據樣本相關(guan) 。
-
特點:刪除行/列、插補等常用方法將不起作用,缺失的數據與(yu) 字段相關(guan) 。
-
案例:如在數據收集中,采集者根據字段來選擇填寫(xie) 某些字段。
問題2:如何分析缺失值?
在Pandas中可以很方便的使用isnull函數來計算是否包含缺失值。
missing_values=train.isnull().sum()
同時也可以使用missingno庫來查看缺失值的分布規律:
- bar:統計每列缺失值的次數
- matrix:統計缺失值和行數分布規律
- heatmap:統計列缺失值的相關性
- dendrogram:統計列確實的組合性
問題3:缺失值需要處理嗎?
處理缺失值可以從(cong) 兩(liang) 個(ge) 角度考慮:
- 從數據角度:如果某列的缺失比例大於某一閾值(如大於90%),則可以考慮剔除列;類似的對行的角度也可以這樣操作。
- 從模型角度:如果使用樹模型則不用考慮處理,其他模型則需要進行填充或者剔除。
問題4:缺失值如何填充?
使用值填充
使用特殊值填充是最簡單的填充方法,主要的優(you) 勢是速度,可能會(hui) 帶來一定的噪音。
- 數值列:中位數、中位數、特殊值
- 類別列:眾數、特殊值
最近鄰樣本填充
如果數據集的行按照日期維度進行組織,則可以考慮使用時序信息完成填充:
- 向前填充
- 向後填充
- 前後填充
如果數據集的行沒有時序信息,使用KNN模型可以選擇最近鄰的樣本,然後從(cong) 樣本的維度完成填充。
使用模型預測
數據樣本各列之間存在聯係,此時可以從(cong) 列與(yu) 列的關(guan) 係完成缺失值填充。
- 使用回歸/分類模型預測列:使用其他列作為特征,待填充列作為標簽;
- 使用自編碼器預測缺失值:使用缺失數據作為輸入,完整數據作為標簽,完成自監督訓練。
評論已經被關(guan) 閉。