2. 批次数据采集与清洗实战

食品生产现场的批次数据往往散落在三个甚至更多系统中:MES 记录着投料、工序、设备与产量,LIMS 承载着理化与微生物检验结果,而配料间的称量复核、杀菌锅的温度手抄表、包装线的首件确认,仍大量存在于纸质记录或 Excel 台账中。这三类数据在时间粒度、编码规则、计量单位和质量水平上差异明显,直接合并分析几乎必然出错。本节的任务,是把它们抽取、对齐、修补、纠偏、统一,最终形成一张以“批次”为唯一主键、字段含义明确、可直接进入统计分析的批次数据集。

一、先明确目标数据集的结构

清洗不是盲目地“把脏数据变干净”,而是围绕分析目标反向定义字段。假设我们要分析“杀菌工序对成品微生物合格率的影响”,目标数据集至少需要:批次号、产品编码、生产日期、生产线、杀菌温度、杀菌时长、原料验收等级、成品菌落总数、检验结论。这张“字段清单”决定了要从哪些源抽取什么,也决定了缺失与异常的处理优先级——杀菌温度缺失的批次,比包装膜批号缺失的批次重要得多。

建议在动手前先写出一张字段映射表,明确每个目标字段的来源系统、源字段名、数据类型、单位、是否必填。这张表是后续所有清洗动作的依据,也是交接与复核的凭证。

二、多源抽取与批次主键对齐

三个来源的批次标识往往不一致:MES 用“20240612-A2-003”这样的工单批次号,LIMS 用样品编号“S240612031”,手工记录则可能只写了“6月12日 A2线 第三锅”。对齐的关键是找到共同的锚点——通常是“生产日期 + 生产线 + 班次/锅次”。

实操中可先在 MES 侧建立批次主表,再为 LIMS 与手工记录各建一张映射表,通过日期、线别、产品编码做多对一匹配。匹配后必须检查一对多冲突:例如同一锅次在 LIMS 中出现两个样品编号,需判断是平行样还是重复录入。这一步的产出是“批次主键—各源记录”的对应关系,任何无法匹配的记录都应单独列出待人工确认,而不是直接丢弃。

多源批次数据清洗链路 MES 工单数据 批次号 / 投料 / 工序 设备 / 产量(结构化) LIMS 检验数据 样品编号 / 理化指标 微生物结果(半结构化) 手工记录 称量复核 / 温度手抄 首件确认(非结构化) 抽取与主键对齐:生产日期 + 生产线 + 锅次 → 统一批次主键 无法匹配记录单独挂起,人工确认,不直接丢弃 缺失值处理 关键字段缺失→回查 非关键→标记不插补 禁止均值填充关键项 异常值识别 工艺上下限判定 3σ / IQR 辅助筛查 区分录入错与真实偏差 单位统一 温度 ℃ / 时长 min 菌落 CFU/g 统一量级 日期统一 ISO 格式 一致性校验 检验结论与数值比对 批次数量与投料核对 重复批次去重 可分析批次数据集(一行一批次,字段含义与单位明确) 附清洗日志:缺失数、异常数、修正记录、挂起记录

三、缺失值:先判断性质,再决定动作

缺失值处理最容易犯的错误是“一律填均值”。在食品批次数据中,缺失往往携带信息:杀菌温度为空,可能是记录漏填,也可能是该批次走了豁免工艺;菌落总数缺失,可能是未取样,也可能是检验未完成。因此第一步是分类:关键工艺参数缺失应回查原始记录或设备日志补录;检验结果缺失需确认是未检还是未出结果,未检批次在分析时应剔除而非插补;非关键描述字段缺失可保留空值并加标记列。

只有在确认缺失为随机发生、且该字段参与建模时,才考虑插补。例如同产品、同生产线、相邻批次的杀菌温度可用中位数参考,但必须在数据集中新增“是否插补”标志列,保证分析时可追溯。示例:某批杀菌温度缺失,回查设备 PLC 曲线后补录为 121.3 ℃,则标记为“设备日志补录”,而非“插补”。

四、异常值:工艺规则优先于统计规则

异常值识别应先建立工艺合理区间,再用统计方法辅助。以巴氏杀菌为例,工艺规定温度 72~75 ℃、时长 15~20 s,那么 7.2 ℃ 显然是小数点录入错误,而 78 ℃ 可能是真实超温,需要保留并标记为工艺偏差,因为它恰恰是分析对象。统计方法如 3σ 或 IQR 适合在工艺区间内进一步筛查离群点,但不能替代工艺判断。

实操建议对每个数值字段设置“硬约束”和“软约束”:硬约束(如温度必须为正、菌落总数不得为负)直接判为错误并回查;软约束(如超出历史 P1~P99 范围)标记为可疑,保留原值并新增异常标志列。这样既不丢失真实偏差信息,也避免错误值污染统计。

五、单位与编码统一

常见不统一包括:温度有 ℃ 与华氏度混录、时长有秒与分钟混录、菌落总数有 CFU/g 与 CFU/mL 混用、日期有“2024/6/12”与“2024-06-12”两种格式、产品编码有新旧两套。处理原则是:以目标数据集的字段定义为准,逐字段建立换算规则并记录换算系数;日期统一为 ISO 8601;产品编码通过编码映射表转换,映射不上的记录挂起。

单位换算必须可审计。例如手工记录中“杀菌 2 分钟”换算为 120 s,应在清洗日志中记录“原值 2 min → 120 s,系数 60”。切忌在源表中直接覆盖原值,应保留原始列与标准列并存。

六、一致性校验与交付

清洗完成后做三类校验:一是逻辑一致性,如检验结论为“合格”但菌落总数超过内控限值,需回查;二是数量一致性,成品入库数量不应大于投料折算的理论产量;三是唯一性,同一批次主键不得重复。校验不通过的记录进入“待确认清单”,由质量或生产人员判定后再决定修正或剔除。

最终交付的数据集应包含:标准字段表、清洗日志(缺失数、异常数、换算记录、挂起记录)、字段说明与单位定义。下面是一份可直接参考的清洗日志字段示例:

字段说明示例
批次主键统一后的批次唯一标识20240612-A2-003
字段名发生清洗动作的目标字段杀菌温度
问题类型缺失 / 异常 / 单位 / 重复缺失
原值源数据原始内容空
处理动作补录 / 换算 / 标记 / 挂起设备日志补录
处理后值进入数据集的值121.3
处理人/时间责任与可追溯信息张三 / 2024-06-13
清洗的核心不是让数据“看起来完整”,而是让每一个被修改的值都有据可查。保留原始列、新增标志列、记录换算系数,是保证后续统计分析结论可信的三条底线。

完成上述步骤后,这张批次数据集才真正具备分析价值:每一行对应一个可追溯的批次,每一个数值都有明确的单位与来源,每一处修补都留有记录。后续的工序能力分析、合格率对比、参数相关性研究,都建立在这一份干净且可审计的数据基础之上。