1. 程式人生 > >資料分析中的缺失值處理

資料分析中的缺失值處理

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

造成資料缺失的原因

現實世界中的資料異常雜亂,屬性值缺失的情況經常發全甚至是不可避免的。造成資料缺失的原因是多方面的:
  • 資訊暫時無法獲取。例如在醫療資料庫中,並非所有病人的所有臨床檢驗結果都能在給定的時間內得到,就致使一部分屬性值空缺出來。
  • 資訊被遺漏。可能是因為輸入時認為不重要、忘記填寫了或對資料理解錯誤而遺漏,也可能是由於資料採集裝置的故障、儲存介質的故障、傳輸媒體的故障、一些人為因素等原因而丟失。
  • 有些物件的某個或某些屬性是不可用的。如一個未婚者的配偶姓名、一個兒童的固定收入狀況等。
  • 有些資訊(被認為)是不重要的。如一個屬性的取值與給定語境是無關。
  • 獲取這些資訊的代價太大。
  • 系統實時效能要求較高。即要求得到這些資訊前迅速做出判斷或決策。

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

  1. “年收入”:商品推薦場景下填充平均值,借貸額度場景下填充最小值;
  2. “行為時間點”:填充眾數;
  3. “價格”:商品推薦場景下填充最小值,商品匹配場景下填充平均值;
  4. “人體壽命”:保險費用估計場景下填充最大值,人口估計場景下填充平均值;
  5. “駕齡”:沒有填寫這一項的使用者可能是沒有車,為它填充為0較為合理
  6. ”本科畢業時間”:沒有填寫這一項的使用者可能是沒有上大學,為它填充正無窮比較合理
  7. “婚姻狀態”:沒有填寫這一項的使用者可能對自己的隱私比較敏感,應單獨設為一個分類,如已婚1、未婚0、未填-1。

缺失的型別

在對缺失資料進行處理前,瞭解資料缺失的機制和形式是十分必要的。將資料集中不含缺失值的變數稱為完全變數,資料集中含有缺失值的變數稱為不完全變數從缺失的分佈來將缺失可以分為完全隨機缺失,隨機缺失和完全非隨機缺失
  • 完全隨機缺失(missing completely at random,MCAR):
    指的是資料的缺失是完全隨機的,不依賴於任何不完全變數或完全變數,不影響樣本的無偏性。如家庭地址缺失。
  • 隨機缺失(missing at random,MAR):指的是資料的缺失不是完全隨機的,即該類資料的缺失依賴於其他完全變數。例如財務資料缺失情況與企業的大小有關。
  • 非隨機缺失(missing not at random,MNAR):指的是資料的缺失與不完全變數自身的取值有關。如高收入人群的不原意提供家庭收入。
對於隨機缺失和非隨機缺失,刪除記錄是不合適的,隨機缺失可以通過已知變數對缺失值進行估計;而非隨機缺失還沒有很好的解決辦法。

說明:對於分類問題,可以分析缺失的樣本中,類別之間的比例和整體資料集中,類別的比例

缺失值處理的必要性

資料缺失在許多研究領域都是一個複雜的問題。對資料探勘來說,預設值的存在,造成了以下影響: 
  • 系統丟失了大量的有用資訊;
  • 系統中所表現出的不確定性更加顯著,系統中蘊涵的確定性成分更難把握;
  • 包含空值的資料會使挖掘過程陷入混亂,導致不可靠的輸出。

資料探勘演算法本身更致力於避免資料過分擬合所建的模型,這一特性使得它難以通過自身的演算法去很好地處理不完整資料。因此,預設值需要通過專門的方法進行推導、填充等,以減少資料探勘演算法與實際應用之間的差距。

缺失值處理方法的分析與比較

處理不完整資料集的方法主要有三大類:刪除元組、資料補齊、不處理

刪除元組

