这里写目录标题

  • 1. 定义与使用场景
    • 定义
    • 使用场景
    • 数据异常的原因
  • 2. 单变量数据异常识别
    • 2.1 简单统计量分析
    • 2.2 三倍标准差
    • 2.3 box-cox转化+3倍标准差
      • 基本介绍
      • 基本公式
      • Box-Cox优势
      • python 实现
    • 2.4 箱线图
  • 3. 时间序列数据异常识别
    • 3.1 设置恒定阈值
    • 3.2 设置动态阈值-移动平均法
    • 3.3 STL数据拆解法
  • 4. 多变量异常数据识别
    • 4.1 孤立森林模型

1. 定义与使用场景

定义

异常检测,即发现一组数据点中和大多数数据不同的数据点。如果你要去网上搜索英文文献,可以用下面这几个关键字:outlier detection,deviation detection,exception mining或者anomly detecton。但最常用的英语叫法还是outlier detection和anomly detection。
异常检测的方法有很多,基于统计的方法,基于机器学习的方法,基于时间序列的方法等。所有这些方法都是基于一个异常点的稀有性或者与正常数据点的不一致性。异常点或者目标一般都比较稀有,即出现频率低。比如我们说一件事是“万里挑一”,说的就是稀有性。

使用场景

当前异常数据识别的使用场景主要有以下2方面:

  1. 数据分析和数据挖掘在正式分析前的数据处理,识别异常数据后,删除或者修正异常数据,避免异常数据影响分析结论;
  2. 数据去噪:一些异常数据可能会导致数据的期望或者方差等严重偏离正常,利用异常检测方法检测出数据中的噪声通常是数据预处理中很重要的一步。
  3. 风控业务,通过数据识别异常用户、异常访问、异常订单、异常支付等,避免黑产团队入侵。

数据异常的原因

  1. 来自不同类的数据
    一个个体不同于其他个体可能是因为他们的数据源不同,即来自不同的类型或者类别。比如一个盗刷别人的信用卡的用户,跟一个合法的信用卡用户属于两类人。一堆体检男性报告中夹杂着一份女性的体检报告,女性的这份报告的和其他男性报告的本来就是不同的性别。
  2. 自然变异
    很多数据集都满足正态分布,正态分布中,的确会有极其个别样本偏离均值。比如姚明的身高就比一个普通人的身高高几十公分。
  3. 度量和采集造成的异常
    好多数据都是靠仪器和人测量整理的,这难免会有纰漏,比如一个体重秤可能出问题了,那这个秤测量的数据就不靠谱了,或者测量员刚好心情不爽,记录测量数据的时候随便填了一个数。

https://zhuanlan.zhihu.com/p/26001674

2. 单变量数据异常识别

2.1 简单统计量分析

对变量做描述性统计,然后再基于业务考虑哪些数据是不合理的。常用的统计量是最大值和最小值,判断这个变量是否超过合理的范围。例如:用户的年龄为150岁,这就是异常的。

2.2 三倍标准差

定义:如果单变量数据服从正态分布,异常值被定义为与平均值偏差超过3倍标准差的值。
原因:是因为在正态分布的假设下,偏离均值3倍标准差出现的概率小于0.003,是一个小概率事件。
在实际分析中,我们也不一定要拘泥于3倍标准差,可以根据实际严格程度定义,如偏离均值的4倍标准差。

2.3 box-cox转化+3倍标准差

基本介绍

基本公式

如果原始数据的分布是有偏的,不满足正态分布时,可通过BOX-COX转化,在一定程度上修正分布的偏态。转换无需先验信息,但需要搜寻最优的参数λ。Box-Cox变换的一般形式为:

Box-Cox优势

https://wenku.baidu.com/view/96140c8376a20029bd642de3.html

python 实现

式中y(lambda)为经Box-Cox变换后得到的新变量,y为原始连续因变量,lambda为变换参数。
· 以上变换要求原始变量y取值为正,若取值为负时,可先对所有原始数据同加一个常数a,使其(y+a)为正值,然后再进行以上的变换。
· 常见的lambda取值为0,0.5,-1;
lambda = 0,时该变换为对数变换,
-1时为倒数变换,
0.5时为平方根变换。
Box-Cox的python实现如下,可直接通过函数boxcox找到最优的lambda和转化后的值:

2.4 箱线图

箱形图(Box plot),又称为盒须图、盒式图、盒状图或箱线图,是一种用作显示一组数据分散情况的统计图。
它能显示出一组数据的最大值、最小值、中位数及上下四分位数;

箱线图提供了一种数据识别的标准:异常值通常被定义为小于下边缘或者大于上边缘的数据为异常值。如下图所示:
上四分位数:1/4的样本值取值比他大
下四分位数:1/4的样本值取值比他小
上边缘=上四分位数+1.5*(上四分位数-下四分位数)
下边缘=下四分位数-1.5*(上四分位数-下四分位数)

箱线图识别异常数据的优势:

