让我们首先看一下欺诈检测中异常值的标准定义(从Han et al. Data Mining, 2012转述):
客户生成的交易大致遵循高斯分布,例如,考虑例如一天购买一份较大的午餐,另一天购买一份较小的午餐,依此类推。异常值是一个数据对象,它与其余对象显着偏离,就好像遵循不同的分布一样。
即,当绘制一个数值变量时,那些偏离高斯分布的点是您的异常值(可以使用例如 QQ 图、标准分数或其他方法)。
进行中。
使用无监督学习,例如聚类,实际上正如 mkemp6 所注意到的那样,形成了明显不同的数据点的有效子组。然而,没有理由不将这些声明为一组异常值。
但是,在使用混合类型变量时,您会面临 3 个问题:
- 如果您打算使用我建议的非分层聚类,那么您将需要确定有多少个聚类(表示为k) 你的数据应该被分组到
- 您最终会得到数字和非数字分布的组合,对于后者,您需要定义异常值是什么
- 关于异常值的定义,异常值可能遵循非常不同的分布,因此对它们进行聚类可能会很棘手
问题 #3 是将无监督学习方法应用于异常值检测的教科书问题,但这是你必须忍受的。
根据每个分类变量的表达式数量,您的问题或多或少是计算密集型的。如果不是专家,也没有考虑过所有这些,这里有一些想法。
选项1
半快速和简单
此选项是聚类的一种特殊情况,您不需要正式的算法。您可以找到分类变量 ( unique(data[,your_categorical_variables])
) 的所有唯一组合,如果您考虑的话,它会为您提供最大数量的可能的唯一集群。通过观察与之相关的数值变量的分布,您可以继续识别那些不适合基础(可能是高斯)分布的数据点。但是,考虑到您的数据集的大小,可能不会有太多重复,即每个分类变量的独特组合我怀疑只有很少的数据点,这将使这种方法过时。
选项 2
没那么快,没那么容易
这实际上使用了聚类。你选择一个分层的 k 原型算法。由于您几乎无法进行图形观察,因此您可以使用选项 1 中的判断来“猜测”集群,尽管对于异常值检测这可能不适合。相反,您可以使用 F 检验作为停止标准。F 检验基本上告诉您,无论是否基于集群中的偏差平方和,划分为k+1在统计上显着优于划分为k集群。聚类完成后,您继续类似于选项 1 来识别稀有分类变量组合,并查看它们的数值分布以检测异常值。
选项 3
半快速,简单
您只选择您的数字变量。您绘制分布。通过图形检查,您可以记下每个变量可能的聚类中心。您使用包中的标准 k-means 算法cluster
。您将预期的聚类中心作为预期的起点传递给聚类算法。您在完整数据集(包括分类数据)上使用输出索引列表,并确定每个集群的分类变量的罕见组合。在您的情况下,我会特别调查非常小的集群。在将任何集群声明为异常值集群时,您必须做出一些假设。
k-prototypes 算法将聚类中心定义为数字和分类数据点的混合。它遵循层次聚类的标准过程:
- 挑选k数据中随机聚类中心的数量
- 计算一个点到每个聚类中心的距离。距离函数通常包含数字的欧几里得部分和分类变量的 0-1 匹配(阅读链接的论文)。可能需要对分类变量进行更精细的距离函数。
- 根据当前分配给它们的所有点的均值和众数调整聚类中心
- 对每个数据点重复 2-3
- 迭代 2-4 直到聚类中心不再改变
根据结果的复杂程度,您可能还想研究遗传算法,以免在这里陷入局部最优;我相信这是一个案例,对此可能特别有意义。
F 检验的注意事项
这取自聚类分析,Everitt 等人,2011 年。比较是否聚类成k+1集群优于集群k集群,您可以通过以下方式计算 F 统计量:
F(g1,g2)=(S2g1−S2g2)S2g2n−g1n−g2∗(g2g1)2/p−1
在哪里
g1=k簇数
g2=k+1簇数
n= 数据对象的数量
p= 变量数
S1= 您划分的聚类中心的平方偏差总和k集群
S2= 您划分的聚类中心的平方偏差总和k+1集群
你的分工n对象进入g2如果 F 统计量超过 F 分布的临界值,则集群明显更好p(g2−g1)和p(n−g2)自由程度。