也就是將存在遺漏資訊屬性值的物件(元組,記錄)刪除,從而得到一個完備的資訊表。這種方法簡單易行,在物件有多個屬性缺失值、被刪除的含缺失值的物件與初始資料集的資料量相比非常小的情況下非常有效,類標號缺失時通常使用該方法。
然而,這種方法卻有很大的侷限性。它以減少歷史資料來換取資訊的完備,會丟棄大量隱藏在這些物件中的資訊。在初始資料集包含的物件很少的情況下,刪除少量物件足以嚴重影響資訊的客觀性和結果的正確性;因此,當缺失資料所佔比例較大,特別當遺漏資料非隨機分佈時,這種方法可能導致資料發生偏離,從而引出錯誤的結論。

說明:刪除元組,或者直接刪除該列特徵,有時候會導致效能下降。

資料補齊

這類方法是用一定的值去填充空值,從而使資訊表完備化。通常基於統計學原理,根據初始資料集中其餘物件取值的分佈情況來對一個缺失值進行填充。資料探勘中常用的有以下幾種補齊方法:

人工填寫(filling manually)

由於最瞭解資料的還是使用者自己,因此這個方法產生資料偏離最小,可能是填充效果最好的一種。然而一般來說,該方法很費時,當資料規模很大、空值很多的時候,該方法是不可行的。

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

將空值作為一種特殊的屬性值來處理,它不同於其他的任何屬性值。如所有的空值都用“unknown”填充。這樣將形成另一個有趣的概念,可能導致嚴重的資料偏離,一般不推薦使用

平均值填充(Mean/Mode Completer)

將初始資料集中的屬性分為數值屬性和非數值屬性來分別進行處理。 
如果空值是數值型的,就根據該屬性在其他所有物件的取值的平均值來填充該缺失的屬性值; 
如果空值是非數值型的,就根據統計學中的眾數原理,用該屬性在其他所有物件的取值次數最多的值(即出現頻率最高的值)來補齊該缺失的屬性值。與其相似的另一種方法叫條件平均值填充法(Conditional Mean Completer)。在該方法中,用於求平均的值並不是從資料集的所有物件中取,而是從與該物件具有相同決策屬性值的物件中取得。 
這兩種資料的補齊方法,其基本的出發點都是一樣的,以最大概率可能的取值來補充缺失的屬性值,只是在具體方法上有一點不同。與其他方法相比,它是用現存資料的多數資訊來推測缺失值。

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

對於一個包含空值的物件,熱卡填充法在完整資料中找到一個與它最相似的物件,然後用這個相似物件的值來進行填充。不同的問題可能會選用不同的標準來對相似進行判定。該方法概念上很簡單,且利用了資料間的關係來進行空值估計。這個方法的缺點在於難以定義相似標準,主觀因素較多。

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

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

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

用空缺屬性值的所有可能的屬性取值來填充,能夠得到較好的補齊效果。但是,當資料量很大或者遺漏的屬性值較多時,其計算的代價很大,可能的測試方案很多。

組合完整化方法(Combinatorial Completer)

用空缺屬性值的所有可能的屬性取值來試,並從最終屬性的約簡結果中選擇最好的一個作為填補的屬性值。這是以約簡為目的的資料補齊方法,能夠得到好的約簡結果;但是,當資料量很大或者遺漏的屬性值較多時,其計算的代價很大。

迴歸(Regression)

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

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

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

多重填補(Multiple Imputation,MI)

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

C4.5方法

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

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

不處理

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

不處理缺失值,直接在包含空值的資料上進行資料探勘的方法包括貝葉斯網路和人工神經網路等

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

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

知乎上的一種方案:

4.把變數對映到高維空間。比如性別,有男、女、缺失三種情況,則對映成3個變數:是否男、是否女、是否缺失。連續型變數也可以這樣處理。比如Google、百度的CTR預估模型,預處理時會把所有變數都這樣處理,達到幾億維。這樣做的好處是完整保留了原始資料的全部資訊、不用考慮缺失值、不用考慮線性不可分之類的問題。缺點是計算量大大提升。

而且只有在樣本量非常大的時候效果才好,否則會因為過於稀疏,效果很差。

總結

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