4. 历史消耗数据清洗
备件需求预测的精度,很大程度上不取决于模型有多复杂,而取决于喂给模型的历史消耗数据是否干净。真实维修保障系统里导出的领用记录,往往同时存在四类“脏数据”:某些月份根本没有记录(缺失值)、某次领用数量大得离谱(异常值)、库存为零期间需求被压制(截尾数据)、同一物料因多编码或多库位被拆成多条记录(合并需求)。如果直接把这些数据丢进预测模型,得到的需求分布和订货点都会失真。本节围绕这四类问题,给出可落地的识别方法与处理流程,并用一个实战案例走完全程。
一、先明确清洗的目标与边界
清洗不是把数据改得“好看”,而是让每条记录尽可能还原真实的备件消耗事件。因此需要先确定三件事:时间粒度(按月、按周还是按领用事件)、统计单元(按物料编码、按件号还是按“物料+机型”)、需求口径(是领用量、装机量还是送修量)。口径不统一,后续所有处理都会互相矛盾。例如某航空器材单位以“件号+机型”为统计单元,按月汇总领用量,那么同一件号在不同机型上的消耗就必须分开建模,不能简单相加。
二、缺失值的识别与处理
缺失值分两种:一种是“真的没有消耗”,另一种是“记录丢失”。前者应补 0,后者需要插补或剔除。判断依据是库存台账与领用台账能否对上。若某月库存有出库流水但领用表为空,属于记录丢失;若库存和领用都为空,则视为零消耗。
常用处理方法:
- 零消耗补 0:适用于需求间歇性强的备件,这是最常见也最安全的方式。
- 均值/中位数插补:仅适用于消耗连续且稳定的备件,插补后需标记来源,避免污染真实统计。
- 前后向填充:适合短期缺失(1~2 个月),长期缺失不建议使用。
- 整段剔除:当某物料连续缺失超过设定阈值(如 6 个月)且无法核实,应剔除该时间段而非强行插补。
三、异常值的判定与处置
异常值不一定是错误,可能是真实的大修集中领用。关键是区分“业务异常”和“数据错误”。常用判定方法有三类:
- 统计法:对同一物料的历史序列计算四分位距 IQR,超出 Q3+1.5×IQR 或低于 Q1−1.5×IQR 的点标记为疑似异常。
- 业务阈值法:单次领用量超过该件号历史最大值的 3 倍,或超过单机装机数的合理倍数,触发人工复核。
- 关联校验法:与工单、大修计划、报废记录比对,确认是否属于计划性集中更换。
处置策略:数据错误(如单位录错、重复录入)直接修正或删除;业务异常(如大修换件)保留但单独标记,并在建模时考虑是否作为独立事件处理,避免它把均值拉高、把方差撑大。
四、截尾数据的处理
截尾数据是备件预测中最容易被忽视、却影响最大的问题。当库存为零时,实际需求可能大于领用量,但系统只记录到“没货可领”,形成需求被截断。典型表现是:某物料连续数月领用量为 0,但同期维修工单中频繁出现该件号缺件记录。
处理思路是“还原潜在需求”:
- 用库存流水识别缺货区间:库存量 = 0 且存在未满足领用申请。
- 用缺件工单、待料记录、外委维修记录估算被压制的需求量。
- 将缺货区间标记为“截尾”,在建模时对该区间采用需求率上限估计,而不是直接当作零消耗。
五、合并需求的处理
合并需求指同一实物因编码、库位、供应商或机型差异被拆成多条记录,或反之,多个独立需求被合并成一条汇总记录。前者导致单条序列过于稀疏,后者掩盖了需求的真实波动。处理原则是:先统一统计单元,再决定合并粒度。
操作上可分三步:建立编码映射表(旧码→新码、多码→主码);按“主码+机型+月”重新汇总;对合并后的序列检查是否出现“脉冲式”尖峰,若有则回查是否由合并造成,必要时拆回。
六、实战案例:某型液压泵的月度消耗清洗
某维修单位导出某型液压泵 24 个月的领用记录,原始数据存在以下问题:第 5、6 月无记录;第 12 月领用 48 件,而历史月均约 6 件;第 15~17 月库存为 0 但工单有缺件记录;该泵存在两个旧编码 A01、A02 与主码 P100 并存。
清洗过程如下:
- 编码合并:将 A01、A02 映射到 P100,重新按月汇总。
- 缺失判断:第 5、6 月库存与领用均为空,补 0。
- 异常复核:第 12 月 48 件对应一次大修集中换件,保留但标记为“计划性事件”。
- 截尾还原:第 15~17 月标记为截尾,依据缺件工单估算潜在需求约 4、5、3 件。
- 输出清洗后序列,并保留“来源”字段。
清洗前后对比:原始序列月均约 7.2 件、方差大;清洗后月均约 6.4 件,且截尾区间不再被误判为零需求。若不做处理,按原始数据计算的订货点会偏低约 15%~20%,在提前期较长时容易造成停机待件。
七、清洗成果的交付形式
清洗完成后,建议输出一张可直接用于建模的宽表,字段至少包含:统计单元、月份、清洗后消耗量、数据来源标记、是否截尾、是否计划性事件。下面给出一个可参考的字段示例(数值为示例数据):
| 统计单元 | 月份 | 清洗后消耗量 | 数据来源 | 是否截尾 | 是否计划性事件 |
|---|---|---|---|---|---|
| P100-机型A | 2024-05 | 0 | 补零 | 否 | 否 |
| P100-机型A | 2024-12 | 48 | 原始 | 否 | 是 |
| P100-机型A | 2025-03 | 4 | 截尾还原 | 是 | 否 |
| P100-机型A | 2025-04 | 5 | 截尾还原 | 是 | 否 |
这张表的价值在于:它既保留了原始信息,又明确标注了每条数据的处理方式。后续做需求预测时,可以按“是否截尾”“是否计划性事件”做分层建模或敏感性分析,而不是把所有数据混在一起。清洗不是一次性动作,而应随着库存策略、编码体系和维修计划的变化持续维护。只有把数据清洗做扎实,备件需求预测和维修资源优化才有可靠的基础。