檢測(cè)和處理異常值的極簡(jiǎn)指南
來(lái)源:DeepHub IMBA
本文是關(guān)于檢測(cè)和處理數(shù)據(jù)集中的異常值,主要包含以下四部分內(nèi)容:
- 什么是異常值?
- 為什么檢測(cè)異常值很重要?
- 如何檢測(cè)異常值?
- 如何處理異常值?
什么是異常值?
異常值是與其他觀察結(jié)果顯著不同的數(shù)據(jù)點(diǎn)。如下圖所示,橙色數(shù)據(jù)點(diǎn)與一般分布相去甚遠(yuǎn)。我們將此點(diǎn)稱為異常值。
在數(shù)據(jù)科學(xué)項(xiàng)目、統(tǒng)計(jì)分析、機(jī)器學(xué)習(xí)應(yīng)用中檢測(cè)異常值非常重要:
- 異常值會(huì)導(dǎo)致分布偏斜。
- 異常值會(huì)嚴(yán)重影響數(shù)據(jù)集的均值和標(biāo)準(zhǔn)差。這些可能會(huì)在統(tǒng)計(jì)上給出錯(cuò)誤的結(jié)果。
- 可能導(dǎo)致偏差或影響估計(jì)。
- 大多數(shù)機(jī)器學(xué)習(xí)算法在存在異常值的情況下都不能很好地工作。
- 異常值在欺詐檢測(cè)等異常檢測(cè)中非常有用,其中欺詐交易與正常交易非常不同。
特別是在線性問(wèn)題中,異常值更能顯示出它們的影響。例如下面的例子;左邊的圖片中當(dāng) x 變量的值增加時(shí),y 變量的值減小。但是由于異常值,觀察到隨著變量 x 的值增加,變量 y 的值也增加。異常值扭曲了我們的分析結(jié)果。
在上面的示例中,如果從數(shù)據(jù)集中移除異常值,可以獲得更準(zhǔn)確、不會(huì)被誤導(dǎo)的測(cè)試結(jié)果。
可以通過(guò)許多不同的方式檢測(cè)異常值。下面總結(jié)了一些常用的方法:
- 領(lǐng)域的知識(shí)
- 標(biāo)準(zhǔn)差法
- Z-Score法
- 箱線圖(四分位距 - IQR)法
領(lǐng)域的知識(shí)
借助行業(yè)知識(shí),可以了解數(shù)據(jù)集中的哪個(gè)觀察結(jié)果可能是異常值。例如; 假設(shè)一名房地產(chǎn)經(jīng)紀(jì)人,平均房屋租金為 700 美元。如果房屋租金為 5000 美元,就可以說(shuō)這是一個(gè)異常值。
標(biāo)準(zhǔn)差法
在統(tǒng)計(jì)學(xué)中,標(biāo)準(zhǔn)偏差是衡量一組值的變化量或離散度的量度。低標(biāo)準(zhǔn)差表示這些值趨向于接近集合的平均值,而高標(biāo)準(zhǔn)差表示這些值分布在更寬的范圍內(nèi)。
正態(tài)分布如下圖所示。在正態(tài)分布中,數(shù)據(jù)應(yīng)該在一個(gè)小范圍的值內(nèi),高值和低值的異常值較少。
如圖上圖所示,
- 68.27% 的值在平均值的 +1、-1 標(biāo)準(zhǔn)差范圍內(nèi),
- 95.45% 的值在平均值的 +2、-2 標(biāo)準(zhǔn)差范圍內(nèi),
- 99.73 % 的值在平均值的 +3、-3 標(biāo)準(zhǔn)差范圍內(nèi)。
在正態(tài)分布中,預(yù)計(jì)我們的數(shù)據(jù)應(yīng)該遠(yuǎn)離平均值 -3、+3 個(gè)標(biāo)準(zhǔn)差。因此,有了這些信息,可以指定下限和上限;
Lower Limit = Mean - 3 * Standart DeviationUpper Limit = Mean + 3 * Standart Deviation
Z-Score法
Z-Score也稱為標(biāo)準(zhǔn)分?jǐn)?shù)。該分?jǐn)?shù)有助于了解數(shù)據(jù)點(diǎn)與平均值之間的標(biāo)準(zhǔn)差。Z-Score是測(cè)量單位,它告訴我們數(shù)據(jù)點(diǎn)與平均值的距離。例如:數(shù)據(jù)點(diǎn) A 與平均值相差 2 個(gè)標(biāo)準(zhǔn)差。這個(gè) 2 就是Z-Score。
Z score = (x -mean) / std. deviation
那么如何確定異常值的閾值呢?
下面再次檢查正態(tài)分布以確定閾值。讓我們看一下標(biāo)準(zhǔn)偏差方法部分中的正態(tài)分布圖。正如上面前提到的,99.7% 的數(shù)據(jù)在正態(tài)分布的 -3、+3 標(biāo)準(zhǔn)差范圍內(nèi),因此我們可以將超出此范圍的數(shù)據(jù)點(diǎn)視為異常值。
如果上面語(yǔ)言比較難懂,用下面代碼進(jìn)行演示可能會(huì)更加直觀:
# Suppose we have a dataset that represents number of siblings.data = [1, 2, 2, 3, 4, 1, 1, 15, 2, 4, 3, 2, 1, 1, 2]
# In this data set we want to find outliers. Firstly we calculate Z-Score for them.
import numpy as npmean = np.mean(data) # Find meanstd = np.std(data) # Find standart deviation
upper_limit = 3lower_limit = -3outlier = []
for i in data: # Find Z-Score z = (i-mean)/std print(f'Z-Score of {i} = {z}') # Check z value is within or not in our range if (lower_limit > z) or (z > upper_limit): outlier.append(i)
print('Outlier in dataset is', outlier)s
結(jié)果如下:
箱線圖(四分位距 - IQR)法
在統(tǒng)計(jì)學(xué)中,四分位距 (IQR) 描述了從最低到最高排序的中間 50% 的數(shù)據(jù)。要找到 IQR,需要先將數(shù)據(jù)從最低到最高排序。然后將數(shù)據(jù)分成 4 個(gè)相等的部分,并指定 Q1、Q2、Q3 稱為第一、第二和第三四分位數(shù)。IQR 是 Q3 和 Q1 之間的差。我們 50% 的數(shù)據(jù)介于這些四分位數(shù)之間。
上圖中:
- Q1 代表數(shù)據(jù)的第 25 個(gè)百分位。
- Q2 代表數(shù)據(jù)的第 50 個(gè)百分位。
- Q3 代表數(shù)據(jù)的第 75 個(gè)百分位。
例如我們有這樣的數(shù)據(jù):[1, 2, 2, 4, 5, 15, 6, 7, 8, 9, 10, 11, 17, 24, 33],我們想要找到 IQR。首先對(duì)這個(gè)數(shù)組進(jìn)行排序;[1、2、2、4、5、6、7、8、9、10、11、15、17、24、33],然后我們找到四分位數(shù);
Q1 25th , 4.5Q2 50th , 8.0Q3 75th , 13.0
計(jì)算IQR
IQR = Q3 - Q1
現(xiàn)在使用箱線圖法用IQR 值計(jì)算上限和下限
Lower Limit = Q1 - 1.5 * IQRUpper Limit = Q3 + 1.5 * IQR
之后,如果數(shù)據(jù)低于下限或高于上限,就可以將此數(shù)據(jù)點(diǎn)稱為異常值。
異常值可能是由于數(shù)據(jù)的內(nèi)在可變性產(chǎn)生的,所以應(yīng)該使用一些分析仔細(xì)檢查這種類型的異常值, 另外的一些異常值可能是實(shí)驗(yàn)錯(cuò)誤或數(shù)據(jù)輸入錯(cuò)誤等產(chǎn)生的,這些異常值是可以直接刪除的。
刪除值
如果異常值是由于輸入或測(cè)量數(shù)據(jù)不正確,無(wú)法獲得異常值的真實(shí)值,我們可以去除異常值。
例如在一個(gè)記錄人們身高的數(shù)據(jù)集中,遇到了一個(gè) 1.8 厘米的數(shù)據(jù)。我們知道這在物理上是不可能的??赡苷鎸?shí)身高 180 厘米、1.8 米或 185 厘米,但由于我們不知道是哪一個(gè),所以可以將異常值刪除。
修改值
如果包含異常值的行中的其他列包含重要信息,可能刪除該行不是一個(gè)很好的選擇,所以可以將異常值替換為閾值或中值(異常值對(duì)中值影響不大)。
異常值的對(duì)數(shù)轉(zhuǎn)換
對(duì)數(shù)轉(zhuǎn)換,就是將每個(gè)變量 x 都替換為 log(x),其中對(duì)數(shù)的基數(shù)被認(rèn)為是常見的使用基數(shù) 10、基數(shù) 2 和自然對(duì)數(shù) ln。
而對(duì)數(shù)轉(zhuǎn)換與異常值有什么關(guān)系呢?
當(dāng)異常值是由于數(shù)據(jù)的內(nèi)在可變性引起的,我們可能不想刪除或替換它們。因?yàn)檫@些是我們可能需要的數(shù)據(jù)。但是由于這些異常值,我們無(wú)法獲得正態(tài)分布,得到的是偏態(tài)分布。例如,一個(gè)包含人們收入數(shù)據(jù)的數(shù)據(jù)集。雖然大多數(shù)人的收入在 30k 到 100k 之間,但有些人賺了數(shù)十億美元。當(dāng)可視化這樣一個(gè)數(shù)據(jù)集時(shí),觀察到的分布向右傾斜。
在這種情況下,對(duì)數(shù)轉(zhuǎn)換可以幫助我們。對(duì)數(shù)變換不再?gòu)?qiáng)調(diào)異常值并允許我們潛在地獲得正態(tài)分布。在上圖中的 X 軸上應(yīng)用對(duì)數(shù)函數(shù),則偏態(tài)分布接近正態(tài)分布。
在應(yīng)用對(duì)數(shù)轉(zhuǎn)換之前,應(yīng)該需要再次考慮下是否需要, 因?yàn)槿绻總€(gè)變量之間的距離很重要,那么取變量的對(duì)數(shù)會(huì)使距離傾斜,可能產(chǎn)生更大的問(wèn)題。
使用其他模型
我們可以使用基于樹的方法,如隨機(jī)森林、決策樹,因?yàn)闃湫头椒ㄖ豢紤]值得分割點(diǎn),而不考慮兩個(gè)值之間得距離,所以相比于線性模型受異常值影響較小。
本文介紹了異常值的相關(guān)知識(shí),還有如果檢測(cè)、處理異常值,在閱讀完本文以后,希望你對(duì)異常值有一個(gè)大概的了解,并且能夠檢測(cè)和處理一般情況下遇到的異常值。
*博客內(nèi)容為網(wǎng)友個(gè)人發(fā)布,僅代表博主個(gè)人觀點(diǎn),如有侵權(quán)請(qǐng)聯(lián)系工作人員刪除。