4. 历史消耗数据清洗

备件需求预测的精度,很大程度上不取决于模型有多复杂,而取决于喂给模型的历史消耗数据是否干净。真实维修保障系统里导出的领用记录,往往同时存在四类“脏数据”:某些月份根本没有记录(缺失值)、某次领用数量大得离谱(异常值)、库存为零期间需求被压制(截尾数据)、同一物料因多编码或多库位被拆成多条记录(合并需求)。如果直接把这些数据丢进预测模型,得到的需求分布和订货点都会失真。本节围绕这四类问题,给出可落地的识别方法与处理流程,并用一个实战案例走完全程。

一、先明确清洗的目标与边界

清洗不是把数据改得“好看”,而是让每条记录尽可能还原真实的备件消耗事件。因此需要先确定三件事:时间粒度(按月、按周还是按领用事件)、统计单元(按物料编码、按件号还是按“物料+机型”)、需求口径(是领用量、装机量还是送修量)。口径不统一,后续所有处理都会互相矛盾。例如某航空器材单位以“件号+机型”为统计单元,按月汇总领用量,那么同一件号在不同机型上的消耗就必须分开建模,不能简单相加。

二、缺失值的识别与处理

缺失值分两种:一种是“真的没有消耗”,另一种是“记录丢失”。前者应补 0,后者需要插补或剔除。判断依据是库存台账与领用台账能否对上。若某月库存有出库流水但领用表为空,属于记录丢失;若库存和领用都为空,则视为零消耗。

常用处理方法:

  • 零消耗补 0:适用于需求间歇性强的备件,这是最常见也最安全的方式。
  • 均值/中位数插补:仅适用于消耗连续且稳定的备件,插补后需标记来源,避免污染真实统计。
  • 前后向填充:适合短期缺失(1~2 个月),长期缺失不建议使用。
  • 整段剔除:当某物料连续缺失超过设定阈值(如 6 个月)且无法核实,应剔除该时间段而非强行插补。
建议在清洗表中增加“数据来源”字段,取值如“原始”“补零”“插补”“剔除”,便于后续追溯和敏感性分析。

三、异常值的判定与处置

异常值不一定是错误,可能是真实的大修集中领用。关键是区分“业务异常”和“数据错误”。常用判定方法有三类:

  • 统计法:对同一物料的历史序列计算四分位距 IQR,超出 Q3+1.5×IQR 或低于 Q1−1.5×IQR 的点标记为疑似异常。
  • 业务阈值法:单次领用量超过该件号历史最大值的 3 倍,或超过单机装机数的合理倍数,触发人工复核。
  • 关联校验法:与工单、大修计划、报废记录比对,确认是否属于计划性集中更换。

处置策略:数据错误(如单位录错、重复录入)直接修正或删除;业务异常(如大修换件)保留但单独标记,并在建模时考虑是否作为独立事件处理,避免它把均值拉高、把方差撑大。

四、截尾数据的处理

截尾数据是备件预测中最容易被忽视、却影响最大的问题。当库存为零时,实际需求可能大于领用量,但系统只记录到“没货可领”,形成需求被截断。典型表现是:某物料连续数月领用量为 0,但同期维修工单中频繁出现该件号缺件记录。

处理思路是“还原潜在需求”:

  1. 用库存流水识别缺货区间:库存量 = 0 且存在未满足领用申请。
  2. 用缺件工单、待料记录、外委维修记录估算被压制的需求量。
  3. 将缺货区间标记为“截尾”,在建模时对该区间采用需求率上限估计,而不是直接当作零消耗。
若把截尾区间当作真实零消耗,会系统性低估需求,导致订货点偏低、缺货率上升。这是备件预测中最常见的隐性错误。

五、合并需求的处理

合并需求指同一实物因编码、库位、供应商或机型差异被拆成多条记录,或反之,多个独立需求被合并成一条汇总记录。前者导致单条序列过于稀疏,后者掩盖了需求的真实波动。处理原则是:先统一统计单元,再决定合并粒度。

操作上可分三步:建立编码映射表(旧码→新码、多码→主码);按“主码+机型+月”重新汇总;对合并后的序列检查是否出现“脉冲式”尖峰,若有则回查是否由合并造成,必要时拆回。

六、实战案例:某型液压泵的月度消耗清洗

某维修单位导出某型液压泵 24 个月的领用记录,原始数据存在以下问题:第 5、6 月无记录;第 12 月领用 48 件,而历史月均约 6 件;第 15~17 月库存为 0 但工单有缺件记录;该泵存在两个旧编码 A01、A02 与主码 P100 并存。

清洗过程如下:

  1. 编码合并:将 A01、A02 映射到 P100,重新按月汇总。
  2. 缺失判断:第 5、6 月库存与领用均为空,补 0。
  3. 异常复核:第 12 月 48 件对应一次大修集中换件,保留但标记为“计划性事件”。
  4. 截尾还原:第 15~17 月标记为截尾,依据缺件工单估算潜在需求约 4、5、3 件。
  5. 输出清洗后序列,并保留“来源”字段。

清洗前后对比:原始序列月均约 7.2 件、方差大;清洗后月均约 6.4 件,且截尾区间不再被误判为零需求。若不做处理,按原始数据计算的订货点会偏低约 15%~20%,在提前期较长时容易造成停机待件。

历史消耗数据清洗流程与四类问题处置 原始领用记录 编码/库位/月份/数量 统一统计口径 主码+机型+月 四类问题识别 缺失/异常/截尾/合并 清洗后序列 含来源标记 ① 缺失值 · 库存/领用均空 → 补 0 · 有出库无领用 → 记录丢失 · 短期缺失 → 前后向填充 · 长期缺失 → 整段剔除 ② 异常值 · IQR 法:超 Q3+1.5IQR · 业务阈值:超历史 3 倍 · 关联工单/大修计划复核 · 错误修正,业务异常标记 ③ 截尾数据 · 库存=0 且存在缺件 · 用缺件工单估算潜在需求 · 标记截尾区间 · 不可当作真实零消耗 ④ 合并需求 · 建编码映射表 · 旧码→主码统一 · 按主码+机型+月汇总 · 检查脉冲尖峰是否需拆回 实战案例:某型液压泵 24 个月消耗清洗 1月 5-6月 12月 15-17月 18-24月 缺失→补0 48件→标记 截尾→还原 编码合并 清洗前:月均 7.2 件,截尾误判为零,订货点偏低 15%~20% 清洗后:月均 6.4 件,截尾还原,需求分布更接近真实

七、清洗成果的交付形式

清洗完成后,建议输出一张可直接用于建模的宽表,字段至少包含:统计单元、月份、清洗后消耗量、数据来源标记、是否截尾、是否计划性事件。下面给出一个可参考的字段示例(数值为示例数据):

统计单元月份清洗后消耗量数据来源是否截尾是否计划性事件
P100-机型A2024-050补零否否
P100-机型A2024-1248原始否是
P100-机型A2025-034截尾还原是否
P100-机型A2025-045截尾还原是否

这张表的价值在于:它既保留了原始信息,又明确标注了每条数据的处理方式。后续做需求预测时,可以按“是否截尾”“是否计划性事件”做分层建模或敏感性分析,而不是把所有数据混在一起。清洗不是一次性动作,而应随着库存策略、编码体系和维修计划的变化持续维护。只有把数据清洗做扎实,备件需求预测和维修资源优化才有可靠的基础。