3. 功率预测数据工程基础

虚拟电厂的功率预测不是从模型开始的,而是从数据开始的。一个风电场或分布式光伏集群的预测精度,往往在数据进入模型之前就已经被决定了。本节围绕四类核心数据源——SCADA、气象、市场、用户侧——梳理从采集到可建模数据集的完整工程链路,重点讲清楚每一步“实际怎么做”以及“做到什么程度算合格”。

四类数据源的特征与采集方式

SCADA 数据是功率预测的主标签来源。风电场 SCADA 通常以 1 分钟或 5 分钟为周期,记录有功功率、风速、风向、桨距角、机舱温度、限电标志等测点;光伏电站则记录有功功率、辐照度、组件温度、逆变器状态。采集方式多为 OPC UA、Modbus TCP 或 IEC 104 协议,经边缘网关汇聚后写入时序库。关键点在于:SCADA 时间戳应统一为 UTC 或带时区的本地时间,并保留原始时区字段,否则跨区域聚合时会出现“同一时刻不同物理时间”的错位。

气象数据分为两类:数值天气预报(NWP)和场站实测气象。NWP 提供未来 0~72 小时的辐照度、风速、温度、湿度、气压等格点或点位预报,时间分辨率通常为 15 分钟或 1 小时;实测气象来自场站气象站或辐照计,用于偏差订正。NWP 的采集需关注起报时间(issue time)和预报时效(lead time),同一时刻可能有多个起报版本,必须明确选用哪一版,否则会造成“未来信息泄漏”。

市场数据包括日前电价、实时电价、调频容量价格、中长期合约电量等。这类数据的特点是时间粒度不规则(15 分钟、1 小时、按日),且存在发布延迟。采集时应记录“发布时间”和“生效时间”两个字段,用于判断在预测时刻是否真的可获得该信息。

用户侧数据来自可调节负荷、储能、充电桩等,常见为 15 分钟或 1 小时的电量/功率、SOC、可调容量、开关状态。用户侧数据质量最不稳定,常出现通信中断、表计冻结、时区混乱等问题,需要单独设计校验规则。

四类数据源 → 清洗 → 对齐 → 缺失值处理 → 异常检测 → 可建模数据集 SCADA 功率/风速/状态 · 1~5min 气象 NWP + 实测 · 15min~1h 市场 电价/合约 · 15min~日 用户侧 负荷/储能/SOC · 15min~1h 采集与接入 OPC UA / Modbus API / 文件 / 消息队列 统一时间戳(UTC) 保留原始时区字段 记录发布/生效时间 写入时序库 原始层 ODS 不做修改,只追加 清洗 去重(同时间戳) 量纲统一(kW/MW) 物理范围校验 限电标志识别 停机/检修剔除 负值/零值处理 输出:清洗层 DWD 时间对齐 统一到 15min 网格 SCADA 降采样 NWP 插值到点位 市场数据前向填充 用户侧时区校正 避免未来信息泄漏 输出:对齐层 DWS 缺失值处理 短缺口线性插值 长缺口模型补全 标记缺失掩码 禁止用未来值 记录补全来源 异常检测 3σ / IQR 统计 物理一致性校验 功率-风速曲线 变化率突变检测 标记而非删除 可建模数据集:时间戳对齐 · 缺失掩码 · 异常标记 · 特征版本可追溯 训练集 / 验证集 / 测试集按时间切分,禁止随机打乱

清洗:把“脏数据”变成“可解释数据”

清洗不是简单删掉异常值,而是让每一条记录都能被解释。以某 50 MW 风电场 2024 年 3 月 1 日至 3 月 7 日的 SCADA 数据为例(以下为教学示例,非实测结果):原始记录 20160 条(1 分钟粒度),清洗规则如下。

  • 去重:同一机组同一时间戳出现多条记录时,保留采集时间最新的一条,并记录重复次数。
  • 量纲统一:将功率统一为 kW,风速统一为 m/s,温度统一为 ℃。
  • 物理范围校验:有功功率应满足 -5% 额定容量 ≤ P ≤ 105% 额定容量;风速应满足 0 ≤ v ≤ 40 m/s;桨距角应满足 -5° ≤ β ≤ 95°。超出范围标记为“越限”。
  • 限电识别:当“限电标志=1”且功率低于同风速下理论功率的 80% 时,该时段功率不作为正常标签,需单独标记。
  • 停机/检修剔除:状态字为“停机”“检修”“故障”时,功率置为缺失,不参与训练。

