缺失数据插补#

缺失数据指的是数据集中观察值的缺失,这是任何现实世界数据科学项目中常见的现象。在数据科学中,缺失数据可能导致分析偏差、预测不准确以及模型可靠性降低。因此,处理缺失数据已成为数据预处理流程中最重要的步骤之一。

Feature-engine 支持多种插补技术来处理缺失数据。在这里,我们概述了每种支持的方法。

缺失数据机制#

数据可能因为以下原因丢失:

  • 在调查中,受访者可能由于隐私顾虑或仅仅是忽略而不回答某些特定问题。

  • 在医疗数据中,并非每个患者都可能接受新药物疗效的研究,这可能是由于物流或财务限制。

  • 数据收集和存储中的错误也可能导致缺失值。

引入缺失数据的机制被称为完全随机缺失(MCAR)、随机缺失(MAR)或非随机缺失(NMAR)。

缺失数据的后果#

缺失数据可能会在以下几个方面显著影响机器学习模型和统计分析:

  • 它引入了偏差到机器学习模型预测或统计测试中。

  • 某些机器学习模型,例如 Scikit-learn 中的那些,无法处理包含缺失值的数据集。

像线性回归、逻辑回归、支持向量机(SVM)或k近邻(kNN)等流行的机器学习算法,无法处理包含NaN(非数字)或空值的数据集。因此,尝试用这些不完整的数据拟合模型会导致错误。

这些因素强调了在模型训练之前处理缺失数据的重要性,突显了采用数据插补技术的必要性。

缺失数据插补#

缺失数据插补是指在数据集中估计和替换缺失值的过程。它涉及根据数据集中的已知信息填充缺失值。

缺失数据插补有两种类型:单变量插补和多变量插补。

单变量数据插补#

单变量插补处理变量中的缺失数据,仅基于该变量内的信息,而不考虑数据集中其他变量。

例如,考虑一个包含50名大学生考试成绩的数据框,其中有5个数据点缺失。单变量插补根据45个观测值的均值、中位数或众数等操作来填充这5个缺失值。或者,缺失的数据可以用任意预定义的值填充,例如-1、0、999、-999或’Missing’等。

多元数据插补#

在多变量数据插补中,我们利用数据集中其他变量的观测值来估计缺失观测值的值。这种方法本质上是通过将插补视为回归来插补缺失值,使用诸如k近邻或线性回归等算法来估计缺失值。

例如,假设我们有一个包含学生成绩、年龄和智商分数的数据集,所有这些数据都有缺失值。在这种情况下,我们可以通过使用现有成绩数据训练的回归模型来预测缺失的成绩值,使用年龄和智商作为预测因子。随后,我们可以在后续迭代中对其他变量(年龄和智商)应用相同的回归插补方法。

Feature-engine 目前支持单变量插补策略。对于多变量插补,请查看 Scikit-learn 的 迭代插补器

Feature-engine 的插补方法#

Feature-engine 支持以下数据插补方法

  • 均值-中位数插补

  • 任意数量输入插补

  • 尾部输入插补

  • 随机样本插补

  • 频繁类别插补

  • 分类插补

  • 完整案例分析

  • 添加缺失的指示器


Feature-engine 的插补器主要特点#

Transformer

数值变量

分类变量

描述

MeanMedianImputer()

×

用均值或中位数替换缺失值

ArbitraryNumberImputer()

x

用任意值替换缺失值

EndTailImputer()

×

用分布末尾的值替换缺失值

CategoricalImputer()

用最频繁的类别或任意值替换缺失值

RandomSampleImputer()

通过从变量中随机抽取值来替换缺失值

AddMissingIndicator()

添加一个二进制变量以标记缺失的观测值

DropMissingData()

从数据集中移除含有缺失数据的观测值

均值-中位数插补#

均值-中位数插补法用数值变量的中位数或均值替换该变量中的缺失值。

如果一个变量服从正态分布,均值和中位数都是合适的选择,因为它们是等价的。然而,如果一个变量是偏斜的,中位数插补更为可取,因为均值插补可能会向分布的尾部引入偏差。

如果数据是完全随机缺失的(MCAR),则此插补方法适用。如果数据是MCAR,那么可以合理地假设缺失值的值接近大多数值,即接近分布的均值或中位数。

优势

  • 获取完整数据的快速简便方法。

限制

  • 扭曲了变量内的方差,以及与数据集中其他变量的协方差和相关性。

使用均值或中位数插补的数据通常用于训练线性回归和逻辑回归模型。

The MeanMedianImputer() 实现了均值-中位数插补。

任意数量输入#

任意数值插补用一个任意数值替换数值变量中的缺失值。常用的替换值包括0、999、-999(或其他9的组合),或者-1(如果分布为正)。

如果数据缺失不是随机的(MNAR),这种插补方法非常适用。这是因为该方法会用预定义的任意值标记缺失值,而不是用统计估计值替换它们,使nan值看起来像大多数观测值。

优势

  • 获取完整数据的快速简便方法。

  • 标记缺失值。

限制

  • 扭曲了变量内的方差,以及与数据集中其他变量的协方差和相关性。

  • 它可能会隐藏或创建异常值。

  • 需要小心不要选择一个与均值或中位数过于相似的任意值。