1)箱线图根据数据的真实分布绘制,他对数据不做任何限制性的要求,比如要服从正态分布等;
2)箱线图异常数据识别依赖于上四分数和下四分位数,因此异常值极其偏差不会影响异常值识别的上下边缘。这一点是优于3倍标准差方法的。

3. 时间序列数据异常识别

日常工作中还有一种场景,是需要对时间序列数据进行监控,如:订单量、广告访问量、广告点击量;我们需要从时间维度识别出是否异常刷单、刷广告点击的问题。像广告投放场景下,如果发现渠道刷量,会及时停止广告投放,减少损失。
对于时间序列数据异常识别,根据数据不同的特点,识别方法不同。

3.1 设置恒定阈值

如果时间序列呈现平稳分布状态,即时间序列数据围绕中心值小范围内波动;我们可以定义上下界的恒定阈值,如果超过上下阈值则定义为异常。

3.2 设置动态阈值-移动平均法

所谓动态阈值是指,当前时间的异常阈值是由过去n段时间的时序数据计算决定的;通常对于无周期,比较平稳的时间序列,设定动态阈值的方法是移动平均法。

所谓移动平均法是:
就是用过去n个时间点的时序数据的平均值作为下一个时间点的时序数据的预测,
异常数据识别即是:确定固定移动窗口n,以过去n个窗口的指标平均值作为下一个窗口的预测值;以过去n个窗口的指标的平均值加减3倍方差作为监控的上下界。

使用范围:数据无周期性,数据比较平稳。

3.3 STL数据拆解法

如果时间序列数据是周期性数据,可使用STL算法将时序数据拆解成趋势项、周期项和余项。即每个时刻的时序数据等于当前时序趋势项、周期项和余项的和(或者乘)。

趋势项(T_v):涵盖了这个时序数据的趋势变化;
周期项(S_v):涵盖了时序数据的周期变化;
余项(R_v):表示时序数据除去趋势项和周期项后的日常波动变化。

一般使用STL需要确定2个点:
1)确定数据周期,如外卖业务的一个常规周期为7天。
2)拆分规则,是选择加法方式还是乘法方式。

加法方式:原始数据 = 平均季节数据 + 趋势数据 + 余项这种方式,随着时间的推移季节数据不会有太大的变化,在以七天为一大周期的业务数据更适合这样的拆分方式。
乘法方式:原始数据 = 平均季节数据 * 趋势数据 * 余项这种方式,直观感受是随着时间的推移季节数据波动会非常明显。

至于如何要判断某事的时序数据是否异常,是根据STL分解后的余项来判断;一般情况下,余项部分的时序数据是平稳分布状态,我们可对余项设置恒定阈值或者动态阈值,如果某个时间节点的分解余项超过设定阈值,则是异常数据。

python可以用seasonal_decompose可以将时间序列数据拆解成三部分,具体函数代码如下:

import statsmodels.api as sm
from statsmodels.tsa.seasonal
import seasonal_decompose
import matplotlib.pyplot as plt
# Multiplicative Decomposition(乘法方式分解)
result_mul = seasonal_decompose(data1, model='multiplicative', extrapolate_trend='freq')
Actual_Values = result_mul.seasonal * result_mul.trend * result_mul.resid
# Additive Decomposition(加法方式分解)
result_add = seasonal_decompose(data1, model='additive', extrapolate_trend='freq')
Actual_Values = result_mul.seasonal + result_mul.trend + result_mul.resid

4. 多变量异常数据识别

所谓多变量数据异常识别是指:不只从一个特征去判读数据异常,而是在多个特征下来判断其是否异常。多变量异常数据识别的方法很多,比如聚类模型、孤立森林模型、one-class svm模型等。下面主要介绍简单高效,更容易使用的孤立森林模型。

4.1 孤立森林模型

孤立森林iForest (Isolation Forest) 是一个可扩散到多变量的快速异常检测方法。iForest 适用于连续数据的异常检测,将异常定义为“容易被孤立的离群点——可以理解为分布稀疏且离密度高的群体较远的点。用统计学来解释,在数据空间里面,分布稀疏的区域表示数据发生在此区域的概率很低,因而可以认为落在这些区域里的数据是异常的。
iForest属于非监督学习的方法,即不需要有标记的训练。

