常用异常检测算法
统计假设检验
- 假设原数据服从某个分布(如高斯分布),然后计算 μ 和 σ ,再计算 μ ±3σ 的区间,最后落在区间之外的数据点就被认为是异常值。(可通过取log进行变换)
- 统计检验方法适用于一维数据。比如在反欺诈领域,用户支付金额、支付频次、购买特定商品次数等等,都适用于上述方法。
DBSCAN
- 一个对象周围的密度等于该对象指定距离d内对象的个数。需要小心的选择d,如果d太小,则许多正常点可能具有低密度,从而具有高异常点得分。如果d太大,则许多异常点可能具有与正常点类似的密度(和异常点得分)。
One Class SVM
- 严格地讲,OneClassSVM不是一种outlier detection方法,而是一种novelty detection方法:它的训练集不应该掺杂异常点,因为模型可能会去匹配这些异常点。 但在数据维度很高,或者对相关数据分布没有任何假设的情况下,OneClassSVM也可以作为一种很好的outlier detection方法。
- http://sklearn.apachecn.org/cn/stable/auto_examples/svm/plot_oneclass.html#sphx-glr-auto-examples-svm-plot-oneclass-py
Isolation Forest
- IsolationForest的一个核心参数是contamination,即异常值占比。预设的异常值占比越接近真实占比,模型召回与F1-score越高。作为一个纯粹的无监督算法,异常值占比多少,并没有一个很好的衡量标准。因此,模型上线后,仍然需要投入人力进行样本标注,才能对模型进行迭代优化。
- 特征要求高。对于高维特征,isolation tree表现似乎一般。
- http://sklearn.apachecn.org/cn/stable/auto_examples/ensemble/plot_isolation_forest.html#sphx-glr-auto-examples-ensemble-plot-isolation-forest-py
PyOD
- Python异常检测工具库,pip install PyOD
- https://pyod.readthedocs.io/en/latest/
- https://github.com/yzhao062/anomaly-detection-resources