储能电站收益优化

📅 2026/7/14 3:34:14 👁️ 阅读次数 📝 编程学习
储能电站收益优化

一、项目一开始:我以为这是一个“预测问题”

刚开始做这个项目时,我的想法其实很简单:只要把未来电价预测准,收益自然就会高

初版只用了最基础的时间特征:hour、dayofweek、month、minute

然后直接做:最低连续8个点充电 最高连续8个点放电

后来才逐渐意识到,储能套利真正关心的是:电价的最高点最低点

也就是说:

排序比数值本身更重要。


二、特征工程:大量尝试之后,真正留下来的其实很少

后来我开始重点研究:历史电价到底有没有规律

于是新增了:add_lag_features()

并开始尝试:lag_1、lag_4、lag_8、lag_96、lag_192

一开始我觉得lag_1lag_4加入后效果很好

因为训练误差确实下降了。

但后来发现:

这些短周期 lag 很容易:

  • 学习局部噪声

  • 跟着尖峰跑

  • 在测试集过拟合

于是后来很多版本里lag_1lag_4其实都被删掉了。

真正稳定有效的反而是:lag_96lag_192

也就是:前两天同一时间的价格。

这个特征的重要性非常稳定。

max_depth = 4max_depth = 6情况下,它的重要性都不低。

后来我逐渐意识到:电价真正最强的规律其实是“日周期”。

除了 lag,我还尝试过很多“理论上应该有效”的特征。

比如:

rolling_mean_96

我当时的想法是:预测曲线太抖了,能不能平滑一下?

于是加入了rolling_mean_96,发现收益反而下降。

因为 rolling 本质上会削弱尖峰,但储能套利最依赖的恰恰是峰值价差。

后来我又尝试了周期编码:sin(hour) cos(hour)

但最后效果依然不明显,甚至有时候会轻微拉低收益。

后来猜测:lag_96lag_192

已经把周期信息学得差不多了。

再额外加入的sin/cos反而增加了噪声。

后面我也尝试了气象特征:temperature、wind_speed、humidity、pressure

并做了时间对齐、区域天气聚合等操作。

这些特征并不是完全没用,但相比与lag_96,它们的重要性其实低很多。

整个过程中我最大的感受是:

很多“看起来高级”的特征,最后都没有最简单的 lag_96 有效。(这里可能是我的气象特征没有正确使用)


三、模型与参数:很多优化其实是在“减少过拟合”

后来我发现模型最大的风险并不是预测不够复杂,而是太容易学习局部噪声,尤其是当树太深的时候。

于是后面我开始频繁调整max_depth、learning_rate、n_estimators来降低过拟合

因为深树特别容易:

  • 记忆尖峰

  • 记忆异常点

  • 学习局部波动

后面我也尝试使用HistGradientBoostingRegressor模型

希望:

  • 更稳定

  • 更快

  • 泛化更好


四、策略部分:这是我后期思考最多的地方

做到后面时,我逐渐发现:

当前最大的问题并不是收益太低,而是预测曲线里有很多“错误尖峰”。

这些错误尖峰会导致模型误以为这里是最高点然后错误放电。

于是后面我开始不断尝试:

  • 价格差阈值

  • 更低点充电

  • 更高点放电

  • 先平滑再决策

  • 过滤异常尖峰

包括后期重新加回lag_4lag_8来降低RMSE,希望减少预测噪声。

但后来我又发现:

RMSE 下降之后,收益也总是随着下降。

所以很多修改在最后其实又删掉了。

整个过程中我最大的感受是:

储能问题本质上不是“预测问题”,而是“带预测误差的决策问题”。

真正重要的不是预测有多准,而是你的策略能不能容忍预测错误。

这也是整个项目里我学到最多的一点。