4. 模型选型:从物理模型到统计模型再到深度学习模型的演进路线

说实话,做风电功率预测这些年,我踩过的坑比走过的路还多。模型选型这事儿,说白了就是一场「跟风的艺术」——但跟风之前,你得先知道风往哪儿吹。

我个人习惯把模型演进分成三个阶段。每个阶段都有它的高光时刻,也都有让人头疼的短板。咱们一个一个聊。

4.1 物理模型:老黄牛式的靠谱

最早期的风电功率预测,基本靠物理模型。它的核心思路很简单:用气象数据(风速、风向、温度、气压)去推发电功率。

物理模型的典型代表是 NWP(数值天气预报)+ 功率曲线映射。你想想看,把天气预报的风速塞进风机的功率曲线公式里,就能算出理论发电量。

# 物理模型的核心公式(简化版)
P = 0.5 * ρ * A * Cp * v³

# 其中:
# ρ 是空气密度
# A 是风轮扫掠面积
# Cp 是风能利用系数
# v 是风速

嗯,这里要注意。物理模型最大的优点是可解释性强。出了问题你能追根溯源——「哦,今天风速预报偏大了,所以功率算高了。」

但缺点也很明显。我在项目中遇到过好几次:物理模型对极端天气(比如台风、切变风)几乎完全失效。为什么?因为功率曲线是在理想条件下测的,实际风况复杂得多。

物理模型的适用场景:
  • 新建风场,历史数据不足时
  • 需要高可解释性的场景(如并网考核)
  • 作为其他模型的基准线
我曾经踩过的坑: 有个项目用纯物理模型做短期预测,结果连续三天误差超过20%。后来发现是功率曲线老化导致的——风机运行几年后,叶片磨损、齿轮箱效率下降,出厂时的功率曲线早就变了。

4.2 统计模型:数据驱动的觉醒

后来大家发现,光靠物理公式不行。于是统计模型开始登场。

统计模型的核心思想是:从历史数据中找规律。你不需要知道风机的物理参数,只需要给模型足够多的「风速-功率」历史数据,它自己就能学会映射关系。

典型的统计模型包括:

  • ARIMA:自回归移动平均模型,适合平稳时序
  • 支持向量回归(SVR):小样本下表现不错
  • 随机森林:抗过拟合能力强
  • XGBoost/LightGBM:梯度提升树,工业界最爱

我个人习惯用 LightGBM 做基线模型。为什么?因为它训练快、调参少、效果还不赖。我记得有个项目,用 LightGBM 做15分钟前的超短期预测,MAE 比物理模型低了将近40%。

# LightGBM 的简单配置(我常用的参数)
params = {
    'objective': 'regression',
    'metric': 'mae',
    'num_leaves': 31,
    'learning_rate': 0.05,
    'feature_fraction': 0.8,
    'bagging_fraction': 0.8,
    'bagging_freq': 5,
    'verbose': 0
}

统计模型最大的优势是灵活。你可以加入各种特征:风速、风向、温度、湿度、气压、历史功率、甚至时间特征(小时、星期、季节)。

但统计模型也有天花板。说白了,它学的是「相关性」,不是「因果性」。如果风场环境发生剧烈变化(比如附近新建了建筑物改变了风场),统计模型就得重新训练。

避坑指南: 我曾经用统计模型做48小时中期预测,结果模型在风速突变时完全失灵。后来发现,统计模型对「未见过的风速区间」泛化能力很差。解决办法是:给模型加入 NWP 的物理约束,做混合模型。

4.3 深度学习模型:黑盒里的魔法

最近几年,深度学习模型开始统治风电功率预测领域。为什么?因为风电数据本质上是个时空序列问题——风速在时间上有连续性,在空间上有相关性(上游风场影响下游)。

深度学习模型的典型代表:

模型类型 适用场景 我的评价
LSTM 单风场时序预测 经典但容易过拟合
CNN + LSTM 多风场空间特征提取 效果不错,但训练慢
Transformer 长序列预测 目前 SOTA,但吃数据
TCN 实时预测 速度快,适合部署

我个人最常用的是 CNN + LSTM 的混合架构。CNN 负责提取空间特征(比如多个风机的风速相关性),LSTM 负责捕捉时间依赖。你想想看,一个风场几十台风机,它们之间的风速是有空间相关性的——上游风机感受到的风,半小时后会传到下游。

# 一个简单的 CNN + LSTM 结构(PyTorch 风格)
class WindPowerModel(nn.Module):
    def __init__(self):
        super().__init__()
        self.cnn = nn.Conv1d(in_channels=10, out_channels=32, kernel_size=3)
        self.lstm = nn.LSTM(input_size=32, hidden_size=64, num_layers=2)
        self.fc = nn.Linear(64, 1)
    
    def forward(self, x):
        # x shape: (batch, seq_len, features)
        x = self.cnn(x.transpose(1, 2))  # CNN 处理
        x, _ = self.lstm(x.transpose(1, 2))  # LSTM 处理
        return self.fc(x[:, -1, :])  # 取最后一个时间步
深度学习模型的优势:
  • 能自动学习复杂的非线性关系
  • 支持多模态输入(数值天气 + 历史功率 + 空间坐标)
  • 在长序列预测上碾压传统模型
注意: 深度学习不是万能药。我见过太多团队盲目上 Transformer,结果数据量不够,模型过拟合得一塌糊涂。我的建议是:先跑统计模型做基线,再逐步升级到深度学习

4.4 模型选型的实战建议

说了这么多,到底该怎么选?我总结了一个简单的决策流程:

模型选型决策流程 开始:数据量评估 数据量 < 1年? 物理模型 实时性要求高? 统计模型 深度学习模型 部署与监控

这个流程我用了好几年,基本没出过大错。核心原则就一条:别为了用深度学习而用深度学习。你想想看,如果统计模型就能达到90%的精度,何必花三倍时间调 Transformer?

我的个人经验:
  • 数据量 < 6个月:用物理模型或简单统计模型
  • 数据量 6个月-2年:用 LightGBM 或 XGBoost
  • 数据量 > 2年:可以考虑 LSTM 或 Transformer
  • 多风场联合预测:直接上 CNN + LSTM

最后说一句。模型选型没有银弹。我见过用 LSTM 跑得飞起的项目,也见过用线性回归就搞定一切的场景。关键是你得理解业务需求——是要精度?要速度?还是要可解释性?想清楚这个,选型就成功了一半。


专注资料整理