Ⅰ 怎么对统计数据的异常值进行判断和处理
异常值,指的是样本中的一些数值明显偏离其余数值的样本点,所以也称为离群点。异常值分析就是要将这些离群点找出来,然后进行分析。
异常值判断
在不同的数据中,鉴别异常值有不同的标准,常规有以下几种:
(1)数字超过某个标准值
这是最常用的异常值判断方法之一。主要是看数据中的最大值或最小值,依据专业知识或个人经验,判断是否超过了理论范围值,数据中有没有明显不符合实际情况的错误。
比如,测量成年男性身高(M),出现17.8m这样的数据,显然不符合实际情况。
又或者,如问卷数据使用1-5级量表进行研究,出现-2,-3这类数据,则可能提示为跳转题、空选等。
(2)数据大于±3标准差
3σ 原则是在数据服从正态分布的时候用的比较多,在这种情况下,异常值被定义为一组测定值中与平均值的偏差超过3倍标准差的值。
在数据处理的时候,按照正态分布的性质,三个标准差以外的数据都可以被看作是错误的数据从而排除掉。
Ⅱ 如何判别测量数据中是否有异常值
一般异常值的检测方法有基于统计的方法,基于聚类的方法,以及一些专门检测异常值的方法等,下面对这些方法进行相关的介绍。
1. 简单统计
如果使用pandas,我们可以直接使用describe()来观察数据的统计性描述(只是粗略的观察一些统计量),不过统计数据为连续型的,如下:
df.describe()红色箭头所指就是异常值。
以上是常用到的判断异常值的简单方法。下面来介绍一些较为复杂的检测异常值算法,由于涉及内容较多,仅介绍核心思想,感兴趣的朋友可自行深入研究。
4. 基于模型检测
这种方法一般会构建一个概率分布模型,并计算对象符合该模型的概率,把具有低概率的对象视为异常点。如果模型是簇的集合,则异常是不显着属于任何簇的对象;如果模型是回归时,异常是相对远离预测值的对象。
离群点的概率定义:离群点是一个对象,关于数据的概率分布模型,它具有低概率。这种情况的前提是必须知道数据集服从什么分布,如果估计错误就造成了重尾分布。
比如特征工程中的RobustScaler方法,在做数据特征值缩放的时候,它会利用数据特征的分位数分布,将数据根据分位数划分为多段,只取中间段来做缩放,比如只取25%分位数到75%分位数的数据做缩放。这样减小了异常数据的影响。
优缺点:(1)有坚实的统计学理论基础,当存在充分的数据和所用的检验类型的知识时,这些检验可能非常有效;(2)对于多元数据,可用的选择少一些,并且对于高维数据,这些检测可能性很差。
5. 基于近邻度的离群点检测
统计方法是利用数据的分布来观察异常值,一些方法甚至需要一些分布条件,而在实际中数据的分布很难达到一些假设条件,在使用上有一定的局限性。
确定数据集的有意义的邻近性度量比确定它的统计分布更容易。这种方法比统计学方法更一般、更容易使用,因为一个对象的离群点得分由到它的k-最近邻(KNN)的距离给定。
需要注意的是:离群点得分对k的取值高度敏感。如果k太小,则少量的邻近离群点可能导致较低的离群点得分;如果K太大,则点数少于k的簇中所有的对象可能都成了离群点。为了使该方案对于k的选取更具有鲁棒性,可以使用k个最近邻的平均距离。
优缺点:(1)简单;(2)缺点:基于邻近度的方法需要O(m2)时间,大数据集不适用;(3)该方法对参数的选择也是敏感的;(4)不能处理具有不同密度区域的数据集,因为它使用全局阈值,不能考虑这种密度的变化。
5. 基于密度的离群点检测
从基于密度的观点来说,离群点是在低密度区域中的对象。基于密度的离群点检测与基于邻近度的离群点检测密切相关,因为密度通常用邻近度定义。一种常用的定义密度的方法是,定义密度为到k个最近邻的平均距离的倒数。如果该距离小,则密度高,反之亦然。另一种密度定义是使用DBSCAN聚类算法使用的密度定义,即一个对象周围的密度等于该对象指定距离d内对象的个数。
优缺点:(1)给出了对象是离群点的定量度量,并且即使数据具有不同的区域也能够很好的处理;(2)与基于距离的方法一样,这些方法必然具有O(m2)的时间复杂度。对于低维数据使用特定的数据结构可以达到O(mlogm);(3)参数选择是困难的。虽然LOF算法通过观察不同的k值,然后取得最大离群点得分来处理该问题,但是,仍然需要选择这些值的上下界。
6. 基于聚类的方法来做异常点检测
基于聚类的离群点:一个对象是基于聚类的离群点,如果该对象不强属于任何簇,那么该对象属于离群点。
离群点对初始聚类的影响:如果通过聚类检测离群点,则由于离群点影响聚类,存在一个问题:结构是否有效。这也是k-means算法的缺点,对离群点敏感。为了处理该问题,可以使用如下方法:对象聚类,删除离群点,对象再次聚类(这个不能保证产生最优结果)。
优缺点:(1)基于线性和接近线性复杂度(k均值)的聚类技术来发现离群点可能是高度有效的;(2)簇的定义通常是离群点的补,因此可能同时发现簇和离群点;(3)产生的离群点集和它们的得分可能非常依赖所用的簇的个数和数据中离群点的存在性;(4)聚类算法产生的簇的质量对该算法产生的离群点的质量影响非常大。
7. 专门的离群点检测
其实以上说到聚类方法的本意是是无监督分类,并不是为了寻找离群点的,只是恰好它的功能可以实现离群点的检测,算是一个衍生的功能。
Ⅲ “Python”Pandas如何解决业务问题“数据分析流程详解”
在数据科学领域,Python因其强大的功能和广泛的库支持,成为了数据分析师的首选工具。其中,Pandas作为Python的数据处理利器,在解决业务问题时展现出了无可替代的价值。本文将通过完整的数据分析流程,解析Pandas如何协助解决业务问题,具体案例来源于对一家虚构超市的订单数据集的分析,以探索Pandas在数据清洗、特征工程、数据预处理等环节的应用。
首先,我们设计了一个包含各种不规范数据点的模拟数据集,以考验Pandas的清洗能力。这些数据来源于对超市订单的深入分析,包含多个数据表格。为了确保分析的准确性,我们首先导入了Pandas所需的模块,如pd.read_excel和pd.read_csv,用于从数据集中加载多页数据。
导入数据后,我们对数据进行了初步的了解,明确数据字段及定义,这一步是数据预处理的关键,确保后续分析的准确性。通过pd.Series.head(),我们可以快速查看每个数据表格的字段示例数据,从而对数据有一个清晰的认识。
在明确业务需求和分析方法后,我们开始利用Pandas进行数据清洗和特征工程。数据清洗旨在识别并处理异常值,以确保分析结果的可靠性。异常值可能是数据中的错误或不寻常的高或低值,通过pd.Series.str.contains和pd.Series.between()等方法,我们可以精准定位并剔除这类数据。此外,数据类型转换是另一个重要步骤,确保所有数据类型符合后续分析的需要。
特征工程和数据清洗完成后,我们开始构建分析所需的特征,比如通过聚合计算用户累计消费金额和频率,以及顾客购买行为的时间序列特征。这些特征为后续的模型构建提供了坚实的基础。在构建特征的过程中,我们通过pd.groupby().agg()对用户消费特征进行了聚合计算,特别对R(最近一次消费时间)值进行了日期之间的距离计算,以准确反映用户活跃度。
通过pd.cut函数,我们对用户客单价区间进行了分箱处理,将数据划分为多个价格区间,从而更细致地分析不同消费水平的用户群体。这一过程通过pd.Series.value_counts方法实现了对客单价分布的统计,为后续的模型构建和策略制定提供了重要依据。
在数据预处理和特征构建完成后,我们进入模型构建阶段。通过Tukey's Test方法对RFM指标进行离群值检测,确保模型的稳健性。我们计算了R、F、M值的分位数,通过Q3和Q1确定合理值区间,将在此区间之外的数据标记为异常值。随后,我们通过聚类分析计算了RFM阈值,基于二八原则(20%的关键客户)来确定用户分群的规则。
构建RFM模型后,我们对用户进行了分群计算,通过RFM阈值将用户划分为活跃、中等、不活跃等不同层级。这一过程不仅揭示了用户的消费行为模式,还为制定个性化营销策略提供了依据。通过透视表和逆透视表方法,我们深入分析了不同分群的用户在客单价、人数占比等关键指标上的表现,从而为业务提供更具洞察力的决策支持。
本文以Pandas为核心,展示了从数据导入、清洗、特征构建到模型构建的完整数据分析流程,通过实际案例探讨了Pandas在解决业务问题中的应用。通过掌握这些技能,数据分析师可以更高效地处理数据,发现有价值的信息,为业务决策提供有力支持。在后续的进阶篇中,我们将深入探讨机器学习流程和更复杂的特征工程内容,以提供更全面的数据分析解决方案。