第二章:数据基础——历史负荷、气象与日历特征的数据采集与清洗

各位同学,咱们今天聊聊发电量预测的“地基”——数据。我常说一句话:模型再花哨,数据不行全白搭。这可不是吓唬你,我在项目里见过太多因为数据问题导致预测结果离谱的案例了。

说白了,发电量预测的核心就是三块数据:历史负荷数据气象数据日历特征。这三者缺一不可。你想想看,没有历史负荷,你拿什么找规律?没有气象数据,光伏和风电怎么预测?没有日历特征,节假日和周末的用电差异你怎么捕捉?

核心观点:数据质量决定了预测模型的上限,模型算法只是逼近这个上限的手段。

2.1 历史负荷数据采集

历史负荷数据,就是过去一段时间内电网或用户的用电功率记录。我个人习惯从SCADA系统或智能电表里拿数据。采集时要注意几个关键点:

  • 时间分辨率:一般用15分钟、30分钟或1小时粒度。我建议做短期预测(未来1-3天)用15分钟或30分钟数据,中长期预测用小时级就够了。
  • 数据范围:至少要有过去1-2年的数据。为什么?因为要覆盖完整的季节周期和节假日模式。我记得有一次项目只给了半年数据,结果春节那几天的预测直接崩了。
  • 数据格式:时间戳+负荷值。时间戳一定要统一时区,最好用UTC或北京时间,别混用。

小技巧:采集时顺手把数据源、采集时间、数据版本记录下来。这招帮我省了不少回头查数据的功夫。

2.2 气象数据采集

气象数据对新能源发电预测尤其重要。我主要采集以下几类:

数据类型 说明 来源
温度 干球温度、露点温度 气象站、数值天气预报
辐照度 水平面总辐射、直接辐射 卫星反演、地面观测站
风速风向 10米/100米高度风速 气象站、风电场测风塔
湿度/气压 相对湿度、海平面气压 气象站
降水/云量 小时降水量、总云量 气象雷达、卫星

这里要特别提醒:气象数据的时间分辨率要和负荷数据对齐。我曾经遇到过气象数据是3小时间隔,负荷数据是15分钟间隔,结果硬生生把负荷数据降采样了,损失了不少细节信息。

避坑指南:我曾经因为用了不同来源的气象数据,发现温度值差了5度。后来一查,一个是地面2米温度,一个是百叶箱温度。所以一定要搞清楚数据定义。

2.3 日历特征数据

日历特征,说白了就是时间维度的标签。别小看它,它对预测精度的影响可能比气象数据还大。我一般会生成以下特征:

  • 时间特征:年、月、日、小时、星期几、一年中的第几天
  • 节假日标记:是否法定节假日、是否调休日、节前/节后一天
  • 特殊日期:春节、国庆、双十一等用电模式特殊的日期
  • 季节/季度:春夏秋冬,或者供暖季/非供暖季

你想想看,春节那几天工厂停工、商场关门,负荷曲线跟平时完全不一样。如果不加节假日特征,模型肯定懵圈。

2.4 数据清洗——脏活累活但必须干

数据清洗是预测项目里最耗时、最枯燥但最重要的环节。我一般按以下步骤来:

  1. 缺失值处理:先看缺失比例。少于5%的,用前后均值或线性插值填充。超过10%的,我建议直接删除该时段或使用更复杂的插值方法。
  2. 异常值检测:用3σ原则或箱线图。负荷数据突然跳变到0或者翻倍,多半是传感器故障或通信中断。
  3. 重复值去重:时间戳重复的数据,保留第一条或取平均值。
  4. 时间对齐:把不同来源的数据统一到相同的时间网格上。
  5. 数据标准化/归一化:让不同量纲的数据落到相近的数值范围,方便模型训练。

经验之谈:清洗后的数据一定要做可视化检查。画个时间序列图,一眼就能看出有没有离谱的跳变或缺失。我每次都会把清洗前后的图对比着看,确保没把好数据洗坏了。

2.5 数据融合与存储

三块数据采集清洗完后,就要融合成一张宽表。我常用的结构是:

时间戳 | 负荷值 | 温度 | 辐照度 | 风速 | 湿度 | 节假日标记 | 星期几 | 小时
2024-01-01 00:00 | 1250.3 | 2.1 | 0 | 3.5 | 85 | 1 | 1 | 0
2024-01-01 01:00 | 1180.7 | 1.8 | 0 | 3.2 | 87 | 1 | 1 | 1
...

存储格式我推荐用Parquet或HDF5,比CSV快得多,而且支持压缩。小项目用SQLite也行,但数据量大了还是得上数据库。

建议:数据融合时,把原始数据、清洗后的数据、特征工程后的数据分开存储。这样万一发现特征工程有问题,还能回退到原始数据重新做。

2.6 本章知识体系总览

下面这张图把本章的核心逻辑串起来了。从数据采集到清洗融合,每一步都环环相扣。

发电量预测数据基础——核心流程 历史负荷数据 SCADA/智能电表 气象数据 气象站/数值预报 日历特征 节假日/星期/季节 数据清洗 缺失值处理 → 异常值检测 → 重复值去重 → 时间对齐 → 标准化 (3σ原则 / 箱线图 / 线性插值 / 可视化检查) 数据融合与存储 宽表融合 → Parquet/HDF5/SQLite → 分层存储 进入模型训练阶段 数据质量决定模型上限

嗯,这张图把整个流程串起来了。从左边三路数据采集,到中间的数据清洗,再到右边的融合存储,最后进入模型训练。每一步都有坑,但每一步也都有方法可循。

最后提醒一句:数据清洗没有银弹。不同项目、不同数据源,遇到的问题都不一样。多动手、多看图、多跟业务方沟通,才是正道。


专注资料整理