不了解结构的异常检测

数据挖掘 异常
2021-10-10 16:40:45

我有一个有趣的问题,我的代码需要能够处理结构化数据,而我在开发时对结构知之甚少。我知道样本遵循可以嵌套的模式,并且叶子包含一些基本的原语,如浮点数、整数和分类。我将在培训时访问模式。我想训练一个可以检测异常的模型,或者更直接地检测样本是否来自原始数据分布。

一种方法是展平数据并训练隔离森林。从我的直觉来看,这与高度相关的特征不同。另一种方法是构建一个神经网络架构,其中包含传递模式的一些结构和原始类型。您可以构建一个自动编码器方法并测量重建误差,我觉得这会更好地处理相关特征,因为这些相关性是由编码器-解码器网络捕获的。一个可能的问题是如何用不同的原语构建这个重建误差度量。

有没有人对此或可能处理相关挑战的论文有任何想法?

编辑:

我会澄清一些事情,抱歉含糊不清。在设计算法时,我不知道所涉及数据集的结构,但在训练模型时,这种结构是已知的。模式可以嵌套的事实并不那么相关,让我们忽略这部分并假设我们有一个扁平的表格数据集,其中我们知道 dtypes。这些 dtype 很可能是混合的,所以我正在寻找一种方法来推断这个集合上的异常。

2个回答

图嵌入

您尝试使用图形嵌入这些将提供基于顶点、边或整个图形模式将基于图形的数据映射到单个潜在空间的能力。在过去的几年里,这已经成为一个令人兴奋的研究课题。将图形分析与现代嵌入技术相结合。

这是一份调查论文,列出了这些嵌入的方法,以及作者自己的静态图动态图库。查看该调查论文的结果(他们在最后执行了一些基准测试),似乎最有希望的模型是:


异常检测

至于异常检测的最终目标,我不确定哪种嵌入方法最适合。可能是要保留更多的局部结构还是全局结构(如 t-SNE 和 PCA 等方法之间的权衡)。

我想你可以想象用嵌入来尝试什么来检测异常。上面链接的论文中可能有更多关于研究人员倾向于以何种方式解决某些问题的线索。

鉴于您的图形数据的分层性质,我很想首先研究使用具有噪声应用的基于分层密度的空间聚类(即 HDBSCAN) - 主库特别包含一些异常值检测方法!这是来自链接论文的引用:

基于这些定义,我们可以设计一种算法 DBSCAN*(类似于 DBSCAN),它在概念上将簇作为图的连通分量,其中 X 的对象是顶点并且每对顶点是相邻的当且仅当对应的对象是 ε-reachable wrt 用户定义的参数 ε 和 mpts。非核心对象被标记为噪声。

重构误差是标准的,不需要太多设计,通常是 xixi2它测量输入向量之间的差异xi 及其重建 xi. 此外,“不了解结构”过于宽泛。如果您不知道数据的信息单元,则无法继续。

首先,您需要了解所有特征及其类型,并决定如何用数字表示它们。例如,结构x=(age[0,100]yrs,height[0,3]m,education{level1,level2,level3})必须是先验的。然后,X可以通过将值归一化为接近 1 的无单位量,并用 one-hot 向量替换分类数据,以数值方式将其表示为向量。例如,将 age = 25 替换为 25/100 = 0.25,height = 1.8 替换为 1.8/3= 0.6,education =level2与 (0, 1, 0)。这样,最终的向量将是X=(0.25,0.6,0,1,0).

让我们假设任务是无监督的,这意味着数据点没有用“异常”和“正常”标签标记。要发现异常,系统必须知道数据的分布以定量评估X用“我以前见过很多相似的东西”或“我以前从未见过这样的东西”。一种直接的方法是将“高斯混合物”(MG)拟合到数据中。假设集群的数量是 k=3(k 可以估计,以多种方式强制)。你喂X 训练有素的 MG 并返回 (X)=C{1,2,3}(X|C)(C), 你现在可以使用 (X) 作为一个程度 X是异常。阈值绝对取决于域,在某些域中,异常发生的概率为 1%,而在其他域中,异常发生的概率为 0.0001%。所以,一个决定可能是:如果(X)<0.001, X 可能是异常情况,必须进行调查。

然而,随着数据的维数从几十维增加到几百上千,这些方法开始遭受“维数诅咒”,这代表了由于数据的高维而导致的许多性能问题。这就是自动编码器等方法可以提供帮助的地方。您嵌入了 100 维数据X进入2-10维空间;使用自动编码器的瓶颈层作为新的表示X. 然后,可以像以前一样使用 MG。有一个问题需要考虑,因为自动编码器试图压缩数据,它们可能会丢弃一些有用的信息作为噪声,这些信息是异常数据的真实特征。这个问题需要通过领域驱动分析进一步调整;比如增加bottleneck层的宽度等。