聚类分析-混合数字和分类数据的无监督异常检测



这个夏天我在做一个数据分析项目。主要目的是利用医院用户访问患者信息的一些访问日志数据,并尝试检测异常访问行为。选择了几个属性来描述用户(例如员工角色、部门、邮政编码)和患者(例如年龄、性别、邮政编码)。有13 - 15个变量在考虑之中。

我以前用的是R,现在用的是Python。我可以根据你们建议的任何合适的工具/库来使用。

在我提出任何问题之前,我想提一下,在交给我的时候,很多数据字段都经过了匿名化处理,这是医疗保健行业保护个人信息的要求。具体来说,很多VARCHAR值被转换成随机整数值,只在整个数据集中保持引用完整性。

问题:

  • 没有给出异常值的确切定义(如果存在一般行为,则根据大多数数据的行为定义),并且没有标记的训练集告诉我数据集的哪些行被认为是异常的。我相信这个项目属于无监督学习领域,所以我正在研究聚类。

    由于数据是混合的(数字和分类),我不确定聚类如何处理这种类型的数据。

    我读到可以扩展分类数据,让变量中的每个类别为0或1,以便进行聚类,但是R/Python如何为我处理如此高维的数据?(仅仅扩大雇主角色就会带来100多个变量)


  • 聚类的结果如何解释?

    使用聚类算法,潜在的"异常值"不也会被分组到聚类中吗?我怎么才能发现它们呢?

    此外,涉及到分类数据,我不确定"点之间的距离"是如何定义的,数据点的接近是否表明类似的行为?将每个类别扩展为具有真/假值的虚拟列是否有帮助?那么距离是多少?


  • 面对聚类分析的挑战,我也开始尝试将数据切片,一次只看两个变量。例如,我会查看特定员工角色访问的患者的年龄范围,并使用四分位数和四分位数间范围来定义异常值。对于分类变量,例如,被触发的员工角色和事件类型,我将只查看被触发的每个事件的频率。

    有人能给我解释一下使用非正态分布数据的四分位数的问题吗?那么补救办法是什么呢?


  • 最后,你会建议这两种方法(或其他一些方法)中的哪一种?使用这种方法的最佳方式是什么?非常感谢。

您可以决定混合数据的相似度度量(例如高尔距离)。

则可以使用任何基于距离的离群值检测方法

对于混合数值和分类属性,可以使用k-prototype算法。在这里你可以找到一个python实现。

最新更新