数据缺失的几种处理方式
拿到一份数据,先别急着删空值。缺失本身携带信息,处理方式选错,后面所有分析都会建立在有偏的样本上。下面按「先诊断、再处理、后验证」的顺序展开。
先看缺失比例和缺失位置
打开数据后第一件事是统计每列的缺失数量和比例。可以用几行代码得出每列的缺失计数、缺失占比,再按占比排序。
- 缺失比例低于 5%:通常可以安全删除缺失行,对整体分布影响很小。
- 缺失比例在 5% 到 30% 之间:建议做插补,同时保留一个「是否缺失」的标记列。
- 缺失比例超过 50%:这列的信息量已经很弱,优先考虑整列删除,除非业务上明确知道它关键。
注意「行缺失」和「列缺失」的区别。某一行有 20 列、其中 15 列都是空,这行基本没有分析价值;而某一列只有零星几个空,处理成本很低。先算清楚再动手。
判断缺失是不是随机的
同样比例的空值,成因不同,处理方式完全不同。
- 完全随机缺失:空值出现与任何变量无关。比如传感器偶发丢包。这类缺失删除或插补都可以。
- 随机缺失:缺失概率取决于其他已观测变量。比如收入字段的缺失与年龄有关。插补时要利用这些相关变量。
- 非随机缺失:缺失与它自己的真实值有关。比如高收入人群更不愿填收入。这类缺失最难处理,插补容易系统性偏低。
判断方法很直接:把「是否缺失」当成一个二值标签,看它在其他列上的分布有没有明显差异。比如按性别分组,分别算收入字段的缺失率;如果男女缺失率差很多,就不是完全随机。
删除法的适用边界
删除分两种:删行和删列。
- 删行适用于缺失完全随机、且缺失行占比很小的情况。删之前先对比删除前后的关键变量均值,差异明显就不要删。
- 删列适用于整列缺失率过高、或该列对当前分析目标没有贡献的情况。删列前确认它没有被其他计算依赖。
不要为了数据「干净」而删除大量样本。样本量本身就是信息,删到只剩一半,后续结论的稳定性会明显下降。
插补的常用做法
插补不等于随便填个均值,选择取决于变量类型和缺失机制。
- 均值或中位数插补:最快,但会压缩方差、削弱变量间的相关性。中位数比均值更抗极端值。适合缺失比例低、只做粗略汇总的场景。
- 众数插补:用于分类变量。缺点是会放大某一类别的占比。
- 分组插补:按其他变量分组后分别算均值或中位数再填。比如按城市分组填收入。比全局插补更合理,前提是分组变量本身没有缺失。
- 前向填充或后向填充:适合时间序列。用上一个有效值或下一个有效值补。前提是数据按时间排好序,且相邻时点变化不大。
- 模型插补:用其他列作为特征,把待补列当作目标训练模型来预测空值。效果通常更好,但要注意别把目标变量本身的信息漏进去造成泄漏。
无论用哪种,插补后保留一个布尔标记列,记录哪些位置是补过的。后续分析可以把标记列作为特征,或单独检查插补值的影响。
插补后必须做的验证
插补完直接跑分析,风险很高。至少做三件事:
- 对比插补前后的分布。画直方图或算分位数,看形状是否被扭曲。均值插补会让分布向中心收缩,一眼能看出来。
- 在已知真值的子集上测试。如果数据里有部分完整记录,可以人为挖掉一部分,用同样方法插补,再和真值比较误差。
- 检查插补值与相关变量的关系。比如插补出的收入应该和年龄、职业保持合理关联,如果补出来全是一个常数,说明方法选错了。
处理缺失没有唯一正确答案。记录下每一步做了什么、为什么这么做,比追求某个「最佳方法」更重要。别人复现你的分析时,能看懂缺失是怎么处理的,结论才站得住。
相关文章
拿到一份新数据,先做这 6 项检查
拿到一份陌生数据集时,直接跑分析往往会在中途返工。这篇教程给出 6 项可落地的检查:从字段含义、行数与主键,到缺失、量纲、时间范围和分布形态,每一步都给出判断标准和记录方式,帮你把问题挡在建模之前。
Excel 里最容易埋下的 5 个错误
很多数据问题不是分析环节造成的,而是从录入和整理时就埋下了。本文列出 5 个常见错误:合并单元格、数字存为文本、日期格式混乱、表头多行、空行与空列,并给出每个错误的判断方法和修改做法,适合日常用 Excel 处理数据的人对照检查。
怎么判断数据源可靠不可靠
面对一份来源不明的数据,如何判断它能不能用?本文给出一套可操作的检查流程,从出处、字段定义、时间范围、更新机制到交叉验证,帮你快速筛掉不靠谱的数据源,减少后续返工。