为什么智慧水务建模之前必须先做数据清洗?
为什么智慧水务建模之前必须先做数据清洗?
核心答案
污水厂历史数据里混着仪表故障值、停机时段、人工强制值和通讯中断补零,这些数据占比常常在5%到20%。不清洗直接建模,模型学到的是仪表故障规律,不是工艺规律。
详细解析
常见脏数据有几类。第一类是恒定值,探头坏了以后读数卡在某个数上不动,可能连续几天。第二类是超量程尖峰,通讯干扰导致瞬时跳变,DO突然显示25 mg/L。第三类是补零,通讯中断时系统写0,不识别的话模型会认为DO为0的工况经常发生。第四类是人工干预痕迹,检修期间把值强制成某个数。
还有个隐蔽问题是时间不对齐。不同仪表采样周期不同,有的1分钟有的5分钟,有的用本地时钟没对时,合表时会错位。进水流量和出水COD错开10分钟,相关性就出不来。
工艺逻辑校验往往被跳过。出水COD大于进水COD、MLSS为0但曝气在运行,这些数值上不越界,物理上不可能。
清洗以后还要做工况标注。检修、雨季、加药试验这些时段单独标记,建模时决定剔除还是单独建子模型。
常见误区
用三倍标准差一刀切剔除异常值。污水厂真实冲击负荷本来就是长尾分布,一律剔掉,模型对冲击工况完全无能。
缺失值一律用均值填充。连续缺失几小时用均值填,会造出一段不存在的平稳期。
认为数据量大就够了。三年数据如果只有一个从未校准的氨氮探头,量再大也没用。
实践建议
把清洗流程固化成脚本。第一步查恒定值,同一读数连续超过30个采样点标记可疑。第二步按物理量程和工艺逻辑做双重校验。第三步统一重采样到5分钟粒度,用前后值线性插值,连续缺失超过6个点的整段剔除。第四步对照运行日志标注检修和试验时段。清洗前后的数据量和分布做对比留档,仪表建校准台账,建模只用校准记录完整的时段。