对于包含混合数据类型(数值型和类别型)的异常检测,需要采用能够有效处理这两种形式的技术。核心挑战在于如何处理数值特征(如年龄或温度)和类别特征(如产品类别或错误代码),以便在保留其信息价值的同时,使算法能够检测到异常模式。这通常涉及预处理步骤、算法选择以及适应不同数据结构的混合方法。
首先,预处理至关重要。数值数据通常需要标准化(例如,缩放到正态分布),以确保各特征对检测的贡献均衡。而类别数据则需要编码成数值表示。常用方法包括独热编码(为每个类别创建二进制列)或目标编码(用目标变量的聚合统计量替换类别)。例如,一个包含“国家”作为类别特征的数据集可以被独热编码成“是_美国”或“是_德国”等列。此外,嵌入(通过神经网络学习到的低维表示)可以捕捉类别之间的关系。scikit-learn 的 ColumnTransformer
等工具通过并行地对数值和类别列应用不同的预处理步骤来简化此过程。
其次,算法选择很重要。一些算法原生支持混合数据。例如,基于树的方法,如 Isolation Forest 或 Random Forests,可以直接使用类别特征分割节点,将其视为离散值。基于距离的方法,如 k-NN,需要进行调整:不再使用欧几里得距离(适用于数值数据),而是混合距离度量,结合汉明距离(用于类别不匹配)和缩放后的数值差异。另一个例子是 Gower 距离,它对数值特征进行归一化,并对类别特征使用重叠度量。Autoencoders(基于重建误差的神经网络)也可以通过为数值和类别特征设计独立的输入分支,并在隐藏层中合并它们来处理混合数据。
最后,混合或集成方法通常非常有效。例如,一个流程可能首先使用 k-means 对数值特征进行聚类,使用 k-modes(针对类别数据的变体)对类别特征进行聚类,然后将聚类结果作为输入馈送给最终的异常检测器。另一种方法是分别计算数值和类别子集的异常分数,然后使用加权平均进行聚合。一个实际例子:检测交易数据中的欺诈行为可能涉及独立标记数值特征(如交易金额)和类别特征(如不寻常的商家类别)中的异常,然后结合结果。PyOD 等库提供了包装器来统一此类混合工作流。
总之,混合数据异常检测依赖于量身定制的预处理、原生支持混合数据或采用改进距离度量的算法,以及用于整合不同数据类型洞见的混合策略。开发者必须平衡计算效率和可解释性,选择与数据结构和异常模式相符的方法。