3、风功率预测技术:数值天气预报、统计预测方法、机器学习预测模型、预测误差分析
风功率预测,说白了就是给风电场装个「天气预报大脑」。
我做了这么多年储能系统,最深的体会就是:预测不准,储能白干。你想想看,如果不知道明天风怎么吹,储能系统要么充不满,要么放不出,收益全打水漂。
这一章,我把风功率预测的四个核心模块掰开揉碎了讲。都是我在项目里踩过的坑和攒下的经验。
3.1 数值天气预报(NWP)—— 预测的「地基」
数值天气预报,简称NWP。它是所有预测方法的基础。
原理其实不复杂:把大气运动方程扔进超级计算机里算。但这里有个关键点——分辨率。
核心参数:
- 全球模型(如GFS):分辨率约25km,适合72小时以上预测
- 区域模型(如WRF):分辨率可到1km,适合48小时内预测
- 我建议:做风储项目,至少用区域模型降尺度到3km以内
我在内蒙古一个项目里吃过亏。当时直接用了全球模型的数据,结果预测风速和实际差了4m/s。储能系统按预测来充放电,一天亏了十几万。后来换成WRF模型降尺度到1km,误差才降到1.5m/s以内。
实战技巧:
NWP数据不是拿来就能用的。一定要做「站点订正」。我习惯用最近3个月的实测数据,做一个线性回归校正。简单,但有效。
3.2 统计预测方法 —— 老办法,但管用
统计方法,说白了就是「用历史数据说话」。
常用的有几种:
- 持续法(Persistence):假设未来风速和现在一样。适合超短期(15分钟内)预测。我一般用它做基准线,看看其他方法有没有进步。
- 时间序列法(ARIMA):把风速当成时间序列来建模。适合1-4小时预测。嗯,这里要注意:ARIMA对数据平稳性要求高,我通常先做差分处理。
- 卡尔曼滤波:动态修正预测值。我特别喜欢这个方法,因为它能实时吸收新数据。
举个例子。我在甘肃一个风电场做过对比:
| 方法 | 1小时预测误差(RMSE) | 4小时预测误差(RMSE) |
|---|---|---|
| 持续法 | 12.3% | 18.7% |
| ARIMA | 9.1% | 14.2% |
| 卡尔曼滤波 | 7.8% | 11.5% |
你看,统计方法虽然老,但用好了,误差能降不少。
3.3 机器学习预测模型 —— 现在的「主力军」
机器学习,这几年在风功率预测里火得不行。
我常用的模型有三类:
- 随机森林(Random Forest):抗过拟合能力强。我习惯用200棵树,特征选风速、风向、温度、湿度、气压。
- XGBoost:梯度提升树,精度高。但要注意调参,我一般用网格搜索找最优参数。
- LSTM(长短期记忆网络):专门处理时间序列。适合捕捉风速的时序特征。
给你看一段我常用的LSTM代码框架:
# 风功率预测 LSTM 模型示例
import numpy as np
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import LSTM, Dense, Dropout
def build_lstm_model(input_shape):
model = Sequential()
model.add(LSTM(64, return_sequences=True, input_shape=input_shape))
model.add(Dropout(0.2))
model.add(LSTM(32, return_sequences=False))
model.add(Dropout(0.2))
model.add(Dense(16, activation='relu'))
model.add(Dense(1)) # 输出预测功率
model.compile(optimizer='adam', loss='mse')
return model
# 输入数据格式:[样本数, 时间步长, 特征数]
# 我习惯用过去6小时数据,每15分钟一个点,共24个时间步
避坑指南:
我曾经犯过一个低级错误:直接把NWP数据扔进LSTM,没做归一化。结果模型训练了三天,loss死活不降。后来发现风速范围0-25m/s,气压范围850-1050hPa,量级差太多。记住:一定要做Min-Max归一化。
3.4 预测误差分析 —— 知道错在哪,才能改
预测不可能100%准确。关键是知道误差长什么样。
我常用的误差指标:
- RMSE(均方根误差):对大误差惩罚大。适合评估极端情况。
- MAE(平均绝对误差):直观,容易理解。
- MAPE(平均绝对百分比误差):看相对误差。但风速接近0时会爆炸,要小心。
更重要的是误差分布分析。我习惯画误差直方图:
# 误差分布分析示例
import matplotlib.pyplot as plt
import numpy as np
errors = y_true - y_pred
plt.hist(errors, bins=50, edgecolor='black')
plt.xlabel('预测误差 (MW)')
plt.ylabel('频次')
plt.title('风功率预测误差分布')
plt.axvline(x=0, color='red', linestyle='--')
plt.show()
# 如果误差呈正态分布,说明模型没有系统性偏差
# 如果偏态,说明有未捕捉到的模式
我的经验:
误差分析最容易被忽视的是「时序相关性」。我见过一个项目,整体RMSE很好看,但误差在每天傍晚突然变大。后来发现是NWP对海陆风转换模拟不准。这种系统性误差,光看RMSE是发现不了的。
另外,我建议做「分风速段误差分析」:
| 风速区间 | 样本占比 | RMSE | MAE |
|---|---|---|---|
| 0-3 m/s | 15% | 0.8 MW | 0.5 MW |
| 3-8 m/s | 45% | 2.1 MW | 1.4 MW |
| 8-15 m/s | 30% | 3.5 MW | 2.2 MW |
| >15 m/s | 10% | 5.2 MW | 3.8 MW |
你看,风速越高,误差越大。这很正常,因为高风速时湍流更强。但知道了这个规律,你就可以在储能策略里做针对性补偿。
实战建议:
我习惯把预测误差分成三块:
- NWP误差:来自气象模型本身
- 模型误差:来自预测算法
- 随机误差:完全不可预测的部分
前两块可以改进,第三块只能接受。做储能调度时,我会留出10-15%的容量裕度来应对随机误差。
最后说一句:风功率预测没有银弹。NWP、统计方法、机器学习,各有各的适用场景。我个人的做法是:多模型融合。用NWP做长期趋势,用统计方法做短期修正,用机器学习捕捉非线性关系。三个模型投票,比任何一个单独用都靠谱。