4. 发酵数据清洗与异常识别实战
发酵过程的数据来自pH电极、溶氧电极、温度探头、补料称重、尾气分析仪等多路传感器,采样周期常为1分钟到5分钟。原始数据几乎不可能直接用于建模:电极标定漂移、搅拌引起的溶氧毛刺、通讯中断造成的缺失、PLC重复写入产生的重复记录、以及探头结垢或断线导致的"卡值",都会让趋势预测模型学到错误规律。本节以一个典型的50 L分批补料发酵批次为例,完整走一遍从原始数据到可建模数据的清洗链路。
先建立数据质量画像,再动手清洗
拿到一份CSV后不要急着删点。先做三件事:确认时间戳是否单调递增、统计每列的缺失率与取值范围、检查采样间隔分布。示例批次共运行96小时,理论采样2880条(2分钟一条),实际记录3012条,说明存在重复;pH列缺失47条(1.6%),溶氧列出现连续38条相同值,温度列在42小时附近有3个跳变到78℃的点——这些就是后续要处理的对象。判断依据应来自工艺常识:发酵温度通常控制在30~37℃,pH在5.0~7.5之间,溶氧不会在搅拌不变时瞬间从40%跳到5%。
重复记录与时间戳对齐
重复记录多由采集程序重试写入造成,表现为同一时间戳出现多条、或相邻时间戳间隔远小于采样周期。处理原则是保留同一时间戳的最后一条有效记录,并对间隔小于采样周期一半的记录做去重。示例中3012条去重后剩2876条,与理论值接近。去重后需重建等间隔时间轴:以2分钟为步长生成完整时间索引,将实际记录对齐到最近的时间点,为后续缺失识别提供统一基准。
缺失值:区分随机缺失与连续缺失
缺失不能一律插值。孤立单点缺失(前后均有有效值)可用线性插值或前向填充;连续缺失超过3个采样点(示例中溶氧在61~64小时缺失约8分钟)应标记为"不可信区间",不插值,而是在建模时作为掩码排除。对pH这类变化缓慢的量,线性插值误差小;对溶氧这类受搅拌和通气快速影响的量,连续缺失段插值会制造虚假平稳段,必须保留缺失标记。示例中47条缺失里,41条为孤立点采用线性插值,6条连续缺失保留NaN并打上gap_flag=1。
漂移、毛刺与卡值的识别与修复
漂移是缓慢的系统偏差,典型如pH电极随使用时间基线偏移。识别方法是与离线化验值或标准缓冲液校准点比对:示例中第0、24、48、72小时有离线pH化验值,在线值与化验值之差从0.02逐步扩大到0.18,呈单调趋势,判定为漂移。修复采用分段线性校正,以化验点为锚点对在线pH做偏移补偿,而不是简单平滑。
毛刺是短时大幅跳变,用滑动中位数或Hampel滤波识别:对每个点计算窗口(如7点)内的中位数与绝对偏差MAD,若该点偏离中位数超过3倍MAD则判为毛刺。示例中溶氧在搅拌切换瞬间出现多个尖峰,Hampel滤波标记出23个毛刺点,用窗口中位数替换。卡值是传感器结垢或断线后输出恒定值,识别特征是连续多点方差近似为零且与工艺操作不符,示例中溶氧连续38条相同值即属此类,应整段标记为故障区间而非逐点修复。
修复策略要可追溯,不能"洗没了"
清洗的核心原则是:修复值可以替换,但异常事实必须留痕。建议为每个关键变量保留原始列、清洗列和标记列三套字段,例如pH_raw、pH_corr、pH_flag(0正常、1插值、2漂移校正、3毛刺替换、4故障段)。这样在建模阶段既能用清洗值训练,也能在预测异常时回溯是数据问题还是工艺问题。示例批次最终输出2876行,其中正常点2807个、插值41个、漂移校正覆盖全程、毛刺替换23个、故障段6个,标记完整可查。
清洗结果的验证
清洗后要做三项检查:一是时间轴连续无重复;二是各变量落在工艺合理区间内,且相邻点变化率不超过物理可能上限(如温度每分钟变化不超过0.5℃);三是与离线化验值、补料累计量做交叉核对,示例中清洗后pH与4个化验点的残差均小于0.05,补料累计曲线单调不减。只有通过这三项检查,数据才可进入特征工程与趋势建模环节。若某项不通过,应回到对应异常类型重新判断,而不是反复调平滑参数掩盖问题。