一些模型可以通过经过任意数量插补的数据进行有效训练,例如基于树的模型、kNN、SVM 和集成模型。

这个 ArbitraryNumberImputer() 实现了任意数值插补。

尾端插补#

尾部插补法用数值变量分布尾部的一个任意数值替换该变量中的缺失值。

我们可以根据变量的分布选择两种方式之一来确定插补值:

  • 如果是正态分布,值可以设置为均值加减3倍的标准差。

  • 如果是偏态分布,可以使用IQR设置值。

此方法适用于MNAR数据。这是因为此方法将标记缺失值,而不是用与大多数观测值相似的值来替换它。

优势

  • 获取完整数据集的快速简便方法。

  • 自动处理任意值的插补。

  • 标记缺失值。

限制

  • 变量内原始方差的扭曲,以及与数据集中其他变量的协方差和相关性。

  • 它可能会隐藏异常值。

像基于树的模型,基于树的模型可以有效地在用尾端插补法插补的数据上进行训练。

The EndTailImputer() 实现了尾部填补。

随机样本插补#

随机样本插补用从该变量的分布中抽取的随机值替换数值和分类变量中的缺失值。

由于替换值是从原始变量的分布中抽取的,因此插补数据的方差将被保留。然而,由于其随机性,我们可能在不同的代码执行中获得不同的插补值,这将导致不同的机器学习模型预测。因此,在插补过程中确保设置一个适当的种子。

随机样本插补在不想扭曲变量分布时非常有用。

优势

  • 保留变量的方差。

限制

  • 随机性。

  • 扭曲了与其他变量的关系。

  • 这种插补模型在计算上比其他方法更昂贵。

RandomSampleImputer() 实现了随机样本插补。

频繁类别插补#

频繁类别插补用该变量中最频繁的类别替换分类变量中的缺失值。

尽管 CategoricalImputer() 可以填补数值和分类变量,但在实际应用中,频繁类别填补更常用于分类变量的填补。

如果数据是MCAR(完全随机缺失),这种方法是合适的,因为这种插补方法用变量中最常见的观测值替换缺失值。

优势

  • 获取完整数据的快速简便方法。

限制

  • 填补值可能会扭曲与其他变量的相关性。

  • 这可能导致最频繁类别的过度表示。

因此,如果缺失值仅占观察值的很小一部分,最好使用这种方法。

基于树的模型、kNN、SVM 和集成模型可以有效地在用频繁类别插补的数据上进行训练。

CategoricalImputer() 实现了频繁类别插补。

分类插补#

在分类插补过程中,我们用一个特定的新标签(例如‘缺失’或‘NaN’)替换分类变量中的缺失值。本质上,它包括将缺失的观测值视为一个独立的类别。

这种方法适用于MNAR数据,因为它用一个新的标签标记缺失值,而不是用可能引入数据偏差的统计估计值替换它们。

优势

  • 获取完整数据的快速简便方法。

  • 标记缺失值。

  • 不对数据做任何假设。

限制

  • 如果缺失值的比例很小,创建一个额外的类别可能会引入噪声。

CategoricalImputer() 实现了分类插补。

添加缺失的指示器#

添加缺失指示器包括添加二进制变量以突出显示值是否缺失。缺失指示器在有观测值时取值为0,在值缺失时取值为1。

添加缺失指示器本身并不替代缺失的数据。它们只是向数据中添加了某些值缺失的信息。因此,这种方法从不单独使用。通常,它会与其他插补方法一起使用,例如用于数值数据的均值-中位数插补或用于分类数据的频繁类别插补。

优势

  • 捕捉缺失值的重要性。

限制

  • 扩展数据的维度。

The AddMissingIndicator() 向数据集中添加缺失指示器。

完整案例分析#

删除缺失数据是最简单的处理缺失数据的方法。这个过程被称为完整案例分析或列表删除,意味着如果任何单个值缺失,整行将从分析中排除。

此方法最适合用于 MCAR 数据,并且如果缺失值的比例相对较小。

优势

  • 获取完整数据的快速简便方法。

限制

  • 减少可用数据的样本大小。

  • 可能会在我们的数据中产生偏见,从而影响数据分析。

The DropMissingData() 实现了完全案例分析。

总结#

Feature-engine 支持的所有数据插补方法都是单一插补方法,或者更准确地说,是单变量插补方法。

还有其他数据科学家可以使用的替代数据插补技术,例如:

多重插补:多重插补通过在每个数据集中随机插补缺失值来生成多个插补数据集。如果数据是MAR(随机缺失),则适用。

Cold Deck 插补: Cold deck 插补用历史数据集中的值替换缺失值。

热卡插补:热卡插补从同一数据集内的相似观测数据子集中选择插补值。

链式方程的多重插补 (MICE):MICE 是一种基于数据集中其他变量的回归来估计缺失数据的方法。它通过多轮插补来在每次迭代中改进估计。

附加资源#

关于缺失数据插补方法的教程,请查看以下资源:

../../_images/feml.png

机器学习的特征工程#

../../_images/fetsf.png

时间序列预测的特征工程#











我们的书:

../../_images/cookbook.png

Python 特征工程手册#














我们的书籍和课程都适合初学者和更高级的数据科学家。通过购买它们,您正在支持 Feature-engine 的主要开发者 Sole。