我正在开发一个项目,该项目的数据集有很多缺失值——真的很多。
这是
colSums(is.na(dati_train))
的输出,显示每列缺失值的数量:
> colSums(is.na(dati_train)) # Number of NAs per column
PAID POINT_OF_SALE EVENT_ID YEAR
0 0 0 0
MONTH N_SUBSCRIPTIONS PRICE PHONE_NUMBER
0 0 0 0
PROP_CONBINI PAYMENT_TYPE FAV_GENRE AGE
0 0 967 1723
DAYS_FROM_PROMO BOOKS_PAID N_TRANSACTIONS N_ITEMS
0 5574 5574 0
DATE_LAST_PURCHASE CUSTOMER_SINCE MAIL SUBSCR_CANC
5574 5574 0 0
MARGIN
5574
>
该数据集包含大约 17,000 个观测值,因此不能选择删除包含缺失值的行。这是我目前处理缺失值的方法,我希望得到您的反馈:
对于“FAV_GENRE”和“AGE”:由于缺失值的数量相对较少,我正在考虑使用多重插补来填充它们。
对于其他变量:缺失值是系统地分布在它们之间的,所以我在想:
使用基于树的模型,如随机森林和 XGBoost:我知道这些模型可以处理缺失值,但我从未在这些算法中处理过缺失数据。我应该遵循哪些最佳实践?
由于我还必须对具有类似缺失值模式的另一个数据集进行预测,因此简单地删除缺失值并不是一种选择。我的方法有意义吗?像这样的情况还有更好的选择吗?
让我知道您的想法 - 提前致谢!
我会尝试多重插补模型。这实际上并没有太多缺失的数据,多重插补模型应该可以很好地处理它。请参阅此文章了解更多信息。