风电光伏功率预测竞赛精华总结:技术解析与实战经验
@TOC
竞赛背景介绍
1.1 新能源功率预测的重要性
风电和光伏发电作为新能源的重要组成部分,由于其受天气和环境因素的强烈影响,具有明显的间歇性和波动性特征。准确的功率预测对于电力系统的稳定运行至关重要:
- 电网调度优化: 准确的预测能够有效应对新能源发电的波动性和不确定性,确保电网频率、电压、负荷平衡等关键指标的稳定
- 降低运营风险: 减少停电风险,提高电力系统的经济性和可靠性
- 合规要求: 电网公司通过调度中心对新能源发电场的功率预测进行考核,不达标将面临罚款
随着新能源比例的不断增加和智能电网技术的快速发展,发电功率预测在电网管理中将扮演越来越重要的角色。
1.2 竞赛概况
本次技术博客涵盖了多个新能源功率预测竞赛的经验,主要包括:
科大讯飞AI开发者大赛 - 新能源发电功率预测
- 数据规模: 2个场站(1个风电场、1个光伏场站)
- 预测目标: 未来2个月的15分钟级功率预测(每天96个时间点)
- 气象数据: 3个不同气象源(NWP_1, NWP_2, NWP_3)
第三届世界科学智能大赛新能源赛道
- 数据规模: 10个场站(5个风电场、5个光伏场站)
- 预测目标: 次日零时起未来24小时逐15分钟级功率预测
- 空间数据: 场站周边11×11个格点的气象预报数据
百度KDD Cup 2022 - 风电功率预测
- 数据规模: 134台风力发电机组
- 预测目标: 未来48小时10分钟级功率预测
DataCastle国能日新光伏功率预测
- 数据规模: 4个光伏站点
- 关键特征: 实发辐照度(训练集缺失,需预测)
数据特征分析
2.1 数据来源与结构
2.1.1 气象预报数据特征
气象数据通常来自多个预报源,每个源提供不同的气象变量。以科大讯飞竞赛为例:
气象变量说明:
| 变量名 | 描述 | 单位 |
|---|---|---|
| direct_radiation | 预测辐射 | W/m² |
| wind_direction_80m | 预测80m风向 | 度(°) |
| wind_speed_80m | 预测80m风速 | m/s |
| temperature_2m | 预测2m温度 | ℃ |
| relative_humidity_2m | 预测2m湿度 | % |
| precipitation | 预测降水量 | mm |
第三届世界科学智能大赛的气象变量更加丰富:
| 变量 | 描述 | 单位 |
|---|---|---|
| u100 | 100米高度纬向风 | m/s |
| v100 | 100米高度经向风 | m/s |
| t2m | 2米气温 | K |
| tp | 总降水量 | m |
| tcc | 总云量 | (0-1) |
| sp | 地面气压 | Pa |
| poai | 光伏面板辐照度 | W/m² |
| ghi | 水平面总辐照度 | W/m² |
关键发现:
- 不同气象源的变量可能存在差异(如NWP_2使用msl而非sp)
- 气象数据时间分辨率从15分钟到1小时不等
- 部分竞赛提供空间维度数据(11×11格点),可用于空间相关性建模
2.1.2 功率数据特征
功率数据通常是15分钟或10分钟分辨率的历史实发功率数据。主要特征包括:
时间周期性:
- 日周期: 光伏发电呈现明显的日变化,白天发电,夜晚为0
- 季节周期: 风电和光伏发电受季节变化影响显著
数据质量问题:
- 缺失值: 部分时段数据缺失
- 死值: 数据长时间保持不变
- 异常值: 负值、超限值等
功率上限:
- 风电场站: 通常有额定功率上限
- 光伏电场: 受辐照度影响,实际功率通常在白天达到峰值
2.2 数据质量分析与处理
2.2.1 异常值检测与处理
通过数据分析,我们发现以下常见的异常模式:
1. 时间格式异常:
1 | |
2. 功率异常值:
1 | |
3. 死值处理:
1 | |
2.2.2 数据标准化与归一化
第三届世界科学智能大赛提供了归一化后的功率数据,但气象数据需要自行处理:
1 | |
2.3 特征工程实践
2.3.1 时间相关特征
时间特征是新能源功率预测中最基础也最重要的特征:
1 | |
2.3.2 统计聚合特征
基于时间窗口的统计特征能有效捕捉数据的波动性和趋势:
1 | |
应用示例:
1 | |
2.3.3 风速风向特征工程
对于风电预测,风速和风向的变换至关重要:
1 | |
2.3.4 滞后特征
历史功率和气象信息对预测具有重要指导意义:
1 | |
2.3.5 分箱特征
将连续变量离散化可以帮助模型捕捉非线性关系:
1 | |
2.3.6 距离特征
对于光伏预测,与峰值时段的距离对预测具有重要意义:
1 | |
技术方案设计
3.1 整体框架设计
基于多个竞赛的经验,我们总结出一套完整的新能源功率预测技术框架:
1 | |
3.2 分阶段预测策略
3.2.1 两阶段预测策略(实发辐照度)
在国能日新光伏功率预测竞赛中,我们发现了一个关键问题:
问题: 测试集包含”实发辐照度”特征,但训练集缺失
解决方案: 采用两阶段预测策略
1 | |
关键发现:
- 实发辐照度是最重要的预测特征之一
- 人工预测的辐照度存在误差,通过模型预测可以改进
- 两阶段策略显著提升了模型性能
3.2.2 短期-长期分离策略
百度KDD Cup 2022的方案采用了短期(0-3小时)和长期(3-48小时)分离策略:
1 | |
设计思想:
- 短期预测: 风具有惯性,当前风速对未来几小时的预测影响大
- 长期预测: 更依赖气象预报,需要充分利用空间相关性
3.3 模型选择策略
3.3.1 树模型(基线方案)
LightGBM和XGBoost是新能源功率预测的基线模型,具有以下优势:
- 训练速度快: 适合快速迭代和特征工程验证
- 特征重要性可解释: 便于理解关键影响因素
- 对缺失值鲁棒: 处理数据质量问题
1 | |
3.3.2 深度学习模型(进阶方案)
1. LSTM/GRU模型
适用于时间序列预测,能捕捉长期依赖关系:
1 | |
2. Transformer模型
基于自注意力机制,能同时捕捉多个时间步的依赖关系:
1 | |
3. 空间时间图网络(XGTN)
百度KDD Cup 2022前6名使用的模型,利用风机之间的空间相关性:
1 | |
模型构建过程
4.1 数据准备流程
4.1.1 数据加载
1 | |
4.1.2 数据预处理
1 | |
4.2 特征工程实现
1 | |
4.3 模型训练流程
4.3.1 树模型训练
1 | |
4.3.2 深度学习模型训练
1 | |
实验结果展示
5.1 评估指标
5.1.1 竞赛评估指标
不同竞赛使用不同的评估指标,我们需要实现统一的评估函数:
科大讯飞竞赛评估指标:
1 | |
第三届世界科学智能大赛评估指标:
1 | |
5.1.2 标准回归指标
1 | |
5.2 实验结果对比
5.2.1 模型性能对比
- 空间模型(XGTN)在风电预测中表现最佳,充分验证了风机间空间相关性的重要性
- Transformer在光伏预测中表现良好,能有效捕捉长时序依赖
- 树模型具有很好的性价比,训练快速且性能不差
5.2.2 特征工程效果对比
- 时间特征和统计特征是最基础也最重要的特征
- 滞后特征对短期预测贡献显著
- 两阶段策略(先预测实发辐照度)在光伏预测中效果明显
性能优化策略
6.1 模型融合策略
6.1.1 加权平均融合
1 | |
6.1.2 Stacking融合
1 | |
6.2 超参数优化
6.2.1 网格搜索
1 | |
6.2.2 贝叶斯优化
1 | |
6.3 后处理策略
6.3.1 边界约束
1 | |
6.3.2 平滑处理
1 | |
6.3.3 基于气象的修正
1 | |
遇到的问题及解决方案
7.1 数据问题
问题1: 时间格式不一致
现象:
- 国能日新竞赛中,CSV文件显示的时间为整数,但实际为浮点数
- 例如显示”0:00”,实际为”23:59:99”
- 导致提取的小时信息完全错误
解决方案:
1 | |
经验教训:
- 在数据探索阶段就要仔细检查时间格式
- 打印样本数据时不要只看字符串表示,要看实际值
- 处理时间数据时使用datetime类型而非字符串
问题2: 实发辐照度缺失
现象:
- 测试集包含”实发辐照度”特征
- 训练集缺少该特征
- 实发辐照度与实际功率高度相关
解决方案:
采用两阶段预测策略:
- 第一阶段: 预测实发辐照度
- 第二阶段: 使用预测的实发辐照度预测实际功率
1 | |
经验教训:
- 测试集包含而训练集缺失的特征通常需要额外处理
- 考虑是否可以预测该特征,或寻找替代方案
- 两阶段策略是处理此类问题的有效方法
问题3: 数据质量问题
现象:
- 缺失值
- 死值(长时间保持不变的值)
- 异常值(负值、超限值)
解决方案:
1 | |
经验教训:
- 数据清洗是模型成功的关键
- 不同站点可能有不同的数据特点,需要分别处理
- 可视化有助于发现数据质量问题
7.2 模型问题
问题1: 模型过拟合
现象:
- 训练集MAE很低,验证集MAE很高
- 模型在训练集上表现很好,但泛化能力差
解决方案:
1 | |
经验教训:
- 交叉验证是评估模型泛化能力的关键
- 正则化和早停是防止过拟合的有效手段
- 复杂模型不一定比简单模型好
问题2: 深度学习模型训练不稳定
现象:
- 损失不收敛
- 梯度爆炸或消失
- 验证集性能波动大
解决方案:
1 | |
经验教训:
- 深度学习模型的训练需要更多调参技巧
- 监控训练过程,及时发现异常
- 数据标准化很重要
问题3: 特征冗余
现象:
- 特征数量过多(100+)
- 模型训练慢
- 特征重要性分布不均
解决方案:
1 | |
经验教训:
- 特征选择可以提升模型性能并加速训练
- 基于特征重要性的方法简单有效
- 特征数量不是越多越好
7.3 部署问题
问题1: 推理速度慢
现象:
- 单次预测耗时过长
- 无法满足实时性要求
解决方案:
1 | |
经验教训:
- 模型量化可以显著提升推理速度
- 批处理可以充分利用计算资源
- 考虑使用更高效的推理框架(如ONNX Runtime)
问题2: Docker部署问题
现象:
- 容器内无法运行
- 文件读取错误
- 网络连接问题
解决方案:
1 | |
1 | |
经验教训:
- 容器内无法访问网络,需预装所有依赖
- 使用绝对路径
- 环境变量设置很重要
- 测试容器是否能正常运行再提交
竞赛经验总结
8.1 核心经验总结
经验1: 特征为王
核心观点: 特征工程的质量决定了模型性能的上限
实践证明:
- 在国能日新竞赛中,通过精心设计的特征工程(实发辐照度预测、统计特征、滞后特征),最终排名21
- 即使简单的模型(如线性回归),配合好的特征也能取得不错的效果
特征工程原则:
领域知识驱动: 深入理解新能源发电的物理原理
- 光伏: 辐照度、温度、面板效率
- 风电: 风速、风向、空气密度
时间特征优先: hour、month、day、weekday等基础特征
统计特征补充: 滚动统计(window mean/std/max/min)
滞后特征重要: 历史1-48小时的功率和气象数据
交互特征创新: 变量之间的乘除运算
1 | |
经验2: 数据预处理比模型更重要
核心观点: 高质量的数据输入比复杂的模型更有效
关键点:
- 时间对齐: 气象预报时间和功率时间必须精确对齐
- 异常值处理: 缺失值、死值、异常值的合理处理
- 数据标准化: 合理的归一化/标准化策略
数据质量检查清单:
1 | |
经验3: 从简单到复杂
核心观点: 先建立基线,逐步优化
推荐流程:
1 | |
经验4: 交叉验证至关重要
核心观点: 本地验证分数与线上分数的一致性是成功的关键
验证策略:
- 时间序列交叉验证: 不打乱时间顺序
- 分段验证: 按月或季度划分
- 线下线上对比: 监控gap
1 | |
经验5: 模型融合提升显著
核心观点: 多模型融合往往能取得比单模型更好的效果
融合原则:
- 多样性: 使用不同类型的模型(树模型、深度学习)
- 相关性: 模型预测的相关性不宜过高
- 权重优化: 基于验证集优化融合权重
有效融合组合:
- LightGBM + XGBoost + CatBoost(树模型)
- LightGBM + LSTM(树模型+深度学习)
- 短期模型 + 长期模型(时间尺度分离)
8.2 不同场站的特点
风电场站特点
关键特征:
- 风速(80m或100m高度)
- 风向(经向和纬向风分量)
- 气温(影响空气密度)
- 气压(影响空气密度)
- 空间相关性(多风机之间的相关性)
建模建议:
- 空间模型: XGTN等图网络模型
- 风功率密度: 0.5 * ρ * v³
- 短期-长期分离: 短期依赖风惯性,长期依赖气象预报
- 风向处理: 转换为sin/cos分量
1 | |
光伏场站特点
关键特征:
- 辐照度(总辐照度、直接辐照度、散射辐照度)
- 实发辐照度(面板辐照度,非常重要)
- 温度(影响光伏效率)
- 时间特征(白天/夜晚、季节变化)
建模建议:
- 两阶段预测: 先预测实发辐照度,再预测功率
- 温度修正: 光伏效率随温度升高而降低
- 时间特征: 区分白天和夜晚
- 非线性变换: 辐照度和功率的关系非线性
1 | |
8.3 竞赛技巧
技巧1: 理解评估指标
关键: 准确理解竞赛评估指标,针对性地优化
科大讯飞竞赛评估:
- 风电: 只计算实发功率>10MW的点
- 光伏: 计算大发时段[11:00~14:00)或其他时段>10MW的点
优化策略:
1 | |
技巧2: 时间序列的特殊性
注意: 时间序列不能简单随机划分训练集和验证集
正确做法:
1 | |
技巧3: 提交前的检查
检查清单:
1 | |
1 | |
技巧4: 多提交策略
策略: 利用每日多次提交机会,尝试不同方案
实施方案:
- 早提交: 快速验证基线方案
- 中期提交: 测试特征工程和模型改进
- 后期提交: 融合最优模型,精细调参
- 最后提交: 稳定性最高的方案
1 | |
8.4 避坑指南
坑1: 忽视数据分布
现象: 训练集和测试集分布不一致
解决: 分析数据分布,必要时进行分布适配
1 | |
坑2: 过度拟合验证集
现象: 验证集分数很高,但线上分数很差
原因: 在验证集上调参过多次
解决: 保留独立的测试集,减少验证集使用频率
1 | |
坑3: 数据泄露
现象: 模型性能异常好,但实际无效
原因: 使用了未来的信息
常见数据泄露:
- 使用了测试集的统计信息(如mean, std)
- 滞后特征使用了未来数据
- 标准化使用了全量数据而非仅训练集
正确做法:
1 | |
坑4: 时间处理错误
现象: 提取的时间特征错误
原因: 时区、时间格式、夏令时等问题
正确做法:
1 | |
8.5 团队协作建议
建议1: 明确分工
角色分配:
- 数据工程师: 负责数据加载、清洗、预处理
- 特征工程师: 负责特征设计和实验
- 模型工程师: 负责模型训练、调参、融合
- 系统工程师: 负责代码管理、部署、提交
建议2: 版本控制
Git最佳实践:
1 | |
代码提交规范:
1 | |
建议3: 实验记录
实验记录模板:
1 | |
8.6 持续学习
8.6.1 竞赛链接
- 新能源发电功率预测挑战赛:https://challenge.xfyun.cn/topic/info?type=new-energy-power-forecast
- DCIC2024光伏发电出力预测:https://www.dcic-china.com/competitions/10097
- DCIC2024海上风电出力预测:https://www.dcic-china.com/competitions/10098
- 国能日新光伏竞赛:https://www.datafountain.cn/competitions/553
- 百度KDD杯2022:https://aistudio.baidu.com/aistudio/competition/detail/452
8.6.2 技术文档引用
- 万灿, 宋永华. 新能源电力系统概率预测理论与方法[M]. 科学出版社, 2022.
- 风力发电和光伏发电预测技术[M]. 中国电力出版社, 2020.
- 数值天气预报产品在新能源功率预测中的释用[J]. 电力系统自动化, 2021.
- https://www.zhihu.com/people/qin-zheng-kai-89
- https://blog.csdn.net/qq_45832050?spm=1000.2115.3001.5343
- 使用人工智能技术进行可再生能源预测的竞赛解决方案综合集合:https://zread.ai/QInzhengk/Wind-and-PV-AI-competitions/1-overview
结语
新能源功率预测是一项富有挑战性但也极具价值的任务。通过参与多个竞赛,我们总结出以下核心要点:
- 特征工程是核心: 好的特征是模型成功的基石
- 数据质量是关键: 仔细的数据预处理比复杂的模型更重要
- 从简单到复杂: 先建立基线,逐步优化
- 验证很重要: 确保本地验证与线上评分一致
- 融合提升显著: 多模型融合往往能取得更好效果
- 避免常见陷阱: 注意数据泄露、过拟合等问题
希望这份技术博客能为参与新能源功率预测竞赛的选手提供有价值的参考。竞赛不仅是技术的较量,更是思维和策略的比拼。保持耐心,持续迭代,相信你一定能取得优异的成绩!
最后,祝各位参赛选手在新能源功率预测竞赛中取得好成绩!
附录:完整代码示例
A.1 完整训练流程
1 | |
A.2 完整预测流程
1 | |