圖片來源: thermofisher
數據集缺少值? 讓我們學習如何處理:
數據清理/探索性數據分析階段的主要問題之一是處理缺失值。 缺失值表示未在觀察值中作為變量存儲的數據值。 這個問題在幾乎所有研究中都是常見的,並且可能對可從數據得出的結論產生重大影響。
查看數據中的缺失值,您的第一項工作是基於3種缺失值機制來識別缺失模式:
MCAR(完全隨機丟失):如果數據的缺失與任何值(觀察或缺失)之間沒有關係,則為MCAR。MAR(半隨機丟失):您必須考慮MAR與MCAR有何不同, 如果缺失和觀測值之間存在系統關係,則為MAR。 例如-男性比女性更容易告訴您自己的體重,因此體重就是MAR。 「 Weight」變量的缺失取決於變量「 Sex」的觀測值。MNAR(不隨機丟失):如果2個或更多變量的缺失具有相同模式,則為MNAR。您可以可視化數據來驗證完整性(使用Python代碼):
您可以可視化數據集中缺失的位置(使用Python代碼):
在可視化中,您可以檢查缺失是MCAR,MAR還是MNAR。
如果兩個或多個變量中的缺失具有相同的模式,則為MNAR。 您可以使用一個變量對數據進行排序(並可視化),並可以確定它是否完全是MNAR。例如 「住房」和「貸款」變量的缺失模式相同。如果任何兩個或多個變量的缺失之間沒有關係,並且一個變量的缺失值和另一個變量的觀測值之間也沒有關係,則這就是MCAR。如果缺失和觀測值之間存在系統關係,則為MAR。 我們將在下面學習如何識別缺失值是MAR。您可以按照以下兩種方法檢查缺失值:
缺失熱圖/相關圖:此方法創建列/變量之間的缺失值的相關圖。 它解釋了列之間缺失的依賴性。
它顯示了變量「房屋」和「貸款」的缺失之間的相關性。
缺失樹狀圖:缺失樹狀圖是缺失值的樹形圖。 它通過對變量進行分組來描述它們之間的相關性。
它表明變量「住房」和「貸款」高度相關,這就是MNAR。從「 age_group」到「 contact」的變量在「 0」級別彼此關聯,並充分預測彼此的存在。 或者,您可以說此部分沒有缺失的值。其餘變量的缺失是MAR或MCAR。 要檢查這一點,我們可以使用2種方法:方法1:
可視化變量的缺失如何相對於另一個變量變化。通過使用兩個變量的散點圖,我們可以檢查兩個變量之間的關係是否缺失。
x軸變量的缺失值分布在y軸的整個其他變量中。 因此,我們可以說沒有關係。 缺失值是MCAR。 如果您沒有在散點圖中找到任何關係,則可以說變量中的缺失是「隨機缺失」。方法2:
然後,您可以在此變量與數據集中的其他變量之間運行t檢驗和卡方檢驗,以查看此變量的缺失是否與其他變量的值有關。例如,如果女性相比男性確實不太可能告訴您自己的體重,則卡方檢驗會告訴您,女性在體重變量上缺失數據的百分比比男性高。現在,我們已經確定了缺失值的性質。 讓我們學習如何處理缺失的值:
Listwise刪除:如果缺少的值非常少,則可以使用Listwise刪除方法。 如果缺少分析中所包含的變量的值,按列表刪除方法將完全刪除個案。
成對刪除:成對刪除不會完全忽略分析中的案例。 當統計過程使用包含某些缺失數據的案例時,將發生成對刪除。 該過程不能包含特定變量,但是當分析具有非缺失值的其他變量時,該過程仍然實用。 例如,假設有3個變量:A,B和C。變量A包含缺失值。 但這不會阻止某些統計過程使用相同的情況來分析變量B和C。成對刪除允許您使用更多數據。 它試圖使Listwise刪除中發生的損失最小化。
兩種技術均假定缺失模式為MCAR(隨機完全缺失)。 當缺失值小於5%且缺失完全是隨機的並且不取決於觀察值或未觀察值時,可以使用上述技術。
缺失價值估算-基本估算技術:
均值| 中位數| 模式| 常數(例如:「 0」)
均值插補:均值插補是一種方法,將某個變量的缺失值替換為可用觀察值的均值。 這種方法有助於保持樣本數量,但由於所有缺失值都具有相同的「均值」,因此數據的可變性有所降低。
您可以採用相同的方式應用中位數:「 strategy =」 median」您可以採用相同方式應用模式:「 strategy =」 most_frequent」同樣,您可以估算一個常數:('strategy ='constant',fill_value = 0)在估算之前,我們已經複製了「 df」數據集,目的只是為了與原始數據集進行比較。歸因散點圖:
您會發現,根據散點圖,兩個變量之間存在很強的相關性,但是「紅色」顏色的估算值是一條直線,沒有考慮相關性。因此,我們可以說這種假設在這裡是不好的。同樣,您可以檢查其他插補值,例如中值,眾數和常量值。回歸:
可能有一些變量存在缺失值。 但是,還有一些是一些沒有缺失值的變量。 使用沒有缺失值的變量,我們可以藉助機器學習算法來預測缺失值。 為此,我們可以使用線性回歸算法。
估計回歸模型以基於其他變量預測變量的觀測值,然後在該變量的值缺失的情況下使用該模型來估算值。 換句話說,完整和不完整案例的可用信息用於預測特定變量的值。 然後,將回歸模型中的擬合值用於估算缺失值。
但是事情並不是那麼容易。 問題在於估算的數據中沒有包含誤差項,因此這些估計值沿回歸線完全擬合,沒有任何殘差。 這導致過擬合。 回歸模型可預測丟失數據的最可能值,但可能產生過擬合。
隨機回歸插補
隨機回歸插補使用回歸方程從完整變量中預測不完整變量,但是它需要採取額外的步驟,即使用正態分布的殘差項來增加每個預測得分。
將殘差添加到估算值可恢復數據的可變性,並有效消除與標準回歸估算方案相關的偏差。實際上,隨機回歸插補是唯一在MAR缺失數據機制下給出無偏參數估計的過程。因此,這是唯一具有某些優點的傳統方法。最近鄰插補
KNNImputer提供了使用k最近鄰方法來填充缺失值的方法。 KNN是一種用於在多維空間中將點與其最接近的鄰居進行匹配的算法。 要查找最近的鄰居,可以使用歐幾裡德距離方法(默認)。 使用在訓練集中找到的n個最近鄰居的平均值估算缺失值。 您可以在運行imputer時提供n_neighbors的值。 K近鄰可以預測定性和定量屬性
例如:您具有以下帶有3個變量的數據。 變量「 Var3」缺少值。 您想使用KNN Imputer來估算缺失的值。
在Python中使用以下代碼,您可以將缺失值估算為「 5.5」。
手動計算:
您需要使用歐幾裡德距離公式計算點(6,4)與其他可用點(5,6),(9,9),(8,6)和(6,5)的距離:
dist((x, y), (a, b)) = √(x — a) + (y — b)
您會發現2個最近的鄰居是(5,6)&(6,5),「 Var3」中的各個值分別是3和8。因此,這2個點的平均值為(3 + 8)/ 2 = 5.5
此推論適用於MCAR,MAR和MNAR的所有3種缺失值機制。KNN插補可用於處理任何類型的數據,例如連續數據,離散數據,有序數據和分類數據。鏈式方程的多重插補(MICE):
多重插補涉及為每個缺失值創建多個預測。 多個估算數據的方式考慮了估算的不確定性(估計值之間的差異),並產生了更準確的標準差。
單一插補方法則不是這種情況,因為插補方法往往會導致較小的標準測量誤差,進而會導致1類誤差。
基本思想是將具有缺失值的每個變量視為回歸中的因變量,而將其餘部分作為其預測變量。
MICE的假設是,給定插補過程中使用的變量,缺失值是隨機缺失(MAR),這意味著缺失值的概率僅取決於觀察值,而不取決於未觀察值。
在MICE程序中,將運行一系列回歸模型,從而根據數據中的其他變量對具有缺失數據的每個變量進行建模。 這意味著每個變量都可以根據其分布進行建模,例如,使用邏輯回歸建模的二進位變量和使用線性回歸建模的連續變量。
MICE步驟
步驟1:對數據集中的每個缺失值執行簡單的估算。 例如-均值插補。
步驟2:將一個變量('Var1')的平均估算值重新設置為丟失。
步驟3:將步驟2中變量「 Var1」的觀測值回歸到插補模型中的其他變量上。 換句話說,「 Var1」是回歸模型中的因變量,所有其他變量都是回歸模型中的自變量。
步驟4:然後將'Var1'的缺失值替換為回歸模型中的預測。 隨後在其他變量的回歸模型中將「 Var1」用作自變量時,將同時使用觀察值和這些推測值。
步驟5:然後對每個缺少數據的變量重複步驟2-4。 每個變量的循環構成一個迭代或「循環」。 在一個周期結束時,所有缺失值都已被回歸預測所替代,這些預測反映了數據中觀察到的關係。
步驟6:將步驟2-4重複多個循環,並在每個循環中更新估算值。
在Python中使用以下代碼,您可以使用MICE估算缺失值:
最大似然估計-期望最大化(EM)算法
最大似然估計是一種用於數據集密度估計的方法。 密度估計是通過估計概率分布及其參數來完成的。
但是,當存在一些潛在變量時,最大似然法不能很好地工作。 因為最大似然法假設訓練數據集是完整的並且沒有缺失值。 EM算法方法可用於滿足我們發現潛在變量的情況。
「在潛在變量模型中找到最大似然估計器的通用技術是期望最大化(EM)算法。」
EM算法基本上分為兩個階段。 第一階段有助於估計缺失值。 此步驟稱為E步驟。 第二階段有助於優化模型的參數。 此步驟稱為M步。 重複這兩個步驟,直到我們收斂。 收斂意味著,我們獲得了一組很好的潛在變量值,並且獲得了適合數據的最大似然。
為此,我們可以使用「高斯混合模型」。 高斯混合模型是使用高斯概率分布的組合的混合模型,需要估計概率分布參數,即均值和標準差。
其他插補方法:
最後的觀察結轉方法
最後觀察結轉方法會在最後一次觀察個體時估算缺失值。 該方法假設自從上次測量的觀察以來,個人的觀察完全沒有變化,這幾乎是不現實的。
然後,就好像沒有丟失的數據一樣,分析觀察到的數據和估算數據的組合。
Hot-Deck插補
Hot-Deck插補是一種處理缺失數據的方法,其中,將每個缺失值替換為「相似」單元觀察到的響應。 它涉及用來自受訪者(捐贈者)的觀察值替換無受訪者(稱為接受者)的一個或多個變量的缺失值,就兩種情況觀察到的特徵而言,該值類似於無受訪者。
單獨類別
如果缺少分類變量的值,則可以將缺失的值視為一個單獨的類別。 我們可以為缺失值創建另一個類別,並在不同級別上使用它們。
例如:您有一個變量「性別」,其中2個類別是「男性」和「女性」。 但是此變量缺少大約10%的數據。 您不能直接為這些缺失值估算值。 因此,更好的方法是為缺失的值創建一個單獨的類別「 Missing」,並繼續進行分析和模型開發。
作者:Yogesh Khurana -
deephub翻譯組:孟翔傑