前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >独家 | 在Python中使用广义极端学生化偏差(GESD)进行异常检测(附链接)

独家 | 在Python中使用广义极端学生化偏差(GESD)进行异常检测(附链接)

作者头像
数据派THU
发布2021-07-16 10:34:09
1.5K0
发布2021-07-16 10:34:09
举报
文章被收录于专栏:数据派THU
作者:Shaleen Swarup 翻译:欧阳锦校对:王可汗 本文约1700字,建议阅读5分钟本文从理论和实践角度介绍了使用广义极端学生化偏差(GESD)进行异常检测的方法,展示了Python代码示例和相关源码。

关键字:Python 异常值检测 ESD

图源: Unsplash

异常检测在生活中起着非常重要的作用。通常,异常数据可能与某种问题或罕见事件有关,例如 银行欺诈、医疗问题、结构缺陷、设备故障等。这种联系使得能够挑选出哪些数据点可以被视为异常值是非常有趣的,因为从商业角度识别这些事件通常是十分有趣的事情。

此外,许多统计方法对异常值的存在很敏感。例如,平均值和标准差的计算可能会被单个严重不准确的数据点所影响。检查异常值应该是任何数据分析的常规部分,并且应该检查潜在的异常值以查看它们是否可能是错误的数据。

什么是异常值检测

任何发现数据集异常值的过程都可以被称为异常检测;也就是检测那些不合群的事物。这些异常可能是异常的网络流量,fritz上的一个传感器,或者只是分析前识别要清理的数据。

清理的数据

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

基于不同方案或方法的多种技术可以用来识别异常。例如,图形的方法(箱线图、散点图);基于距离的方案(最近邻算法、聚类算法);统计方法(GESD、基于四分位数的技术)等等。每种方案都有其优缺点,其效果都取决于实际用例。

在本文中,我们将重点关注GESD(广义极端学生化偏差)并在Python中实现一个简单的示例以更好地了解它的原理。在开始之前,我想说明,这篇文章深受我的探索性数据分析教授Edward McFowland和Bhavesh Bhatt在YouTube上的机器学习和统计教程的讲座的启发。

机器学习和统计教程

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

什么是广义极端学生化偏差(Generalized Extreme Studentized Deviate)

GESD是一种简单的统计方法,用于检测遵循近似正态分布的单变量数据集中的一个或多个异常值。统计方法假设常规数据遵循某种统计模型(或分布),而不遵循模型(或分布)的数据则是异常值。

GESD克服了Grubbs检验和Tietjen-Moore检验的主要限制:即必须明确确定疑似异常值的数量k。如果没有正确指定k,则可能会扰乱这些测试的结论。而GESD测试只要求确定疑似异常值数量的上限。

给定上限r,GESD测试基本上执行r个单独的测试:一个异常值的测试,两个异常值的测试,依此类推直到r个异常值。

GESD测试定义在以下假设上:

  • H0:数据集中没有异常值
  • Ha:数据集中最多有r个异常值

GESM的检验统计量公式如下:

GESD的检验统计量

这里,x_bar和σ分别表示样本均值和样本标准差。

在GESD中,我们删去使得 | xi - x_bar | 最大化的观测值。然后,用n-1个观察值重新计算上述统计量。我们重复这个过程,直到r个观测值被移除。我们由此得到r统计量R1, R2 ……, Rr。通过代码示例,这个过程将变得更加清晰。

对应于r检验统计量,由以下公式计算r的临界值:

临界值计算

其中 tp, ν 是具有ν自由度的t分布的100p百分点,并且

t分布

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

我们的显著性水平将用α表示。

异常值的数量是通过找到能满足Ri > λi的最大的i来确定的。

Rosner的模拟研究表明,该近似临界值对于样本数量n ≥ 25非常准确,对于n ≥ 15也相当准确。

请注意,尽管GESD本质上是依序使用Grubbs测试而实现的,但仍有一些重要区别:

Grubbs测试

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

  • GESD测试会根据被测试的异常值的数量对临界值进行适当的调整,而依序使用Grubbs测试的则没有这样的调整。
  • 如果遮蔽效应明显,Grubbs 测试的依次使用可能会过早停止。

现在再巩固一下理论部分,在Python中实现GESD以了解它的实际工作原理吧。

首先,模拟我们的数据。这里我们创建了0到1之间的100个随机值。数据的散点图如下所示。

现在,我们特意在数据中放入一些异常值进行识别。

有异常值的数据

现在我们将创建单独的函数来计算检验统计量和临界值。

计算检验统计量的函数如下:

计算临界值的函数如下:

下面这个函数将所有内容汇总在一起并执行r次以识别异常值的数量。对于每次迭代,我们使用上面的函数来计算使得|xi - x_bar| 最大化的检验统计量,并计算其相应的临界值,然后从我们的数据中删除这个观测值以进行下一次迭代。

在我们的数据上以5%的显着性水平和具有7个异常值上限的情况调用这个函数会产生以下结果:

可以看到一共进行了7次检验。异常值的数量是通过找到满足Ri > λi的最大的i来确定的。对于此示例,检验统计量大于临界值(在显着性水平为5%时)的最大异常值数为3。因此,我们得出结论,该数据集中有3个异常值。

代码链接:

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

这就是Python中使用GESD进行异常检测的实现。希望本文对您实现这种在数据中查找异常值的简单而有效的方法有所帮助。想查看更多项目,请查看作者的 Github 个人资料。

作者的 Github 个人资料

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

原文标题:

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

原文链接:

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

编辑:王菁

校对:林亦霖

译者简介

欧阳锦,一名在埃因霍温理工大学就读的硕士生。喜欢数据科学和人工智能相关方向。欢迎不同观点和想法的交流与碰撞,对未知充满好奇,对热爱充满坚持。

翻译组招募信息

工作内容:需要一颗细致的心,将选取好的外文文章翻译成流畅的中文。如果你是数据科学/统计学/计算机类的留学生,或在海外从事相关工作,或对自己外语水平有信心的朋友欢迎加入翻译小组。

你能得到:定期的翻译培训提高志愿者的翻译水平,提高对于数据科学前沿的认知,海外的朋友可以和国内技术应用发展保持联系,THU数据派产学研的背景为志愿者带来好的发展机遇。

其他福利:来自于名企的数据科学工作者,北大清华以及海外等名校学生他们都将成为你在翻译小组的伙伴。

转载须知

如需转载,请在开篇显著位置注明作者和出处(转自:数据派ID:DatapiTHU),并在文章结尾放置数据派醒目二维码。有原创标识文章,请发送【文章名称-待授权公众号名称及ID】至联系邮箱,申请白名单授权并按要求编辑。

发布后请将链接反馈至联系邮箱(见下方)。未经许可的转载以及改编者,我们将依法追究其法律责任。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-06-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 数据派THU 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 什么是异常值检测
  • 什么是广义极端学生化偏差(Generalized Extreme Studentized Deviate)
  • 引用
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档