使用R语言进行异常检测

用本福特定律做财务异常检测:R语言实战指南 本福特定律揭示了自然生成数据中首位数字的非均匀分布规律,其数学本质是对数尺度下的均匀性,广泛应用于金融、审计与风控领域的异常检测。该定律不依赖复杂模型,而是基于数据跨越多个数量级、受乘法或指数过程驱动的前提,通过统计观测频次与理论分布(如log₁₀(1+1/d))的偏离度(如MAD、Z-score)识别人为操纵痕迹。在财务造假筛查中,它可快速定位可疑金额模式,如‘10’‘20’开头的集中堆叠,显著提升审计效率。结合R语言benford.analysis包,仅需数行代码即可完成清洗、检验与可视化,是Data 阅读详情
AI摘要

本文介绍了使用R语言进行异常检测的技术,包括单变量异常检测、使用LOF算法进行异常检测、通过聚类方法识别异常以及对时间序列数据的异常检测。此外,还探讨了LOF算法的特点及其局限性,并提供了多个实用案例。

本文结合R语言,展示了异常检测的案例,主要内容如下:

(1)单变量的异常检测

(2)使用LOF(local outlier factor,局部异常因子)进行异常检测

(3)通过聚类进行异常检测

(4)对时间序列进行异常检测

单变量异常检测

本部分展示了一个单变量异常检测的例子,并且演示了如何将这种方法应用在多元数据上。在该例中,单变量异常检测通过boxplot.stats()函数实现,并且返回产生箱线图的统计量。在返回的结果中,有一个部分是out,它结出了异常值的列表。更明确点,它列出了位于极值之外的胡须。参数coef可以控制胡须延伸到箱线图外的远近。在R中,运行?boxplot.stats可获取更详细的信息。

如图呈现了一个箱线图,其中有四个圈是异常值。

如上的单变量异常检测可以用来发现多元数据中的异常值,通过简单搭配的方式。在下例中,我们首先产生一个数据框df,它有两列x和y。之后,异常值分别从x和y检测出来。然后,我们获取两列都是异常值的数据作为异常数据。

在下图中,异常值用红色标记为"+"

类似的,我们也可以将x或y为异常值的数据标记为异常值。下图,异常值用'x'标记为蓝色。

当有三个以上的变量时,最终的异常值需要考虑单变量异常检测结果的多数表决。当选择最佳方式在真实应用中进行搭配时,需要涉及领域知识。

 

使用LOF(local outlier factor,局部异常因子)进行异常检测

LOF(局部异常因子)是用于识别基于密度的局部异常值的算法。使用LOF,一个点的局部密度会与它的邻居进行比较。如果前者明显低于后者(有一个大于1 的LOF值),该点位于一个稀疏区域,对于它的邻居而言,这就表明,该点是一个异常值。LOF的缺点就是它只对数值数据有效。

lofactor()函数使用LOF算法计算局部异常因子,并且它在DMwR和dprep包中是可用的。下面将介绍一个使用LOF进行异常检测的例子,k是用于计算局部异常因子的邻居数量。下图呈现了一个异常值得分的密度图。

 

接着,我们结合前两个主成份的双标图呈现异常值。

在如上代码中,prcomp()执行了一个主成分分析,并且biplot()使用前两个主成分画出了这些数据。在上图中,x和y轴分别代表第一和第二个主成份,箭头表示了变量,5个异常值用它们的行号标记出来了。

我们也可以如下使用pairsPlot显示异常值,这里的异常值用"+"标记为红色。

Rlof包,对LOF算法的并行实现。它的用法与lofactor()相似,但是lof()有两个附加的特性,即支持k的多元值和距离度量的几种选择。如下是lof()的一个例子。在计算异常值得分后,异常值可以通过选择前几个检测出来。注意,目前包Rlof的版本在MacOS X和Linux环境下工作,但并不在windows环境下工作,因为它要依赖multicore包用于并行计算。

通过聚类进行异常检测

 

