nan测评:我踩过的坑
nan测评不能只看“能不能填掉”,要看它从哪来、会污染哪些指标、处理后有没有副作用。我按真实排查流程写:从发现异常到定位来源,再到补救和复盘。照这个走,基本不会被 nan 偷偷改掉结果。
第1步:从异常结果反推 nan
很多 nan 不是一打开表就跳出来,而是藏在结果里。比如转化率突然显示为空、图表断线、模型 loss 变成 nan、均值比预期低一截。看到这种现象,不要先改图表,先查原始字段。
我的固定动作是查三类列:参与除法的列、类型转换后的列、外部合并来的列。nan 最爱出现在这三个地方。尤其是左连接后没匹配上的记录,整片字段会变成 nan。
第2步:测缺失率,别只数总量
做 nan测评,单看“缺了 500 个”没意义。500 个在 100 万行里很轻,在 800 行里就是灾难。我会输出缺失数、缺失率、唯一值数量,再按日期或渠道切一刀。
如果缺失集中在某一天,优先查同步任务;集中在某个渠道,查接口字段;集中在某个版本,查埋点。别急着 fillna,很多 nan 是系统故障的烟。
第3步:检查是不是计算制造的 nan
原始数据没缺失,计算后也会造出 nan。典型例子是 0/0、空数组求均值、字符串转数字失败、负数开平方。报表里的点击率、复购率、客单价都可能中招。
避坑写法是给分母加条件:分母为 0 时返回空或业务默认值,不要让系统自己随便吐 nan。比如曝光为 0 的点击率,显示为“无曝光”比显示 0% 更诚实。
第4步:选择处理方案前先问业务
最差的处理是全表 fillna(0)。它快,也最危险。库存缺失填 0,会被理解成没货;价格缺失填 0,可能触发低价异常;年龄缺失填 0,会污染人群画像。
我的判断顺序是:能回源修复就回源;不能修复再看能否删除;必须保留样本才考虑填补。填补也要分列处理,金额、次数、比例、类别、时间字段没有同一种安全答案。
第5步:复测处理副作用
nan 处理完不是收工。要复测指标前后差异,尤其是均值、分位数、样本量和分组排名。我遇到过一次,中位数补值后整体 AUC 提升,但某个小渠道表现暴跌,原因是该渠道缺失机制和其他渠道完全不同。
一份合格的 nan测评,最后应该留下三样东西:缺失原因、处理规则、影响范围。下次同字段再出问题,团队不用重新猜。
常见问题
- nan测评主要看哪些指标?
- 看缺失数、缺失率、按时间和来源的分布、处理前后核心指标变化。建模场景还要看训练是否报错、特征重要性和验证集表现。
- nan一定是坏数据吗?
- 不一定。nan 表示当前没有有效数字,可能是正常缺失,也可能是计算错误或系统故障。关键看它是否符合业务逻辑。
- nan太多的字段还能用吗?
- 要看缺失是否有信息。缺失率很高的字段不一定废,比如“是否填写邀请码”可能有价值;但如果来源不稳定,建模和报表都要谨慎。