4. 停机数据清洗与预处理实战
停机记录在进入分析模型之前,几乎不可能直接可用。真实产线的停机数据通常来自三处:MES 的停机事件表、PLC/SCADA 采集的设备状态位、以及班组手工填写的纸质或电子停机台账。三者的时间粒度、字段口径和记录习惯各不相同,直接合并会得到一张"看起来有数据、实际不能用"的表。本节以一条灌装线的真实停机记录为对象,完整走一遍清洗链路:先明确原始数据长什么样,再依次处理缺失值、异常值、时间对齐、重采样与规范化,最后得到可用于停机时长统计和原因分析的干净数据集。
一、先看清原始数据的问题
假设我们拿到某灌装线一周的停机事件表,字段包括:设备编号、停机开始时间、停机结束时间、停机原因代码、记录来源。同时还有 PLC 侧每 10 秒一条的设备状态记录(运行/待机/故障)。检查后会发现几类典型问题:部分停机记录缺少结束时间(操作工只记了开始,恢复生产时忘了补录);部分记录的停机时长出现负值或长达 20 小时以上(明显是跨班次漏记结束时间,或把计划保养误记为故障停机);MES 时间戳为本地时间,PLC 时间戳为 UTC,两者相差 8 小时;同一台设备在同一时段存在两条重叠记录(MES 自动记录与手工补录重复)。这些问题不解决,后续任何统计都会失真。
二、缺失值处理:区分"可推断"与"不可推断"
缺失值不能一律删除或一律填充,关键是判断缺失是否可以从其他数据源推断。对于缺少结束时间的停机记录,最可靠的做法是用 PLC 状态位反推:在该设备停机开始时间之后,查找状态位首次从"故障"或"待机"回到"运行"的时间点,作为结束时间。如果 PLC 数据在该时段也缺失,则退而求其次,用同设备同原因代码的历史停机时长中位数填充,并在数据表中增加一列"结束时间来源"标记为"推断",供后续分析时区分置信度。
对于停机原因代码缺失的记录,不能简单填"其他",而应结合停机时长和发生时段做规则判断:例如时长小于 2 分钟且发生在换班前后,大概率是换型调整;时长超过 30 分钟且伴随下游设备同步停机,大概率是上游供料故障。规则判断仍无法确定的,保留为"待确认",不要强行归类,否则会污染原因分布统计。
三、异常值识别:用业务规则加统计方法双重过滤
停机时长的异常值识别不能只看统计分布,必须先设定业务边界。以灌装线为例,单次非计划停机时长合理区间可设为 1 分钟到 8 小时:小于 1 分钟的多为信号抖动或误触发,大于 8 小时的通常是跨班次未记录恢复时间或计划性停机混入。先用这条硬规则筛出候选异常,再用箱线图法(IQR)在同设备同原因代码的分组内做二次校验,把超出 Q3+1.5×IQR 的记录标记为疑似异常。
对标记出的异常记录,处理方式分三种:能通过 PLC 状态位修正结束时间的,直接修正;确认是计划保养误录入的,从非计划停机数据集中移出,转入计划停机表;无法解释的,保留原值但打上"异常"标签,在分析时单独统计其影响。切忌直接删除,因为异常记录本身往往揭示了记录流程的漏洞。
四、时间对齐:先统一时区,再处理重叠
时间对齐是停机数据分析中最容易被忽视、后果最严重的一步。MES 记录的是本地时间(如 2024-06-03 14:25:00),PLC 记录的是 UTC 时间(2024-06-03 06:25:00),两者相差 8 小时。如果不做转换直接按时间戳关联,会把下午的停机匹配到上午的状态记录上,得出完全错误的停机原因。正确做法是:在数据接入层统一转换为带时区的时间戳(如 ISO 8601 格式),存储时统一用 UTC,展示时再转回本地时间。
时区统一后,还要处理同一设备的记录重叠问题。例如 MES 自动记录了一条 14:25–14:40 的停机,班组手工又补录了一条 14:30–14:45 的停机,两条记录重叠 10 分钟。处理规则是:以 MES 自动记录为主,手工记录仅用于补充原因描述;若手工记录的时间范围完全包含自动记录,则以手工记录为准并标记"人工修正";若两条记录部分重叠且原因不同,保留时长较长的一条,另一条合并为备注。去重后的停机总时长必须与 PLC 状态位统计的故障时长做交叉校验,偏差超过 5% 就要回溯检查。
五、重采样:把事件表变成可分析的时间序列
停机事件表是"事件粒度"的,每次停机一行;但做趋势分析、班次对比、OEE 计算时,需要的是"时间粒度"的汇总数据。重采样的任务就是把事件表按固定时间窗口聚合。以 10 秒粒度的 PLC 状态数据为例,可以先聚合到 1 分钟:每分钟内只要出现过"故障"状态,就记该分钟为故障分钟;再按班次(早班 8:00–16:00、中班 16:00–24:00、夜班 0:00–8:00)汇总每班的停机次数、总停机时长、平均停机时长和最长单次停机时长。
重采样时要注意两个细节:一是窗口边界要对齐班次起点,不能简单按自然小时切分,否则跨班次的停机会被拆到两个班次里,导致班次对比失真;二是停机次数和停机时长要分开聚合,不能只保留时长,因为同样 60 分钟的停机,可能是 1 次长停机,也可能是 12 次 5 分钟的短停机,后者对产线节拍的影响完全不同。
六、数据规范化:让不同来源的数据说同一种语言
规范化包括三个层面。第一是编码规范:MES 里的原因代码可能是"E01、E02、E03",手工台账里写的是"电气故障、机械卡阻、缺料",PLC 报警码又是另一套数字。需要建立一张映射表,把所有来源的原因统一到标准分类,例如"设备故障、物料短缺、换型调整、质量停机、计划保养、其他"。第二是命名规范:设备编号在 MES 里是"FILL-01",在 PLC 里是"Line1_Filler",必须统一为同一套设备主数据编码。第三是量纲规范:停机时长统一用分钟,避免有的记录用秒、有的用小时。
规范化完成后,建议输出一张数据质量报告,包含:原始记录数、清洗后记录数、各处理步骤影响的记录数、推断数据占比、异常数据占比、与 PLC 交叉校验的偏差率。这张报告既是清洗工作的验收依据,也是后续分析时判断结论可信度的参考。只有质量校验通过的数据集,才适合进入停机原因帕累托分析、OEE 损失分解和改善优先级排序等下游环节。