4. 能耗数据清洗与预处理实战

能耗基线建立的质量,很大程度上取决于进入建模环节的数据是否"干净"。计量表计故障、通信中断、人工抄表错位、单位混用等问题,在真实能耗数据中几乎必然出现。本节围绕一个典型的企业用电数据集,完整走一遍异常值识别、缺失值处理、数据对齐与单位统一的处理链路,最终输出一份可直接用于基线建模的可用数据集。

一、示例数据集与问题诊断

假设某工厂有三条生产线(A线、B线、C线),各配一块智能电表,以15分钟为间隔采集有功电量(kWh),同时保留一条来自旧系统的日报表数据(单位为"度",即kWh,但部分记录被误录为"万度")。取2024年3月1日至3月7日共7天数据,原始数据存在以下典型问题:

  • 异常值:A线3月3日14:00出现单点电量 980 kWh,而该时段历史均值约 120 kWh,明显偏离;
  • 缺失值:B线3月5日因网关断电,连续 6 个采集点(约1.5小时)为空;
  • 时间不对齐:C线电表时钟比标准时间快 8 分钟,导致同一物理时刻的记录错位;
  • 单位不统一:日报表中部分记录以"万度"录入,与15分钟粒度的 kWh 混用。

下面这张图展示了从原始数据到可用数据集的完整处理链路,以及每一步的输入、处理动作与输出状态:

原始数据集 15min 电量 + 日报表 7天 × 3条产线 ① 异常值识别 3σ / IQR 双判据 标记 980 kWh 单点 ② 缺失值处理 短缺口线性插值 长缺口标记不补 ③ 时间对齐 C线时钟 -8min 校正 统一到整15min刻度 ④ 单位统一 万度 → kWh ×10000 全部折算为 kWh ⑤ 一致性校验 日合计 vs 日报表 偏差 < 2% 通过 可用数据集 时间戳对齐 · 单位kWh 异常已标记 · 缺口已标注 关键判据与处理原则 · 异常值:|x − μ| > 3σ 或超出 [Q1−1.5IQR, Q3+1.5IQR],先标记后人工复核,不直接删除 · 缺失值:连续缺口 ≤ 4 个点(≤1小时)用线性插值;更长的缺口保留为空并打"不可用"标签 · 时间对齐:以标准时钟为基准,对偏移表计做整体平移,再重采样到整15min刻度 · 单位统一:所有电量统一为 kWh,换算系数在元数据中显式记录,避免二次混用

二、异常值识别:先标记,不急于删除

异常值识别常用两类判据。第一类是统计判据:对某条产线某时段的电量序列计算均值 μ 与标准差 σ,若某点满足 |x − μ| > 3σ,则视为统计异常。第二类是分位数判据(IQR):计算 Q1、Q3,超出 [Q1 − 1.5×IQR, Q3 + 1.5×IQR] 的点视为异常。前者对近似正态的负荷较敏感,后者对偏态分布更稳健,实践中建议两者并用、取并集标记。

以A线3月3日14:00的 980 kWh 为例:该产线近30天同时段均值约 120 kWh、标准差约 18 kWh,980 远超 120 + 3×18 = 174,IQR 判据同样判定为异常。此时不要直接删除,而应先标记并回查原因——本例经核对为电表通信故障导致的"跳变累积值",属于无效记录,应置为空值进入缺失值处理流程;若核实为真实的生产高峰(如临时加班),则应保留并备注。这一"标记—复核—定性"的顺序,是避免误删真实负荷波动的关键。

三、缺失值处理:按缺口长度分级

缺失值处理的核心不是"补得越多越好",而是"补得合理、补得可追溯"。建议按缺口长度分级:

  • 短缺口(≤ 4 个连续点,约1小时):采用线性插值。例如B线3月5日10:00–11:30缺失,前后有效点为 10:00 的 105 kWh 与 11:45 的 117 kWh,按时间比例线性填充中间各点;
  • 中缺口(4–16 个点):优先用"同类型日同时段均值"填充,例如用前一周同星期几同时段的均值;
  • 长缺口(> 16 个点,超过4小时):不做数值填充,保留为空并打上"数据不可用"标签,在后续基线建模时整段剔除,避免引入虚假规律。

无论采用哪种方式,都应在数据表中增加"填充标记"字段(如 is_filled 与 fill_method),使每一个被填补的值都可追溯,这对后续基线审核与审计非常重要。

四、时间对齐:消除时钟偏移与重采样

C线电表时钟快 8 分钟,意味着其记录的"10:00"实际对应标准时间 09:52。处理方法是:先确定偏移量 Δ = +8 min,将该表所有时间戳整体减去 8 分钟,再统一重采样到整 15 分钟刻度(00、15、30、45 分)。重采样时,若原始点落在两个刻度之间,按时间加权分摊到相邻刻度,保证每个 15 分钟区间的电量之和与原始总量一致,避免"对齐后总量漂移"。

对齐前务必先确认各表计的时区设置与夏令时规则是否一致;跨时区或跨季节切换时,偏移量可能不是固定值,需要分段处理。

五、单位统一与一致性校验

日报表中出现的"万度"记录,统一乘以 10000 折算为 kWh,并在数据字典中明确记录"原始单位—换算系数—目标单位"三元组。完成全部处理后,做一次一致性校验:将清洗后的15分钟数据按日汇总,与日报表日合计比对,偏差应控制在 2% 以内;若某日偏差超限,回查该日是否存在未处理的异常或长缺口。本例中3月5日因B线长缺口被标记剔除,日合计偏差约 1.6%,在允许范围内,校验通过。

六、交付:可用数据集的结构

最终输出的可用数据集建议包含以下字段,既保留清洗结果,也保留处理痕迹:

字段含义示例值
timestamp对齐后的标准时间(15min刻度)2024-03-05 10:00
line_id产线标识A / B / C
energy_kwh该区间有功电量(kWh)105.0
is_outlier是否被标记为异常0 / 1
is_filled是否为填充值0 / 1
fill_method填充方法linear / same_day_avg / none
data_status数据可用状态valid / unavailable

经过上述五步处理,原始数据中 980 kWh 的跳变被标记并置空、B线短缺口完成线性插值、C线时钟偏移被校正、万度记录完成折算,最终得到一份时间戳统一、单位统一、异常与缺口均有明确标记的可用数据集。这份数据集才是后续能耗基线建模与能效指标计算的可靠输入——清洗阶段留下的每一个标记,都是基线可信度的"证据链"。