我正在研究一个非正态分布的数据集。数据集包含成本、折扣和利润三个维度。
我试图在所有这些维度中找到可能的异常值。我使用 Z-score 来检测单维度的异常值,以找出导致异常值的高成本。
作为下一步,我试图找出高成本、高利润和低折扣的异常值。
我想出了一个公式:
Zscore(cost) + Zscore(profit) - Zscore(discount)
负号,因为我想找到低折扣的异常值。
这种方法有意义吗?还是有任何进一步证明的方法可以实现这一目标?
我正在研究一个非正态分布的数据集。数据集包含成本、折扣和利润三个维度。
我试图在所有这些维度中找到可能的异常值。我使用 Z-score 来检测单维度的异常值,以找出导致异常值的高成本。
作为下一步,我试图找出高成本、高利润和低折扣的异常值。
我想出了一个公式:
Zscore(cost) + Zscore(profit) - Zscore(discount)
负号,因为我想找到低折扣的异常值。
这种方法有意义吗?还是有任何进一步证明的方法可以实现这一目标?
您是否考虑过使用马氏距离?它可以被认为是多维 Z 分数的大小。
我更喜欢查看马氏距离的方式是多元正态分布指数的平方根。这类似于 Z 分数,它是应用平方之前的单变量正态分布的指数。这两者之间的一个很大区别是 Z-score 是有符号的,而 Mahalanobis 距离是无符号的,这对于查找异常值并不重要。
我知道你没有正态分布的数据,但有时假装你的数据是正态分布的可能会有很好的结果,所以使用马氏距离可能值得研究。
因为您的数据是正态分布的(高斯),您可以轻松地尝试用您想要的语言实现 coursera mooc 中的这个算法: https ://class.coursera.org/ml-005/lecture/91
如果您确定要查找的内容,则可以使用 Z 分数。它也可以只是在使用一些 ML 之前转换数据的一种方式。请注意,Z 分数适用于正态分布的数据(您说的情况并非如此)。还要注意,在 3 维中查找异常值并不像在 1 维中查找 3 次异常值那么简单。您应该以 3D 形式绘制数据,并尝试找出可能存在异常值的位置。
否则,一类 SVM 非常擅长异常/异常值检测。看看这里的介绍。此外,任何聚类算法都可能有助于获得更好的洞察力。例如, DBSCAN可以帮助您根据数据的密度找到集群。