另外一种异常检测的方法是聚类。通过把数据聚成类,将那些不属于任务一类的数据作为异常值。比如,使用基于密度的聚类DBSCAN,如果对象在稠密区域紧密相连,它们将被分组到一类。因此,那些不会被分到任何一类的对象就是异常值。

 

我们也可以使用k-means算法来检测异常。使用k-means算法,数据被分成k组,通过把它们分配到最近的聚类中心。然后,我们能够计算每个对象到聚类中心的距离(或相似性),并且选择最大的距离作为异常值。

如下是一个基于k-means算法在iris数据上实现在异常检测。

 

在上图中,聚类中心被标记为星号,异常值标记为'+'

对时间序列进行异常检测

本部分讲述一个对时间序列数据进行异常检测的例子。在本例中,时间序列数据首次使用stl()进行稳健回归分解,然后识别异常值。STL的介绍,请访问 http://cs.wellesley.edu/~cs315/Papers/stl%20statistical%20model.pdf.

 

在上图中,异常值用红色标记为'x'

讨论

LOF算法擅长检测局部异常值,但是它只对数值数据有效。Rlof包依赖multicore包,在Windows环境下失效。对于分类数据的一个快速稳定的异常检测的策略是AVF(Attribute Value Frequency)算法。

一些用于异常检测的R包包括:

extremevalues包:单变量异常检测

mvoutlier包:基于稳定方法的多元变量异常检测

outliers包:对异常值进行测验

R语言中的异常值检测与处理 R语言中的异常值检测与处理异常值(Outliers)是指在数据集中与其他观测值显著不同的数据点。它们可能是由于测量误差、数据录入错误、异常事件或者其他原因引起的。在数据分析和统计建模中,处理异常值是一个重要的步骤,因为异常值可能会对分析结果产生不良影响。在本文中,我们将介绍如何使用R语言进行异常值的检测与处理。 阅读详情

相关推荐

R语言中的分位距(IQR):计算、解释和应用

分位距是指数据集中上四分位数(第75百分位数)与下四分位数(第25百分位数)之间的差异,即IQR = Q3 - Q1。其中,第25百分位数是将数据集从小到大排序后,位于25%位置上的值,而第75百分位数是位于75%位置上的值。分位距提供了一种度量数据集中间50%数据的离散程度的方法。它可以帮助我们判断数据集是否存在异常值或离群点。通常情况下,如果数据集中存在异常值,那么异常值往往会对分位距产生显著影响。本文介绍了在R语言中计算、解释和应用分位距(IQR)的方法。

ByteKnight的博客 1942

r语言中检测异常值_R中的异常值检测

