使用什么预测模型来估算性别?
我同意西蒙的建议。我发现您从使用任何外部估算方法获得的收益通常不如内部方法,而且最重要的是,您更有可能在数据泄漏方面严重搞砸。
话虽如此,除了使用自动为您处理缺失数据的算法(通常是基于树/规则的模型,尽管它们并不都使用相同的插补方法)之外,还有一些可能感兴趣的基于外部的方法。我发现当你变得更“花哨”时,与使用它们的计算痛苦相比,结果并不足以改善。从最简单的开始;
1) 模式插补;只需使用训练数据集中最常见的性别。对于您的测试数据集,请使用训练数据集中存在的最常见性别。由于男性比女性多 5 倍,这将导致您几乎可以肯定地将男性分配给所有缺少性别的观察。显然,除了观察到的类的频率之外,这并没有使用大量信息,但是这种方法非常常见并且通常“足够好”。
2)kNN插补;将 k 个最接近的邻居(没有缺失性别)带到您希望为其估算性别的观察值。然后,简单地将这 k 个邻居中的每一个视为一个“选民”委员会,他们使用自己的性别作为投票。通过它们与缺失性别值的观察值的接近程度(基于其他未缺失的变量)对每张选票进行加权。无论哪种性别在选票中获胜,都会为您提供估算的性别。
对我来说,这种方法是对方法 1) 的明显改进,而且速度也很快。但是,这将要求您对数据进行中心化和缩放(因为我们使用距离来定义“接近度”),并且 k 现在是一个调整参数,这会使事情变得更加复杂。
3)随机森林插补;最初,使用方法 1) 临时填写您缺少的性别(只是模式估算)。然后,在估算数据集上运行随机森林算法,生成 N 棵树。计算所谓的“近似矩阵”,其中每个 此矩阵中的条目(对角线条目均为 0)等于观察次数 和 落在整个森林的同一终端节点除以森林中的树木数量。使用这些近似值作为权重,计算所有没有缺失性别的观察的加权投票,使用他们的性别作为他们的“投票”。将任何先前的“临时”估算性别从初始模式估算更改为随机森林计算的性别(如果它们不同)。重复(再次拟合另一个随机森林),使用来自先前随机森林的估算性别,直到所有观察结果收敛到单一性别或直到某些停止标准。
这种方法非常昂贵,但可能非常准确(我没有使用太多,因为它很慢)。您还必须处理一个额外的调整参数;即您希望在每个拆分中随机选择多少个变量。
4) MICE:这个方法我没仔细研究过,不过你好像提到过。我要说的一件事是,所有这些方法都可以用于任何类型的缺失数据;分类(如性别)或连续(如出生日期,但对于方法 1)您可能会使用均值/中值插补代替连续变量,对于方法 2 和 3)您将不再使用“投票”而是加权平均值) . 最终,MICE 只是您可以使用的众多插补方法之一,这就是为什么如果您选择使用外部插补方法,则需要在交叉验证中正确验证他们的建模选择。如果您有时间,请尝试多种方法并使用性能最高的方法。否则,在给定时间限制的情况下,使用看起来“足够合理”的方法。
您可以使用一种流行的梯度提升树实现,例如 LightGBM 和 XGBoost 作为您的预测模型。他们可以在训练期间处理缺失值,并且结果通常比在预处理中进行的任何插补都要好。
他们实现这一点的方法是使用它们所构建的决策树的拆分。在找到最佳分割时忽略缺失值,然后一旦找到,它们就会被分配到最能最小化损失函数的一侧。
如果您打算将估算值作为预处理步骤,我只想补充一点,最好联合估算多个变量的缺失值,因为您将能够更好地保留这些变量之间的关系。MICE 算法应该会自动为您解决这个问题。
以下是当存在多个具有缺失值的变量时 MICE 如何工作的示例:
为了使链式方程方法更具体,想象一个简单的例子,我们的数据集中有 3 个变量:年龄、收入和性别,所有 3 个变量都至少有一些缺失值。MAR 假设意味着特定变量缺失的概率仅取决于观察值,例如,某人的收入是否缺失并不取决于他们的(未观察到的)收入。在 MICE 过程的第 1 步中,每个变量将首先使用例如平均估算来估算,临时将任何缺失值设置为等于该变量的平均观察值。然后在第 2 步中,年龄的估算平均值将被设置回缺失值。在步骤 3 中,将使用所有观察到年龄的案例来运行按收入和性别预测的年龄的线性回归。在第 4 步中,将从该回归方程中获得对缺失年龄值的预测并进行估算。在这一点上,年龄没有任何缺失。然后将针对收入变量重复步骤 2-4。最初缺失的收入值将被设置回缺失值,并使用所有观察到收入的案例对按年龄和性别预测的收入进行线性回归;将从该回归方程中获得缺失收入值的插补(预测)。然后,将再次对变量性别重复步骤 2-4。最初缺失的性别值将恢复为缺失值,并使用所有观察到性别的案例进行性别对年龄和收入的逻辑回归;该逻辑回归模型的预测将用于估算缺失的性别值。迭代这三个变量的整个过程将重复直到收敛;然后,观察到的数据和最终的一组估算值将构成一个“完整”数据集。
