负荷预测基础:时间序列分析、回归模型、机器学习方法(LSTM、XGBoost)、预测精度评估
各位同学,今天我们来聊聊负荷预测。这玩意儿,说白了就是猜明天、后天、甚至下个月要用多少电。听起来简单?我当年刚入行时也这么想,结果被现实狠狠教育了一顿。
负荷预测是整个能量调度的“眼睛”。眼睛看不清,调度方案就是瞎指挥。我个人习惯把预测方法分成三代:经典时间序列、回归模型、以及现在主流的机器学习。咱们一个一个过。
1. 时间序列分析:老祖宗的智慧
时间序列分析,核心就一句话:用历史数据预测未来。它假设过去的规律会延续。
最经典的模型是ARIMA(自回归积分滑动平均模型)。我刚开始做项目时,甲方就要求用ARIMA。为什么?因为可解释性强,你算出来的每个系数都能讲出道理。
ARIMA有三个参数:p(自回归阶数)、d(差分阶数)、q(滑动平均阶数)。选参数是个技术活,我一般看ACF和PACF图。
# 一个简单的ARIMA示例(伪代码)
from statsmodels.tsa.arima.model import ARIMA
# 假设data是历史负荷数据
model = ARIMA(data, order=(2,1,2))
model_fit = model.fit()
forecast = model_fit.forecast(steps=24) # 预测未来24小时
避坑指南:我曾经在一个项目中,直接用ARIMA预测有强季节性的数据,结果惨不忍睹。后来加了季节性差分(SARIMA),效果才正常。记住:如果你的数据有明显周期性,别用普通ARIMA。
2. 回归模型:引入外部特征
时间序列只盯着历史看,但负荷受很多因素影响:温度、湿度、节假日、甚至股市行情。这时候就需要回归模型了。
我个人最常用的是多元线性回归和岭回归。为什么?简单、快速、可解释。你想想看,你跟业务部门解释“这个系数代表温度每升高1度,负荷增加多少”,他们一听就懂。
但回归模型有个坑:特征工程。我见过太多人直接把所有特征扔进去,结果过拟合得一塌糊涂。
我的经验:做回归预测时,一定要做特征选择。我习惯先用相关性矩阵筛选一遍,再用L1正则化(Lasso)自动选特征。别偷懒,这一步省不了。
# 回归模型示例(伪代码)
from sklearn.linear_model import LinearRegression
# X是特征矩阵(温度、湿度、节假日标志等)
# y是负荷值
model = LinearRegression()
model.fit(X_train, y_train)
y_pred = model.predict(X_test)
3. 机器学习方法:LSTM与XGBoost
好了,重头戏来了。现在工业界最火的两个模型:LSTM和XGBoost。
3.1 LSTM:长短期记忆网络
LSTM是循环神经网络(RNN)的变种,专门解决“长期依赖”问题。说白了,它能记住一个月前的用电模式,也能关注到最近一小时的变化。
我最早用LSTM做负荷预测是在2018年,当时效果确实惊艳。但要注意,LSTM不是万能药。它需要大量数据,而且调参是个体力活。
# LSTM示例(伪代码,使用Keras)
from keras.models import Sequential
from keras.layers import LSTM, Dense
model = Sequential()
model.add(LSTM(50, activation='relu', input_shape=(n_steps, n_features)))
model.add(Dense(1))
model.compile(optimizer='adam', loss='mse')
# n_steps是时间步长,比如用过去72小时预测未来1小时
model.fit(X_train, y_train, epochs=50, verbose=0)
关键点:LSTM对数据尺度非常敏感。我建议一定要做归一化,而且最好用MinMaxScaler把数据缩放到[0,1]区间。否则训练时梯度爆炸,你哭都来不及。
3.2 XGBoost:梯度提升树
如果你问我,工业界落地最稳的模型是什么?我会毫不犹豫说XGBoost。它不像LSTM那样“娇气”,对缺失值、异常值都有很好的鲁棒性。
XGBoost的核心思想是“三个臭皮匠顶个诸葛亮”——用一堆弱学习器(决策树)组合成强学习器。而且它自带正则化,不容易过拟合。
我记得有一次做项目,LSTM和XGBoost都试了。LSTM调参调了两周,XGBoost两天就搞定了,而且精度差不多。从那以后,我一般先用XGBoost打个底。
# XGBoost示例(伪代码)
import xgboost as xgb
model = xgb.XGBRegressor(
n_estimators=100,
max_depth=6,
learning_rate=0.1,
subsample=0.8
)
model.fit(X_train, y_train)
y_pred = model.predict(X_test)
避坑指南:我曾经犯过一个错误——直接用默认参数跑XGBoost。结果模型欠拟合,预测值全在均值附近。后来老老实实做了网格搜索调参,才把效果提上来。记住:默认参数只是起点,不是终点。
4. 预测精度评估:别被指标骗了
模型建好了,怎么判断好坏?常用的指标有:
| 指标 | 全称 | 说明 |
|---|---|---|
| MAE | 平均绝对误差 | 直观,单位与原始数据一致 |
| RMSE | 均方根误差 | 对大误差惩罚更大 |
| MAPE | 平均绝对百分比误差 | 无量纲,适合对比不同量级 |
| R² | 决定系数 | 模型解释了多少方差 |
我个人习惯用MAPE,因为它是百分比,业务部门一听就懂。“误差5%”比“误差50MW”直观多了。
但要注意:MAPE在负荷接近0时会爆炸。比如凌晨低谷期,实际负荷100MW,预测95MW,MAPE是5%。但如果实际负荷是10MW,预测5MW,MAPE就是50%——虽然绝对误差只有5MW。
我的建议:评估时别只看一个指标。我一般同时看MAE和MAPE,再画个误差分布图。如果误差集中在某个时段,说明模型有系统性偏差,需要回去调特征。
5. 知识体系总览
下面这张图,是我自己总结的负荷预测方法选择流程。你想想看,拿到一个预测任务,先看数据量,再看业务需求,最后选模型。
嗯,这张图基本概括了我们的选择逻辑。数据少就用经典方法,数据多就上机器学习。别一上来就搞LSTM,杀鸡焉用牛刀。
6. 总结一下
负荷预测没有银弹。时间序列简单可靠,回归模型能引入外部特征,LSTM擅长捕捉长期依赖,XGBoost稳定高效。我的建议是:
- 起步阶段:先用ARIMA或线性回归打个基准
- 提升阶段:试试XGBoost,调参成本低
- 进阶阶段:如果数据量大且算力充足,上LSTM
- 永远别忘了:评估指标要选对,误差分布要看清
我曾经在一个项目中,用ARIMA跑出来的MAPE是8%,团队觉得可以了。但我坚持上了XGBoost,最后压到了4.5%。就这3.5%的差距,一年下来省了几百万的电费。你想想看,预测精度不是纸上谈兵,是真金白银。
核心一句话:预测模型没有最好,只有最合适。理解业务、理解数据、理解模型,三者缺一不可。
公众号:蓝海资料掘金营,微信deep3321