新能源功率预测评价指标体系:准确率、合格率与 RMSE/MAE 怎么算

做新能源功率预测,模型选型、特征工程、订正策略所有功夫,最后都要被一组数字定价——准确率、合格率、RMSE、MAE。可一旦坐下来认真算,问题就冒出来了:同一份预测和实测,用 RMSE 还是 MAE、归一化分母放装机还是开机、夜间零功率算不算样本、限电时段剔不剔,算出来的"准确率"能差好几个百分点。指标算错,模型评价就全错,调度考核单和内部 KPI 对不上更是家常便饭。这篇文章把功率预测评价指标体系拆开讲清楚:先是统计学口径的 RMSE/MAE/MAPE/Skill Score,再是「两个细则」考核口径的均方根准确率与单点合格率,最后落到怎么用 ERA5 回测加德国气象局预报把这套评估闭环搭起来。
关键要点
- 功率预测没有单一"准确率":统计层有 RMSE、MAE、MAPE、Bias、Skill Score,考核层有均方根误差准确率与单点合格率,口径不同不能横向比,引用任何数字都要先问"用哪个公式、哪个分母、哪个样本集"。
- RMSE 对大误差敏感(平方放大)、MAE 对所有误差等权,二者之差能反映误差分布是否有重尾;满发时段的大偏差会被 RMSE 显著放大,这正是考核最痛的区域。
- 两个细则的准确率分母用的是开机/装机容量而非实测功率,所以满发时段(光伏正午、风电大风段)误差权重最大;合格率则是单点误差小于阈值(常见 20%–25% 容量)的点占比。
- 样本筛选决定指标可信度:MAPE 必须只在日间或大出力样本上算否则发散,限电与检修时段要按规则剔除或单独标注,夜间零功率纳入会人为拉高光伏准确率。
- 评估闭环用 ERA5(1940 年至今、0.25° 逐小时)做长周期回测基线与偏差订正、用德国气象局预报(dataSourceId 为 ger)驱动实时预测,历史与未来职责分开,回测才不会泄漏未来信息。
为什么"准确率"是个需要先对齐口径的词
新能源场站里"准确率 85%"这句话,几乎没有信息量——除非你同时说清三件事:用什么公式、归一化到什么分母、在哪个样本集上算。三者任意一个变了,同一份预测的"准确率"就会漂移好几个百分点。
把指标分成两层看会清楚很多。统计层是描述误差本身的通用量:RMSE、MAE、MAPE、Bias、Skill Score,它们回答"预测和实测差多少、偏哪边、比基线强多少"。考核层是「两个细则」等制度文件定义的口径:均方根误差准确率、单点合格率,它们回答"调度按什么规则给你扣考核电量"。统计层服务于模型迭代和内部诊断,考核层服务于结算和合规。两层经常被混着用,于是出现"内部算的准确率 88%、调度考核单上只有 81%"这种对不上的经典场景——根因往往就是分母和样本集不一致。
下面先把统计层四个最常用指标讲透,再讲考核层口径,最后讲样本筛选这个最容易翻车的环节。
统计层指标:RMSE、MAE、MAPE、Skill Score
设实测功率序列 y、预测序列 ŷ、样本数 N、装机容量 C。
RMSE:均方根误差
RMSE = sqrt( (1/N) · Σ (ŷ_i − y_i)² )
单位与功率相同(MW)。它对大误差更敏感,因为平方项把大偏差放得更大。工程上几乎总是归一化到容量后报告:
nRMSE = RMSE / C
nRMSE 是新能源行业事实上的主指标,因为它跨场站、跨装机规模可比。一个直接推论是:RMSE 把惩罚集中压在大误差上,而大误差最常发生在满发时段和爬坡过程——这两个区域既最难报准、又被考核分母放得最大,是优化资源最该砸的地方。
MAE:平均绝对误差
MAE = (1/N) · Σ |ŷ_i − y_i|
MAE 对所有误差等权,不放大极端值,物理含义直观("平均差几 MW")。一个常被忽视的诊断技巧:比较 RMSE 与 MAE 的比值。理论上 RMSE ≥ MAE 恒成立,二者越接近说明误差分布越均匀;RMSE/MAE 显著大于 1.25 左右,通常意味着误差分布有重尾——存在少数极端大误差(往往是漏报的爬坡或天气过程突变),这时光看 MAE 会低估风险,必须回头查这些大误差样本。
MAPE:平均绝对百分比误差
MAPE = (1/N) · Σ |ŷ_i − y_i| / y_i × 100%
MAPE 用实测值做分母,看似直观,但对新能源是陷阱:分母 y_i 趋近 0 时(光伏夜间、风电小风段)单点百分比会爆炸到几百上千,整体 MAPE 直接发散。所以光伏 MAPE 必须只在日间大出力样本上算(如 GHI > 50 W·m⁻² 或 y > 某阈值),风电同理要剔除切入风速以下的样本。能用归一化到容量的 nMAE/nRMSE 时,优先用它们,少用 MAPE。
Bias 与 Skill Score
Bias(平均误差,不取绝对值)衡量系统性偏差:
Bias = (1/N) · Σ (ŷ_i − y_i)
Bias 持续为正说明常年高估、为负说明低估,它是偏差订正的直接对象(RMSE/MAE 把高估和低估混在一起看不出方向)。Skill Score 则衡量预测相对一个朴素基线的提升:
SS = 1 − RMSE_model / RMSE_reference
参考基线超短期常用持续法(persistence,下一刻等于此刻),短期常用气候态或日前同时刻。SS > 0 才说明你的模型真的比"什么都不做"强;很多看似不错的预测,扣掉持续法基线后 Skill 寥寥,这一步能戳破不少虚高的准确率叙事。
考核层口径:两个细则的准确率与合格率
「两个细则」(《并网运行管理实施细则》《辅助服务管理实施细则》)由各区域/省级电网落地,阈值略有差异,但骨架一致,且与统计层指标不能直接等同。
均方根误差准确率的常见形式是:
准确率 = 1 − sqrt( (1/N) · Σ ((ŷ_i − y_i) / Cap)² )
关键差别在分母 Cap 是开机容量或装机容量,而非实测功率。这一个选择带来全部后果:满发时段(光伏正午、风电大风段)的绝对偏差被同一个大分母归一,但绝对偏差本身在满发时最大,于是这些时段的误差权重最高。换句话说,考核口径天然把压力压在最难报准的高出力区间——优化资源要优先压这里,平均用力是浪费。光伏短期合格线常见在 80%–83%、风电约 80%,超短期门槛更高,光伏常达 85% 以上。
单点合格率是另一条线:定义单点误差 |ŷ_i − y_i| / Cap 小于某阈值(常见 20%–25% 容量)即为合格点,合格点占比要达标。准确率看的是误差的整体均方,合格率看的是逐点是否越界——一份预测可以均方误差不大但偶有几个点严重越界,准确率达标而合格率不达标,反之亦然,两条线要分别盯。
罚款是分段的,不是线性扣:准确率每低于合格线 1 个百分点,按当月上网电量某比例(如 0.2%)核定考核电量乘挂牌电价。这给评估带来一个直接结论:把准确率从 78% 抬到 82%(跨过合格线)的边际收益,远大于从 90% 抬到 92%。评估报告里盯着"离合格线还差几个点",比盯着绝对 nRMSE 更贴合钱的逻辑。
最容易翻车的一步:样本集怎么筛
指标公式都对,结果还是对不上,十有八九栽在样本集上。同一份数据,纳不纳入下面这些样本,准确率能差三五个点。
夜间零功率:光伏夜间预测和实测都是 0,纳入样本会人为拉高 nRMSE 准确率(一堆误差为 0 的点摊薄了均方)。多数考核口径要求只统计日间有效时段,内部评估也应剔除或单列,否则你的"准确率"是被夜间灌水的。
限电与检修:场站被限电时实测功率被人为压低,这不是预测算法能覆盖的机理外扰动。把限电时段纳入误差统计,等于让算法为调度行为背锅。规则上一般剔除或单独标注限电、停机、检修样本,但剔除规则必须可追溯——否则会变成"挑着剔"来刷高准确率的灰色操作。
风电小风段与切入风速以下:风速低于切入风速时功率为 0,类似夜间零功率,MAPE 在这里发散,按容量归一的指标受影响小但仍建议单独看。
时间对齐与缺测:预测序列和实测序列必须严格按时间戳对齐,时区、夏令时、15 分钟点位错位都会让误差凭空变大;缺测点要么剔除要么显式标注,绝不能用 0 或前值悄悄填充后混进样本,那会同时污染分子和分母。
一句话:报告任何准确率数字,都要附上样本筛选规则——时间范围、是否含夜间、限电怎么处理、缺测怎么处理。没有这套说明的准确率,不具备可比性,也经不起复核。
把评估闭环搭起来:ERA5 回测 + 德国气象局预报
指标算法清楚了,还需要数据底座把评估跑成闭环。这里有一条容易踩的红线:回测用的"历史天气"和实时用的"未来预报"必须分开取,绝不能用再分析数据冒充预报去回测,否则等于把未来信息泄漏进模型,回测分数虚高、上线现原形。
合理的分工是:ERA5(ECMWF 第五代再分析,0.25° 网格、逐小时、覆盖 1940 年至今)只做三件事——拉多年历史气象与 SCADA 实测对齐、标定功率特性曲线、统计偏差订正表,以及作为离线回测的稳定基线。它是"真值近似",不参与任何对未来的预测。德国气象局预报(DWD,dataSourceId 为 ger,覆盖未来约 7 天)驱动实时的短期与超短期,输出当天出力曲线。评估时,用 ERA5 回测得到的指标做长周期基线,用德国气象局预报的实时误差做在线监控,两者口径要一致(同样的归一化分母、同样的样本筛选规则),才能把"模型在历史上多好"和"模型现在多好"放在同一把尺子上比。
需要提醒的工程细节:ERA5 滞后约 5 天、辐射变量是时段累积语义要换算成 W·m⁻²、复杂地形偏差会放大,建议保留站点实测做最终校准,不要把再分析当成无偏真值。
在运梦气象 API 上手评估取数
历史回测取 era5、实时驱动取 ger,同一个端点 POST /api/energy-weather/search/weather/action/downloadSync。请求体 JSON,必填 dataSourceId、lat、lon、stime、etime、timezone(时区偏移,东八区填 "8")、fields。响应是统一 JSON envelope,data 里按字段名给出与 timeList 等长的数组,不返回 CSV 或 NetCDF,也没有 format 参数。下面演示拉一段历史与预报,并把 RMSE/MAE/合格率算出来:
import os, requests
import numpy as np
URL = "https://console.yun-meng.top/api/energy-weather/search/weather/action/downloadSync"
HEADERS = {
"Authorization": f"Bearer {os.environ['YUNMENG_TOKEN']}",
"Content-Type": "application/json",
}
def fetch(source, stime, etime, fields, lat=32.03253, lon=117.35184):
body = {
"dataSourceId": source, # 历史用 "era5",预报用 "ger"
"lat": lat, "lon": lon,
"stime": stime, "etime": etime,
"timezone": "8", # 必填,时区偏移
"fields": fields,
}
r = requests.post(URL, headers=HEADERS, json=body, timeout=600).json()
if not r.get("success"):
raise RuntimeError(r.get("msg", "查询失败"))
return r["data"]
def metrics(pred, obs, cap, mask=None):
"""pred/obs 等长数组,cap 为装机容量;mask 用于剔除夜间/限电样本"""
pred, obs = np.asarray(pred, float), np.asarray(obs, float)
if mask is not None:
pred, obs = pred[mask], obs[mask]
err = pred - obs
rmse = np.sqrt(np.mean(err ** 2))
mae = np.mean(np.abs(err))
bias = np.mean(err)
# 两个细则口径:均方根误差准确率,分母为装机容量
acc = 1 - np.sqrt(np.mean((err / cap) ** 2))
# 单点合格率:|误差|/Cap <= 0.25 视为合格点
pass_rate = np.mean(np.abs(err) / cap <= 0.25)
return dict(nRMSE=rmse / cap, nMAE=mae / cap, bias=bias,
accuracy=acc, pass_rate=pass_rate)
# 1) ERA5 历史辐射,配 SCADA 实测做回测基线(此处仅取气象作演示)
hist = fetch("era5", "2024-01-01 00:00", "2024-12-31 23:00",
["rsds", "dni", "dhi"])
print("ERA5 样本数:", len(hist["timeList"]))
# 2) 德国气象局未来预报,驱动实时预测
fcst = fetch("ger", "2026-06-17 00:00", "2026-06-23 23:00",
["rsds", "ws", "wd"])
print("预报点数:", len(fcst["timeList"]))
# 3) 评估示例(pred/obs 来自你的功率特性映射与 SCADA,cap 为装机容量)
# day = np.asarray(obs_ghi) > 50 # 只统计日间样本,避免夜间灌水
# print(metrics(pred_power, obs_power, cap=20.0, mask=day))
关键工程纪律都写在 metrics 里:归一化分母统一用装机容量 cap、合格率阈值显式写明(这里取 0.25)、用 mask 参数承载夜间/限电样本筛选。把这三件事固化进评估函数,内部 KPI 才能和调度考核单对上口径。
收尾
功率预测评价指标体系,本质是一套"怎么把误差翻译成钱"的规则。统计层的 RMSE/MAE/Skill Score 帮你诊断模型、定位重尾误差;考核层的均方根准确率和单点合格率决定调度怎么给你扣电量;而样本筛选这道看不见的工序,决定了前两层算出来的数字到底可不可信。落地时,把指标公式、归一化分母、样本规则三件事先用一段评估代码固定下来,再用 ERA5 做长周期回测基线、用德国气象局预报跑实时监控,让"历史多好"和"现在多好"在同一把尺子上比。指标口径对齐了,模型迭代和考核合规才不会各说各话。
常见问题
功率预测的 RMSE 和 MAE 有什么区别,该用哪个?
RMSE 对大误差更敏感(平方放大),MAE 对所有误差等权。新能源行业主用归一化到装机容量的 nRMSE 做横向可比的主指标;同时看 RMSE/MAE 比值可诊断误差分布是否有重尾——比值显著大于 1.25 左右通常意味着存在少数极端大误差,需回查爬坡或天气突变样本。
两个细则的准确率为什么用容量做分母而不是实测功率?
均方根误差准确率的分母用开机/装机容量 Cap,使指标跨场站可比,并让满发时段(光伏正午、风电大风段)的绝对偏差权重最大。这些恰是最难报准的区间,所以优化资源应优先压在高出力时段,而不是平均用力。
准确率和合格率是一回事吗?
不是。准确率看误差的整体均方(1 减去容量归一的均方根误差),合格率看逐点是否越界(单点误差小于阈值如 20%–25% 容量的点占比)。一份预测可能均方误差不大但个别点严重越界,导致准确率达标而合格率不达标,两条线要分别盯。
算光伏 MAPE 为什么会发散,怎么处理?
MAPE 用实测功率做分母,光伏夜间实测趋近 0 时单点百分比会爆炸到几百上千,整体 MAPE 发散。处理办法是只在日间大出力样本上算(如 GHI > 50 W·m⁻²),或改用归一化到容量的 nMAE/nRMSE。
评估时夜间和限电样本要不要算进去?
夜间零功率纳入会人为拉高光伏准确率,多数口径要求只统计日间有效时段。限电、检修、停机是机理外扰动,预测算法无法覆盖,一般剔除或单独标注,但剔除规则必须可追溯。报告任何准确率都应附带样本筛选规则,否则不具可比性。
参考与延伸阅读
- 国家能源局.《电力并网运行管理规定》《电力辅助服务管理办法》(国能发监管规〔2021〕60 号、61 号). 2021;各区域/省级能源监管机构据此制定的《电力并网运行管理实施细则》《电力辅助服务管理实施细则》(业内俗称「两个细则」)。
- 中华人民共和国国家标准. GB/T 40607—2021《调度侧风电或光伏功率预测系统技术要求》. 全国电网运行与控制标准化技术委员会(TC446), 2021-10-11 发布, 2022-05-01 实施. https://std.samr.gov.cn/gb/search/gbDetailed?id=CE1E6A1DD53258F6E05397BE0A0A68DF
- Madsen, H., Pinson, P., Kariniotakis, G., Nielsen, H. A., & Nielsen, T. S. (2005). Standardizing the performance evaluation of short-term wind power prediction models. Wind Engineering, 29(6), 475–489. https://doi.org/10.1260/030952405776234599
- Hersbach, H., Bell, B., Berrisford, P., et al. (2020). The ERA5 global reanalysis. Quarterly Journal of the Royal Meteorological Society, 146(730), 1999–2049. https://doi.org/10.1002/qj.3803