標籤:

數據預處理——缺失值處理

數據預處理——缺失值處理

無論是數據分析、數據挖掘,還是機器學習,在一堆繁雜的數據面前都離不開數據預處理這一重要步驟。由於大數據興起時間還不是很長,很多這方面的從業人員都是剛剛起步,對於數據預處理這一塊還沒有完全統一的認可。作為一個同樣是數據分析小白的數據分析准從業者,打算把自己的學習過程幾率下來,此為前言,下面是正文。

數據分析中,90%的時間都在數據預處理上面(英文說法叫Data munging/wrangling),費時費力也至關重要,如果不做好數據的前期處理工作,最後得出的結論怎麼讓自己信服?

我參考了大數據科普系列-數據預處理這篇文章以及自己的學習和工作經驗,得出一套數據分析的步驟。簡單說,數據分析的步驟主要為採集數據、理解數據、數據預處理、特徵工程、數據建模、結果檢驗、模型集成和改進。

拿到數據後的第一步應該是理解數據本身,先從單變數統計分布的假設開始。在運用R語言處理數據的時候可以用str(df)預覽數據類型,但是對於數據的分布完全不得而知。

對於數值型數據可以用summary(df)查看最小/大值、平均值、眾數和四分位數。其中連續型數據如時間、年齡、收入可以用折線圖、直方圖查看分布,離散型數據如性別、國家可以使用條形圖查看分布。不是每個數據點都吻合標準的正態分布(standard Normal distribution),一般都會有異常值即極限值(extreme values)。以收入為例,如果樣本中有幾個億萬富翁,均值的偏差會很大(因此看中位數和百分比要比均值靠譜)。

對於非數值型數據必須了解其實際意義並關注出現頻率。往往單變數分析效果不顯著,需要聯繫其他變數,比如產品銷量和價格滿足厚利少銷,薄利多銷的規則。


在理解了數據後接下來就是數據預處理的步驟(圖片來自Ch3-數據預處理(思維導圖) 171129)

在真實世界中,擁有完整無缺失的數據是黑天鵝事件。我工作中常常遇到數據缺失的情況,之前都是不做處理或刪除元組,對數據的缺失值處理沒有其他更好方法。這次在做泰坦尼克生存預測的過程中又接觸到缺失值處理,下文便以泰坦尼克數據集中四個有缺失值的變數舉例。

主要參考文章數據分析中的缺失值處理,其中很多內容並未詳細理解,需要在以後的學習或工作中再熟練掌握和運用。

處理缺失值的意義

沒有高質量的數據,就沒有高質量的數據挖掘結果,數據值缺失是數據分析中經常遇到的問題之一。當缺失比例很小時,可直接對缺失記錄進行捨棄或進行手工處理。但在實際數據中,往往缺失數據佔有相當的比重。這時如果手工處理非常低效,如果捨棄缺失記錄,則會丟失大量信息,使不完全觀測數據與完全觀測數據間產生系統差異,對這樣的數據進行分析,你很可能會得出錯誤的結論。

造成缺失值的原因

  • 信息暫時無法獲取。如商品售後評價、雙十一的退貨商品數量和價格等具有滯後效應。
  • 信息被遺漏。可能是因為輸入時認為不重要、忘記填寫了或對數據理解錯誤而遺漏,也可能是由於數據採集設備的故障、存儲介質的故障、傳輸媒體的故障、一些人為因素等原因而丟失。這個在很多公司恐怕是習以為常的事情。
  • 獲取這些信息的代價太大。如統計某校所有學生每個月的生活費,家庭實際收入等等。
  • 系統實時性能要求較高。即要求得到這些信息前迅速做出判斷或決策。
  • 有些對象的某個或某些屬性是不可用的。如一個未婚者的配偶姓名、一個兒童的固定收入狀況等。

對缺失值的處理要具體問題具體分析,為什麼要具體問題具體分析呢?因為屬性缺失有時並不意味著數據缺失,缺失本身是包含信息的,所以需要根據不同應用場景下缺失值可能包含的信息進行合理填充。下面通過一些例子來說明如何具體問題具體分析,仁者見仁智者見智,僅供參考:

  1. 如未填寫年收入的可能且年齡小於18歲的可能沒有工作和收入
  2. 訂單金額缺失的看有無支付時間,若沒有說明訂單未完成,若有可能是其他原因。根據具體原因填補。

缺失的類型

