
简介这份工程科技类讲座PPT围绕电力系统规划与可靠性中的核心环节——电力负荷预测展开面向电力行业从业人员、电气工程专业学生及相关技术管理者。内容系统梳理了电力负荷的定义与分类、负荷预测的基本概念与特点并详细介绍了最高负荷、平均负荷、负荷率等关键指标以及日负荷曲线、年持续负荷曲线等常用工具同时涵盖确定性方法与不确定性方法、数据清洗与建模验证流程以及经济、政策、天气等主要影响因素。压缩包内共1个pptx文件大小约727KB相当于一份结构完整、共98页的学习教案既可用作课堂讲授的演示课件也可供读者自学时按章节逐步研读便于理解负荷预测在电力系统规划与经济运行中的实际应用。目前已有63人学习适合需要系统建立负荷预测知识框架的读者下载参考。1. 电力负荷预测规划与可靠性讲座绕不开的第一个技术节点电力负荷预测是电力系统规划和可靠性评估的公共输入。一个电网的远期装机规模由负荷预测决定近期的备用容量卡口也由预测误差结构决定机组开几台、线路走廊修多宽、热稳定断面留多少裕度最后都落在负荷曲线上。对 IT 从业者来说这是标准的时间序列预测问题但电力场景下的工程细节比算法选择更重要——数据缺测、节假日模式、温度累积效应、误差不对称性每一样都会让同一套模型在生产环境走出完全不同的精度。本文以面向“工程科技电力系统规划与可靠性”的教学课件的典型编排为骨架按数据准备、特征工程、模型落地、可靠性计算、评估调优五步展开覆盖小时级电力负荷预测从建模到接入规划计算的全过程代码可直接改参数复用。2. 电力负荷预测的数据准备先解决“拿什么去预测”的问题2.1 预测尺度与时间分辨率先定后续特征和模型才有锚点电力负荷预测按时间尺度可以切成四档超短期、短期、中期、长期。四个档位的服务对象、采样粒度和常用模型差异很大课件里通常会用一张表格把这层边界讲清楚工程实践中这也是团队分工的依据。预测类型时间范围目标用户典型粒度常用模型超短期5分钟1小时实时调度、AGC控制5秒15分钟卡尔曼滤波、自回归、LSTM短期17天机组启停、检修安排、现货市场15分钟1小时SARIMA、梯度提升树中期112个月燃料采购、水库调度、设备轮换日、周多元回归、指数平滑长期120年电源规划、网架拓展、投资决策年、季弹性系数法、饱和曲线可靠性计算、机组组合和现货出清都天然按小时或一刻钟切分所以短期预测里一小时粒度用得最多。如果手上只有日冻结值想推导小时级曲线应当去补采原始数据而不是靠插值凑粒度。插值生成的小时数据在峰谷处会平滑掉真实波动用作训练样本时模型会学到一条偏钝的曲线预测尖峰负荷时会系统性偏低。对规划决策而言低估尖峰比高估尖峰危险得多所以数据粒度这件事必须在建模型之前确定不能迁就已有数据了事。2.2 构造特征的基本组合周期项、滞后项、温度项、日历项和水平项一条干净的小时级负荷序列放到面前听课的人最容易忽略的是特征之间的分工。工程实践里下述五个维度的特征组成了负荷预测特征工程的基本盘。周期项是模型区分时间位置的基础。小时序号区分凌晨与晚高峰星期序号区分工作日与周末月份序号承载冬夏季节性轮廓。这三个特征在树模型里按数值编码使用即可不需要做太复杂的接口编码叫模型自己去找交互关系。滞后项在短期负荷预测中往往比任何外部因素都重要。最常用的是三个滞后前 1 小时负荷 lag_1昨天同一时刻负荷 lag_24上周同一时刻负荷 lag_168。lag_1 描述负荷的短时惯性lag_24 描述日周期节律lag_168 描述周周期节律。做 24 小时以上的多步预测时lag_24 和 lag_168 的贡献常常排进特征重要性的前三。温度项要区分即时温度与累计温度。连续三天高温后的同温度负荷通常高于刚开始升温那天这是建筑热惯性和空调运行时长共同作用的结果。实操上在历史序列里构造滚动特征过去 24 小时平均温度、过去 72 小时温度标准差与即时温度一并放入特征集。北方采暖地区还应该增加采暖期标志位区分供暖季与过渡季的温度响应差异。日历项是节假日附近最关键的修正手段。法定长假期间的负荷形态与普通周末完全不同调休上班的周六也要按工作日处理。基础做法是加一个节假日标记位精细一点则增加“距最近法定节假日还有几天”这类连续特征让模型学会节前和节后的渐近过渡。水平项起到给模型“定位当前基线”的作用最常用的是过去 168 小时负荷的滚动平均值。它把季节性波动的低频部分显式供给模型让树模型不必反复从零推导当前负荷处于什么量级。这项特征在数据跨度长、年增长明显的电网里尤其有用。2.3 检修段剔除与滚动切分数据进入模型前的最后防线SCADA 或计量系统中计划检修会造成负荷时段性归零。这类归零点不是真实负荷如果直接留在训练数据里模型会学出一个错误的深夜低值模式。处理原则是能在检修日志里确认的挂牌时段直接剔除绝不修补。查不到检修日志时用相邻两周同时刻的正常值取中位数替换这与线性插值有本质区别——它是按周期对齐的替换保留日节律而不是把前后两个点的连线直接当曲线。训练集与验证集的切分也必须遵守时间顺序。负荷序列强自相关随机抽样等于让模型从未来偷看答案这种特征泄漏一旦发生评估指标会系统性虚高。正确做法是按年份切分前两年训练、第三年验证调参完成后再滚动一步用第二和第三年重训第四年做最终盲测。下面是一段按上述思路编写的数据准备代码假设原始数据是带时间戳的 15 分钟级采集值import pandas as pd import numpy as np df pd.read_csv(load_history.csv, parse_dates[timestamp]) df df.set_index(timestamp).resample(1h).mean() # 剔除检修挂牌时段 df df[df[maintenance_flag] 0] # 温度累积特征 df[temp_mean_24h] df[temperature].rolling(24).mean() df[temp_std_72h] df[temperature].rolling(72).std() # 滞后特征 df[lag_1] df[load].shift(1) df[lag_24] df[load].shift(24) df[lag_168] df[load].shift(168) # 滚动水平项过去一周均值 df[load_mean_168h] df[load].rolling(168).mean() # 删除因 shift 产生的空行 df df.dropna()resample(1h).mean()把 15 分钟数据聚合成小时均值取值逻辑要对应预测目标——如果目标是小时峰值负荷聚合函数应改成max()。maintenance_flag来自检修计划表在原始数据合并时按时间区间打标。rolling窗口的单位是小时所以 24 代表 1 天168 代表 7 天。滞后特征构造完毕后最前面 168 行会因shift产生空值直接dropna()去掉即可。到这里特征部分完成接下来进入模型选择。3. 电力负荷预测从统计基线到梯度提升模型实现与参数落地3.1 先跑一个朴素基线把模型能力的下限钉死建模的第一步不是直接上复杂模型而是先规定什么是“可接受”。工程实践里最常见的一个朴素基线是明天同一时刻的负荷直接等于昨天同一时刻的负荷即直接用lag_24作为预测值。另一个常见基线是取过去 7 天同一小时的中位数。这两个基线在天气平稳的过渡季通常能做到 4%6% 的 MAPE。之后任何一个候选模型只有同时明显低于这两个基线误差才有资格进入候选池。这一步的价值在于为后续模型评估设立坐标——花了一周时间调参结果只比lag_24好 0.1 个点那不如保持基线模型上线省下在特征工程上的复杂度。3.2 SARIMA统计方法在稳定序列上的表现仍然能打在电负荷预测的教学编排里SARIMA 通常是统计模型部分的主角。SARIMA(p,d,q)(P,D,Q,s) 中(p,d,q)是自回归阶数、差分阶数和移动平均阶数(P,D,Q,s)对应季节分量s是季节周期长度。对小时级电力负荷季节周期通常取 24即按天循环周周期由外部特征去补。下面是一段可运行的 SARIMA 拟合代码from statsmodels.tsa.statespace.sarimax import SARIMAX model SARIMAX( train[load], order(2, 1, 2), # 非季节项AR2, 一阶差分, MA2 seasonal_order(1, 1, 1, 24), # 季节项周期为24小时的差分自回归 enforce_stationarityFalse, normalizeFalse, ) result model.fit(dispFalse)order(2, 1, 2)表示模型用 2 阶自回归、1 阶差分、2 阶移动平均描述非季节成分。seasonal_order(1, 1, 1, 24)里的 24 是按小时计的日周期。enforce_stationarityFalse允许模型在数据非平稳时继续拟合避免过早报错。SARIMA 的适用前提是电力负荷模式相对稳定没有明显的趋势突变或气温跃变。一旦周末效应、节假日效应和温度敏感负荷占比过高单一 SARIMA 很难把这些因素全吸收进去这时就要考虑外部输入把温度等变量作为回归量传入 SARIMAX或者整体切换到树模型路线。3.3 用 CatBoost 做短期负荷预测特征工程的价值大于模型复杂度工程化落地的预测模型多数团队的优先选择不是 LSTM而是梯度提升树。原因很直接电力负荷的难点集中在特征交互上——季节、天气、节假日、滞后项之间的组合关系梯度提升树天然能捕捉这类交互不需要做特征标准化还能接收分类变量与缺失值。CatBoost 是其中更容易上手的一支它内部实现了对称树与有序提升训练时间相对较短对初学者也更友好。from catboost import CatBoostRegressor model CatBoostRegressor( iterations3000, learning_rate0.03, depth8, loss_functionRMSE, eval_metricMAE, random_seed42, od_wait200, # 验证指标连续200轮不改善则提前停止 ) model.fit( X_train, y_train, eval_set(X_valid, y_valid), use_best_modelTrue, verbose500, )iterations3000是最大提升轮数不是必须跑满od_wait200配合eval_set会在验证集指标连续 200 轮没有改善时触发早停。learning_rate0.03是偏保守的步长更小的学习率通常带来更稳的结果但训练时间变长。depth8限制单棵树深度防止单棵树记忆过强。use_best_modelTrue让模型保留验证集上最优的那一轮权重而不是用最后一轮。对电力负荷来说特征里的is_holiday、hour这类分类特征可以通过cat_features参数直接以原始类别形式传入CatBoost 会自行处理。在同样特征集上LSTM 需要先把序列整理成滑窗张量、做归一化、再小心处理验证切分而 CatBoost 直接吃表格数据即可。经验上对小时级负荷预测结构良好的梯度提升树在多数月份的精度与 LSTM 相当部分月份更好而且训练时间和故障排查成本低一个量级。实际生产里把 LSTM 作为最终模型的团队不在少数但那通常是在数据总量超过 3 年以上、且特征交互的收益已经挖掘殆尽之后才做的事。3.4 多步预测的递归式与直接式预测窗口决定训练策略预测未来 24 小时是典型的单步模型直接外推问题。但更常见的业务需求是连续预测未来 96 个 15 分钟点或者未来 7×24 小时。这带来两种实现方式递归预测和直接预测。递归预测的做法是训练一个单步模型把它的预测输出再作为lag_1的特征反复迭代到目标窗口的终点。这种方式的坏处是误差会逐步累计,预测第 20 小时时前面 19 个预测值已经被喂进特征偏差会传染。直接预测的做法是另一种思路对目标窗口内的每个预测时点训练独立模型24 小时窗口就训练 24 个模型每个模型专门学“未来第 k 小时的负荷”。这种方式切断了误差传染路径但训练成本线性增加。在工程取舍上我更推荐直接式多步预测尤其是用 CatBoost 的MultiQuantile或多输出策略时一次训练可以同时产出多个目标时点的分位数输出比递归式稳定得多。4. 预测误差如何折算成电力系统规划的备用容量4.1 从点预测到分位数预测规划真正需要的是不确定性走廊单条负荷预测曲线在可靠性评估里是不够用的。规划部门需要回答“在极端高温下系统容量够不够”时关注的是负荷分布的右尾而不是均值。P50 预测只给出中间情况P90 才能反映高温年的负荷偏高场景。深度学习界管这个叫不确定性量化电力系统规划里命名为“概率负荷预测”做法是通过分位数损失训练三个模型分别输出 P10、P50、P90。q_model CatBoostRegressor( loss_functionQuantile:alpha0.90, iterations2000, learning_rate0.03, depth8, ) q_model.fit(X_train, y_train, eval_set(X_valid, y_valid)) q90_pred q_model.predict(X_valid)Quantile:alpha0.90指定该模型学习 90% 分位数。对应再训练alpha0.10和alpha0.50的两个模型就可以构成不确定性走廊。分位数模型和点预测模型的差异在于损失函数不对称90% 分位数模型对“实际值高于预测值”的惩罚远重于“实际值低于预测值”因此输出曲线整体偏保守。可靠性计算里这条偏保守的曲线才是输入。4.2 用预测误差标准差折算失负荷期望电力系统可靠性里有一个被反复引用的指标——失负荷期望LOLE指的是长期看一年内负荷超过可用容量的期望小时数。国内电网规划的常用参考水平在 0.1 天/年左右的量级具体数值以各电网企业导则为准。LOLE 的意义在于它把预测误差和装机容量直接挂钩。假设我们有小时级负荷预测序列mu和按小时分类的误差标准差sigma系统可用容量为capacity则逐一小时计算失负荷概率后累加即可from scipy.stats import norm import numpy as np capacity 21000 # 系统可用发电容量MW众数场景示例 mu valid[load].values sigma err_std_by_hour[valid.index.hour] # 按小时匹配误差标准差 # 逐小时失负荷概率 p_loss 1 - norm.cdf(capacity, locmu, scalesigma) # 期望失负荷天数逐小时概率求和后折算为天 lole_days p_loss.sum() / 24.0 print(fLOLE {lole_days:.4f} days/year)norm.cdf假设负荷预测残差近似正态分布返回值是该小时负荷不超过可用容量的概率1 -后即为失负荷概率。把全年所有小时的失负荷概率加总并除以 24得到期望失负荷天数。这个公式的敏感度很高sigma增大 20%lole_days可能翻倍甚至更多。这就是为什么负荷预测精度直接影响装机投资——预测误差越大要满足同样的 LOLE 水平就需要建更多的机组或购买更多的备用容量成本最终会传导到电价里。4.3 高峰时段加权误差成本不对称的工程应对负荷预测误差在电网里的代价是不对称的。低估夜间低谷负荷顶多少停一台机组影响很小低估晚高峰负荷可能直接触发拉闸限电。因此工程实践中很常见的做法是对高峰时段单独加权训练。在 CatBoost 中可以用样本权重实现# 定义高峰时段权重工作日17-21时权重2.0其余时段权重1.0 sample_weight np.where( (X_train[hour] 17) (X_train[hour] 21), 2.0, 1.0, ) model.fit(X_train, y_train, sample_weightsample_weight, eval_set(X_valid, y_valid))sample_weight是 CatBoost 内置的样本权重参数传入一个与训练样本等长的数组即可。权重为 2.0 意味着高峰时段的误差在损失函数里被放大两倍模型会把更多拟合能力分配给这些时段。使用时要注意别把权重设得过高超过 3 倍之后模型可能在高峰时段过拟合而牺牲其他时段的精度导致整体 MAPE 恶化。另一种更精细的做法是分时段独立建模——把一天切成“低谷、腰荷、高峰”三段各训练一个模型接口处用加权平滑过渡这种方式特别适合峰谷差极大的电网。5. 电力负荷预测模型的验证与调优指标选择、分段回测与三个工程坑5.1 三个指标并行看别让 MAPE 一票否决MAPE平均绝对百分比误差在电力负荷里有一个先天缺陷深夜低负荷时段绝对误差可能只有 20MW但百分比振幅扩大到 8%10%会严重拉低整个指标观感。单看 MAPE 可能让团队误判模型在低谷段“变差”。更合理的做法是 MAE、RMSE、MAPE 一起看MAE 反映平均绝对偏差RMSE 放大高峰时段的预测失误MAPE 用来和同类项目的精度水平互相参照。尾部分位数的偏差可以看 P99 误差即全年误差最严重的 1% 时段平均偏了多少。P99 对极端天气场景的暴露最有参考价值。5.2 分段回测按工作日、周末、假期分开验才算数全年整体指标掩盖季节性缺陷。春节长假期间的负荷形态跌到日常的 40% 以下模型如果只用“周几”是推不出这种断崖的。好的验证方式是按场景切片回测工作日曲线单独计算 MAE周末与法定节假日分别切出结果夏季高温日日最高温超过 35℃单独统计春节前后 15 天作为独立场景单列。每个切片里看同样的三个指标再对比整体指标就能定位模型到底在哪一个场景里丢分。很多时候整体 MAPE 3.8% 好看但春节期间 MAPE 15%这个短板必须修补否则全年日历一转到假期就得人工干预。5.3 三个工程坑温度漂移、特征冗余、春节日期漂移第一个坑是温度变量漂移。训练时用的是实际温度推理时用的是气象预报温度两者的误差分布不同。如果模型训练时没有叠加温度扰动上线后遇到预报偏暖或偏冷的日子预测也会一起偏。应对方法是在训练时对温度特征施加 ±2℃ 的随机扰动让模型学会适应温度预报偏差。第二个坑是特征冗余堆积。把日历特征做成 30 多个 one-hot再把温度滑动统计加成一堆CatBoost 的特征重要性会被稀释训练时间和过拟合风险同步上升。实操上先跑一轮特征重要性输出保留贡献度前 20 的特征通常已经覆盖模型 90% 以上的解释力。第三个坑是春节日期漂移。春节在公历里每年变动模型如果只用了“距离 1 月 1 日多少天”这类特征无法感知春节在第几周。更好的做法是显式构造“距离春节还有多少天”的季节特征并把春节前后 15 天单独标记成场景标签。这样一个 8 字节的日历字段可能比多训练 500 轮对整个模型的收益还要大。最后补一个排查技巧任何一轮回测指标异常变差时先别急着调参画出预测曲线与实际曲线的逐小时对照图重点看误差是被哪几天、哪几个小时带崩的。很多时候答案不在模型超参数里而在数据清洗和日历字段的缝隙里。把误差按小时、按星期、按标签三层切片去排比换模型更能提前找出根因。本文还有配套的精品资源点击获取