如果一列中的缺失数据基于 r 中另一列中的某些值/条件,该怎么办?

数据挖掘 机器学习 r 数据挖掘 缺失数据 数据插补
2022-03-02 13:17:35

我有一个包含 20,000 个观察值和 19 个变量的数据集。首先,我有一个性别列,它具有三个级别,即“M”、“F”和“U”,其中 U 可以视为未公开。每当性别列中有“U”时,其他两列即“年龄”和“任期”中就有一个 NA。这基本上可以解释为一个不准备透露他们的性别的人不准备透露他们的年龄和任期。我该如何处理这种情况?除了这三列之外,数据集中还有其他 16 列包含有意义的数据。在这种情况下,像 KNN 插补这样的正常插补技术会帮助我吗?

这是我已尽力使用的可重现示例:

x<-data.frame(gender=c('M','M','F','F','U','F','M','U'),age=c(21,24,20,34,NA,40,56,NA),tenure=c(7,4,5,3,NA,2,4,NA),job=c('Doctor','IT','Banking','Truck Driver','Finance','Agriculture','Electrician','Teacher'),country=c('Australia','America','New Zealand','Sweden','England','France','Denmark','Norway'))

数据框:

 gender age  tenure      job      country
1      M   21     7       Doctor    Australia
2      M   24     4        IT       America
3      F   20     5      Banking    New Zealand
4      F   34     3    Truck Driver Sweden
5      U   NA     NA      Finance    England
6      F   40      2    Agriculture  France
7      M   56      4    Electrician  Denmark
8      U   NA     NA      Teacher    Norway

正如您从上面的示例中看到的,只要性别未定义,年龄和任期都存在缺失值,整个数据集中都是这种情况。处理这种情况的最佳方法是什么?这就是所谓的随机缺失数据,对吗?任何建议都会非常有帮助。非常感谢。

3个回答

如果您打算使用 LightGBM 或 XGBoost,建议是“不要做任何事情”。这些方法以特定的方式处理 NA,在每个决策树中都不同,并且获得的结果通常比使用 imputing 好得多。

你有点回答了你的问题,如果你密切关注你现在已经在你的数据集中性别 U 的价值。为什么不为性别 U 训练一个不同的分类器(因此,构建 2),然后根据用户是否满足其性别为“U”的条件来选择分类器?

另外,您能否详细说明您正在构建的模型的目标?这可能会改变解决问题的方法。

更一般地说,如果您知道数据和缺失数据之间的关系,那么您可以使用该关系来填充缺失值。

如果您不知道您的数据和缺失数据之间的关系,您有几个选择:

  1. 删除缺少数据的观察结果(并不总是推荐,因为您实际上会丢失信息)。
  2. 用平均值/众数/最流行值等统计量替换缺失值
  3. 训练模型以预测值并用模型预测替换任何缺失值(也称为imputation)。

如果您对上面的#3 感兴趣,那么有一个R名为的包mice专注于插补。