使用 R 使用数据(具有分类和数值变量)进行异常值检测

机器算法验证 r k-均值 异常值
2022-03-22 04:42:41

设想

我有一个关于欺诈检测的项目,我需要通过 kmeans 查找异常值。

  1. 我有一个关于银行信用长度为 1000 的数据集。

  2. 有 21 列(14 个分类列,7 个数字列)。

问题

我想通过聚类数据来查找异常值,我需要将所有异常值放在同一个集群中。我怎样才能用 R 实现这一点。

我的尝试

我试过了"lofactor",但是分类列给我带来了错误。

我删除了分类列,然后它起作用了。

结果

但我不应该删除分类列,因为它们对于确定异常值也很重要。

那么我怎样才能在 R 中找到异常值模式呢?

1个回答

让我们首先看一下欺诈检测中异常值的标准定义(从Han et al. Data Mining, 2012转述):

客户生成的交易大致遵循高斯分布,例如,考虑例如一天购买一份较大的午餐,另一天购买一份较小的午餐,依此类推。异常值是一个数据对象,它与其余对象显着偏离,就好像遵循不同的分布一样。

即,当绘制一个数值变量时,那些偏离高斯分布的点是您的异常值(可以使用例如 QQ 图、标准分数或其他方法)。


进行中。

使用无监督学习,例如聚类,实际上正如 mkemp6 所注意到的那样,形成了明显不同的数据点的有效子组。然而,没有理由不将这些声明为一组异常值。

但是,在使用混合类型变量时,您会面临 3 个问题:

  1. 如果您打算使用我建议的非分层聚类,那么您将需要确定有多少个聚类(表示为k) 你的数据应该被分组到
  2. 您最终会得到数字和非数字分布的组合,对于后者,您需要定义异常值是什么
  3. 关于异常值的定义,异常值可能遵循非常不同的分布,因此对它们进行聚类可能会很棘手

问题 #3 是将无监督学习方法应用于异常值检测的教科书问题,但这是你必须忍受的。

根据每个分类变量的表达式数量,您的问题或多或少是计算密集型的。如果不是专家,也没有考虑过所有这些,这里有一些想法。

选项1

半快速和简单

此选项是聚类的一种特殊情况,您不需要正式的算法。您可以找到分类变量 ( unique(data[,your_categorical_variables])) 的所有唯一组合,如果您考虑的话,它会为您提供最大数量的可能的唯一集群。通过观察与之相关的数值变量的分布,您可以继续识别那些不适合基础(可能是高斯)分布的数据点。但是,考虑到您的数据集的大小,可能不会有太多重复,即每个分类变量的独特组合我怀疑只有很少的数据点,这将使这种方法过时。

选项 2

没那么快,没那么容易

这实际上使用了聚类。你选择一个分层的 k 原型算法。由于您几乎无法进行图形观察,因此您可以使用选项 1 中的判断来“猜测”集群,尽管对于异常值检测这可能不适合。相反,您可以使用 F 检验作为停止标准。F 检验基本上告诉您,无论是否基于集群中的偏差平方和,划分为k+1在统计上显着优于划分为k集群。聚类完成后,您继续类似于选项 1 来识别稀有分类变量组合,并查看它们的数值分布以检测异常值。

选项 3

半快速,简单

您只选择您的数字变量。您绘制分布。通过图形检查,您可以记下每个变量可能的聚类中心。您使用包中的标准 k-means 算法cluster您将预期的聚类中心作为预期的起点传递给聚类算法。您在完整数据集(包括分类数据)上使用输出索引列表,并确定每个集群的分类变量的罕见组合。在您的情况下,我会特别调查非常小的集群。在将任何集群声明为异常值集群时,您必须做出一些假设。

关于 k 原型的注释

k-prototypes 算法将聚类中心定义为数字和分类数据点的混合。它遵循层次聚类的标准过程:

  1. 挑选k数据中随机聚类中心的数量
  2. 计算一个点到每个聚类中心的距离。距离函数通常包含数字的欧几里得部分和分类变量的 0-1 匹配(阅读链接的论文)。可能需要对分类变量进行更精细的距离函数。
  3. 根据当前分配给它们的所有点的均值和众数调整聚类中心
  4. 对每个数据点重复 2-3
  5. 迭代 2-4 直到聚类中心不再改变

根据结果​​的复杂程度,您可能还想研究遗传算法,以免在这里陷入局部最优;我相信这是一个案例,对此可能特别有意义。

F 检验的注意事项

这取自聚类分析,Everitt 等人,2011 年比较是否聚类成k+1集群优于集群k集群,您可以通过以下方式计算 F 统计量:

F(g1,g2)=(Sg12Sg22)Sg22ng1ng2(g2g1)2/p1

在哪里

g1=k簇数

g2=k+1簇数

n= 数据对象的数量

p= 变量数

S1= 您划分的聚类中心的平方偏差总和k集群

S2= 您划分的聚类中心的平方偏差总和k+1集群

你的分工n对象进入g2如果 F 统计量超过 F 分布的临界值,则集群明显更好p(g2g1)p(ng2)自由程度。