在對缺失數據進行處理前,了解數據缺失的機制和形式是十分必要的。將數據集中不含缺失值的變數稱為完全變數,數據集中含有缺失值的變數稱為不完全變數。從缺失的分布來將缺失可以分為完全隨機缺失,隨機缺失和完全非隨機缺失。

  • 完全隨機缺失(missing completely at random,MCAR):指的是數據的缺失是完全隨機的,不依賴於任何不完全變數或完全變數,不影響樣本的無偏性。如家庭地址缺失。
  • 隨機缺失(missing at random,MAR):指的是數據的缺失不是完全隨機的,即該類數據的缺失依賴於其他完全變數。例如財務數據缺失情況與企業的大小有關。
  • 非隨機缺失(missing not at random,MNAR):指的是數據的缺失與不完全變數自身的取值有關。如高收入人群的不原意提供家庭收入。

分析缺失的類型必須與實際業務結合,不可隨意篤定。

缺失數據的處理方法主要有三大類:刪除元組、數據補齊、不處理

刪除元組:也就是將存在遺漏信息屬性值的對象(元組,記錄)刪除,從而得到一個完備的信息表。

優點:簡單易行,在對象有多個屬性缺失值、被刪除的含缺失值的對象與初始數據集的數據量相比非常小的情況下非常有效。

不足:當缺失數據所佔比例較大,特別當遺漏數據非隨機分布時,這種方法可能導致數據發生偏離,從而引出錯誤的結論。

數據補齊:用一定的值去填充空值,從而使信息表完備化。通常基於統計學原理,根據初始數據集中其餘對象取值的分布情況來對一個缺失值進行填充。

數據挖掘中常用的有以下幾種補齊方法:

1.人工填寫(filling manually)

2.特殊值填充(Treating Missing Attribute values as Special values)

將空值作為一種特殊的屬性值來處理,它不同於其他的任何屬性值。如所有的空值都用「unknown」填充。一般作為臨時填充或中間過程。

3.平均值填充(Mean/Mode Completer)

將初始數據集中的屬性分為數值屬性和非數值屬性來分別進行處理。

如果空值是數值型的,就根據該屬性在其他所有對象的取值的平均值來填充該缺失的屬性值; 如果空值是非數值型的,就根據統計學中的眾數原理,用該屬性在其他所有對象的取值次數最多的值(即出現頻率最高的值)來補齊該缺失的屬性值。

與其相似的另一種方法叫條件平均值填充法(Conditional Mean Completer)。在該方法中,用於求平均的值並不是從數據集的所有對象中取,而是從與該對象具有相同決策屬性值的對象中取得。 例如泰安尼克生存預測數據集里的Embarked變數,缺失這一變數的兩個乘客Pclass和Fare相同,所以可以用Pclass和Fare與其相同的乘客這一集合的眾數來確定Embarked的值。

這兩種數據的補齊方法,其基本的出發點都是一樣的,以最大概率可能的取值來補充缺失的屬性值,只是在具體方法上有一點不同。與其他方法相比,它是用現存數據的多數信息來推測缺失值。

4.熱卡填充(Hot deck imputation,或就近補齊)

對於一個包含空值的對象,熱卡填充法在完整數據中找到一個與它最相似的對象,然後用這個相似對象的值來進行填充。不同的問題可能會選用不同的標準來對相似進行判定。該方法概念上很簡單,且利用了數據間的關係來進行空值估計。這個方法的缺點在於難以定義相似標準,主觀因素較多。 例如Fare變數的缺失值處理可以用這一方法,找到與該乘客信息相似度最高的乘客,Pclass船艙級別、Embarked登船港口占更大權重。

5.最近距離鄰法(K-means clustering)

先根據歐式距離或相關分析來確定距離具有缺失數據樣本最近的K個樣本,將這K個值加權平均來估計該樣本的缺失數據。

6.使用所有可能的值填充(Assigning All Possible values of the Attribute)

用空缺屬性值的所有可能的屬性取值來填充,能夠得到較好的補齊效果。但是,當數據量很大或者遺漏的屬性值較多時,其計算的代價很大,可能的測試方案很多。如果沒有任何可以藉助的變數或可參考變數作用很低時可以採用這個方法,方便簡單。

7.回歸(Regression)

基於完整的數據集,建立回歸方程。對於包含空值的對象,將已知屬性值代入方程來估計未知屬性值,以此估計值來進行填充。當變數不是線性相關時會導致有偏差的估計。常用線性回歸。

8.期望值最大化方法(Expectation maximization,EM)

EM演算法是一種在不完全數據情況下計算極大似然估計或者後驗分布的迭代演算法。在每一迭代循環過程中交替執行兩個步驟:E步(Excepctaion step,期望步),在給定完全數據和前一次迭代所得到的參數估計的情況下計算完全數據對應的對數似然函數的條件期望;M步(Maximzation step,極大化步),用極大化對數似然函數以確定參數的值,並用於下步的迭代。演算法在E步和M步之間不斷迭代直至收斂,即兩次迭代之間的參數變化小於一個預先給定的閾值時結束。該方法可能會陷入局部極值,收斂速度也不是很快,並且計算很複雜。

