异常检测方法
异常检测,是业务场景中的常见需求。就如同其他自然发展的食物,离群点总会出现。无论是基因的突变、抑或是之前系统中蕴含的巨大分歧,这个世界上,异常才是常态,稳定反而是一种稀缺状态。
尽管如此,我们在业务中,还是希望抓住确定性。这已深深印刻在人们的内心。每个人都追求稳定性,同时又追求冒险。在业务中,如何发现异常、如何保证系统稳定,是一个系统长期发展的根本基石。
在异常检测中,一般又分为多种情况讨论。一种是点的异常。如手机上的个别黑点。另一种是群体的异常。例如土地种植中,偶尔的小片区域生长异常。单点的异常往往是孤立的,群体的异常往往有着其特殊性。可能是土壤导致的,也可能就是单纯的风向问题。
而另一种的,我们称之为时间序列的异常。这种异常,往往和上下文有关。注入工业制造中,仪器传回的数据异常。仪器的抖动异常、偏移异常等。
对于异常的处理,有很多种办法。下面用实践,来演示和分析各种方法的异常,权当抛砖引玉之用。
异常检测,其实不一定就是异常。也可能是系统中出现的新模式。对于他们,都可以先当作异常处理。只是后续的业务方向不同,一个是作为不好的东西抛弃或处理;一个是作为新的模式,并入旧的模式中去。1
参考:https://machinelearningmastery.com/model-based-outlier-detection-and-removal-in-python/
1. 模型线性预测,计算偏离程度
2. 孤立森林
3. 最小方差检测(前提:高斯分布)
4. 局部异常因子
- [LOF离群因子检测算法](https://zhuanlan.zhihu.com/p/37753692)
sklearn.covariance.EllipticEnvelope : An object for detecting outliers in a
Gaussian distributed dataset.
sklearn.svm.OneClassSVM : Unsupervised Outlier Detection.
Estimate the support of a high-dimensional distribution.
The implementation is based on libsvm.
sklearn.neighbors.LocalOutlierFactor : Unsupervised Outlier Detection
using Local Outlier Factor (LOF).
- http://www.shujuren.org/article/993.html
- https://zhuanlan.zhihu.com/p/47965632
- https://www.secrss.com/articles/11994
- https://scikit-learn.org/stable/modules/outlier_detection.html#overview-of-outlier-detection-methods
- https://www.jianshu.com/p/c5e4e7dce972
参考
- https://machinelearningmastery.com/model-based-outlier-detection-and-removal-in-python/
- https://scikit-learn.org/stable/modules/outlier_detection.html
- https://archive.siam.org/meetings/sdm10/tutorial3.pdf
- https://www.analyticsvidhya.com/blog/2019/02/outlier-detection-python-pyod/

参考资料:
[1] [https://zh.wikipedia.org/wiki/%E5%BC%82%E5%B8%B8%E6%A3%80%E6%B5%8B](https://zh.wikipedia.org/wiki/异常检测)