缺失数据难题:探索和插补技术

17 Mar 2025 | 6 分钟阅读

缺失数据在统计分析和机器学习中是最常见且不可避免的问题。它们会影响数据质量。这可能是由多种原因造成的,例如推荐系统中用户未响应问题、治疗中的患者死亡或不依从等。

在本教程中,我们将讨论缺失数据的重要性,并找出缺失数据的原因。

缺失数据机制

在当今时代,数据被视为燃料,意味着数据是最强大的东西。它可以以多种方式使用。但是不完整的数据会导致问题。因此,首先我们需要理解数据的重要性,更重要的是,我们需要全面识别缺失数据发生的根本原因。数据收集过程在识别数据收集错误方面也起着重要作用。

缺失数据机制可分为三个主要类别。这些类别基于缺失数据和观测数据的性质。这些机制如下所示。

完全随机缺失 (MCAR)

缺失数据的性质与观测数据有关,但与缺失数据无关。例如——孩子们因为父母搬到另一个城市而缺课,因此孩子们不得不退学。

随机缺失 (MAR)

缺失数据的性质与观测数据有关,但与缺失数据无关。例如——孩子们因为父母搬到另一个城市而缺课,因此孩子们不得不退学。

非随机缺失 (MNAR)

它也被称为不可忽略,因为缺失机制不能被忽略。只有在既不是 MCAR 也不是 MAR 的情况下才会发生。变量上的缺失值与观测变量和未观测变量都有关。例如——父母因恶劣的氛围而拒绝将孩子送到学习中心,他们不希望自己的孩子被欺凌。MNAR 数据的问题本质上与可识别性问题相关。

理解数据收集过程和实质性的科学知识有助于假设数据机制。统计检验也有助于理解缺失数据机制的类型。

有许多模块可以有效地处理缺失数据,但 **fancyimpute** 模块非常有用且流行。

Fancyimpute 模块

缺失数据在创建预测模型中起着重要作用;算法在处理缺失数据集时性能不佳。

Fancyimpute 是一个用于缺失数据填补算法的机器学习库。它使用机器学习算法来填补缺失值。Fancyimpute 使用整个列来填补缺失值。它提供了两种填补缺失数据的方法:

  • KNN 或 K-近邻
  • MICE 或链式方程多重填补

K-近邻

KNN 在所有特征中找出相似的数据点并填补缺失值。让我们通过以下示例来理解。

示例 -

输出

A    B    C  D
0  NaN  1.0  NaN  0
1  2.0  7.0  NaN  1
2  NaN  NaN  NaN  5
3  NaN  8.0  NaN  4
4  9.0  7.0  8.0  2
5  2.0  5.0  7.0  9
Imputing row 1/6 with 2 missing, elapsed time: 0.001
[[4.80735271 1.         7.70802941 0.        ]
 [2.         7.         7.57627146 1.        ]
 [5.29411783 7.49760549 7.64000033 5.        ]
 [6.2499999  8.         7.87179494 4.        ]
 [9.         7.         8.         2.        ]
 [2.         5.         7.         9.        ]]

链式方程多重填补

在此方法中,mice 使用多个填补而不是单一填补。它对样本数据执行多次回归并取它们的平均值。让我们通过以下示例来理解。

示例 -

输出

    A     B     C     D
0   NaN  15.0   1.0   NaN
1  23.0  40.0   NaN   1.0
2   NaN   NaN   NaN   5.0
3   NaN   3.0   NaN   4.0
4  15.0  70.0  28.0  29.0
5  20.0  35.0  57.0  91.0
[[ 32.13508529  15.           1.         -76.25883183]
 [ 23.          40.          23.80426163   1.        ]
 [ 24.47759791  32.58430591  26.67745156   5.        ]
 [ 31.14858991   3.          32.06817994   4.        ]
 [ 15.          70.          28.          29.        ]
 [ 20.          35.          57.          91.        ]]

处理缺失数据

在文献、教科书和标准课程中有许多可用于处理缺失数据的方法。我们已经讨论了一种重要的方法,即 **fancyimputer**。然而,这些方法都存在一些缺点。在使用数据挖掘过程时,需要小心避免偏差或高估变异性;这些方法性能不佳。

Missing Data Conundrum: Exploration and Imputation Techniques

案例删除

有两种类型的案例删除方法。第一种是列表删除(也称为完整案例分析),第二种方法是配对删除。案例删除方法用于根据分析情况从数据集中删除缺失的案例。

让我们使用 pandas DataFrame 创建一个包含一些缺失值的人工数据集。

示例 - 1

输出

    Name   Age  Sex  Goals  Assists  Value
0   John  21.0    M    5.0      7.0   55.0
1   Paul  23.0  NaN   10.0      4.0   84.0
2    NaN   NaN  NaN    NaN      NaN    NaN
3   Wale  19.0    M   19.0      9.0   90.0
4   Mary  25.0    F    5.0      7.0   63.0
5  Carli   NaN    F    0.0      6.0   15.0
6  Steve  15.0    M    7.0      4.0   46.0

在上面的代码中,我们创建了一个包含缺失值的新数据集。我们可以使用 df.dropna() 方法删除缺失值,该方法会删除所有缺失值。下面看输出。

示例 - 2

输出

   Name   Age Sex  Goals  Assists  Value
0   John  21.0   M    5.0      7.0   55.0
3   Wale  19.0   M   19.0      9.0   90.0
4   Mary  25.0   F    5.0      7.0   63.0
6  Steve  15.0   M    7.0      4.0   46.0

我们还可以使用 **df.dropna(how = 'all')**,它只删除包含缺失值的行。我们还可以使用 **df.dropna(axis = 1, how = 'all')** 来指定删除包含缺失值的列。让我们通过以下示例来理解。

示例 - 2

输出

    Name   Age  Sex  Goals  Assists  Value
0   John  21.0    M    5.0      7.0   55.0
1   Paul  23.0  NaN   10.0      4.0   84.0
3   Wale  19.0    M   19.0      9.0   90.0
4   Mary  25.0    F    5.0      7.0   63.0
5  Carli   NaN    F    0.0      6.0   15.0
6  Steve  15.0    M    7.0      4.0   46.0

示例 - 3

输出

    Name   Age  Sex  Goals  Assists  Value
0   John  21.0    M    5.0      7.0   55.0
1   Paul  23.0  NaN   10.0      4.0   84.0
2    NaN   NaN  NaN    NaN      NaN    NaN
3   Wale  19.0    M   19.0      9.0   90.0
4   Mary  25.0    F    5.0      7.0   63.0
5  Carli   NaN    F    0.0      6.0   15.0
6  Steve  15.0    M    7.0      4.0   46.0

结论

在本教程中,我们讨论了缺失数据在数据科学项目中的重要性。它回顾了用于处理缺失数据的探索技术和重要的填补方法。我们还描述了处理缺失值的方法。一个广泛使用的模型假设所有缺失值的联合分布,并估计描述观测数据的模型参数。