作者:yueji0j1anke
首发于公号:剑客古月的安全屋
字数:2799
阅读时间: 15min
声明:请勿利用文章内的相关技术从事非法测试,由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,文章作者不为此承担任何责任。本文章内容纯属虚构,如遇巧合,纯属意外
目录
-
前言
-
异常检测基础概念
-
异常检测算法分类
-
异常检测经典模型算法
-
总结
0x00 前言
机器学习基础部分会给大家继续更新。但还是想跟大家先分享一些攻防相关的。
0x01 异常检测基础概念
1.什么是异常检测
异常(anomaly/outlier)指的是远离其他观测数据而疑为不同机制产生的观测数据
在实际工程问题中,一般通过数据挖掘方式识别数据中的异常点
异常检测
应用场景有很多
金融领域:从金融数据中识别”欺诈案例“,如识别信用卡申请欺诈、虚假信贷等;网络安全:从流量数据中找出”入侵者“,并识别新的网络入侵模式;电商领域:从交易数据中识别”恶意买家“,如羊毛党、恶意刷屏、恶意养号团伙;生态灾难预警:基于对风速、降雨量、气温等指标的预测,判断未来可能出现的极端天气;工业界:可通过异常检测手段进行工业产品的瑕疵检测,代替人眼进行测量和判断。
2.异常点
既然要识别异常,首先得找到异常点,其分为三类
1.单点异常
当一个数据点在给定上下文中与其他数据点显著不同(即偏离正常模式),就称其为单点异常
这类使用如下检测方法
基于统计的方法(如z-score、IQR)
基于密度的方法(如LOF)
基于聚类的方法(如k-means)
基于机器学习的方法(如One-Class SVM)
2.上下文异常
当一个数据点在其特定上下文中表现异常,但在整体数据分布中可能看起来正常时,它被称为上下文异常(也称情境异常、情景异常)。
举个例子:
一个城市每天的温度记录如下(单位:℃):
7月1日 35
7月2日 36
7月3日 34
7月4日 10 ←
7月5日 36
-
10℃ 在全国范围可能并不罕见,但在夏天(7月)这个上下文中,它是异常的。
-
因此,这里的“10℃”就是一个上下文异常。
例如 每月工资到账日买一台5000元手机,对你来说是合理的。但如果在凌晨3点、出现在国外某个国家、又不是你常用IP上消费5000元,这就是上下文异常。
这类异常非常适用以下建模
时间序列分析(如温度、股价、心率)
空间数据分析(如GPS轨迹、地震监测)
用户行为建模(如用户的登录时间、位置等)
带上下文的滑动窗口统计法
上下文感知的机器学习模型->条件概率建模,时间序列模型(如 ARIMA、LSTM)
基于图或序列的深度学习方法
3.集体异常
当一组数据点作为整体的行为模式与预期或正常模式显著不同时,就称这组数据为集体异常。
举个例子:
一台服务器连续30秒内出现大量的小数据包连接请求。单个请求是正常的,但连续短时间内出现大量请求就是异常行为,可能是DDoS攻击。
集体异常检测通常依赖对序列模式或结构关系的建模,例如:
-
时间序列模型: HMM(隐马尔可夫模型)、LSTM、GRU
-
滑动窗口 + 模式匹配
-
基于序列相似度的方法(如Dynamic Time Warping)
-
图结构分析(用于社交网络等)
-
深度学习模型(如CNN-LSTM检测行为模式)
3.异常检测的难点
首先是数据的挖掘
其次是数据的标签问题,很多数据没有标签,就算有,置信度就很低,我们很难使用一些成熟的监督学习方法
再者是噪声和异常点混在一起。。。
所以异常检测本身是需要不断改进不断反馈不断优化的这么一个循坏王往返的过程
0x02 异常检测算法分类
我们先从大一点方向进行分类,后续会为大家讲解具体的算法
1.大类方向
-
[时序相关] VS [时序独立]
场景是否跟时间维度有关
-
[全局检测] VS [局部检测]
全局检测:假设正常点分布集中,异常点分布离集中区域较远
局部检测:假设正常点存在多种模式,与这些模式不同的为异常点
-
输出形式:标签 VS 异常分数
-
根据不同的模型特征
这个就是我们所要讲的细分领域了
0x03 异常检测经典模型算法
1.统计检验
正常的数据是遵循特定分布的,异常点和正常点存在较大偏差
比如高斯分布
平方值加减三倍标准差之外的概率仅占0.2%
这是参数方法,还比如说泊松分布及二项式分布等等
非参数方法:数据分布未知时,可绘制直方图通过检测数据是否在训练集所产生的直方图中来进行异常检测。还可以利用数据的变异程度( 如均差、标准差、变异系数、四分位数间距等) 来发现数据中的异常点数据。
缺点:对异常值很敏感,数据若本身不具有正态性,不推荐使用
2.基于深度
将数据映射到k维空间,并假设异常值分布在外围,正常值靠近分类器的中间
这个运用还蛮常见,衍生出了多种方法
1.半空间深度法:计算每个点深度,根据深度阈值可进行异常点判定
2.最小椭圆估计:根据数据点的概率分布模型拟合一个椭圆形,不在该边界范围的即是异常点
3.孤独森林:重点,后面出单独专题
3.基于偏差
定义一个指标 SF(Smooth Factor),这个指标的含义就是当把某个点从集合剔除后方差所降低的差值,我们通过设定一个阈值,与这些偏差值进行比较来确定哪些点存在异常。这个方法是由 Arning 在1996年首次提出的。
应用较少
4.基于距离(聚类)
计算每个点和周围的距离,来判断一个点是否存在异常。假设为正常点周围很多邻居,异常点周围分布较少
又出现了基于嵌套循环、基于网格的距离模型,再之后就是我们熟知的 kNN、KMeans,都可以通过计算距离来做异常检测。
5.基于密度
该种方法和基于距离颇为相似,类似于决策树里面的信息增益和信息增益率的关系。该方法针对所有的点,计算其周围密度和附近点的周围密度,基于两个密度值计算相对密度作为异常分数,相对密度越大,分越高
6.基于重构
该方法核心:正常数据可以被很好重构,异常数据重构效果差,误差大
代表方法 PCA 主成分分析
1.将数据映射到低维特征空间,然后在特征空间不同维度上查看每个数据点跟其它数据的偏差;
PCA会将原始数据从高维映射到低维空间(即主成分空间),我们可以理解为抓住了数据最有代表性的“投影”方向。
在这个低维空间中,可以比较每个数据点在各主成分维度上的坐标。
如果某个数据点在这些主成分上的坐标和其他数据点相比非常不同(比如偏离均值太远),就可能是异常点。
2.将数据映射到低维特征空间,然后由低维特征空间重新映射回原空间,尝试用低维特征重构原始数据,看重构误差的大小
PCA不仅可以将数据降维,还可以通过主成分将降维后的数据重构回原始空间。
对于“正常数据”,因为它们符合主成分模式,所以重构出来的数据会和原始数据很接近,误差很小。
但对于“异常数据”,主成分不能很好地表示它们,导致重构误差(原始数据和重构数据之间的差异)很大。
7.基于深度学习
常见方法:自动编码器AE,长短记忆
Autoencoder异常检测 Autoencoder本质上使用了一个神经网络来产生一个高维输入的低维表示。Autoencoder与主成分分析PCA类似,但是Autoencoder在使用非线性激活函数时克服了PCA线性的限制。算法的基本上假设是异常点服从不同的分布。根据正常数据训练出来的Autoencoder,能够将正常样本重建还原,但是却无法将异于正常分布的数据点较好地还原,导致其基于重构误差较大。当重构误差大于某个阈值时,将其标记为异常值
0x04 总结
本期从异常分类、难点、异常常见算法对ai风控做了初步分析,后期会针对提到的算法(比如KNN、孤独森林、PCA、AE)等进行理论和案例分享。
参考文章:https://zhuanlan.zhihu.com/p/586032528
原文始发于微信公众号(剑客古月的安全屋):ai攻防-异常检测算法图鉴
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论