异常值是指样本中的个别值,其数值明显偏离它所属样本的其余观测值,这些数值是不合理的或错误的。
常见出现异常值的原因主要有数据输入错误、测量误差、故意异常值、数据处理错误、采样错误、自然异常值。数据输入错误是指人为错误(如数据收集,记录或输入过程中引起的错误)可能导致数据异常。例如:客户的年收入为100000元。无意之中,数据输入操作员在图中增加了一个零,变成了1000000元,这样就高出10倍,该值则为异常值。测量误差是指由于测量仪器发生故障导致的,该类异常值是最常见的。例如,有10台称重机,其中9个是完好的,1个是有缺陷的,若是使用有缺陷的称重机测量重量,则会高于/低于该组中的其他人的重量,该重量值即为异常值。故意异常值,该类异常值通常出现在涉及敏感数据的自我报告的度量中。例如:青少年通常会报告他们消耗的酒精量,然而只有一小部分青少年会报告实际消耗的酒精量,这里的实际消耗的酒精量可能看起来像是异常值。数据处理错误是指当进行数据挖掘时,我们会从多个数据源中抽取数据,由于某些操作或抽取错误可能会导致数据集中出现异常值。采样错误是指当测量跳水运动员的身高时,也测量了篮球运动员的身高,并把篮球运动员的身高记入到样本中,这样会导致样本中的数据集出现异常值。自然异常值是指当异常值不是人为原因造成的,那么就有可能是自然异常值。例如,一家知名的保险公司的前50名财务顾问的表现能力都强于其他人群,关于表现能力强弱的值即为自然异常值。
假设,数据集中的大多数实例都是在正常的前提下,异常值的检测方法通常分为三大类,即无监督式异常值的检测、监督式异常值的检测以及半监督式异常值的检测。无监督式异常值的检测,通过寻找与其他数据最不匹配的实例来检测出未标记测试数据的异常。监督式异常值的检测,需要一个已经被标记“正常”与“异常”的数据集,并涉及到训练分类器,用来区分正常值和异常值。半监督式异常值的检测,根据一个给定的正常训练数据集创建一个表示正常行为的模型,将检测的偏离正常行为的对象视为异常值。一般异常值的检测方法包含基于统计的方法、基于聚类的方法、以及一些专门检测异常值的方法等异常值检测的方法。
如果想要删除数据,一定需要有合理的理由。当出现异常值时,需要先搞清楚是什么原因导致的异常值,然后考虑如何去处理。如果异常值是由于输入或测量数据不正确而造成的,则很明显就能看出这一类数据是错的。例如,假设有一个关于体重的数据集,其中女性的体重记录为19斤,通常这样的体重对于一个女性来说是不正常的,她的真实体重可能是119斤或190斤等,由于我们无法确定是哪个值,因此这一类数据可以直接删除。极端异常值会对平均值产生很大影响,但不会影响中位数。因此,如果只计算中位数,则可以包含异常值。如果异常值过于极端而不可信(例如,可能由于测量误差),则应该将其排除;如果异常值是合理的,则需要进行分析是否有异常值数据。如果这两种类型的数据分析得出的结果一致,则可以删除该异常值。
不宜删除异常值的情况,具体如下:通常情况下,数据中出现的异常值较少,如果采集的数据中有超过30%的异常值数据,那么意味着需要进一步研究数据;如果异常值存在且代表了一种真实存在的现象,那就不可随意删除,例如,调查100个村的胃癌发病率,可能确实有个别村庄的发病率远远高于其它村,这时就不能随意删除,而是要把这些异常点纳入,重新拟合模型,研究其规律;分析数据的结果至关重要,因此即使很小的变化也会很重要,例如,可以更好地放弃关于人们最喜欢电视节目的异常值,而不是放弃关于飞机封条失效的温度。
通过Kettle工具,去除文件temperature.txt中的异常值
现在有这样一份记录一天中不同时间温度的数据文件temperature.txt,其中包含时间和温度(摄氏度)两个字段,具体内容如图所示(展示部分数据)。
1.打开Kettle工具,创建转换
通过使用Kettle工具,创建一个转换delete_anomalous _value,并添加“文本文件输入”控件、“过滤记录”控件、“空操作(什么也不做)”控件以及Hop跳连接线。
2.配置文本文件输入控件
预览数据:
3.配置过滤记录控件
4.运行转换
5.查看文件temperature.txt是否去除了异常值
单击“空操作”控件,再单击执行结果的“Preview data”选项卡,查看去除了异常值。