KDD Cup 2021:异常检测Baseline思路
独家号 极客精选 原文链接
序列周期类型
本次赛题的数据为时序数据,需要选手完成具体的异常点定位。在进行实践之前,可以根据序列的波动情况完成类型的划分。
主要可以分为:周期型序列、稳定型序列、不稳定型序列
其中稳定型序列
检测比较简单,可以根据波动情况进行检测。不稳定型
序列简单难度较高。
在本次比赛中赛题数据大部分都为周期型序列
,需要我们检测得到异常点。
针对周期型序列
首先可以完成周期的识别,有助于后续的识别过程。可以通过滑动平均+周期分解得到序列的周期性。
基础思路
在完成序列类型的识别后,进一步可以对异常点的类型进行划分。在本次赛题中异常可以分为:单点异常、上下文异常和集合异常两种情况。
对于上下文异常,可以通过窗口内均值和周期均值进行识别。对于集合异常可以根据周期波动性进行识别。
下图是赛题中数据异常数据的一些案例。
👆集合异常,通过波动性可以判断
👆周期异常,周期性可以判断
👆单点异常,通过滑动平均可以判断
👆集合异常,通过周期波动性可以判断
其他算法
时序异常检测算法非常多,这里可以列举一些进行尝试:
ARIMA 基于K-Means检测 基于序列建模型的RNN、LSTM Local Outlier Factor One-Class SVM Deep-SVDD
这里我推荐可以尝试使用序列建模的方法,
步骤1:RNN模型训练数据自监督训练 步骤2:在训练过程中随机加入“异常点” 步骤2:预测结果与数据进行比较
https://github.com/khundman/telemanom
最后根据预测结果的差异性完成异常判断。整个训练训练可控,RNN模型也可以识别到序列的周期性。
另外也可以尝试尝试Deep-SVDD对数据进行映射,并根据距离完成异常检测。
进阶思路
由于赛题数据包含多个数据集,多种时序数据。因此赛题思路可以考虑根据时序数据分开进行处理:
优先识别周期稳定的序列,此种情况下异常稍微比较容易识别。 对周期不稳定的序列,可以考虑从周期性和波动性进行识别。
由于赛题给定了无异常的序列和只包含一个或一段段异常,所以可以考虑从数据入手。如何充分利用赛题数据就是赛题的关键。当然如果占用窗口和波动性判断,也可以有一定分数。
赛题资料
华为KIP异常检测一等奖方案(规则+树模型),https://www.cnblogs.com/huaweiyun/p/14240075.html 华为KPI异常检测二等奖方案(Deep-SVDD模型),https://zhuanlan.zhihu.com/p/330603707 One Class SVM,https://www.cnblogs.com/wj-1314/p/10701708.html Anomaly Detection in Univariate Time-series: A Survey on the State-of-the-Art https://iwringer.wordpress.com/2015/11/17/anomaly-detection-concepts-and-techniques/
我是东哥,最近正在原创👉「pandas100个骚操作」系列话题,欢迎订阅。订阅后,文章更新可第一时间推送至订阅号,每篇都不错过。
最后给大家分享《100本Python电子书》,包括Python编程技巧、数据分析、爬虫、Web开发、机器学习、深度学习。
现在免费分享出来,有需要的读者可以下载学习,在下面的公众号「GitHuboy」里回复关键字:Python,就行。