9.多重插補(Multiple Imputation,MI)

多重填補方法分為三個步驟:

  1. 為每個空值產生一套可能的填補值,這些值反映了無響應模型的不確定性;每個值都被用來填補數據集中的缺失值,產生若干個完整數據集合。
  2. 每個填補數據集合都用針對完整數據集的統計方法進行統計分析。
  3. 對來自各個填補數據集的結果進行綜合,產生最終的統計推斷,這一推斷考慮到了由於數據填補而產生的不確定性。該方法將空缺值視為隨機樣本,這樣計算出來的統計推斷可能受到空缺值的不確定性的影響。該方法的計算也很複雜。

例如泰坦尼克數據集的Age變數缺失較多,缺失值佔比超過10%,網上很多大神採用多重插補法或隨機森林演算法。具體工作原理還沒弄懂。。

10.C4.5方法

通過尋找屬性間的關係來對遺失值填充。它尋找之間具有最大相關性的兩個屬性,其中沒有遺失值的一個稱為代理屬性,另一個稱為原始屬性,用代理屬性決定原始屬性中的遺失值。這種基於規則歸納的方法只能處理基數較小的名詞型屬性。

原作者的話:就幾種基於統計的方法而言,刪除元組法和平均值法差於熱卡填充法、期望值最大化方法和多重填充法;回歸是比較好的一種方法,但仍比不上hot deck和EM;EM缺少MI包含的不確定成分。值得注意的是,這些方法直接處理的是模型參數的估計而不是空缺值預測本身。它們合適於處理無監督學習的問題,而對有監督學習來說,情況就不盡相同了。譬如,你可以刪除包含空值的對象用完整的數據集來進行訓練,但預測時你卻不能忽略包含空值的對象。另外,C4.5和使用所有可能的值填充方法也有較好的補齊效果,人工填寫和特殊值填充則是一般不推薦使用的。

具體哪種方法更好用,見仁見智,還得在以後的應用中驗證吧。

不處理:不處理缺失值,直接在包含空值的數據上進行數據挖掘的方法包括貝葉斯網路和人工神經網路等。

補齊處理只是將未知值補以我們的主觀估計值,不一定完全符合客觀事實,在對不完備信息進行補齊處理的同時,我們或多或少地改變了原始的信息系統。而且,對空值不正確的填充往往將新的雜訊引入數據中,使挖掘任務產生錯誤的結果。因此,在許多情況下,我們還是希望在保持原始信息不發生變化的前提下對信息系統進行處理。

貝葉斯網路提供了一種自然的表示變數間因果信息的方法,用來發現數據間的潛在關係。在這個網路中,用節點表示變數,有向邊表示變數間的依賴關係。貝葉斯網路僅適合於對領域知識具有一定了解的情況,至少對變數間的依賴關係較清楚的情況。否則直接從數據中學習貝葉斯網的結構不但複雜性較高(隨著變數的增加,指數級增加),網路維護代價昂貴,而且它的估計參數較多,為系統帶來了高方差,影響了它的預測精度。

人工神經網路可以有效的對付缺失值,但人工神經網路在這方面的研究還有待進一步深入展開。

總結

原作者的總結:大多數數據挖掘系統都是在數據挖掘之前的數據預處理階段採用第一、第二類方法來對空缺數據進行處理。並不存在一種處理空值的方法可以適合於任何問題。無論哪種方式填充,都無法避免主觀因素對原系統的影響,並且在空值過多的情形下將系統完備化是不可行的。從理論上來說,貝葉斯考慮了一切,但是只有當數據集較小或滿足某些條件(如多元正態分布)時完全貝葉斯分析才是可行的。而現階段人工神經網路方法在數據挖掘中的應用仍很有限。值得一提的是,採用不精確信息處理數據的不完備性已得到了廣泛的研究。不完備數據的表達方法所依據的理論主要有可信度理論、概率論、模糊集合論、可能性理論,D-S的證據理論等。

我的總結:相當於做了一次搬運工,對缺失值的處理有了一個初步的了解,不同的缺失值處理方法可能有差別很大的結果。以後的學習之路還很長,真正要掌握理論,還需要在工作中接觸並實際運用起來。只有把所有的方法都嘗試一遍,才知道到底哪種方法在什麼情況下更好用。


留著下次更新


推薦閱讀:

《專利審查指南修改草案》將圖形用戶界面(GUI)納入外觀設計專利範圍內,這改變意味著什麼?
黃鶴樓景區旅遊數據分析
Excel里最有藝術氣質的圖表,用數據畫幅抽象畫
flume 1.8 安裝部署

TAG:數據分析 |