想象你是一座千万人口城市的大厨。电能不像土豆、面粉,几乎无法成堆储存,发电和用电必须分秒相等。如果明天早高峰你同时要供应 100 万份早餐,就必须在头一天想清楚:开多少台炉灶、备多少原料、安排多少钟点工。智能电网的负荷预测,就是电力调度员手里的“备菜预测”——根据历史订单、天气、节假日,提前估算明天每个小时会有多少“客人”涌进这座城市。预测太乐观,煤电机组白白空转;预测太悲观,居民就要忍受拉闸限电。那么,AI 是如何帮大厨把这本账算得越来越准的?本文从负荷波动规律、数据清洗、经典算法到深度学习,把负荷预测的来龙去脉一次讲透。
掌握负荷预测,你就能看懂电力调度、新能源消纳、需求响应等 AI+能源场景的核心逻辑,成为电网智能化落地最紧缺的算法人才。
可视化演示
演示负荷预测时间维度分类、深度模型架构,以及概率预测与不确定性量化。
本节配有交互动效(进入视口后自动加载,约 3KB)。
时间维度分类 超短/短/中/长期 不同调度粒度 层级→粒度→应用 服务调度决策
负荷预测概览
想象你是一座千万人口城市的大厨:电不能像土豆一样堆在仓库里,发电和用电必须分秒相等。明天早高峰要同时开多少台炉灶、备多少食材?你不可能等客人进门了才开始点火,只能靠“预先判断”。智能电网的负荷预测,做的就是这件事——根据过去和当下的信息,估计未来某段时间全城“客人”的饭量。
电网调度员看的是负荷曲线,它和餐厅客流一样有规律:清晨一波早餐小高峰,午间回落,傍晚迎来全天最大峰值,深夜冷清。按时间尺度,负荷预测分为超短期(分钟级,用于自动发电控制)、短期(日前 24 到 168 小时,用于安排机组启停和交易)、中长期(月度和年度,用于电源与电网规划)。尺度不同,关心的问题也完全不同。
为了让大厨看懂客流构成,负荷预测专家通常把负荷拆解成四个成分:基础负荷、趋势项、周期项和随机项。于是,预测问题就变成了“估计这几项分别有多大,再加起来”。
把客流拆成固定客群、节庆宴席和随机加餐,备菜压力一下就清晰了。负荷预测不是碰运气,而是把“看不清的明天”拆成了几块“能分别估量的拼图”。
- 总负荷符号\(L(t)\) 表示 \(t\) 时刻电网需要供给的总功率,是我们要预测的对象。
- 基础负荷\(B(t)\) 是无论白天黑夜都存在的刚性用电,类似餐厅的固定租金和基础人工。
- 趋势项\(T(t)\) 反映城市用电量逐年增长的长期斜坡。
- 周期项\(S(t)\) 刻画日夜、周末、季节等规律性波动。
- 随机项\(R(t)\) 代表极端天气、突发事故等噪声干扰。
数据清洗预处理
大厨的订单本用久了,可能被水泡花几个字,也可能抄错一个数字。如果照着错误订单备菜,再好的手艺也会翻车。AI 负荷预测面临同样的烦恼:采集终端偶尔断线、通信受到干扰、极端事件留下尖峰,数据里藏着“脏点”。
数据预处理是负荷预测的第一道工序。缺失值通常用前一日或前几日的同时刻数据做插值补全;异常值不能“一刀切”删除,而要结合业务判断是坏数据还是真实极端事件;归一化把负荷、温度、湿度等不同量纲的特征统一到相近尺度,避免大数吞掉小数。特征工程则把星期几、是否节假日、滚动平均温度等“线索”做成模型能消化的原料。
标准差是判断异常值常用的尺子:先算历史数据的平均水平和波动幅度,再看每个点到均值的距离相当于几个标准差,远到离谱的点往往有问题。
把订单本上的错别字修好,再谈厨艺。数据清洗越扎实,后续算法越能站在干净的地基上发力。
- 原始数据点\(x\) 是当前要检查的负荷值或特征值。
- 均值\(\mu\) 是所有历史样本的平均值,代表“正常水平”。
- 标准差\(\sigma\) 衡量数据围绕均值波动的平均幅度。
- 标准化分数\(z\) 表示 \(x\) 偏离均值多少个标准差,常用于识别异常。
经典时间序列法
有些老厨师不喜欢花哨工具,只看最近几天的订单,把毛刺抹平后算出明天的客量。经典时间序列方法就是这一派:移动平均法取最近 \(k\) 个时刻的平均值,平滑掉瞬时波动;指数平滑法更进一步,给越近的观测越高的权重,让模型对“昨天刚发生的变化”更敏感。
ARIMA 模型则在数据平稳化后捕捉自相关和趋势,线性回归则把温度、星期几、节假日作为外部变量,直接拟合它们与负荷的关系。这些方法计算量小、可解释性强,至今仍在工业界大量使用。
指数平滑的递推公式非常直观:新的估计值等于当前观测和上次估计的加权平均。\(\alpha\) 越大,就越是“盯着最近一天看”。
老厨师的经验法在天气平稳时很可靠,但一遇到大型活动或极端降温,就会措手不及。经典方法的短板,恰好是机器学习登场的舞台。
- 当前观测值\(X_t\) 是 \(t\) 时刻刚发生的实际负荷。
- 上一时刻平滑值\(S_{t-1}\) 是到 \(t-1\) 时刻为止的估计结果。
- 平滑系数\(\alpha\) 是 0 到 1 之间的权重,控制近期信息的重要性。
- 当前平滑值\(S_t\) 作为下一时刻预测的基础。
机器学习预测
年轻的数据大厨不只会翻旧账,还会同时参考天气、节假日、商圈客流、前两周点单记录。机器学习方法就是这样:把历史负荷、温度、湿度、星期几、是否放假等特征一并输入模型,让算法自己学出组合规律。
随机森林通过多棵决策树投票降低方差,XGBoost 则用梯度提升把多棵“弱树”串成强模型,并对树的复杂度施加惩罚。特征重要度能告诉我们“经验气温”和“是否是周一”到底谁说了算,调参则是在“过于简单”和“过度拟合”之间找平衡。
XGBoost 的目标函数可以看作两部分相加:一部分是预测误差,另一部分是所有树的复杂度惩罚。这个设计正是它稳健的秘诀。
数据大厨把订单本的边角料也榨出了味道,预测精度自然压过只凭手感的老厨师。但机器学习的上限,仍受制于“有没有记住长周期习惯”的能力。
- 单样本损失\(\ell(y_i,\hat{y}_i)\) 度量第 \(i\) 个样本的真实值与预测值的差距。
- 预测值\(\hat{y}_i\) 是模型给第 \(i\) 个样本的输出。
- 复杂度惩罚\(\Omega(f_k)\) 惩罚第 \(k\) 棵树的深度和叶子数。
- 总目标\(\mathcal{L}\) 让“误差小”和“模型简单”同时成立。
深度学习模型
高级学徒 LSTM 有点记性——它能记住半个月前的中秋节、上周连续三天高温导致空调全开,也能记住今天晚高峰和昨天错开了半小时。深度学习方法在负荷预测中最常见的角色,正是这种“长记忆能力”。
LSTM 在循环神经网络的基础上引入了遗忘门、输入门和输出门,让信息在传递时能选择记住还是丢弃。CNN 则可提取负荷序列中的局部形态,比如早高峰的“尖顶”和晚高峰的“馒头”。实际工程中常把 CNN 和 LSTM 串成混合模型:先用卷积压缩局部特征,再用 LSTM 建模长期依赖。
遗忘门是 LSTM 记忆机制的关键。它把上一时刻的隐藏状态和当前输入拼在一起,通过一个带 sigmoid 的全连接层,输出 0 到 1 的“保留比例”。
能记住一周前客人习性的学徒,特别擅长处理“节后第一天”“寒潮来袭”这类长周期变化。不过在正式上岗前,还得用统一的尺子考核它。
- 上一时刻隐藏状态\(h_{t-1}\) 携带了此前序列的摘要信息。
- 当前时刻输入\(x_t\) 是此刻的负荷以及相关特征。
- 权重与偏置\(W_f\) 和 \(b_f\) 是遗忘门要训练的参数。
- sigmoid 激活\(\sigma\) 把结果压到 0 到 1,越接近 1 越“不忘”。
评估与优化
每天打烊后,大厨都要复盘:预估了 100 人,实际来了多少人?备菜备多了是浪费,备少了要道歉。负荷预测同样需要一套误差尺子,来衡量“备菜方案”准不准。
常用的误差指标包括平均绝对误差 MAE、均方误差 MSE 和平均绝对百分比误差 MAPE。MAPE 把误差除以真实值再取百分比,能直观地说“预测平均偏了 4%”。评估时要特别小心时间顺序:训练集和测试集不能随机打乱,必须按时间切分,否则模型等于偷看了未来答案。落地阶段还要建立在线更新机制,每隔几小时用新数据滚动训练,应对用电行为的缓慢漂移。
MAPE 的公式看起来简单,却是工业界最常写的考核标尺。
尺子选对了,才知道哪套备菜方案更省成本。误差评估不是期末考,而是帮助大厨不断修正第二天的菜单。
- 样本数量\(n\) 是要评估的预测点数。
- 实际负荷\(y_i\) 是第 \(i\) 个点的真实值。
- 预测负荷\(\hat{y}_i\) 是模型给出的第 \(i\) 个点的预测值。
- 相对误差百分比将每个点的偏差占真实值的比例取平均。
行业应用实践
知道了明天大致有多少客人、几点来,大厨就能反推买多少菜、安排多少小时工。电网调度员也一样,负荷预测是大量业务决策的“输入电源”。
发电调度根据短期预测决定火电机组何时启停,避免高峰时段临时开机组;新能源消纳需要同时看风光出力和负荷预测,才能决定储能什么时候充电、什么时候放电;需求侧响应利用预测结果结合分时电价,引导工厂错峰生产;设备运维则把负荷低谷期当作检修窗口,既不影响供电又可安全作业。
这些应用背后往往有一个共同的经济调度问题:在满足总负荷的前提下,让所有机组的发电总成本最低。预测越准,约束条件越接近现实,调度方案就越省钱。
菜单排得越准,后厨越从容;负荷预测越准,电网越经济。不过,即便是最资深的大厨,也不敢保证明天的客流完全按剧本来。
- 机组数量\(G\) 是参与调度的发电机台数。
- 单位成本\(c_i\) 是第 \(i\) 台机组发一度电的燃料成本。
- 机组出力\(P_i\) 是第 \(i\) 台机组被分配的发电量。
- 总成本最小化\(\min\) 表示在所有可行方案中挑成本最低的一组出力组合。
风险趋势展望
再厉害的大厨也无法预知突如其来的停水和包场。成熟的负荷预测不应该只给一个“确定数字”,而要给出“大概在什么范围”——这就是预测的不确定性管理。
预测不确定性常用置信区间表达:比如 90% 置信区间是 980 到 1020 万千瓦,调度员就知道要预留多大旋转备用。此外,社会用电行为会随新技术、新能源车普及而漂移,模型需要持续监测数据分布;调度员不敢用一只“黑箱”,所以模型可解释性越来越重要;边缘计算则让预测模型直接部署在场站端,降低通信时延与隐私风险。
评价置信区间是否合格,可以看实际值落入区间的比例,称为预测区间覆盖率。
成熟的大厨会说“明天来客 80 到 110 人”,而不是“正好 95 人”。把不确定性讲清楚,反而能让电网运行更安全、更从容。
- 预测区间\([L_i, U_i]\) 是模型对第 \(i\) 个时刻给出的上下界。
- 实际值\(y_i\) 是第 \(i\) 个时刻真实负荷。
- 指示函数\(\mathbb{1}\{\cdot\}\) 表示“如果条件成立记 1,否则记 0”。
- 覆盖率对所有 \(N\) 个样本求平均,得到实际覆盖率。
AI 应用场景
电网调度中心的日前发电计划
阶段:数据采集与短期负荷预测
解决的问题:传统方式依赖调度员经验估计次日负荷,为了安全常保留过量旋转备用,导致煤耗和碳排放偏高。AI 能融合历史负荷、气象预报、节假日特征,输出未来 24 到 168 小时的逐时负荷曲线,为机组启停和出力计划提供依据。
具体案例:某省级电力调度中心用 LSTM 与 XGBoost 混合模型预测日前 96 点负荷,MAPE 从人工经验的 6% 降到 3.8%。基于更准的预测优化机组组合后,单日节省标煤约 200 吨,相当于少排放约 500 吨二氧化碳。
新能源场站功率预测与储能协同
阶段:AI+新能源协同决策
解决的问题:光伏和风电出力波动大,单独预测发电量还不够,必须把“发电预测”和“负荷预测”放在一起看,才能决定储能系统何时充电、何时放电,减少弃风弃光。
具体案例:某风电基地结合短期负荷预测与数值天气预报,在负荷低谷时给储能充电、负荷高峰时放电,同时参与辅助服务市场,弃风率下降 5 个百分点,场站综合收益提升约 8%。
Python 演示
# -*- coding: utf-8 -*-"""负荷预测小示例:用指数平滑预测未来24小时电力负荷"""import mathimport random def generate_load(days=14): """生成模拟负荷数据:每天24点,有早晚高峰和随机噪声""" random.seed(42) loads = [] for day in range(days): for hour in range(24): base = (8.0 * math.exp(-((hour - 9) ** 2) / 8.0) + 6.0 * math.exp(-((hour - 19) ** 2) / 5.0) + 2.0 * math.sin((hour + day) / 3.0) + 4.0) loads.append(base + random.uniform(-0.5, 0.5)) return loads def fill_missing(loads): """简单缺失值补全:用前一天同一时刻的负荷填充""" fixed = loads[:] for i in range(len(fixed)): if fixed[i] < 0: fixed[i] = fixed[i - 24] if i >= 24 else 0.0 return fixed def smooth_predict(history, alpha=0.4): """指数平滑:只依赖历史序列,返回下一个时刻的估计值""" if not history: return 0.0 s = history[0] for value in history[1:]: s = alpha * value + (1 - alpha) * s return s def daily_average_predict(train, hour): """用训练集中每天同一小时的平均值作为未来该时刻的预测""" same_hours = [train[j] for j in range(hour, len(train), 24)] return sum(same_hours) / len(same_hours) def mape(actual, predicted): """平均绝对百分比误差""" return sum(abs(a - p) / a for a, p in zip(actual, predicted)) / len(actual) * 100 def main(): data = fill_missing(generate_load()) train, test = data[:24 * 10], data[24 * 10:] preds = [daily_average_predict(train, hour) for hour in range(24)] print("实际负荷:", [round(x, 1) for x in test[:24]]) print("预测负荷:", [round(x, 1) for x in preds]) print("MAPE: %.2f%%" % mape(test[:24], preds)) if __name__ == "__main__": main()
loads.append(base + random.uniform(-0.5, 0.5))在规律性负荷上叠加随机噪声,模拟真实世界的不确定性。fixed[i] = fixed[i - 24] if i >= 24 else 0.0用前一天同一时刻的值补全缺失点,是电力数据最常用的插值思路。same_hours = [train[j] for j in range(hour, len(train), 24)]按 24 小时周期抽取每天上午某一点的负荷,构成同期样本。return sum(abs(a - p) / a for a, p in zip(actual, predicted)) / len(actual) * 100计算 MAPE,即每个点相对误差的平均百分比。if __name__ == "__main__":保证脚本被直接运行时才执行 main,作为可复用模块则不会误触发。
常见误区
误区很多人以为只要把负荷预测模型换成 LSTM 或 Transformer,精度就一定碾压 ARIMA,所以一上来就上深度学习。
正解模型选择取决于数据量、业务节奏和部署成本。数据只有几十天、负荷相对平稳时,指数平滑和 ARIMA 往往更稳定;深度学习需要大量数据和充分的调参与训练资源。大厨的工具再好,食材少、火候跟不上也做不出好菜。
为何常见:因为媒体和论文常渲染深度学习的强大,容易忽略“适用条件”这个前提。
误区调度员拿到“明天最大负荷 1000 万千瓦”就把这个数字当作确定性事实,不关注预测区间。
正解负荷预测本质是概率估计。给出 90% 置信区间“980 到 1020 万千瓦”和只给一个点值,对预留备用容量的决策意义完全不同。成熟的大厨会说“来客 80 到 110 人”,而不是“正好 95 人”。
为何常见:人类偏好确定性答案,业务汇报也常常只写一个数字,导致区间信息被忽略。
误区照搬图像分类的习惯,把时间序列数据随机打乱后划分训练集和测试集,然后追求测试集精度。
正解时间序列有前后依赖,随机打乱会让模型从未来样本中学到信息,产生严重的数据泄漏。必须按时间顺序划分,验证集和测试集始终在训练集之后。
为何常见:很多初学者的第一堂课来自 CV 或表格分类,“随机划分”是那里的标准操作,迁移到时序任务就会出错。
误区看到负荷曲线出现尖峰,就认为这是坏数据,直接按 3σ 原则删除。
正解负荷尖峰可能是极端天气、重大活动等真实事件,删除会丢失宝贵的信息。处理异常值要结合调度日志和业务背景判断,大厨不能因为客人突然增多就说账本记错了。
为何常见:数据清洗课程强调“清洗离群点”,让学习者形成机械删除的惯性。
误区认为只要 MAPE 从 5% 压到 4%,模型就一定更适合电网业务。
正解电力调度更关心高峰时段和极端日期的误差,因为高峰欠预测可能导致拉闸限电,高峰过预测则浪费备用成本。需要针对业务设置加权损失函数,而不是只看平均百分比。
为何常见:通用指标简单易比,但容易掩盖“平时都准、关键日翻车”的风险。
面试题
Q1. 负荷预测中,最能体现“预测要有概率思维”的做法是?
- A.只要点预测并视作确定
- B.提供区间并检查覆盖← 正确答案
- C.删除所有异常负荷数据
- D.打乱时间序列再训练
答案:B。真实负荷充满随机性,点预测无法表达不确定性。提供置信区间并验证覆盖率,等于大厨说“明天来客 80 到 110 人”,比“正好 95 人”更利于调度决策。
Q2. 短期负荷预测通常指哪个时间尺度?
- A.分钟级自动发电控制
- B.日前24至168小时← 正确答案
- C.未来十年长期规划
- D.实时电价出清计算
答案:B。短期预测主要用于日前调度与交易,时间跨度常为 24 到 168 小时。分钟级属于超短期预测,十年尺度属于中长期规划。
Q3. 指数平滑系数 α 接近 1 意味着什么?
- A.最新观测权重占比更高← 正确答案
- B.模型偏好长期历史均值
- C.数据必须服从正态分布
- D.置信区间自动随之收窄
答案:A。α 越大,当前观测 \(X_t\) 的权重越高,模型越“健忘”。这相当于大厨只看昨天客流,忽略上周规律。
Q4. 时间序列数据应如何划分训练集与测试集?
- A.随机打乱样本后平均划分
- B.未来数据进入训练集更稳
- C.按时间顺序且验证集在后← 正确答案
- D.使用全量数据训练并自评
答案:C。时序数据有先后依赖,必须防止“偷看未来”。训练集在时间上早于验证集,验证集早于测试集,才能在真实预测场景下评估泛化能力。
Q5. XGBoost 加入复杂度惩罚项的主要作用是什么?
- A.加快模型训练收敛速度
- B.防止模型在训练集过拟合← 正确答案
- C.减少数据集缺失值个数
- D.提升特征工程的特征数
答案:B。目标函数第二项 \(\sum \Omega(f_k)\) 惩罚树的复杂度。模型在减少误差的同时保持简单,就像大厨既要菜好吃,又不能把后厨堆满杂物。
Q6. MAPE 指标的主要局限性是什么?
- A.无法衡量绝对误差大小
- B.实际值接近零时误差放大← 正确答案
- C.损失函数缺少置信区间
- D.计算过程需要大量存储
答案:B。MAPE 用实际值做分母,当负荷在深夜接近零时,一个小误差也会变成巨大百分比。因此经验上常对低谷时段做特殊处理。
Q7. LSTM 遗忘门的输出范围是多少?
- A.0 到 1 之间← 正确答案
- B.-1 到 1 之间
- C.0 到正无穷大
- D.负无穷到正无穷
答案:A。遗忘门经过 sigmoid 激活,输出 0 到 1,表示“保留旧记忆的比例”。0 代表全部遗忘,1 代表全部记住,这正是 LSTM 长短期记忆的关键。
Q8. 负荷预测数据预处理环节通常会包含哪些步骤?
- A.缺失值补全← 正确答案
- B.异常值清洗← 正确答案
- C.数据归一化← 正确答案
- D.随机翻转正负样本
答案:ABC。缺失补全、异常清洗和归一化是标准预处理流程。随机翻转样本会破坏时序关系,属于错误操作。
Q9. 下列哪些属于负荷预测在智能电网中的应用场景?
- A.发电计划安排← 正确答案
- B.新能源消纳协同← 正确答案
- C.需求侧响应← 正确答案
- D.无人机巡查输电塔
答案:ABC。发电计划、新能源协同和需求响应都依赖负荷预测。无人机巡检属于设备运维另一条线,与负荷预测关系较弱。
Q10. 关于负荷分解模型 L(t)=B+T+S+R,以下说法正确的有哪些?
- A.基荷是基本固定用电部分← 正确答案
- B.周期项刻画日夜季节规律← 正确答案
- C.随机项来自突发噪声干扰← 正确答案
- D.趋势项等同于温度数据
答案:ABC。趋势项描述长期用电增长,温度只是影响负荷的外部特征,不能等价。B、T、S、R 四部分相加,才构成完整负荷。