在输入缺失值之前或之后可视化/分析数据?

数据挖掘 Python 数据挖掘 可视化
2022-02-15 08:05:53

我的理解是,我们估算缺失值是为了保留这些训练示例,以便我们的机器学习算法拥有尽可能多的训练示例。

对我来说,在插补缺失值之前可视化/分析数据是很直观的,因为插补会扭曲分布,并可能导致在插补之前对真实数据做出错误假设。我可以看到前后都做的案例,但这会增加特征分析的时间。另一方面,如果缺失值的百分比高到足以影响数据的分布,我可以看到不估算值的情况。

在 Python 中,我想象使用类似的东西pd.Series.dropna()来隔离现有值。

TL;DR:是否应该在可视化数据并从中提取见解之前或之后估算缺失值?

3个回答

为什么不两者都做?就像您提到的那样,首先计算所有值的百分比可能是值得的。通常,您可能还会考虑一个可接受的百分比,例如最多 10% 的缺失值,如果它们随机分散在您的数据集中。

有专门为可视化缺失数据而构建的库,例如missingno,它提供了很多想法。这是跨特征缺失变量的示例热图:

例子

“缺失”通常意味着您有一个顺序数据集,例如时间序列数据。如果您有离散的观察,例如人们的身高与鞋码,则不存在顺序因果关系(自相关:依赖于先前的值)。在这种情况下,插补毫无意义。

因此,假设您确实有顺序数据,是否使用缺失值估算或删除时间步长将取决于您的用例。也可能是数据的频率。如果所有缺失的值都出现在时间序列的任一端的一个块中,那么简单地忽略该块是很常见的。

例如,如果您有分钟频率数据并且您希望每天预测一个值,那么在这里错过几分钟可能是可以容忍的,并且某种类型的插补(例如填充前移)不会产生巨大的影响总体而言,但可以帮助模型优化更有效地工作。某些模型无法处理缺失值,因此需要进行插补。

无论如何,它总是会在插补之前和之后可视化数据。无论如何,您通常可以运行相同的可视化。当然,这会花费几分钟,但您可能会发现重要问题。与稍后在调试经过训练的模型时才发现问题相比,这可以节省大量时间。

我认为您在确定这种情况下的权衡方面做得很好。如果您在可视化之前估算缺失值,那么您将不会可视化“真实”数据。但是有时会丢失很多数据,如果您删除所有具有缺失属性的示例,那么您不太可能将用于训练模型的数据的代表性样本可视化,或者更糟糕的是,您可能会错过一些重要的见解,因为丢失了太多数据。

也许有一种方法可以两全其美?我建议在可视化之前输入缺失值,但要在视觉上标记它们例如,您可能会生成一个图,其中没有缺失数据的示例为绿色,缺少一个字段的示例为黄色,缺少 2 个以上字段的示例为红色。

对我来说,在插补缺失值之前可视化/分析数据是很直观的,因为插补会扭曲分布,并可能导致在插补之前对真实数据做出错误假设。

我认为这里有一个关键的细节需要回答,这可能会加深你的分析。您打算如何估算缺失值?这很可能取决于两件事:

  1. 值的实际分布。根据分布,不同的技术可能适用于每种情况:最常见的值、均值、一些机器学习算法来根据其他数据预测缺失值......但要决定使用哪种方法,您必须首先了解原始数据
  2. 缺少多少值,您稍后会介绍。

另一方面,如果缺失值的百分比高到足以影响数据的分布,我可以看到不估算值的情况。

这是正确的。可以这样想:如果缺失值的百分比太高,那么您就没有准确填充缺失值的依据。您可能只是在发明太多数据。以后怎么玩?你是在添加一些有价值的东西,还是为了保存那个属性而自己投入了太多的发明?

希望这可以帮助!