删除列或输入数字

数据挖掘 缺失数据 数据插补
2022-02-13 10:58:19

在查看了在数据集中输入数据以替换的各种不同方式NaN与基于阈值删除观察或列的各种不同方式之后,正确的技术仍然非常令人困惑。我知道这必须根据具体情况进行处理,所以我将给出一个上下文:

我有一个约 15k 观察和超过 40 列的数据集。Col1 到 Col6 的缺失值很高,因为数据根本不存在。例如 Col1 可以是 2 次连续交易之间的平均天数。如果客户只购买一次,则平均值为NULL.

解决此问题的适当技术是什么?

列名 数数 百分
Col1 12000 80%
Col2 11500 78%
Col3 10200 65%
Col4 10000 62%
Col5 8000 40%
Col6 7500 36%
Col7 2000 7%
4个回答

第 1 到 6 列:如果数据因为不存在而丢失,这是否会告诉您有关变量/目标/客户的一些信息?如果是这样,您希望在您的插补中保留该信息。

例如,如果 X 列是自上次交易以来的平均天数,那么缺失值是否意味着这是一个新客户?

如果是这种情况,那么一种方法是用不同的值替换缺失值,使您和您的模型管道能够识别没有发生此类事件。因此,第 1 列中的缺失值可以替换为-1say。

第 7 列:有多种方法,包括用基于非缺失值(例如平均值、中位数、众数)的统计量替换缺失值以及更高级的方法,例如使用其他列建模第 7 列和使用模型预测来替换缺失值(MICE )。

如果某个特征的 80% 的值缺失,您可能应该删除该特征。剩下的 20% 的值中没有那么多信号。此外,数据丢失的原因很可能会影响建模。

许多其他功能也比现在丢失了更多的数据。

即使在 40-36% 的缺失率下,该功能也是值得怀疑的。

剩下的一个特征有 7% 的缺失率。最强大的插补技术使用来自其他列的现有值来预测单个列中的缺失值。不应应用这些技术,因为其他列是可疑的。

单列插补技术(例如,用中值或众数替换缺失值)可能适用于 Col7。

根据项目的目标以及您希望对结果的信任程度,似乎应该只使用一个特性 (Col7)。

一个有趣的解决方案是测量模型的不确定性,以量化每个结果的质量,因为某些情况下的不确定性较低,而另一些情况下则不会。

这是一篇解释如何做到这一点的论文:

https://arxiv.org/abs/1506.02142

回答

采取两步法。

  • 在缺失的数据点处应该估算什么?
  • 我们可以添加一个新列来指示丢失的第二笔交易吗?

例如,首先,用负值估算缺失值。其次,创建额外的featureCol1_flag,这将具有二进制值yesNoYes指示缺少第二笔交易 - 的原因NaN,并指示具有合法价值No的正常情况。Col1现在,您需要对所有6列执行此操作,即用负值估算缺失值,并为每个此类列创建一个新特征以指示交易条件。因此,您将有 6 个新功能也将包含在建模中。这项工作成功,请尝试让我知道。

@Roger 在下面进行详细讨论:这是一种简单的方法,可用于填充NaNNull用于由于特性的性质而具有大量缺失值的事务数据点,并且需要保留这些列以确保业务逻辑流入机器学习训练时的模型。

插补

假设,Col1可以是 2 次连续交易之间的平均天数。如果客户只购买一次,则平均值为 NULL。 首先,缺失值的插补必须是数字的。而且因为只存在一笔交易,我们无法计算差值、均值、中位数或标准差。Col因此,在这种情况下,用一个大的负值来估算中的缺失值,例如-9999这将有助于向机器学习模型发送关于缺失值的特殊重要性的信号,同时保持交易条目的完整性。因此,我们不会在数据点的数量上妥协。

列名 数数 百分 缺失值插补
Col1 12000 80% -9999
Col2 11500 78% -9999
Col3 10200 65% -9999
Col4 10000 62% -9999
Col5 8000 40% -9999
Col6 7500 36% -9999
Col7 2000 7% -9999