通过无监督算法检测异常值:欺诈检测

数据挖掘 Python 聚类 scikit-学习 支持向量机 离群值
2021-10-15 23:14:32

我已经设置了 300,000 行包含信用卡交易的行,我的工作是在这些数据集中查找异常值(可疑交易)。

我创建了大约 5 个功能(所有连续数据,以 1 列作为事务 ID)

我需要返回所有交易 ID 的列表,这看起来很可疑

我试过什么

我曾尝试使用 K 均值算法,但它不适合我笔记本电脑的内存(8 GB)并且它崩溃了。

我想尝试 1 类 SVM,但我没有看到任何好的教程让我开始。我尝试了 scikitlearn 官方教程,但它已经添加了异常值,他们只是在绘制它。

http://scikit-learn.org/stable/auto_examples/svm/plot_oneclass.html#sphx-glr-auto-examples-svm-plot-oneclass-py

http://scikit-learn.org/stable/auto_examples/covariance/plot_outlier_detection.html#sphx-glr-auto-examples-covariance-plot-outlier-detection-py

如何自动检测异常值并返回这些观察结果?

2个回答

首先,从一个子集开始,直到你知道你在做什么。等待几个小时来等待一个不起作用的结果,或者内存不足,或者优化,只是为了发现它不起作用是没有用的。

其次,确保你的预处理做得非常好。糟糕的预处理会损害你的算法。

根据我的经验,一类 SVM 不能很好地工作。它假设您的所有训练数据都是“正常”类(没有异常值),这是所有正常数据的代表性样本。其次,您需要调整内核参数,但是如何在没有标记异常的情况下做到这一点?

相反,我会尝试 knn 异常值检测、LOF 和 LoOP。

但是对于这些,您需要确保您的距离是一个非常好的相似性度量。如果你没有很好地预处理,距离不起作用,然后最近邻方法也不起作用。

好的,这有点晚了,但有两点希望对将来的某人有所帮助。

  1. 您正在寻找的标签应该由clf.predict(另请参阅您发布的教程)返回

  2. 从这个问题中可以看出,为什么我的 SVM 不能学习你的测试集实际上必须包含异常值的重复元素序列。这与 scikit-learn 中的声明相矛盾,即他们正在进行新颖性检测。对我来说,给定的链接证明该方法没有(并不是说这会是一个问题,重要的是要知道)。