【IT168 评论】现实生活中异常检测的应用非常广泛,作为机器学习算法的一种常见应用,从银行安全到自然科学,从药学到营销,从金融工程到计量经济学,都能看到它的踪影,在今天数据领域爆炸式发展的时刻,异常检测更是人工智能一种形式的体现。
异常检验是一种很有特色的算法,为什么这么说呢,因为传统机器学习算法是在知道寻找目标的前提下,通过设计有效特征来判断和预测结果,而异常检测有时并不知道我们在寻找什么,因为如果知道,则可以通过专家的领域知识来制定明确规则来进行筛选,或者是利用监督性机器学习的分类算法,所以当我们并不知道自己在寻找什么的时候,我们无法确定有什么样的特征才算异常,换句话说,我们首先需要对什么叫做正常数据加以界定,然后通过异常值检验来帮助我们寻找未知,而且定义正常不能用孤立的视角,比如单一一个极致点看似异常,但放在一个时间区间内看却是反复存在的正常模式的组成。所以定义正常并不像想象中那么简单,除了适合的机器学习的算法,更需要专业领域知识的介入,在建模过程中决定什么样才符合业务逻辑。在这里专家知识会有两次被运用到,先是在开始建模时,建立正常情况的范畴,第二次使用是在建立正常范围后,寻找异常的过程。还有一点让异常检验不同于监督性学习的是其不平衡的outcome变量,通常监督性学习会有大量的positive和negative结果,而异常检验经常是大量negative example中夹杂少量positive example,而且异常种类还会多样。
在寻找未知时,使用较多的是非监督性机器学习,异常检验是一个发现的过程,帮助我们了解数据,发现需要额外注意的数据pattern和联系,当然前提是我们需要对什么叫正常数据有很好的定义,然后在非正常的范围中寻找异常,在这里,异常的特征是对立于正常的范畴的,需要说明的是这里正常的范围也包括了已经通过分类算法找到的异常情况,即和预期不相符的情况,或者是提前没有定义的情况,而与结果是否desirable无关。
总之,异常检验和分类算法可以结合使用来解决实际的业务问题,在一开始的“发现阶段”,先使用异常检验来帮助我们理清在寻找什么,有哪些潜在异常,然后设计有效分类器来将新例子分到已知类别中,然后我们通过更新异常检验模型,将已经发现的异常归为“正常”,然后继续发现的过程。
近些年异常检验在算法上并没有特别的突破,更多的改变是在数据的量级上,实时运算,越来越多的专业学术研究开始偏向更为实用的场景运用,这不仅得益于数据量的积累,更得益于数据种类的增加。随着物联网的发展,我们和物品的关系,以及物品和物品之间的关系更为实时和密切,历史和当下的数据可以更好的被监控和保存下来为未来的预测分析做储备。
实用性的异常检测不仅仅是选对算法,和具备搭建技术系统的能力,更重要的是在现实资源和时间有限的前提下,找到性价比高并且符合业务目标的解决方案。
·一个简单异常检验模型的流程
·定义什么是正常数据
·选择用什么指标来衡量识别异常
·划定超出正常多少才算异常
一个简单的异常检验方法是建立异常得分,即对概率事件取负log,举个例子,异常情况一般发生的概率较低,这样它的负导数必然是个很大的正值,这样一个异常情况就被明显识别出来,最后便是利用阈值来筛选出符合条件的“异常”,这里阈值的设定也是有讲究的,它涉及了找到所有异常和得到很多异常警报的权衡。专业术语上叫false positive和false negative的错误折衷,其中的取舍没有对错之分,完全取决于实际的业务场景,比如当错失异常情况成本过高时,比如医疗检测器械,那么我们则需要一个较为敏感的检测模型,即使带来很多的误判,也值得最大限度发现潜在患者,与之对立的是出于预算成本的考虑,即衡量可处理错误异常检验的成本,在预算内设定阈值。
几个需要考虑的点
在电商购物或者是金融交易的情景中我们都需要检测到异常活动,比如价格比率方面,网络流量地理位置,以及特定时间区间内交易的股票数量,值得一提的是有时是某些活动的存在说明了异常的存在,而有时则是某些活动的缺失说明了异常。
对预测值取log,使用相对变化而非绝对变化,便于使用线性模型 (比如:logY=a1logX1+a2logX2+a3logX3+a4logX4+a5logX5)
小心seasonality以及节假日对于时间序列的影响,使用lagged value,使预测更准确
注意白噪音(白噪音:在一个值附近摆动,而没有明确pattern)
几个技术细节
performance evaluation metrics
True positive, false positive, true negative, false negative
Precision/Recall
F1 Score
数据分组规则,如有10000 normal example,20 anomalous example
training:6000 normal example
CV:2000 normal example, 10 anomalous example
Test:2000 normal example,10 anomalous example
Y= 1 if p(x)< epsilon (anomalous); Y= 0 if p(x)>= epsilon (normal)
Use CV set to choose epsilon
Data transformation: make non-gausian features gausian by taking log(x+c) or square root(or one third etc)
Error analysis for anomaly detection: observe misclassified anomaly and see what feature can be found to distinguish it from normal (choose features that might take on unusually large or small values in the event of an anomaly)
Most common problem: p(x) is comparable(say, both large) for normal and anomalous examples, but we want p(x) large for normal examples and small for anomalous examples
Ex: monitor computers in a data center—-x1 memory use of computer; x2 number of disk accesses/sec; x3 CPU load; x4 network traffic; x5 CPU load/network traffic; x6 (CPU load)squared/network traffic
Time series: trend, cylical, seasonal, irregular
find anomaly方法:AnomalyDetection, PCA, Chisq Square Distribution)
STL stands for seasonal-trend decomposition procedure based on Loess
Exponential smoothing techniques are very similar to the ARIMA approach. The basic exponential model is equivalent to the ARIMA (0, 1, 1) model, such as Holt-Winters seasonal method.
AnomalyDetection算法
今天介绍一个 Twitter 员工 Arun Kejariwal等人开发的 AnomalyDetection包,它利用 Seasonal Hybrid ESD (S-H-ESD) 算法,能 简便快捷地计算出异常值,不仅可以识别出全局异常,还可以识别区域异常,输入值可以是time series序列,也可以是不包括日期列的数值vector,异常值检验可以有正向,负向,双向,可以规定感兴趣的时间区间或者周期区间,同时可以显示可视化图,功能还是非常全面的。
环境设置
AnomalyDetection
异常检验佚事
有一次林彪在东北野战军前线指挥所里听取军情汇报,由值班参谋读出下属各个纵队、师、团用电台报告的当日战况和缴获情况,林彪认真细致地记录着“大数据”,在一次关于“胡家窝棚那个战斗的缴获”中,林彪敏锐地从一个数据的微小变化中察觉到了异样,用三个疑问确定了问题的关键所在:
“为什么那里缴获的短枪与长枪的比例比其它战斗略高?”
“为什么那里缴获和击毁的小车与大车的比例比其它战斗略高?”
“为什么在那里俘虏和击毙的军官与士兵的比例比其它战斗略高?”
林彪指着地图上的那个点说:“我断定敌人的指挥所就在这里!”事实上,林彪可以如此笃定,得益于他长期的数据记录和分析,让这些枯燥的数字在林彪脑中形成了系统化的数据库,所以一旦出现偏差,他便可以及时发现不同,推理出准确信息,找出关键价值所在,可见异常检验无处不在。