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 停机事件表 开始/结束时间 原因代码 · 本地时间 缺结束时间 · 有重复 PLC 状态记录 10 秒粒度状态位 运行/待机/故障 UTC 时间戳 班组手工台账 原因描述 · 处理措施 补录信息 格式不统一 ① 缺失值处理 PLC 状态位反推结束时间 历史中位数填充 + 来源标记 原因代码规则判断 ② 异常值识别 业务边界:1 分钟 ~ 8 小时 分组 IQR 二次校验 修正 / 移出 / 打标签 ③ 时间对齐 UTC → 本地时间统一 MES 与 PLC 时间戳校准 重叠记录去重合并 ④ 重采样 10 秒状态 → 1 分钟聚合 按班次/小时汇总停机时长 保留停机次数与总时长 ⑤ 数据规范化 原因代码映射到标准分类 设备编号统一命名 时长单位统一为分钟 输出:清洗后数据集 停机事件明细表 班次停机汇总表 数据质量标记列 质量校验:记录总数守恒 · 停机总时长偏差 < 5% · 推断数据占比 < 15% 校验不通过则回溯对应处理步骤,不得直接进入分析

四、时间对齐:先统一时区,再处理重叠

时间对齐是停机数据分析中最容易被忽视、后果最严重的一步。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 损失分解和改善优先级排序等下游环节。

清洗过程中不要覆盖原始数据。所有修正、填充、删除操作都应在副本上进行,并保留操作日志(哪条记录、什么时间、用什么规则、改成了什么)。一旦下游分析发现异常,可以快速回溯到具体处理步骤,判断是数据问题还是业务问题。