1. 风电功率预测中的"单站准≠集群准"现象
在风电功率预测领域,有一个让很多从业者困惑的现象:单个风电场的预测模型准确率很高,但当把这些模型直接套用到风电场集群预测时,效果却大幅下降。这个现象背后隐藏着风电预测领域一个关键挑战——站间相关性(Inter-site Correlation)。
我曾在某省电网调度中心参与过31个风电场的集群功率预测项目。当时我们使用LSTM模型对每个风电场单独建模,单站MAE(平均绝对误差)可以控制在8%以内。但当简单加总所有风电场的预测结果作为集群预测时,整体MAE却飙升到12%以上。这个差距让我们意识到,传统单站预测方法存在明显局限。
1.1 为什么单站模型在集群预测中失效?
根本原因在于风电场之间存在着复杂的时空相关性。当冷锋过境时,相邻风电场的风速变化往往具有连续性;而地形差异又可能导致某些风电场出现相反的功率波动。这些相关性在单站建模时完全被忽略,但恰恰是影响集群预测精度的关键因素。
以一个实际案例说明:某省北部5个风电场呈线性分布,间距约20公里。当西北风来临时,风电场A的功率上升通常会比风电场E早1-2小时。如果仅用单站历史数据训练模型,就会错过这种先导-滞后关系,导致在预测时间跨度较大时误差累积。
2. GCN-Transformer混合架构设计
为了捕捉风电场间的复杂相关性,我们设计了一个融合图卷积网络(GCN)和Transformer的混合模型。这个架构的核心创新点在于:
2.1 空间维度:基于地理信息的GCN建模
我们首先构建风电场的图结构:
- 节点:每个风电场(31个)
- 边:基于地理距离和风向玫瑰图计算的连接权重
- 节点特征:经纬度、海拔、风机类型等静态特征
python复制class SpatialGCN(nn.Module):
def __init__(self, num_nodes, node_feat_dim):
super().__init__()
self.gc1 = GraphConv(node_feat_dim, 64)
self.gc2 = GraphConv(64, 32)
def forward(self, x, adj):
x = F.relu(self.gc1(x, adj))
return self.gc2(x, adj)
这个模块的关键在于邻接矩阵的设计。我们采用高斯核函数计算权重:
$$
W_{ij} = exp(-\frac{d_{ij}^2}{2σ^2}) \times cos(θ_{prevailing}-θ_{ij})
$$
其中$d_{ij}$是风电场间距,$θ$是盛行风向与连线方向的夹角。
2.2 时间维度:Transformer时序建模
在时间维度,我们使用Transformer编码器处理每个风电场的功率时序:
python复制class TemporalTransformer(nn.Module):
def __init__(self, input_dim):
super().__init__()
self.pos_enc = PositionalEncoding(input_dim)
encoder_layer = nn.TransformerEncoderLayer(
d_model=input_dim, nhead=4)
self.transformer = nn.TransformerEncoder(encoder_layer, num_layers=2)
def forward(self, x):
x = self.pos_enc(x)
return self.transformer(x)
特别设计了两种注意力机制:
- 站内注意力:捕捉单个风电场不同时间步的关系
- 站间注意力:通过交叉注意力实现风电场间的信息交互
3. 实现细节与调优经验
3.1 数据准备的特殊处理
风电数据预处理有几个关键点:
- 时空对齐:将不同采样频率的数据统一到15分钟粒度,并考虑数据传输延迟
- 空值填补:采用KNN方法,用地理邻近风电场的数据进行填补
- 特征工程:除了常规气象特征,我们还加入了:
- 上游风电场的功率变化率(提前1-2小时)
- 大气边界层高度(ERA5再分析数据)
- 地形粗糙度指数
重要提示:千万不要直接对功率数据做标准化!应该先除以装机容量得到容量系数,再进行标准化。我们曾因此损失3%的MAE。
3.2 模型训练技巧
在训练这个混合模型时,我们总结出几个有效策略:
-
分阶段训练:
- 第一阶段:冻结GCN,只训练Transformer部分
- 第二阶段:解冻GCN,联合微调
- 第三阶段:加入课程学习,从简单样本逐步过渡到复杂天气场景
-
损失函数设计:
$$
\mathcal{L} = \alpha \cdot MAE + \beta \cdot \sum_{i≠j} |\hat{C}{ij} - C|
$$
其中$\hat{C}{ij}$是预测的相关矩阵,$C$是真实值的皮尔逊相关系数。 -
正则化方法:
- 对GCN施加边dropout(随机断开20%的连接)
- 对Transformer使用attention dropout(0.1概率)
4. 实际效果与业务价值
我们在某省级电网的31个风电场(总装机4.8GW)上进行了验证:
| 模型类型 | 单站平均MAE | 集群MAE | 计算耗时 |
|---|---|---|---|
| 传统LSTM | 7.8% | 12.3% | 1.2h |
| 纯GCN模型 | 8.1% | 10.7% | 2.5h |
| 纯Transformer | 7.5% | 11.1% | 3.8h |
| 本文混合模型 | 7.3% | 9.6% | 2.9h |
这个15%的MAE提升带来了显著的业务价值:
- 减少备用容量需求约320MW
- 降低弃风率1.2个百分点
- 每年增加风电消纳收益约4600万元
在2022年1月的寒潮期间,传统模型对集群功率突降的预测滞后了3小时,而我们的模型提前2.5小时发出了预警,为调度争取了宝贵时间。
5. 踩坑实录与改进方向
5.1 初期遇到的典型问题
-
过平滑问题:GCN在3层以上时,所有节点的输出会趋于相同。解决方案:
- 加入残差连接
- 使用门控图卷积(GatedGCN)
-
注意力失效:当风电场数量较多时,Transformer的注意力权重变得均匀。我们通过以下方法解决:
- 引入局部注意力(只计算相邻风电场)
- 添加距离衰减系数
-
冷启动问题:新建风电场缺乏历史数据。目前的解决方案:
- 使用相似风电场的迁移学习
- 基于物理模拟生成伪数据
5.2 未来优化方向
-
动态图结构:当前使用静态地理关系图,计划引入:
- 实时风向调整的动态边权重
- 基于预测不确定性的自适应图学习
-
多任务学习:同时预测功率和预测区(quantile),满足调度系统不同场景需求
-
边缘计算部署:将部分计算下放到风电场本地,减少数据传输延迟
这个项目给我的深刻体会是:在新能源预测领域,单纯追求单站指标的提升已经遇到瓶颈。未来需要更多关注场站间的协同效应,把电力系统作为一个整体来建模。我们正在尝试将类似思路扩展到光伏电站集群预测,初步结果显示也有显著效果提升。
