我有一大组特征向量,我将用它们来解决二进制分类问题(在 Python 中使用 scikit learn)。在我开始考虑插补之前,我有兴趣尝试从数据的其余部分确定缺失的数据是“随机缺失”还是非随机缺失。
解决这个问题的明智方法是什么?
事实证明,一个更好的问题是询问数据是否“完全随机丢失”。这样做的明智方法是什么?
我有一大组特征向量,我将用它们来解决二进制分类问题(在 Python 中使用 scikit learn)。在我开始考虑插补之前,我有兴趣尝试从数据的其余部分确定缺失的数据是“随机缺失”还是非随机缺失。
解决这个问题的明智方法是什么?
事实证明,一个更好的问题是询问数据是否“完全随机丢失”。这样做的明智方法是什么?
这是不可能的,除非您设法检索丢失的数据。您无法从观察到的数据中确定缺失数据是随机缺失 (MAR) 还是非随机缺失 (MNAR)。您只能判断数据是否明显没有完全随机丢失(MCAR)。除此之外,仅根据您所知道的(例如,报告的数据丢失原因),诉诸 MCAR 或 MAR 而非 MNAR 的合理性。或者,您可能会争辩说这无关紧要,因为丢失数据的比例很小,并且在 MNAR 下,必须发生非常极端的情况才能推翻您的结果(请参阅“临界点分析”)。
从分类的角度来看,这听起来很可行。
您想使用所有其他功能对缺失数据和非缺失数据进行分类。如果您获得的结果明显优于随机结果,那么您的数据不会随机丢失。
您想知道特征中遗漏的值与任何其他特征的值之间是否存在某种相关性。
对于每个特征,创建一个新特征来指示值是否缺失(我们称它们为“is_missing”特征)。计算你最喜欢的 is_missing 特征和其他特征的相关性度量(我建议在这里使用互信息)。
请注意,如果您在两个特征之间没有发现任何相关性,则仍然可能由于一组特征而存在相关性(作为其他十个特征的 XOR 函数,缺少一个值)。
如果你有大量的特征和大量的值,你会因为随机性而得到错误的相关性。除了处理该问题的常规方法(验证集、足够高的阈值)之外,您可以检查相关性是否是对称的和传递的。如果它们是,它们很可能是真实的,您应该进一步检查它们。