在开始填充缺失值之前,思考数据最初为何缺失会很有帮助。了解其内在机制可以指导你选择填充策略,并有助于预测数据准备过程中可能引入的偏差。统计学家唐纳德·鲁宾和罗德里克·利特尔将缺失数据机制分为三大类:完全随机缺失 (MCAR)、随机缺失 (MAR) 和非随机缺失 (MNAR)。我们来逐一分析。完全随机缺失 (MCAR)这是最简单的情形。如果一个值缺失的概率与已观测值和缺失值本身都无关,那么数据就被认为是MCAR。简单来说,缺失是纯粹随机的,与数据本身没有系统性的关联原因。你可以这样设想:比如一份调查问卷中,一些参与者因为页面粘连而意外跳过了一个问题;或者一个实验室样本纯粹是偶然掉落而丢失。这些缺失数据点的原因与参与者的其他答案或丢失的值本身无关。特点:缺失模式与任何变量的值(已观测或未观测)无关。已观测数据可以被视为完整数据的随机子样本。影响:如果缺失数据量小,简单删除含有缺失值的行或列(行删除法)可能不会引入明显的偏差,尽管这会降低统计功效。大多数标准填充方法在MCAR假设下通常表现良好。正式定义: 一个观测值缺失的概率 ($M=1$) 与已观测数据 ($Y_{obs}$) 和潜在缺失数据 ($Y_{miss}$) 都无关。 $$ P(M=1 | Y_{obs}, Y_{miss}) = P(M=1) $$随机缺失 (MAR)这是一种更常见且稍微复杂一些的情况。如果一个值缺失的概率仅取决于数据集中其他已观测变量,而不取决于缺失变量本身的值(在控制了已观测变量之后),那么数据就被认为是MAR。“随机缺失”这个名称可能有点误导。它不意味着缺失像MCAR那样是纯粹随机的。相反,它意味着在给定其他列中已有的信息时,缺失是随机的。示例: 考虑一个包含“收入”和“受教育年限”的数据集。假设男性比女性更不愿意报告他们的收入。如果我们只有“收入”这一列,这看起来会像MNAR(缺失取决于未观测的性别)。然而,如果我们也有一个“性别”列(该列是完全观测的),并且收入缺失的概率仅取决于“性别”而非实际收入水平本身,那么数据就是MAR。“收入”中的缺失可以通过已观测的“性别”变量来预测。另一个例子:在一项健康研究中,报告了较高压力水平(已观测)的患者可能不太愿意完成后续的血压测量(缺失),但这种缺失与未测量的血压值本身没有直接关系,仅与已观测的压力水平有关。特点:缺失模式与已观测变量系统相关,但与缺失值本身无关。影响:简单删除含有缺失数据的行(行删除法)可能引入偏差,因为剩余数据可能无法代表原始样本(例如,在收入示例中,你可能不成比例地移除了更多男性)。在MAR假设下,通常更推荐使用更精密的填充方法,它们利用已观测变量的信息(如回归填充、KNN填充器或迭代填充器),因为它们可以凭借变量间的关系做出更好的估计。正式定义: 一个观测值缺失的概率仅取决于已观测数据 ($Y_{obs}$),而不取决于缺失数据 ($Y_{miss}$)。 $$ P(M=1 | Y_{obs}, Y_{miss}) = P(M=1 | Y_{obs}) $$非随机缺失 (MNAR)这是最具挑战性的情况。如果一个值缺失的概率取决于缺失值本身,或取决于其他未观测因素,那么数据就被认为是MNAR。缺失的原因与未观测值相关。示例:收入很高的人可能不太愿意在调查中报告他们的收入。这里,“收入”变量的缺失直接取决于收入水平本身。在一项跟踪体重减轻的研究中,没有减轻体重的参与者可能更倾向于退出并错过后续的称重。缺失的“体重”值与体重本身(或其变化不足)相关。有故障的传感器可能只在测量极端温度时才无法记录读数。缺失的“温度”值取决于未观测的极端温度。特点:缺失模式与未观测的缺失值相关。影响:MNAR难以妥善处理。标准填充技术和行删除法常常导致有偏的结果,因为缺失本身带有信息。处理MNAR可能需要了解其所属领域的背景,以对缺失机制本身进行建模,这通常既复杂又困难。有时,创建一个缺失值指示变量(我们稍后会讨论)是一种实用的方法,可以保留与MNAR机制相关的一些信息,即使填充值本身可能有偏差。选择模型等高级技术确实存在,但在标准特征工程工作流程中较少使用。正式定义: 一个观测值缺失的概率取决于缺失值 ($Y_{miss}$),即使在考虑了已观测数据 ($Y_{obs}$) 之后也是如此。 $$ P(M=1 | Y_{obs}, Y_{miss}) \text{ 取决于 } Y_{miss} $$digraph G { rankdir=LR; node [shape=box, style=rounded, fontname="sans-serif", fontsize=10, color="#495057", fontcolor="#495057"]; edge [fontname="sans-serif", fontsize=9, color="#868e96"]; subgraph cluster_mcar { label = "MCAR"; bgcolor="#e9ecef"; M_mcar [label="缺失"]; Yobs_mcar [label="已观测 (Y_obs)"]; Ymiss_mcar [label="缺失 (Y_miss)"]; // MCAR无箭头 - 表示独立性 } subgraph cluster_mar { label = "MAR"; bgcolor="#e9ecef"; M_mar [label="缺失"]; Yobs_mar [label="已观测 (Y_obs)"]; Ymiss_mar [label="缺失 (Y_miss)"]; Yobs_mar -> M_mar [label="取决于"]; } subgraph cluster_mnar { label = "MNAR"; bgcolor="#e9ecef"; M_mnar [label="缺失"]; Yobs_mnar [label="已观测 (Y_obs)"]; Ymiss_mnar [label="缺失 (Y_miss)"]; Ymiss_mnar -> M_mnar [label="取决于", color="#f03e3e", fontcolor="#f03e3e"]; // MNAR可能也取决于Yobs(可选) Yobs_mnar -> M_mnar [label="可能也取决于", style=dashed]; } }MCAR、MAR和MNAR的依赖关系图。箭头表示缺失的概率取决于源变量。为何区分这些机制很重要虽然在没有数据收集过程的具体信息时,你很少能百分之百确定真正的缺失数据机制,但思考这些分类很重要:选择填充方法: MCAR和MAR的假设支撑着许多标准填充技术。如果你怀疑是MNAR,需要更加谨慎,因为标准方法可能会引入偏差。你可能倾向于创建指示变量,或承认其局限性。评估偏差: 了解可能的机制有助于你评估处理缺失数据时可能引入的偏差。在MAR或MNAR情况下删除数据比在MCAR情况下风险更大。数据分析: 检查缺失模式(例如,将缺失指示器与其它变量关联起来)有时可以提供线索,说明数据是MAR还是可能是MNAR。在实践中,当MCAR看起来过于简单且没有充分的领域原因怀疑是MNAR时,MAR通常是一个合理的实作假设。这个假设支持使用那些凭借变量间关系的填充方法。在接下来的章节中,我们将讨论填充缺失值的具体技术,并牢记这些内在机制。