博客專欄

        EEPW首頁 > 博客 > 獨(dú)家 | 在Python中使用廣義極端學(xué)生化偏差(GESD)進(jìn)行異常檢測

        獨(dú)家 | 在Python中使用廣義極端學(xué)生化偏差(GESD)進(jìn)行異常檢測

        發(fā)布人:數(shù)據(jù)派THU 時(shí)間:2021-06-16 來源:工程師 發(fā)布文章

        作者:Shaleen Swarup

        翻譯:歐陽錦

        校對:王可汗

        本文從理論和實(shí)踐角度介紹了使用廣義極端學(xué)生化偏差(GESD)進(jìn)行異常檢測的方法,展示了Python代碼示例和相關(guān)源碼。

        關(guān)鍵字:Python 異常值檢測 ESD


        異常檢測在生活中起著非常重要的作用。通常,異常數(shù)據(jù)可能與某種問題或罕見事件有關(guān),例如 ****欺詐、醫(yī)療問題、結(jié)構(gòu)缺陷、設(shè)備故障等。這種聯(lián)系使得能夠挑選出哪些數(shù)據(jù)點(diǎn)可以被視為異常值是非常有趣的,因?yàn)閺纳虡I(yè)角度識(shí)別這些事件通常是十分有趣的事情。

        此外,許多統(tǒng)計(jì)方法對異常值的存在很敏感。例如,平均值和標(biāo)準(zhǔn)差的計(jì)算可能會(huì)被單個(gè)嚴(yán)重不準(zhǔn)確的數(shù)據(jù)點(diǎn)所影響。檢查異常值應(yīng)該是任何數(shù)據(jù)分析的常規(guī)部分,并且應(yīng)該檢查潛在的異常值以查看它們是否可能是錯(cuò)誤的數(shù)據(jù)。

        什么是異常值檢測

        任何發(fā)現(xiàn)數(shù)據(jù)集異常值的過程都可以被稱為異常檢測;也就是檢測那些不合群的事物。這些異常可能是異常的網(wǎng)絡(luò)流量,fritz上的一個(gè)傳感器,或者只是分析前識(shí)別要清理的數(shù)據(jù)。

        清理的數(shù)據(jù)

        https://www.bmc.com/blogs/data-normalization/

        基于不同方案或方法的多種技術(shù)可以用來識(shí)別異常。例如,圖形的方法(箱線圖、散點(diǎn)圖);基于距離的方案(最近鄰算法、聚類算法);統(tǒng)計(jì)方法(GESD、基于四分位數(shù)的技術(shù))等等。每種方案都有其優(yōu)缺點(diǎn),其效果都取決于實(shí)際用例。

        在本文中,我們將重點(diǎn)關(guān)注GESD(廣義極端學(xué)生化偏差)并在Python中實(shí)現(xiàn)一個(gè)簡單的示例以更好地了解它的原理。在開始之前,我想說明,這篇文章深受我的探索性數(shù)據(jù)分析教授Edward McFowland和Bhavesh Bhatt在YouTube上的機(jī)器學(xué)習(xí)和統(tǒng)計(jì)教程的講座的啟發(fā)。

        機(jī)器學(xué)習(xí)和統(tǒng)計(jì)教程

        https://www.youtube.com/channel/UC8ofcOdHNINiPrBA9D59Vaw

        什么是廣義極端學(xué)生化偏差(Generalized Extreme Studentized Deviate)

        GESD是一種簡單的統(tǒng)計(jì)方法,用于檢測遵循近似正態(tài)分布的單變量數(shù)據(jù)集中的一個(gè)或多個(gè)異常值。統(tǒng)計(jì)方法假設(shè)常規(guī)數(shù)據(jù)遵循某種統(tǒng)計(jì)模型(或分布),而不遵循模型(或分布)的數(shù)據(jù)則是異常值。

        GESD克服了Grubbs檢驗(yàn)和Tietjen-Moore檢驗(yàn)的主要限制:即必須明確確定疑似異常值的數(shù)量k。如果沒有正確指定k,則可能會(huì)擾亂這些測試的結(jié)論。而GESD測試只要求確定疑似異常值數(shù)量的上限。

        給定上限r(nóng),GESD測試基本上執(zhí)行r個(gè)單獨(dú)的測試:一個(gè)異常值的測試,兩個(gè)異常值的測試,依此類推直到r個(gè)異常值。

        GESD測試定義在以下假設(shè)上:

        H0:數(shù)據(jù)集中沒有異常值

        Ha:數(shù)據(jù)集中最多有r個(gè)異常值

        GESM的檢驗(yàn)統(tǒng)計(jì)量公式如下:

        1.png

        GESD的檢驗(yàn)統(tǒng)計(jì)量

        這里,x_bar和σ分別表示樣本均值和樣本標(biāo)準(zhǔn)差。

        在GESD中,我們刪去使得 | xi - x_bar | 最大化的觀測值。然后,用n-1個(gè)觀察值重新計(jì)算上述統(tǒng)計(jì)量。我們重復(fù)這個(gè)過程,直到r個(gè)觀測值被移除。我們由此得到r統(tǒng)計(jì)量R1, R2 ……, Rr。通過代碼示例,這個(gè)過程將變得更加清晰。

        對應(yīng)于r檢驗(yàn)統(tǒng)計(jì)量,由以下公式計(jì)算r的臨界值:

        2.png

        臨界值計(jì)算

        其中 tp, ν 是具有ν自由度的t分布的100p百分點(diǎn),并且

        t分布

        https://www.itl.nist.gov/div898/handbook/eda/section3/eda3664.htm

        3.png

        我們的顯著性水平將用α表示。

        異常值的數(shù)量是通過找到能滿足Ri > λi的最大的i來確定的。

        Rosner的模擬研究表明,該近似臨界值對于樣本數(shù)量n ≥ 25非常準(zhǔn)確,對于n ≥ 15也相當(dāng)準(zhǔn)確。

        請注意,盡管GESD本質(zhì)上是依序使用Grubbs測試而實(shí)現(xiàn)的,但仍有一些重要區(qū)別:

        Grubbs測試

        https://www.itl.nist.gov/div898/handbook/eda/section3/eda35h1.htm

        GESD測試會(huì)根據(jù)被測試的異常值的數(shù)量對臨界值進(jìn)行適當(dāng)?shù)恼{(diào)整,而依序使用Grubbs測試的則沒有這樣的調(diào)整。

        如果遮蔽效應(yīng)明顯,Grubbs 測試的依次使用可能會(huì)過早停止。

        現(xiàn)在再鞏固一下理論部分,在Python中實(shí)現(xiàn)GESD以了解它的實(shí)際工作原理吧。

        首先,模擬我們的數(shù)據(jù)。這里我們創(chuàng)建了0到1之間的100個(gè)隨機(jī)值。數(shù)據(jù)的散點(diǎn)圖如下所示。

        4.png5.png

        現(xiàn)在,我們特意在數(shù)據(jù)中放入一些異常值進(jìn)行識(shí)別。

        6.png

        有異常值的數(shù)據(jù)

        現(xiàn)在我們將創(chuàng)建單獨(dú)的函數(shù)來計(jì)算檢驗(yàn)統(tǒng)計(jì)量和臨界值。

        計(jì)算檢驗(yàn)統(tǒng)計(jì)量的函數(shù)如下:

        7.png

        計(jì)算臨界值的函數(shù)如下:

        8.png

        下面這個(gè)函數(shù)將所有內(nèi)容匯總在一起并執(zhí)行r次以識(shí)別異常值的數(shù)量。對于每次迭代,我們使用上面的函數(shù)來計(jì)算使得|xi - x_bar| 最大化的檢驗(yàn)統(tǒng)計(jì)量,并計(jì)算其相應(yīng)的臨界值,然后從我們的數(shù)據(jù)中刪除這個(gè)觀測值以進(jìn)行下一次迭代。

        9.png

        在我們的數(shù)據(jù)上以5%的顯著性水平和具有7個(gè)異常值上限的情況調(diào)用這個(gè)函數(shù)會(huì)產(chǎn)生以下結(jié)果:

        10.png

        可以看到一共進(jìn)行了7次檢驗(yàn)。異常值的數(shù)量是通過找到滿足Ri > λi的最大的i來確定的。對于此示例,檢驗(yàn)統(tǒng)計(jì)量大于臨界值(在顯著性水平為5%時(shí))的最大異常值數(shù)為3。因此,我們得出結(jié)論,該數(shù)據(jù)集中有3個(gè)異常值。

        代碼鏈接:

        https://gist.github.com/shaleenswarup/77c711ac5bade7c8735fd309d94348ef#file-gistfile1-py

        這就是Python中使用GESD進(jìn)行異常檢測的實(shí)現(xiàn)。希望本文對您實(shí)現(xiàn)這種在數(shù)據(jù)中查找異常值的簡單而有效的方法有所幫助。想查看更多項(xiàng)目,請查看作者的 Github 個(gè)人資料。

        作者的 Github 個(gè)人資料

        https://github.com/shaleenswarup

        引用

        1. bmc | Anomaly Detection with Machine Learning: An Introduction by Jonathan Johnson

        2. Anomaly detection using PCA from datascience904

        https://datascience904.wordpress.com/2019/10/14/anomaly-detection-using-pca/

        3. Generalized ESD Test for Outliers from Engineering Statistics

        https://www.itl.nist.gov/div898/handbook/eda/section3/eda35h3.htm

        原文標(biāo)題:

        Anomaly Detection with GESD (Generalized Extreme Studentized Deviate) in Python

        原文鏈接:

        https://towardsdatascience.com/anomaly-detection-with-generalized-extreme-studentized-deviate-in-python-f350075900e2

        *博客內(nèi)容為網(wǎng)友個(gè)人發(fā)布,僅代表博主個(gè)人觀點(diǎn),如有侵權(quán)請聯(lián)系工作人員刪除。

        電路相關(guān)文章:電路分析基礎(chǔ)


        pic相關(guān)文章:pic是什么




        關(guān)鍵詞: Python

        相關(guān)推薦

        技術(shù)專區(qū)

        關(guān)閉
        主站蜘蛛池模板: 丰顺县| 南溪县| 慈溪市| 绥江县| 抚宁县| 万宁市| 鄂托克前旗| 固镇县| 宁蒗| 阜南县| 清苑县| 铁岭县| 桦南县| 全椒县| 萍乡市| 鹤峰县| 中牟县| 梧州市| 太康县| 花垣县| 苍山县| 嵊泗县| 房产| 武威市| 云阳县| 株洲县| 文成县| 甘孜| 大足县| 济源市| 霸州市| 肇庆市| 赤城县| 罗田县| 沙雅县| 长岭县| 永福县| 蒲城县| 静海县| 辰溪县| 江油市|