数据分析 | 异常数据识别小结相关推荐

  1. 作业3(大作业):python数据分析与应用大作业,对用户用电量数据进行数据处理,包括数据转置、异常数据识别和处理、统计基本统计量(包括峰度、偏度)、按日/周(求和)差分、5%分位数等

    Python数据分析与应用大作业 使用学习过的知识(Numpy数值分析基础.Matplotlib数据可视化基础.Pandas统计分析基础),对data.csv用户用户用电量数据进行相关处理,其中数据中 ...

  2. Python探索性数据分析——异常数据的检测与处理、数据的描述(集中、分散、分布、相关关系、波动)、数据的推断(正态性检验、卡方检验、t检验)

    目录 一.异常数据的检测与处理 1.异常数据检测与处理-基于箱线图 2.异常数据检测与处理-基于正态分布特征 二.数据的描述 1.数据的集中趋势 1.1.数据的集中趋势-平均值 1.1.1.算数平均值 ...

  3. 如何自动化识别异常数据?达到智能预警?

    今天和大家聊聊常见的场景:异常数据的识别,以及预警相关功能的产品化设计. 01 - 场景概述 我们在做数据分析的时候,有一个重要的环节,就是发现目前运行数据的异常,然后基于异常寻找原因.提出意见和建议 ...

  4. 解读:大数据分析及其数据来源

    当我们谈到大数据分析,首先需要确定数据分析的方向和拟解决的问题,然后才能确定需要的数据和分析范围.大数据驱动的分析主要的挑战不是技术问题,而是方向和组织领导的问题,要确定方向,提出问题,需要对行业做深 ...

  5. 大数据分析的“数据来源”有哪些?

    当我们谈到大数据分析,首先需要确定数据分析的方向和拟解决的问题,然后才能确定需要的数据和分析范围.大数据驱动的分析主要的挑战不是技术问题,而是方向和组织领导的问题,要确定方向,提出问题,需要对行业做深 ...

  6. 翻译:Identifying Encrypted Malware Traffic with Contextual Flow Data利用上下文流数据识别加密恶意软件流量

    利用上下文流数据识别加密恶意软件流量 blake anderson思科blake.anderson@cisco.com 摘要 识别加密网络流量中包含的威胁是一组独特的挑战.监视此通信量以防威胁和恶意软 ...

  7. R异常数据检测及处理方法

    R异常数据检测及处理方法 数据中的异常值可能会影响或者干扰模型的准确性以及可靠性,如果我们不正确地检测和处理它们,尤其是在回归模型中异常值对模型的干扰比较大,即回归模型对异常值敏感. 为什么异常点检测 ...

  8. 数据分析与数据科学圈潜在“标杆级”著作,亚马逊智囊团副团长新书

    题图 | 素材来自 Pixabay 大家好,图灵君又跟各位见面了.今天为大家介绍的这本书比较特别,大概是我最近扫射的书中作者背景最「显赫」的一位了. 不知道你听说过亚马逊一个叫 Central Eco ...

  9. 人群异常聚集识别监测

    人群异常聚集识别监测基于在视频中进行关节点检测的速度要小于目标检测,即使在边缘计算的盒子上进行部署,也很难对人群进行大规模的关键点检测和判断,因此关键点检测常用于智能运动检测等小规模人群场景,图上所示 ...

  10. 【技巧分享】【数据分析】数据分析模型

    系列文章目录 [技巧分享][数据分析]数据分析模型 [技巧分享][数据分析]数据分析算法 文章目录 系列文章目录 前言 AARRR模型 变形:阿里系三大模型 AIPL模型 FAST模型 GROW模型 ...

最新文章

  1. transformer引燃机器学习圈 万能的
  2. 正则表达式的学习二:正则表达式的匹配规则总结
  3. mysqlcppconn之ConnectOptionsMap的使用
  4. php mysql日期戳转时间戳_php日期转时间戳,指定日期转换成时间戳
  5. 2019年末逆向复习系列之Boss直聘Cookie加密字段__zp_stoken__逆向分析
  6. mysql 中某个字段相同的数据拼接起来
  7. 嘉年华回顾丨周振兴带你解密POLARDB产品架构与实现
  8. mysql8.0.17压缩包安装教程_mysql 8.0.17 解压版安装配置方法图文教程
  9. JSP的执行过程及生命周期
  10. python安装cvxopt_python如何安装cvxopt
  11. leetcode Largest Rectangle in Histogram 单调栈
  12. RDS binglog
  13. php网页表格样式,分享7款颜色的CSS表格样式美化网页表格用户体验
  14. gt1151触摸驱动调试
  15. 2016河南省第九届ACM程序设计竞赛[正式赛四]
  16. 物联网终端安全系列(之二) -- 物联网终端安全需求分析
  17. js 查找html中的%3c%3e,Web前端攻防,一不小心就中招了
  18. C语言 | 什么是ANSI C标准?
  19. java我的世界溺尸为啥这么少,我的世界:溺尸刷新几率存在问题?溺尸刷怪塔为何得不到三叉戟?...
  20. 怎么看电脑系统是64位还是32位

热门文章

  1. Booth算法笔算快捷方式
  2. 寻找 Symbian 编码(三)
  3. ERP项目基础概念整理
  4. jdk,j2sdk,j2eesdk,jre 的区别和联系
  5. HealthKit Swift 教程: 开始
  6. Android MessageQueue与Message详解
  7. 两幅图像幅度谱和相位谱替换
  8. chrome浏览器提示“adobe flash player不是最新版本!”
  9. C语言也能干大事第十二节(如鹏基础)
  10. Fiddler+Android7.0+python+requests获取app评论内容《完美解决了代理后打开app没有网络的问题!!!》JustTrustMe+VirtualXposed工具的使用