空值作为特征工程的有用信息

数据挖掘 特征工程 数据库
2022-02-15 20:05:18

我正在为将在 Keras 和 TensorFlow 中运行的神经网络准备功能。这些功能是在 Oracle 中生成的。在那里我还替换了空值。我没有对数据库进行规范化,因为这取决于所选样本。规范化将在 Python 中完成。对于我的用例,这是一个二元分类问题(欺诈检测),空值的存在也与目标变量相关。因此,我想为模型保留这些信息。

我的建议是创建一个名为的附加二进制列varName_isnull,该列对列中是否存在 Null 进行编码varName在其他聚合特征中,此二进制列也将用于计算单位时间内特定分组(即信用卡)的 Null 值的数量。

我的提议合理吗?是否有任何替代表示,如果是,它们的优势是什么?

2个回答

这取决于您要训练的模型类型。如果您正在做一个分类模型(是/否,0/1 类类型),那么我建议您在 python 中使用虚拟变量生成函数。

我还建议您将所有其他分类变量转换为虚拟变量,以便您的模型将所有信息都考虑在内。

特征工程中一种流行的技术是单热编码来改变数据的性质。

因此,通常您会创建一个具有 2 个值的新变量(正如您所提到的):

  • 1 如果变量为 NULL
  • 如果变量具有非 Null 值,则为 0 下面是一些带有很好示例的链接:

https://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.OneHotEncoder.html

https://jamesrledoux.com/code/dummies

祝你好运 !

您的想法最明显的缺点是数据大小。如果您的数据集很小,那么这可能不是问题,但在规模上可能将列数增加一倍可能是一个问题。

一种想法可能是使用与“真实”值完全不同的值对缺失值进行编码 - 一些示例:

  • 使用具有 [0,100] 值的连续变量,将缺失值编码为 -1
  • 使用级别名称为“A”、“B”、“C”的分类变量,将缺失值编码为 999(或它自己的级别)。

我认为,如果您对编码小心,您将能够识别缺失值,因此仍然能够生成您上面提到的组统计信息。