一、概述 異常值檢驗(yàn),又稱為離群點(diǎn)分析或者孤立點(diǎn)挖掘。在人們對數(shù)據(jù)進(jìn)行分析處理的過程中,經(jīng)常會遇到少量這樣的數(shù)據(jù),它們與數(shù)據(jù)一般模式不一致,或者說與大多數(shù)樣相比有些不一樣,我們稱這樣的數(shù)據(jù)為異常數(shù)據(jù)。 異常數(shù)據(jù)挖掘涉及兩個基本問題。其一,在對一個給定的數(shù)據(jù)集分析之前必須事先約定滿足什么樣的數(shù)據(jù)才是異常數(shù)據(jù),也就是異常數(shù)據(jù)定義的問題。其二,用什么方法來從給定的數(shù)據(jù)集中將異常數(shù)據(jù)提取出來。 二、異常數(shù)據(jù)的定義 關(guān)于異常值的問題,最早可以追溯到 18 世紀(jì)中葉,當(dāng)時很多學(xué)者就開始關(guān)注異常值的問題了。1755 年,Boscovich 在確定地球橢圓率的時候,在所得到的10 個觀測值中丟棄了其中的兩個極端值,然后再計(jì)算剩下的 8 個觀測值的平均值。而最早有關(guān)異常值的定義,是 Bernoulli 于 1777 年首先提出的,之后它的定義在一直變化,Hawkins 認(rèn)為異常值是那些數(shù)據(jù)集中與眾不同的數(shù)據(jù),讓人懷疑這些數(shù)據(jù)并非由于隨機(jī)偏差產(chǎn)生的,而是產(chǎn)生于完全不同的機(jī)制,這在一定意義上揭示了異常值的本質(zhì);而 Weisberg 將異常值定義為那些與數(shù)據(jù)集中其余部分不服從相同統(tǒng)計(jì)模型的數(shù)據(jù),這個定義更符合統(tǒng)計(jì)檢驗(yàn)的異常數(shù)據(jù)描述;Samuels將異常值定義為“足夠地不同于數(shù)據(jù)集中其余部分的數(shù)據(jù)”;Grubbs 將異常值定異常數(shù)據(jù)是少量的、與眾不同的,與大多數(shù)數(shù)據(jù)相比是有偏差的,而且產(chǎn)生這種偏差的原因不是隨機(jī)的,而是有其更深層次的必然原因,它產(chǎn)生于完全不同的機(jī)制。 張德然在吸收歸納前人的研究基礎(chǔ)上,將異常值從內(nèi)涵上分為廣義異常值和狹義異常值。廣義異常值是指:所獲統(tǒng)計(jì)數(shù)據(jù)與真實(shí)數(shù)據(jù)相對誤差較大的數(shù)據(jù),統(tǒng)指一切失真數(shù)據(jù);狹義異常值是指:所獲統(tǒng)計(jì)數(shù)據(jù)中部分?jǐn)?shù)據(jù)與其余主體數(shù)據(jù)相比明顯不一致的數(shù)據(jù),也稱離群值。 為了從數(shù)據(jù)集中識別異常數(shù)據(jù),就必須有一個明確的標(biāo)準(zhǔn)。這需要找到數(shù)據(jù)的內(nèi)在規(guī)律,在一個可接受的誤差范圍內(nèi),滿足內(nèi)在規(guī)律的數(shù)據(jù)就是正常數(shù)據(jù),而不滿足內(nèi)在規(guī)律的數(shù)據(jù)就是異常數(shù)據(jù)。這種數(shù)據(jù)間的內(nèi)在規(guī)律可以根據(jù)數(shù)據(jù)本身的特點(diǎn)從位置關(guān)系、函數(shù)關(guān)系、規(guī)則關(guān)系、序列關(guān)系等方面來考查。 (1)位置關(guān)系 位置關(guān)系是數(shù)據(jù)間的最常見的一種關(guān)系,大多數(shù)正常數(shù)據(jù)具有很大的相似性而符合一個共同模式,在空間上表現(xiàn)在一起的趨勢,團(tuán)結(jié)在一個或者多個核心的周圍,而那些異常數(shù)據(jù)則表現(xiàn)得離群,他們總是離所有的核心都很遠(yuǎn)。 (2)函數(shù)關(guān)系 函數(shù)關(guān)系也是一種常見的數(shù)據(jù)關(guān)系,即大多數(shù)數(shù)據(jù)都符合某個函數(shù)模型,因此數(shù)據(jù)點(diǎn)大多分布在函數(shù)曲線附近,而那些異常數(shù)據(jù)則距離曲線比較遠(yuǎn)。 (3)規(guī)則關(guān)系 如果數(shù)據(jù)集中某些符合某個規(guī)則條件,則稱這些數(shù)據(jù)具有規(guī)則關(guān)系。具有同一規(guī)則關(guān)系的正常數(shù)據(jù)一般會使該規(guī)則的結(jié)論成立,而如果某個數(shù)據(jù)具有該規(guī)則關(guān)系但不能使該結(jié)論成立,那么他就是異常數(shù)據(jù)。 (4)序列關(guān)系 序列關(guān)系是指數(shù)據(jù)集中的某些數(shù)據(jù)滿足某種序列模式,而那些相同條件下不滿足序列模式的數(shù)據(jù)就是異常數(shù)據(jù)。 三、SPSS中異常值的識別過程 (1)采用數(shù)據(jù)探索過程探測異常值 SPSS菜單實(shí)現(xiàn)程序?yàn)?/span>: 主菜單-->“Analyze”-->“DescriptiveStatistics”-->“Explore……”選項(xiàng)-->“Statistics”按鈕-->選中“Outliers”復(fù)選框。輸出結(jié)果中將列出5個最大值和5個最小值作為異常的嫌疑值。 (2)采用箱線圖(boxplot)探測異常值 盒式圖'或叫'盒須圖''箱形圖'boxplot(也稱箱須圖(Box-whiskerPlot)須圖又稱為箱形圖,其繪制須使用常用的統(tǒng)計(jì)量,能提供有關(guān)數(shù)據(jù)位置和分散情況的關(guān)鍵信息,尤其在比較不同的母體數(shù)據(jù)時更可表現(xiàn)其差異。如下圖所示,標(biāo)示了圖中每條線表示的含義,其中應(yīng)用到了分位值(數(shù))的概念。主要包含六個數(shù)據(jù)節(jié)點(diǎn),將一組數(shù)據(jù)從大到小排列,分別計(jì)算出他的上邊緣,上四分位數(shù)Q3,中位數(shù),下四分位數(shù)Q1,下邊緣,還有異常值。 箱形圖中識別異常值標(biāo)準(zhǔn):異常值被定義為小于(Q1-1.5)/QR(四分位距)或大于(Q3+1.5)/QR(四分位距)的值。雖然這種標(biāo)準(zhǔn)有點(diǎn)任意性,但它來源于經(jīng)驗(yàn)判斷,經(jīng)驗(yàn)表明它在處理需要特別注意的數(shù)據(jù)方面表現(xiàn)不錯。這與識別異常值的經(jīng)典方法有些不同。眾所周知,基于正態(tài)分布的3σ法則或z分?jǐn)?shù)方法是以假定數(shù)據(jù)服從正態(tài)分布為前提的,但實(shí)際數(shù)據(jù)往往并不嚴(yán)格服從正態(tài)分布。它們判斷異常值的標(biāo)準(zhǔn)是以計(jì)算數(shù)據(jù)批的均值和標(biāo)準(zhǔn)差為基礎(chǔ)的,而均值和標(biāo)準(zhǔn)差的耐抗性極小,異常值本身會對它們產(chǎn)生較大影響,這樣產(chǎn)生的異常值個數(shù)不會多于總數(shù)0.7%。顯然,應(yīng)用這種方法于非正態(tài)分布數(shù)據(jù)中判斷異常值,其有效性是有限的。箱形圖的繪制依靠實(shí)際數(shù)據(jù),不需要事先假定數(shù)據(jù)服從特定的分布形式,沒有對數(shù)據(jù)作任何限制性要求,它只是真實(shí)直觀地表現(xiàn)數(shù)據(jù)形狀的本來面貌;另一方面,箱形圖判斷異常值的標(biāo)準(zhǔn)以四分位數(shù)和四分位距為基礎(chǔ),四分位數(shù)具有一定的耐抗性,多達(dá)25%的數(shù)據(jù)可以變得任意遠(yuǎn)而不會很大地?cái)_動四分位數(shù),所以異常值不能對這個標(biāo)準(zhǔn)施加影響,箱形圖識別異常值的結(jié)果比較客觀。由此可見,箱形圖在識別異常值方面有一定的優(yōu)越性。 Spss中箱線圖繪制有兩種方法:一種是利用上述的數(shù)據(jù)探測過程,在“Explore”對話框中單擊“Plots”,通過“Boxplots”方框可以確定箱線圖的生成方式?!?/span>Factor levels together”復(fù)選框表示將要為每個因變量創(chuàng)建一個箱線圖,“Dependent together”復(fù)選框表示將為每個分組變量水平創(chuàng)建箱線圖,“None”復(fù)選框表示不創(chuàng)建箱線圖。二是直接利用SPSS中的畫圖功能實(shí)現(xiàn)箱線圖,SPSS給出了兩種箱線圖,一種是基本箱線圖,另一種是交互式箱線圖?;鞠渚€圖的SPSS菜單實(shí)現(xiàn)為:點(diǎn)擊主菜單中的“Graphs”選項(xiàng),在彈出的一級菜單中選擇“Boxplot……”選項(xiàng)。交互式箱形圖的SPSS菜單實(shí)現(xiàn)為:點(diǎn)擊主菜單中的“Graphs”選項(xiàng),在彈出的一級菜單中點(diǎn)擊“Interactive”選項(xiàng),在彈出的二級菜單中選擇“Boxplot……”選項(xiàng)。箱線圖中的“○”表示可疑的異常值,此處異常值的確定采用的是“五數(shù)概括法”,即:變量值超過第75百分位點(diǎn)和25百分位點(diǎn)上變量值之差的1.5倍(箱體上方)或變量值小于第75百分位點(diǎn)和25百分位點(diǎn)上變量值之差的1.5倍(箱體下方)的點(diǎn)對應(yīng)的值。 (3)采用Z分標(biāo)準(zhǔn)化法(3σ法):±3σ 以外的數(shù)據(jù)為高度異常值,應(yīng)予剔除。 (4)SPSS中異常值的剔除 發(fā)現(xiàn)異常值后,把大于等于最小異常值或小于等于最大異常值的值用Data主菜單里的Cases Select子菜單里的條件設(shè)置按鈕,就可以自動剔除異常值。 四、R語言中異常值得識別過程 (1)單變量異常檢測 本部分展示了一個單變量異常檢測的例子,并且演示了如何將這種方法應(yīng)用在多元數(shù)據(jù)上。在該例中,單變量異常檢測通過boxplot.stats()函數(shù)實(shí)現(xiàn),并且返回產(chǎn)生箱線圖的統(tǒng)計(jì)量。在返回的結(jié)果中,有一個部分是out,它結(jié)出了異常值的列表。更明確點(diǎn),它列出了位于極值之外的胡須。參數(shù)coef可以控制胡須延伸到箱線圖外的遠(yuǎn)近。在R中,運(yùn)行?boxplot.stats可獲取更詳細(xì)的信息。 如圖呈現(xiàn)了一個箱線圖,其中有四個圈是異常值 如上的單變量異常檢測可以用來發(fā)現(xiàn)多元數(shù)據(jù)中的異常值,通過簡單搭配的方式。在下例中,我們首先產(chǎn)生一個數(shù)據(jù)框df,它有兩列x和y。之后,異常值分別從x和y檢測出來。然后,我們獲取兩列都是異常值的數(shù)據(jù)作為異常數(shù)據(jù)。 在下圖中,異常值用紅色標(biāo)記為'+' 類似的,我們也可以將x或y為異常值的數(shù)據(jù)標(biāo)記為異常值。下圖,異常值用'x'標(biāo)記為藍(lán)色。 當(dāng)有三個以上的變量時,最終的異常值需要考慮單變量異常檢測結(jié)果的多數(shù)表決。當(dāng)選擇最佳方式在真實(shí)應(yīng)用中進(jìn)行搭配時,需要涉及領(lǐng)域知識。 (2)使用LOF(localoutlier factor,局部異常因子)進(jìn)行異常檢測 LOF(局部異常因子)是用于識別基于密度的局部異常值的算法。使用LOF,一個點(diǎn)的局部密度會與它的鄰居進(jìn)行比較。如果前者明顯低于后者(有一個大于1 的LOF值),該點(diǎn)位于一個稀疏區(qū)域,對于它的鄰居而言,這就表明,該點(diǎn)是一個異常值。LOF的缺點(diǎn)就是它只對數(shù)值數(shù)據(jù)有效。lofactor()函數(shù)使用LOF算法計(jì)算局部異常因子,并且它在DMwR和dprep包中是可用的。下面將介紹一個使用LOF進(jìn)行異常檢測的例子,k是用于計(jì)算局部異常因子的鄰居數(shù)量。下圖呈現(xiàn)了一個異常值得分的密度圖。 接著,我們結(jié)合前兩個主成份的雙標(biāo)圖呈現(xiàn)異常值。在如上代碼中,prcomp()執(zhí)行了一個主成分分析,并且biplot()使用前兩個主成分畫出了這些數(shù)據(jù)。在上圖中,x和y軸分別代表第一和第二個主成份,箭頭表示了變量,5個異常值用它們的行號標(biāo)記出來了。我們也可以如下使用pairsPlot顯示異常值,這里的異常值用'+'標(biāo)記為紅色。 Rlof包,對LOF算法的并行實(shí)現(xiàn)。它的用法與lofactor()相似,但是lof()有兩個附加的特性,即支持k的多元值和距離度量的幾種選擇。如下是lof()的一個例子。在計(jì)算異常值得分后,異常值可以通過選擇前幾個檢測出來。注意,目前包Rlof的版本在MacOS X和Linux環(huán)境下工作,但并不在windows環(huán)境下工作,因?yàn)樗蕾噈ulticore包用于并行計(jì)算。 (3)通過聚類進(jìn)行異常檢測 另外一種異常檢測的方法是聚類。通過把數(shù)據(jù)聚成類,將那些不屬于任務(wù)一類的數(shù)據(jù)作為異常值。比如,使用基于密度的聚類DBSCAN,如果對象在稠密區(qū)域緊密相連,它們將被分組到一類。因此,那些不會被分到任何一類的對象就是異常值。我們也可以使用k-means算法來檢測異常。使用k-means算法,數(shù)據(jù)被分成k組,通過把它們分配到最近的聚類中心。然后,我們能夠計(jì)算每個對象到聚類中心的距離(或相似性),并且選擇最大的距離作為異常值。 如下是一個基于k-means算法在iris數(shù)據(jù)上實(shí)現(xiàn)在異常檢測。 在上圖中,聚類中心被標(biāo)記為星號,異常值標(biāo)記為'+' 備注: LOF算法擅長檢測局部異常值,但是它只對數(shù)值數(shù)據(jù)有效。Rlof包依賴multicore包,在Windows環(huán)境下失效。對于分類數(shù)據(jù)的一個快速穩(wěn)定的異常檢測的策略是AVF(Attribute Value Frequency)算法。 一些用于異常檢測的R包包括: extremevalues包:單變量異常檢測 mvoutlier包:基于穩(wěn)定方法的多元變量異常檢測 outliers包:對異常值進(jìn)行檢測 |
|