博客專欄

        EEPW首頁 > 博客 > 檢測和處理異常值的極簡指南

        檢測和處理異常值的極簡指南

        發布人:數據派THU 時間:2022-05-15 來源:工程師 發布文章

        來源DeepHub IMBA

        本文是關于檢測和處理數據集中的異常值,主要包含以下四部分內容:


        • 什么是異常值?
        • 為什么檢測異常值很重要?
        • 如何檢測異常值?
        • 如何處理異常值?

        什么是異常值?


        異常值是與其他觀察結果顯著不同的數據點。如下圖所示,橙色數據點與一般分布相去甚遠。我們將此點稱為異常值。
        圖片

        為什么檢測異常值很重要?


        在數據科學項目、統計分析、機器學習應用中檢測異常值非常重要:

        • 異常值會導致分布偏斜。
        • 異常值會嚴重影響數據集的均值和標準差。這些可能會在統計上給出錯誤的結果。
        • 可能導致偏差或影響估計。
        • 大多數機器學習算法在存在異常值的情況下都不能很好地工作。
        • 異常值在欺詐檢測等異常檢測中非常有用,其中欺詐交易與正常交易非常不同。


        特別是在線性問題中,異常值更能顯示出它們的影響。例如下面的例子;左邊的圖片中當 x 變量的值增加時,y 變量的值減小。但是由于異常值,觀察到隨著變量 x 的值增加,變量 y 的值也增加。異常值扭曲了我們的分析結果。
        圖片
        在上面的示例中,如果從數據集中移除異常值,可以獲得更準確、不會被誤導的測試結果。

        如何檢測異常值?


        可以通過許多不同的方式檢測異常值。下面總結了一些常用的方法:

        • 領域的知識
        • 標準差法
        • Z-Score法
        • 箱線圖(四分位距 - IQR)法


        領域的知識
        借助行業知識,可以了解數據集中的哪個觀察結果可能是異常值。例如; 假設一名房地產經紀人,平均房屋租金為 700 美元。如果房屋租金為 5000 美元,就可以說這是一個異常值。
        標準差法
        在統計學中,標準偏差是衡量一組值的變化量或離散度的量度。低標準差表示這些值趨向于接近集合的平均值,而高標準差表示這些值分布在更寬的范圍內。
        正態分布如下圖所示。在正態分布中,數據應該在一個小范圍的值內,高值和低值的異常值較少。
        圖片
        如圖上圖所示,

        • 68.27% 的值在平均值的 +1、-1 標準差范圍內,
        • 95.45% 的值在平均值的 +2、-2 標準差范圍內,
        • 99.73 % 的值在平均值的 +3、-3 標準差范圍內。


        在正態分布中,預計我們的數據應該遠離平均值 -3、+3 個標準差。因此,有了這些信息,可以指定下限和上限;



        Lower Limit = Mean - 3 * Standart DeviationUpper Limit = Mean + 3 * Standart Deviation

        Z-Score法
        Z-Score也稱為標準分數。該分數有助于了解數據點與平均值之間的標準差。Z-Score是測量單位,它告訴我們數據點與平均值的距離。例如:數據點 A 與平均值相差 2 個標準差。這個 2 就是Z-Score。


        Z score = (x -mean) / std. deviation

        那么如何確定異常值的閾值呢?
        下面再次檢查正態分布以確定閾值。讓我們看一下標準偏差方法部分中的正態分布圖。正如上面前提到的,99.7% 的數據在正態分布的 -3、+3 標準差范圍內,因此我們可以將超出此范圍的數據點視為異常值。
        如果上面語言比較難懂,用下面代碼進行演示可能會更加直觀:























        # 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

        結果如下:
        圖片
        箱線圖(四分位距 - IQR)法

        在統計學中,四分位距 (IQR) 描述了從最低到最高排序的中間 50% 的數據。要找到 IQR,需要先將數據從最低到最高排序。然后將數據分成 4 個相等的部分,并指定 Q1、Q2、Q3 稱為第一、第二和第三四分位數。IQR 是 Q3 和 Q1 之間的差。我們 50% 的數據介于這些四分位數之間。
        圖片
        上圖中:

        • Q1 代表數據的第 25 個百分位。
        • Q2 代表數據的第 50 個百分位。
        • Q3 代表數據的第 75 個百分位。


        例如我們有這樣的數據:[1, 2, 2, 4, 5, 15, 6, 7, 8, 9, 10, 11, 17, 24, 33],我們想要找到 IQR。首先對這個數組進行排序;[1、2、2、4、5、6、7、8、9、10、11、15、17、24、33],然后我們找到四分位數;

        Q1 25th , 4.5Q2 50th , 8.0Q3 75th , 13.0


        計算IQR


        IQR = Q3 - Q1

        現在使用箱線圖法用IQR 值計算上限和下限



        Lower Limit = Q1 - 1.5 * IQRUpper Limit = Q3 + 1.5 * IQR

        之后,如果數據低于下限或高于上限,就可以將此數據點稱為異常值。
        圖片

        如何處理異常值?


        異常值可能是由于數據的內在可變性產生的,所以應該使用一些分析仔細檢查這種類型的異常值, 另外的一些異常值可能是實驗錯誤或數據輸入錯誤等產生的,這些異常值是可以直接刪除的。
        刪除值
        如果異常值是由于輸入或測量數據不正確,無法獲得異常值的真實值,我們可以去除異常值。
        例如在一個記錄人們身高的數據集中,遇到了一個 1.8 厘米的數據。我們知道這在物理上是不可能的。可能真實身高 180 厘米、1.8 米或 185 厘米,但由于我們不知道是哪一個,所以可以將異常值刪除。
        修改值
        如果包含異常值的行中的其他列包含重要信息,可能刪除該行不是一個很好的選擇,所以可以將異常值替換為閾值或中值(異常值對中值影響不大)。
        異常值的對數轉換
        對數轉換,就是將每個變量 x 都替換為 log(x),其中對數的基數被認為是常見的使用基數 10、基數 2 和自然對數 ln。
        而對數轉換與異常值有什么關系呢?
        當異常值是由于數據的內在可變性引起的,我們可能不想刪除或替換它們。因為這些是我們可能需要的數據。但是由于這些異常值,我們無法獲得正態分布,得到的是偏態分布。例如,一個包含人們收入數據的數據集。雖然大多數人的收入在 30k 到 100k 之間,但有些人賺了數十億美元。當可視化這樣一個數據集時,觀察到的分布向右傾斜。
        圖片
        在這種情況下,對數轉換可以幫助我們。對數變換不再強調異常值并允許我們潛在地獲得正態分布。在上圖中的 X 軸上應用對數函數,則偏態分布接近正態分布。

        圖片
        在應用對數轉換之前,應該需要再次考慮下是否需要, 因為如果每個變量之間的距離很重要,那么取變量的對數會使距離傾斜,可能產生更大的問題。

        使用其他模型
        我們可以使用基于樹的方法,如隨機森林、決策樹,因為樹型方法只考慮值得分割點,而不考慮兩個值之間得距離,所以相比于線性模型受異常值影響較小。

        總結


        本文介紹了異常值的相關知識,還有如果檢測、處理異常值,在閱讀完本文以后,希望你對異常值有一個大概的了解,并且能夠檢測和處理一般情況下遇到的異常值。


        *博客內容為網友個人發布,僅代表博主個人觀點,如有侵權請聯系工作人員刪除。



        關鍵詞: AI

        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 崇礼县| 开远市| 鄢陵县| 遂溪县| 梁山县| 兴宁市| 永和县| 松阳县| 深圳市| 新丰县| 广东省| 樟树市| 洛阳市| 临江市| 通州区| 东光县| 阳曲县| 周至县| 钟山县| 湖口县| 辽阳县| 丰宁| 长沙市| 嘉荫县| 荔浦县| 九台市| 大英县| 邓州市| 丰台区| 安阳县| 施甸县| 西乌珠穆沁旗| 富锦市| 垦利县| 封开县| 龙陵县| 米脂县| 黄陵县| 平武县| 陕西省| 宣化县|