清洗后,示例数据中约 3.2% 的记录被标记为越限或停机,1.1% 为重复记录。这些比例本身不是目标,关键是每条被处理的数据都有对应的标记字段,便于后续追溯。

时间对齐:统一到同一根时间轴上

四类数据的时间粒度不同,必须对齐到统一网格。工程上常用 15 分钟网格,对齐规则如下:

  • SCADA 降采样:1 分钟数据聚合为 15 分钟,功率取均值,风速取均值,状态取“15 分钟内是否出现停机”的布尔值。
  • NWP 插值:将格点预报双线性插值到场站经纬度,再按时间线性插值到 15 分钟。注意:只能用起报时间之前可获得的数据,避免未来信息泄漏。
  • 市场数据前向填充:电价按生效时间对齐,若某 15 分钟无新价格,则沿用上一时段价格,并记录“价格是否更新”。
  • 用户侧时区校正:若用户侧数据为本地时间且未带时区,需根据设备地理位置统一转换为 UTC,再转回目标时区。

对齐后,每个 15 分钟时间戳对应一行记录,包含 SCADA 功率、NWP 辐照度/风速、电价、用户侧负荷等字段。示例中,3 月 1 日至 7 日共 672 个时间点,对齐后完整记录 648 条,缺失 24 条。

缺失值处理:区分“真缺失”与“假缺失”

缺失值处理的第一步是判断缺失类型。通信中断导致的缺失是“真缺失”,设备停机导致的缺失是“假缺失”(实际功率为 0,但不应作为正常样本)。处理策略如下:

  • 短缺口(≤ 4 个连续点,即 ≤ 1 小时):线性插值或前向填充,同时生成缺失掩码字段 is_missing=1。
  • 长缺口(> 4 个连续点):用同风速下历史功率曲线回归补全,或使用轻量模型(如随机森林)基于 NWP 和相邻机组数据补全。补全值必须标记来源,如 fill_method="regression"。
  • 禁止使用未来值:任何补全只能使用当前时刻及之前的信息,否则会造成标签泄漏。

示例中,24 个缺失点里 18 个为短缺口,采用线性插值;6 个为长缺口,采用同风速历史曲线补全。补全后,所有缺失点均保留掩码,训练时可通过掩码加权,降低补全值对模型的干扰。

异常检测:统计规则与物理规则并用

异常检测的目标不是“删掉异常”,而是“标记异常”。常用方法包括:

  • 统计法:对功率、风速等字段计算 3σ 或 IQR 边界,超出边界标记为统计异常。注意:功率本身具有强日周期,直接对全序列做 3σ 会误判早晚高峰,应按“同小时”分组计算。
  • 物理一致性:风速为 0 时功率应接近 0;风速超过切出风速时功率应接近 0;功率不应超过额定容量。违反这些规则的记录标记为物理异常。
  • 功率-风速曲线偏离:用历史正常数据拟合功率曲线,计算当前点与曲线的残差,残差超过阈值标记为曲线异常。
  • 变化率突变:15 分钟内功率变化超过额定容量的 30% 且无对应风速突变时,标记为突变异常。

示例中,3 月 1 日至 7 日共标记统计异常 12 条、物理异常 5 条、曲线异常 9 条、突变异常 3 条。这些标记字段随数据集一起交付,模型训练时可选择剔除或降权。

工程建议:原始层(ODS)只追加不修改,清洗层(DWD)保留处理标记,对齐层(DWS)输出统一时间网格,最终形成带缺失掩码和异常标记的可建模数据集。每一层都可独立回溯,避免“数据被改过但说不清怎么改的”。

从数据到可建模数据集:一份可执行的检查清单

完成上述步骤后,建议用以下清单做交付前检查(示例字段,可按项目调整):

检查项合格标准示例值
时间戳统一全部为 UTC 或带时区,无重复时间戳672 个时间点,无重复
缺失掩码每个缺失/补全点均有 is_missing 字段24 个缺失点全部标记
异常标记统计/物理/曲线/突变异常均有独立字段29 条异常记录
未来信息泄漏NWP 仅使用起报时间之前的数据起报时间 ≤ 预测时刻
训练/测试切分按时间切分,不随机打乱前 5 天训练,后 2 天测试
特征版本记录数据版本、清洗规则版本v2024.03.07

这份清单的意义在于:当预测精度不达标时,可以快速定位是数据采集、清洗、对齐还是异常检测环节出了问题,而不是盲目调模型。数据工程做扎实,模型才有发挥空间。