如何处理有意义的未定义值?

数据挖掘 机器学习 机器学习模型 特征构造
2022-02-13 12:08:26

我目前正在尝试创建一些功能来提高模型的性能。我想创建的其中一项功能对应于客户购买与最后一次购买之间的天数差异。创建此功能不是问题。但是,如果这是客户的第一次购买,我不知道要设置哪个值。我应该设置哪个值,更一般地说,如何处理这些情况?

   customer_id date_purchase  diff_last_purchase  first_purchase
0            1    2018.02.12                 NaN               1
1            1    2018.02.18                 6.0               0
2            2    2018.02.25                 NaN               1
3            3    2018.03.15                 NaN               1
4            3    2018.03.18                 3.0               0
2个回答

最近在工作中讨论了同一主题。它归结为将缺失值编码为不可能的值(负数,非常高)或从数据集中推断的信息(平均值,中位数)。一些更复杂的方法使用基于其余数据(非缺失列)构建的模型来预测缺失的数据。

如果使用基于树的方法,将其设置为 -1 作为开始应该没问题,因为可能会观察到先前购买是在同一天 (0)。

使用均值趋势模型(线性回归),将其设置为均值也可以,但您只需计算训练集上的均值并将其分别传播到测试集。

一般来说,如果我们不知道丢失数据的原因,就很难正确对待它们。这个原因会极大地影响我们的结论。因此,我的第一个建议总是首先尝试找出数据丢失的原因。

通常,有 3 种缺失数据:(Wikipedia上的定义)

  • 完全随机失踪

如果导致任何特定数据项丢失的事件独立于可观察变量和不可观察的感兴趣参数,并且完全随机发生,则数据集中的值完全随机丢失 (MCAR)。当数据为 MCAR 时,对数据进行的分析是无偏的;然而,数据很少是 MCAR。

  • 随机失踪

随机缺失 (MAR) 发生在缺失不是随机的,但缺失可以完全由存在完整信息的变量解释的情况下发生。由于 MAR 是一个无法进行统计验证的假设,我们必须依赖其实质合理性。

  • 不随意丢失

非随机缺失 (MNAR)(也称为不可忽略的无响应)是既不是 MAR 也不是 MCAR 的数据(即缺失变量的值与其缺失的原因有关)。

同样来自该维基百科页面:

缺失数据会降低样本的代表性,因此会扭曲对总体的推断。一般来说,处理缺失数据的主要方法有三种:(1)插补——用数值代替缺失数据;(2)遗漏——将含有无效数据的样本从进一步分析中剔除;(3)分析——通过直接应用不受缺失值影响的方法。

“在 MCAR 的情况下,数据的缺失与任何研究变量无关”,因此您可以删除它们或进行一些合理的插补并继续分析数据。我只知道一项测试 MCAR 的测试,即Little's Test

我不知道如何处理第二和第三个情况,所以我只能说请小心对待。如果丢失数据的比例太大,我会直接删除整个数据框。