r语言中检测异常值 介绍 (Introduction) An outlier is a value or an observation that is distant from other observations, that is to say, a data point that differs significantly from other data points. Enderlein (...

weixin_26752765的博客 1万+

R语言之离群点检验(part2)--局部离群点因子LOF检验

学习笔记 参考文献:《R语言与数据挖掘》 局部离群点因子检验 概述 局部离群点因子(LOF)是一种基于密度的局部离群点的算法。局部离群点因子算法,将一个点的局部密度与其邻域点的局部密度进行比较。如果前者远远小于后者,则该点相对于邻域点位于一个密度更稀疏的区域,则判定该点为离群点。 此处有一个LOF判别标准: LOF值接近1,说明p的其邻域点密度差不多,p可能和邻域同属一簇; LOF值小于1,说明...

小山羊的学习日志 3501

R语言预处理之异常值问题

 >>>> 一、问题 什么是异常值?如何检测异常值?请伙伴们思考或者留言讨论。 >>>> 二、解决方法 1. 单变量异常值检测 2. 使用局部异常因子进行异常值检测 3. 通过聚类的方法检验异常值 4. 检验时间序列数据里面的异常值 >>>> 三、R代码实现 1、单变量异常值检测

mousever的专栏 6669

使用R语言和LSTM实现时间序列异常检测

在这个示例中,我们使用 R 内置的 AirPassengers 数据集,它包含了1949年至1960年每个月的国际航班乘客数量。在这里,我们使用R内置的AirPassengers数据集,它包含了1949年至1960年每个月的国际航班乘客数量。我们将模型的预测值与实际值进行比较,如果两者的差距较大,那么我们就可以认为这个时间点可能存在异常。在时间序列中,异常通常被定义为一个或一系列的数据点,这些点显著偏离了其他数据。在进行时间序列异常检测时,我们的目标是识别出那些偏离正常模式的数据点。在这里,我们主要使用。

斌擎科技 606

使用R语言和LSTM进行时间序列异常检测

接着,我们定义并训练了LSTM模型,将其用于预测测试集,并计算预测误差。最后,我们根据设定的异常阈值检测异常,并将其可视化展示在时间序列图上。时间序列异常检测是一种重要的数据分析技术,可以帮助我们发现在时间序列数据中突然出现的异常或异常模式。在本文中,我们将使用R语言和LSTM模型来实现时间序列异常检测,并提供相应的源代码。我们将定义一个函数来生成训练样本和标签,其中训练样本是一个时间窗口大小的数据子集,标签是下一个时间步的值。假设我们有一个包含时间和数值的数据集,其中数值列是我们要进行异常检测的列。

CyberNerdX的博客 493

【R笔记】使用R语言进行异常检测

【R笔记】使用R语言进行异常检测

dearbaba_11的博客 337

R语言使用DBSCAN进行异常检测:从机器学习的视角

在数据分析中,异常检测是一种重要的任务,用于发现数据集中不符合预期的观察值,也被称为离群值。离群值可能是由于各种原因产生的,包括测量错误、异常行为等。一种常用的异常检测方法是基于密度的空间聚类应用(DBSCAN)。在本文中,我们将深入探讨如何使用R语言和DBSCAN进行异常检测。

斌擎科技 287

【转】R语言异常检测处理

看到一篇干货,感谢作者以及分享者,现与大家分享,转自http://youhaolin.blog.163.com/blog/static/224494120201422110628586/ 本文结合R语言,展示了异常检测的案例,主要内容如下: (1)单变量的异常检测 (2)使用LOF(local outlier factor,局部异常因子)进行异常检测 (3)通过聚类进行异常

JLOGAN 2154

Grubbs异常检测:R语言实现

其中,G值表示异常值与数据集的均值之间的差异程度,U值表示异常值与数据集的标准差之间的差异程度,p-value表示异常值的显著性水平。在这个例子中,我们可以看到检测到一个异常值(100),并且p值小于0.05,说明该异常值是显著的。Grubbs异常检测的原理是基于极值的概念,它假设数据集中的一个观测值是异常值,如果该观测值的离群程度超过了一定的阈值。具体而言,Grubbs异常检测通过计算每个观测值与数据集的均值之间的差异,并将其与标准差进行比较来确定异常值。最后,我们打印了异常检测的结果和检测到的异常值。

CodeByte的博客 384

使用R语言进行异常检测:从机器学习的角度

在本文中,我们将探讨如何使用R语言和DBSCAN算法进行异常检测。DBSCAN是一种常用的聚类算法,也可以用于异常检测,它能够有效地识别具有较高密度的数据点,并将稀疏区域中的数据点标记为异常值。通过使用R语言和DBSCAN算法,我们可以有效地进行异常检测。您可以根据实际情况调整DBSCAN算法的参数,并使用适当的可视化工具来分析和解释结果。DBSCAN算法基于距离和密度的概念,通过设置适当的距离阈值和最小样本数来标记异常值。上述代码将正常观测值标记为蓝色,异常值标记为红色,并添加了合适的标题。

DevProPlus的博客 189

R语言时间序列分解和异常检测方法应用案例

产生了三个新列:“remainder_l1”(下限),“remainder_l2”(上限)和“异常”(是/否标志)。“计数”列被分解为“观察”,“季节”,“趋势”和“剩余”列。此外,可以通过输入基于时间的周期(例如“1周”或“2个季度”)来更改选择,可以确定有多少观察属于时间跨度。创建了两个新列:“recomposed_l1”(下限)和“recomposed_l2”(上限)。业务目标是准确地检测各种营销数据的异常情况,这些数据包括跨多个客户和Web源数千个时间序列的网站操作和营销反馈。

拓端研究室TRL 882

R语言实现基于协方差矩阵的无监督异常检测

异常检测是数据分析中重要的任务之一,它旨在识别数据集中与正常模式不符的异常观测值。在无监督异常检测中,我们不依赖于已知的标签或类别信息,而是通过数据本身的特征来识别异常值。在这个方法中,我们将使用协方差矩阵作为数据的特征来进行异常检测。异常值通常会导致协方差矩阵的变化,因此我们可以通过计算数据的协方差矩阵来检测异常。到目前为止,我们已经介绍了如何在R语言中使用协方差矩阵进行无监督异常检测。通过计算数据的协方差矩阵,我们可以识别出与正常模式不符的异常观测值。包来实现基于协方差矩阵的异常检测。

2301_79330511的博客 289

机器学习:异常检测算法Seasonal Hybrid ESD及R语言实现

机器学习:异常检测算法Seasonal Hybrid ESD及R语言实现

Littleree的博客 413

R语言基于协方差矩阵的无监督异常检测

基于协方差矩阵的无监督异常检测是一种简单而有效的方法,可以帮助我们发现数据集中的异常模式。然而,需要注意的是,这种方法假设数据服从多变量正态分布,并且异常样本与正常样本具有不同的统计特性。异常检测是数据分析和机器学习中的一个重要任务,它用于识别数据集中的异常或异常模式。在许多实际应用中,异常检测可以帮助我们发现潜在的问题或异常行为,并采取相应的措施。在上面的代码中,我们首先生成了一个包含100个样本的虚拟数据集,并进行了数据预处理和协方差矩阵的计算。它可以衡量变量之间的线性关系和变量自身的方差。

斌擎科技 218

Stata极简生存分析

1. 导入数据 webuse drugtr,clear *webuse -- Use dataset from Stata website stset,clear *上一行命令导入进来的数据是“生存时间数据”,会比最原始的数据多四列,这一行命令的目的是重置为原始数据,之所以这样做,是为了显示数据处理的全部过程 codebook drug codebook studytime codebook died codebook age *codebook -- Describe data contents 2.

TOP生物信息 2336

lof异常检测参数寻优方法R语言代码

求lof异常检测算法调整参数,参数寻优方法,R语言代码。

weixin_51127350的博客 147

作为一名爬虫人如何实现千万级数据爬取?

爬虫门槛不高,高就高在往后余生的每一次实操都随时会让你崩溃!Bro

吴秋霖的博客 1万+

异常检测从入门到精通,R语言在结构电池数据分析中的核心技巧

掌握结构电池数据的R异常检测,快速识别电池性能异常。适用于锂电池、储能系统等场景,结合统计分析与机器学习方法,提升检测精度与效率。详解常用R包与实战代码,助力数据驱动决策,值得收藏。

PoliSeed的博客 776

Open3D点云数据处理(六):点云、mesh可视化(Visualizer类)

本文介绍了Open3D中Visualizer类可视化几何对象的方法,给出了常用参数解释和代码示例。

孙悟空 3026

【Simulink教程案例18】基于simulink的基础OFDM+64QAM发射接收链路仿真

OFDM(Orthogonal Frequency Division Multiplexing)即正交频分复用技术,实际上OFDM是MCM(Multi Carrier Modulation),多载波调制的一种。通过频分复用实现高速串行数据的并行传输, 它具有较好的抗多径衰落的能力,能够支持多用户接入。OFDM技术由MCM(Multi-Carrier Modulation,多载波调制)发展而来。OFDM技术是多载波传输方案的实现方式之一,它的。

FPGA/MATLAB学习教程/源码/项目合作开发 1990
上一篇: 信用卡评分中的误判问题说明
下一篇: 图中几个重要的结点
mousever
博客等级 码龄19年 231粉丝 6原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值