在开展数据科学项目时,您在寻找什么? EDA阶段最重要的部分是什么?如果在EDA阶段没有完成某些事情,可能会影响进一步的统计、机器学习建模。其中之一是找到“异常值”。在这篇文章中,我们将尝试了解什么是异常值?为什么识别异常值很重要?**是什么?不要担心,我们不会仅仅只讲理论部分,我们也会对数据进行一些编码和绘图。
异常值
百度百科定义:
是指一组测定值中与平均值的偏差超过两倍**差的测定值,与平均值的偏差超过三倍**差的测定值,称为高度异常的异常值。
上述定义表明异常值与人群是分开的、不同的。许多动机视频表明与众不同,特别是Malcolm Gladwell。在统计方面,这是否也是好事?我们将通过这篇文章来发现其中的秘密。
你看到上面的图像有什么不同吗?只有3是和别的数字不同的,这就是我们的异常值,因为它不接近其他号码的位置。
数据采集和异常值
我们现在知道什么是异常值,但是,你是否也想知道异常值应该如何向人们介绍?
数据科学项目从收集数据开始,这是异常值首次引入人群的时间。尽管如此,在收集阶段你根本不知道它,异常值可能是数据收集**中出现错误的结果,也可能只是数据中的方差的一个表示。
我们来看一些例子。假设你被要求观察印度板球队的表现,由每个球员跑动并收集数据。
采集数据
从上面采集的数据可以看出,除了球员3得分为10外,其他所有玩家都**了300+。这个数字可能只是一个输入错误,或者它显示了数据的差异,并表明球员3的表现非常糟糕,因此需要改进。
既然我们知道异常值可能是一个错误或者只是一个方差,你会如何决定它们是否重要。那么,如果它们是错误的结果,那么它非常简单,我们就可以忽略它们,但如果它只是数据的变化,我们需要进一步思考。在我们尝试了解是否忽略异常值之前,我们需要知道如何识别它们。
发现异常值
大多数人可能会想,就像我们在前面提到的板球例子中所做的那样,我可以在数据的高峰期找到异常值。让我们考虑一个包含500列和10k +行的文件,您是否仍然认为可以手动找到异常值?为了减轻异常值的发现,我们有很多统计**,但我们只会讨论其中的一些。大多数情况下,我们会尝试查看可视化**(最简单的**)而非数学**。
所以,我们开始吧。我们将使用包含在sklearn数据集API中的波士顿房屋定价数据集。我们将加载数据集并分离出特征和目标。
波士顿楼市数据
特征/自变量将用于查找异常值,看看上面的数据,看起来,我们只有数值,我们也不需要做任何数据格式化。
我们将根据两种类型的**找出异常值,单变量(一个变量异常值**)和多变量(两个或多个变量异常值**)。不要感到困惑,当你开始编码和绘制数据时,你会发现自己检测异常值有多容易。为了简单起见,我们将从检测异常值的基本**开始,并慢慢地继续前进**。
使用可视化工具发现异常值
箱形图-
**百科定义,
箱形图(Box-plot)又称为盒须图、盒式图或箱线图,是一种用作显示一组数据分散情况资料的统计图。因形状如箱子而得名。在各种领域也经常被使用,常见于品质管理。
上面的定义表明,如果存在异常值,它将绘制为箱形图中的点,但其他人群将被组合在一起并显示为框。让我们尝试自己看看。
箱型图
上面的图表显示了10到12点之间的三个点,这些是异常值,因为没有包括在其他观测值的框中,即没有位于四分位点附近。
这里我们**了Uni-variate异常值,即我们只使用DIS列来检查异常值。但我们也可以进行多元异常**。我们可以用箱型图进行多元**吗?那么它取决于,如果你有一个分类值,那么你可以使用任何连续变量,并进行多元异常值**。由于我们在波士顿房屋数据集中没有明确的价值,因此我们可能需要忘记使用箱形图进行多变量异常值**。
散点图-
百度百科定义
散点图是指在回归**中,数据点在直角坐标系平面上的分布图,散点图表示因变量随自变量而变化的大致趋势,据此可以选择**的函数对数据点进行拟合。如定义所示,散点图是显示两个变量值的点的**。我们可以尝试从我们的住房数据集中绘制两个变量的散点图。
散点图 - 每个城镇的非零售业务亩比例v / s全价值物业税
看上面的情节,我们可以将大部分数据点放在左下方,但是有些点远离右上角的人口。
用数学函数发现异常值
Z-Score-
百度百科定义
Z-Score是观测值或数据点的值高于被观测或测量的平均值的**偏差的有符号数。
Z-score背后的直觉是通过查找它们与数据点组的**差和均值的关系来描述任何数据点。它是找到数据的分布,其中平均值为0,**偏差为1,即正态分布。
你一定想知道,这对识别异常值有什么帮助?那么,在计算Z-Score的同时,我们对数据进行重新缩放和居中,并查找距离零太远的数据点。这些距离零太远的数据点将被视为异常值。在大多数情况下,使用3或-3的阈值,即,如果Z-Score分别大于或小于3或-3,则该数据点将被识别为异常值。
我们将使用在scipy库中定义的Z-score函数来检测离群值。
波士顿房屋数据的Z-Score
看上面的代码和输出,很难说哪个数据点是异常值。让我们试着定义一个阈值来识别异常值。
将给出如下结果:
Z-Score大于3的数据点
不要被结果所迷惑。第一个数组包含行号列表和第二个数组各自的列号,这意味着z [55] [1]的Z-Score高于3。
箱型图使用IQR**显示数据和异常值(数据的形状),但为了**已识别的异常值列表,我们需要使用数学公式并检索异常值数据。
IQR
**百科定义
四分位距(IQR)也称为四分差,是衡量统计偏差的指标,等于第75和第25百分位之间的差值,或者等于上和下四分位数之间的差值,IQR = Q3 - Q1。
换句话说,IQR是从第三个四分位数中减去的第一个四分位数;这些四分位数可以在数据上的盒子图上清楚地看到。
它是类似于**偏差或方差的分散度的度量,但对于异常值来说更加稳健。
就查找数据分布而言,IQR与Z-score有些相似,然后保留一些阈值以确定异常值。
让我们来看看我们可以使用IQR对盒子图进行绘图,以及我们如何使用它来找到异常值列表,就像我们使用Z分数计算一样。首先我们将计算IQR,
在这里,我们将**每列的IQR。
IQR为每列
因为我们现在有IQR分数,现在是时候控制异常值了。下面的代码将给出具有一些真值和假值的输出。我们有False的数据点表示这些值是有效的,而True表示存在异常值。
用IQR检测异常值
现在我们知道如何检测异常值,了解它们是否需要删除或更正很重要。在下一节中,我们将考虑一些删除异常值的**,并且如果需要的话可以输入新的值。
使用异常值:更正、删除
在数据****中,当您发现异常值时,最难的决定之一可能是应该如何处理异常值。他们应该删除它们还是纠正它们?在我们讨论这个之前,我们将看看几种去除异常值的**。
Z-Score
在前一节中,我们看到了如何使用Z-score来检测异常值,但现在我们想要移除或过滤异常值并获取干净的数据。这可以用一行代码完成,因为我们已经计算了Z分数。
有和没有异常值数据集的大小
因此,上面的代码从数据集中移除了大约90多行,即异常值已被删除。
IQR评分 -
就像Z-score一样,我们可以使用以前计算的IQR分数来通过仅保留有效值来过滤掉异常值。
上面的代码将从数据集中移除异常值。
有多种**可以检测和删除异常值,但我们用于此练习的**被广泛使用并且易于理解。
是否应该删除异常值。每一位数据**师、数据科学家可能会在他们正在处理的每一个问题中都**这些想法。我找到了一些很好的解释。
总结他们的解释,包括错误的数据、错误的计算,这些可以被识别为离群值,并应该在他们改变数据的水平时被丢弃,也就是说,当您建模数据时会引起问题的平均值。对于前5人**10K,20K,30K,40K和50K的薪水,突然其中一人开始**100K的薪水。考虑到这种情况,因为你是一名雇主,新的薪资更新可能被视为有偏见,或者你可能还需要**其他员工的薪水,以**平衡。因此,您可能有多种理由想要了解并纠正异常值。
总结
在整个练习中,我们看到了数据**阶段如何能够遇到一些不寻常的数据,即异常值。我们了解了可用于检测和删除这些异常值的技术。但是有人提出了一个关于确定是否可以移除异常值的问题。为了回答这些问题,我们发现了更多的读物(这些链接在前一节中提到)。希望这篇文章有助于读者了解异常值。
注:对于本练习,使用了下面的工具和库。
框架- Jupyter笔记本、语言- Python、库- sklearn库、Numpy,、Panda和Scipy,、Plot Lib- Seaborn和Matplot。