4、光伏与负荷预测:光伏出力预测方法、负荷预测模型、不确定性处理

好,咱们进入第四章。这一章,说白了就是解决一个核心问题:未来到底能发多少电?未来到底会用多少电?

你想想看,储能系统要是不知道这两个数,那调度策略就是瞎蒙。我见过不少项目,算法模型跑得飞起,结果预测不准,实际运行一塌糊涂。嗯,这里咱们得把预测这件事掰开揉碎了讲清楚。

核心观点:预测不准是常态,我们要做的是量化不确定性,而不是追求100%准确。

4.1 光伏出力预测方法

光伏预测,我个人习惯把它分成两类:物理模型法数据驱动法。别急着选边站,实际项目中往往是两者结合。

4.1.1 物理模型法

物理模型,就是根据光伏板的物理参数、地理位置、气象数据,直接算出发电量。公式长这样:

P_pv = G * A * η_pv * η_inv * (1 - β * (T_cell - 25))

其中:

  • G:辐照度 (W/m²)
  • A:光伏板面积 (m²)
  • η_pv:光伏板转换效率
  • η_inv:逆变器效率
  • β:温度系数
  • T_cell:电池板温度 (°C)

我在项目中遇到过一个问题:物理模型算出来的结果,晴天很准,但一到多云天就偏差很大。为什么?因为辐照度数据本身就不准。你想想看,气象站离光伏电站可能隔了十几公里,云飘过来的时候,数据早就滞后了。

避坑指南:我曾经在一个山地光伏项目里,直接用气象站数据做物理模型预测,结果误差超过30%。后来加了当地的小型气象站,才把误差降到15%以内。记住:输入数据的质量,决定了预测的天花板

4.1.2 数据驱动法

数据驱动法,说白了就是让历史数据自己说话。常用的模型包括:

  • ARIMA:适合平稳时间序列,简单但有效
  • LSTM:长短期记忆网络,能捕捉时序依赖
  • 随机森林:集成学习,抗噪能力强
  • XGBoost:梯度提升,工业界常用

我个人比较喜欢用LSTM做光伏预测。给你看个简单的代码框架:

import numpy as np
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import LSTM, Dense, Dropout

# 构建LSTM模型
model = Sequential()
model.add(LSTM(units=64, return_sequences=True, input_shape=(lookback, n_features)))
model.add(Dropout(0.2))
model.add(LSTM(units=32, return_sequences=False))
model.add(Dropout(0.2))
model.add(Dense(units=1))  # 输出预测功率

model.compile(optimizer='adam', loss='mse')
model.fit(X_train, y_train, epochs=50, batch_size=32, validation_split=0.2)

这里要注意:lookback这个参数很关键。我试过用过去1小时的数据预测未来15分钟,效果最好。太长了反而引入噪声,太短了又捕捉不到趋势。

4.2 负荷预测模型

负荷预测,跟光伏预测不太一样。光伏主要看天气,负荷主要看人的行为模式。你想想看,工厂的负荷曲线和居民区的负荷曲线,完全是两码事。

4.2.1 负荷预测的分类

预测类型 时间尺度 典型应用
超短期预测 未来几分钟~1小时 实时调度、AGC
短期预测 未来1小时~1天 日前调度、储能充放电计划
中期预测 未来1天~1周 检修计划、燃料采购
长期预测 未来1月~1年 容量规划、电网扩建

对于储能系统来说,短期预测是最常用的。我建议你重点关注这个时间尺度。

4.2.2 常用负荷预测模型

负荷预测的模型选择,我一般遵循一个原则:数据量大用深度学习,数据量小用统计模型

  • SARIMA:季节性ARIMA,适合有周期规律的负荷(比如每天、每周)
  • Prophet:Facebook开源的预测工具,处理节假日效应很拿手
  • GRU:LSTM的简化版,训练更快,效果差不多
  • Transformer:最近很火,但数据量不够容易过拟合

注意:负荷预测最怕的是突发事件。比如工厂突然停产、大型活动临时用电。我曾经在一个工业园区项目里,模型平时跑得好好的,结果某天突然误差翻倍——后来一查,是隔壁工厂搞了个通宵加班。这种异常事件,模型是学不到的,需要人工干预。

4.3 不确定性处理

好,终于到了我最想聊的部分。预测永远有误差,关键是怎么处理这个误差。

4.3.1 不确定性的来源

不确定性主要来自三个方面:

  1. 气象不确定性:天气预报本身就有误差,尤其是云量、风速
  2. 模型不确定性:模型结构、参数选择带来的偏差
  3. 数据不确定性:测量误差、数据缺失、异常值

你想想看,这三个叠加起来,误差能不大吗?

4.3.2 量化不确定性的方法

我个人习惯用概率预测来代替点预测。点预测告诉你「明天中午发电100kW」,概率预测告诉你「明天中午发电有80%的概率在80~120kW之间」。后者对储能调度更有价值。

常用的方法:

  • 分位数回归:直接预测不同分位数的值
  • 贝叶斯神经网络:给每个预测值加上置信区间
  • 蒙特卡洛 dropout:在推理时也打开dropout,多次采样得到分布

给你看个分位数回归的简单实现:

from sklearn.ensemble import GradientBoostingRegressor

# 训练多个分位数模型
quantiles = [0.1, 0.5, 0.9]
models = {}
for q in quantiles:
    model = GradientBoostingRegressor(loss='quantile', alpha=q)
    model.fit(X_train, y_train)
    models[q] = model

# 预测时得到三个值
y_pred_low = models[0.1].predict(X_test)
y_pred_mid = models[0.5].predict(X_test)
y_pred_high = models[0.9].predict(X_test)

这样,你就能得到预测的上下界。储能系统在做调度时,可以按照保守策略(用下界)或激进策略(用上界)来决策。

4.3.3 滚动更新与自适应

预测模型不能训完就不管了。我建议做滚动更新:每来一批新数据,就微调一下模型。这样能适应季节变化和设备老化。

实战技巧:我曾经在一个项目里,把模型更新周期设为每天一次。结果发现,遇到连续阴雨天,模型越更新越差。后来改成滑动窗口——只保留最近30天的数据做训练,效果反而好了。记住:旧数据有时候是噪声,不是信号。

知识体系框架

下面这张图,是我自己总结的光伏与负荷预测的核心逻辑。你可以把它当作本章的思维导图:

光伏与负荷预测 光伏出力预测 物理模型法 数据驱动法 辐照度计算 LSTM/ARIMA 负荷预测模型 统计模型 深度学习 SARIMA/Prophet GRU/Transformer 不确定性处理 概率预测 滚动更新 分位数回归 滑动窗口 核心目标:量化不确定性,指导储能调度 点预测 → 概率预测 → 鲁棒调度

这张图把本章的三个核心模块串起来了。左边是光伏预测,中间是负荷预测,右边是不确定性处理。三者最终汇合到储能调度决策上。

好了,这一章的内容就到这里。记住:预测不是目的,调度才是。把不确定性量化好,你的储能系统才能在各种天气和负荷变化下,做出稳健的决策。


公众号:蓝海资料掘金营,微信deep3321