用平均值以外的值填充缺失数据

数据挖掘 数据挖掘 缺失数据
2021-09-14 10:35:22

可用于填写缺失数据的所有选项有哪些?

一个明显的选择是均值,但如果缺失数据的百分比很大,则会降低准确性。

那么如果缺失值很多,我们该如何处理呢?

4个回答

当然,还有其他选择可以填补缺失的数据。已经提到了中位数,在某些情况下它可能会更好。

甚至可能有更好的选择,这可能对您的问题非常具体。要确定是否属于这种情况,您必须了解有关缺失数据性质的更多信息。当您详细了解数据丢失的原因时,提出一个好的解决方案的可能性会高得多。

您可能希望通过确定您是否有信息缺失或非信息缺失来开始对缺失数据的调查第一类是由随机数据丢失产生的;在这种情况下,具有缺失值的观测值与具有完整数据的观测值没有什么不同。至于提供信息的缺失数据,这个数据会告诉你一些关于你的观察的信息。一个简单的示例是缺少合同取消日期的客户记录,这意味着该客户的合同到目前为止尚未取消。您通常不想用均值或中值填充信息缺失,但您可能希望从中生成单独的特征。

您可能还会发现,有几种缺失数据是由不同的机制产生的。在这种情况下,您可能希望以不同的方式生成默认值。

当涉及到缺失数据时,有许多不同的方法可以填充这些值。但是,您选择的插补方法在很大程度上取决于缺失数据的数量和变量的类型。例如,您不会估算缺失分类数据的平均值,而是选择模式。无论您选择哪种方法,都会有一些与之相关的偏见。一种可以很好地减少与估算缺失值相关的偏差的方法是多重估算。这可能是一个相当冗长的方法,但它是迄今为止我见过的最合理的方法来估算大量缺失值。我相信可能有一个用于多重插补的 R 库。

当然,另一种选择可能是,例如,如果变量 x 有 50% 的缺失数据,那么可能会有一个很好的解释来解释为什么会这样。与其尝试估算它或丢失与变量相关的信息,不如创建一个名为 variable_x_flag_missing 的新变量有时会很有用。这将是一个二进制指示变量,如果变量 x 包含缺失值,则观察值编码为 1,如果不包含,则编码为 0。

具有缺失值的数据和稀疏数据之间存在差异。缺失值通常是由于数据收集过程中的无效输入、丢失或错误,或者是在清理或处理数据时创建的。

如果这些值的数量非常少,则可以忽略相应的实例,或者如果大约是数据的 5-10%,可以使用各种方法填充(结转最后一次观察,填充平均值/中值,插入数据等) . 如果您在 Python 中工作,请阅读 Pandas 文档中的Working with Missing Values,详细了解这些选项(即使您不是在 Python 中工作,这也是一本好书)。

但是如果你的数据集有大量缺失值(比如 ~ >30% ),那么数据就是稀疏的。这样的数据集会在您的建模中产生各种偏差,并且有一些特殊的方法可以处理它们,尽管我不太关心它们。

如果这些值随机丢失,并且您确定您的数据矩阵是低秩的,您可以使用核范数基础追踪方法(也称为矩阵完成)。该方法(除其他外)在TFOCS中实现。

在许多实际应用中,数据矩阵很少有满秩,因此可以接受低秩矩阵的假设。另一方面,这些值可能不会真正随机丢失。

另一种方法是使用奇异谱分析 ( SSA ),也称为 Caterpillar 算法。它可用于具有缺失值的时间序列数据。这种算法不是很有名,但在文献中它有时被称为“时间序列数据的 PCA”。