Skip to content

使用热力图进行缺失数据分析

Missing Data Analysis with Heatmaps

ds p431 1

真实世界的数据集几乎总是存在缺失值。在大多数情况下,我们事先并不知道值为什么缺失。

但了解一下缺失值可能存在的多种原因是有好处的:

  • 完全随机缺失(MCAR):值本身真正地缺失,与该观测或任何其他观测都没有关系。
  • 随机缺失(MAR):数据由于另一个可观测变量而缺失。例如,我们可能观察到缺失值的百分比因其他变量的不同而存在显著差异。
  • 非随机缺失(MNAR):这个比较棘手。当缺失变量中存在明确的规律时,就会发生 MNAR。然而,它与我们在数据中能观察到的任何特征都无关。事实上,它可能取决于某个未被观测到的特征。而找出缺失的原因,对于后续的分析、插补和建模可能极其有用。假设我们有一个商店的每日销售数据集,其中包含以下信息:

ds p431 2

  • 星期和日期
  • 商店开门和关门时间
  • 顾客数量
  • 总销售额
  • 开门和关门时的账户余额

我们并不知道缺失值的原因。在这里,进行 EDA(探索性数据分析)时,许多人会按如下方式计算逐列的缺失频率:

ds p432 1

上表只是突出显示了每一列中缺失值的数量。更具体地说,我们了解到:

  • 与其它列相比,有两列的缺失值相对较多。
  • 开门和关门时间两列的缺失值数量相同(53)。

这是它提供的唯一信息。然而,这种方法的问题在于,它隐藏了许多关于缺失值的重要细节,例如:

  • 它们在数据集中的具体位置。
  • 缺失值的周期性(如果有的话)。
  • 缺失值在列之间的相关性等。

……而这些对于理解缺失的原因可能极其有用。换言之,上表更像是汇总统计(statistical),很少能描绘真实情况。为什么呢?

我们在本书的统计(statistical)部分讨论过这一点。

ds p433 1

但下面是我如何用热力图(heatmap)来丰富我的缺失值分析。把前面讨论的缺失值表与下面的缺失值热力图做一下对比:

ds p433 2

白色竖线描绘了缺失值在特定列中的位置。现在,立刻就能看出:

  • 开门和关门时间列中的值是周期性缺失的。
  • 开门和关门时间列中的缺失值是相关的。
  • 其他列中的缺失值似乎是(虽然未必)完全随机缺失的。对开门时间的进一步分析让我们发现,该商店在星期天总是不营业:
  • 现在,我们知道了为什么数据集中的开门和关门时间会缺失。这一信息在插补时会很有帮助。这种特定情形属于“随机缺失(MAR)”。本质上,正如我们上面所见,缺失是由另一个可观测列的值所驱动的。既然我们知道了原因,就可以使用 kNN 插补或 MissForest 技术来插补这些值,我们在本书的 ML 部分讨论过这些(MissForest 和 kNN imputation)。

ds p434 1

本站内容仅供学习交流,版权归原作者所有。