先给结论:发现源数据缺项时,不要补一个看起来合理的值继续往下走。正确动作是把缺项标成未知,并切断依赖它的推导链——该字段不参与聚合、不进入模板、不生成结论,直到补齐或明确降级。下面按你手里的一份表格或一个页面,逐步说明怎么判断、怎么改、改完看什么。
这两类处理方式完全不同。没采到是采集或录入环节漏了,补齐后可以恢复使用;本来就没有是业务上不存在这个值,比如某类产品天然没有某个参数。把第二类当成第一类去补,就会制造假数据。
判断依据可以看三个地方:
只有确认属于“漏采且可补”时,才进入补齐流程;否则直接标注为不适用或未知,并让下游知道这个值不可用。
很多人习惯用 0、空字符串或“暂无”填充,这三种都会污染后续计算。0 会被当成真实数值参与求和与均值,空字符串在部分逻辑里等于空值、在另一些逻辑里等于有值,“暂无”则可能被当成一个正常分类。
更稳的做法是单独设一个状态字段,例如 status = missing,原值字段保持为空。这样任何读取方都能先判断状态再决定是否使用数值。假设一张表里有 100 行价格,其中 8 行缺价格,如果把这 8 行填成 0,均价会被明显拉低;如果标记为缺失并排除,均价只基于 92 行计算,虽然样本变小,但结果不会被假数据带偏。这是一个假设例子,用来对比两种处理对同一指标的影响方向。
动作与结果的关系在这里很直接:加了状态标记,下游就必须显式处理缺失;填了默认值,下游会无感知地算错,而且错得看不出来。
一个字段缺失,往往不只影响它自己。要先列出它被谁引用,再决定是阻断、降级还是替换。
举例来说,如果缺的是页面的更新时间,那么“按新鲜度排序”这类输出应当阻断或降级,而不是拿抓取时间顶替。抓取时间和内容更新时间含义不同,混用会让排序结果失真,而且很难事后发现。
不要只看某个数字是否归零。请求量、抓取量或某项统计变成 0,可能是处理生效,也可能是采集本身停了、页面被临时屏蔽、统计口径改了。归零不能单独证明处理正确。
更可靠的验证方式是做前后对比,并排除其他解释:
如果对比后仍无法区分是修改生效还是外部波动,就延长观察窗口或加一个不受本次修改影响的对照指标,用两者的差异来判断。
缺项会反复出现,每次都靠人工判断容易前后不一致。可以把上面的判断写成一条简短规则:先判类型,再决定补齐或标未知;标未知的字段不进入聚合;引用它的输出按阻断、降级、替换三档处理,并注明替换来源。
规则落地后,下一次遇到缺项时,处理动作和影响范围都是确定的,错误不会因为某个人的临时决定而扩散到新的输出里。这一步做完,才算真正把缺项控制住,而不是只修好了当前这一条记录。