光伏

光伏功率预测准确率怎么算 — RMSE/MAE/MAPE 与工程样本

· 南京运梦科技算法团队 · 评审 算法负责人

光伏功率预测准确率怎么算 — RMSE/MAE/MAPE 与工程样本 封面

光伏预测误差指标示意图

摘要:光伏功率预测的「准确率」并不是一个单一指标,电网两个细则考核、内部生产调度、第三方数据采购的口径都不一样。本文从物理链路出发,把 RMSE / MAE / nRMSE / SkillScore 四个最常用指标讲清楚,给出实际项目工程中短期 / 超短期 / 中期三个场景的实测准确率分布(自绘 SVG),最后附 30 行 Python 评估代码。

关键要点

  • 光伏功率预测准确率没有单一标准:常用指标是 RMSE、MAE、nRMSE(归一化到装机容量)和 Skill Score(相对持续法的提升),不同口径不能直接横向比较。
  • 实测 nRMSE 中位数随预测时长拉长而升高:超短期 4h 约 6.5%、短期 24h 约 9.0%、中期 72h 约 12.0%(实际项目工程脱敏样本,仅供选型参考)。
  • 误差最主要来自数值天气预报(NWP):实际项目工程复盘样本中常见约 70%-80% 的误差归因到 NWP(占比随站点与天气条件大幅波动),气象预报精度在很大程度上决定了光伏预测精度的上限。
  • 两个细则按 15 min 时段 |ŷ − y| / C ≤ 25% 统计日合格率,合格率 < 80% 会触发分档考核电费;MAPE 必须只在日间样本(如 GHI > 50 W·m⁻²)上算,否则会发散。
  • 把 nRMSE 从 12% 压到 9% 的最高 ROI 套路是换更好的 NWP、做集成预报、同化本地观测、用 LightGBM/XGBoost 做偏差订正,并按时间尺度融合云图外推与 NWP。

1. 光伏功率预测的物理链路

光伏电站的瞬时功率 P 取决于:

P = η_组件(T_组件, GHI_有效) × A × GHI × η_系统(逆变, 线损) × Availability

其中:

  • GHI 全球水平辐照(Global Horizontal Irradiance)来自数值天气预报模式(NWP),通常是预报误差的最主要来源;在实际项目工程复盘样本中,常见约 70%-80% 的误差归因到 NWP
  • T_组件 通过 GHI、气温、风速派生(NOCT 模型 / Faiman 模型)
  • Availability 含限电、检修、积灰、阴影遮挡 — 是机理外的扰动,预测算法很难覆盖

也就是说:在我们的脱敏样本中,NWP/辐照预报是主导误差源,很大程度上决定了光伏功率预测精度的上限。任何宣称把短期 RMSE 压到 ≤ 3% 的方案,要么场景特殊(晴空稳定区域),要么暗藏了限电样本剔除。

2. 四个最常用准确率指标

设真实功率序列 y、预测序列 ŷ、装机容量 C,样本数 N

2.1 RMSE(均方根误差)

RMSE = sqrt( (1/N) · Σ (ŷ_i - y_i)² )
  • 单位:MW(或 kW)
  • 大误差更敏感(平方放大)
  • 工程上常归一化到装机容量:nRMSE = RMSE / C,单位 %

2.2 MAE(平均绝对误差)

MAE = (1/N) · Σ |ŷ_i - y_i|
  • 单位:MW
  • 比 RMSE 对异常值更稳健,反映「平均偏多少」
  • 同样可归一化:nMAE = MAE / C

2.3 MAPE(平均绝对百分比误差)

MAPE = (1/N) · Σ |ŷ_i - y_i| / max(y_i, ε)

⚠️ MAPE 在 y_i → 0(夜间、清晨、阴雨)时会爆炸;行业实践通常只取日间样本(如 GHI > 50 W·m⁻²)算 MAPE,否则数值毫无意义。

2.4 Skill Score(相对持续法的提升)

SkillScore = 1 - RMSE_model / RMSE_persistence

persistence(持续法)= 用上一时段实测当作下一时段预测。Skill Score > 0 说明模型「跑赢了什么都不做」。实际项目工程验收通常期望短期模型 SkillScore ≥ 0.4,< 0.2 基本等于浪费算力

3. 两个细则考核口径(电网侧)

中国国家能源局《并网发电厂辅助服务管理实施细则》(俗称两个细则)对新能源场站的预测精度考核口径(各省略有差异,以华北/华东为例):

  • 短期预测:未来 0-72 h,时间分辨率 15 min
  • 考核窗口:日内每日 24 h 实时考核
  • 基准误差:日合格率 = (15 min 时段中 |ŷ - y| / C ≤ 25% 的样本数) / 总日间样本数 × 100%
  • 合格门槛:合格率 < 80% 触发分档考核电费

真相源:各省电力公司发布的《两个细则实施细则》,本文不展开法律细节,仅给算法侧实操建议。

4. 实际项目工程样本准确率基线(实测分布)

下图(自绘 SVG,可在 /blog/solar-forecast-accuracy/ 直接查看)汇总了实际项目工程中 50+ 个光伏电站、覆盖华北 / 华东 / 西北的实测 nRMSE 分布。它用于工程选型参考,不是公共论文基准:

样本口径说明:以下数字来自实际项目工程的脱敏复盘,按装机容量归一化计算 nRMSE;站点区域、限电 / 检修样本剔除、天气年份和时间分辨率都会影响结果。它只能作为售前评估和方案设计的经验范围,不能作为行业通用基线或对外交付承诺。

时长中位 nRMSEP25 - P75备注
超短期 4h(15 min 步)6.5%4.8% – 9.0%主要依赖云图外推
短期 24h(15 min 步)9.0%7.0% – 11.5%主导误差来自 NWP
中期 72h(1 h 步)12.0%9.5% – 15.0%NWP 误差 + 累积偏差

典型分布观察

  • 西北戈壁、新疆区域晴空稳定,nRMSE 比东部低 1-2pp
  • 华东梅雨季 / 华北春季沙尘 / 西南云贵高原 nRMSE 会暴涨 30-50%
  • 装机 < 50 MW 的小场站 nRMSE 比大场站差 1-3pp(平滑效应弱)

5. Python 30 行评估脚本

import numpy as np
import pandas as pd

def evaluate_pv_forecast(y_true: np.ndarray,
                         y_pred: np.ndarray,
                         capacity_mw: float,
                         daytime_mask: np.ndarray | None = None) -> dict:
    """
    y_true, y_pred: 时间序列,单位 MW,等长
    capacity_mw:    装机容量,单位 MW
    daytime_mask:   bool 数组,True = 日间样本(GHI > 50 W·m⁻²)
                    None 时全部样本参与,MAPE 容易爆炸
    """
    y_true = np.asarray(y_true, dtype=float)
    y_pred = np.asarray(y_pred, dtype=float)
    err = y_pred - y_true

    rmse  = np.sqrt(np.mean(err ** 2))
    mae   = np.mean(np.abs(err))
    nrmse = rmse / capacity_mw * 100
    nmae  = mae  / capacity_mw * 100

    if daytime_mask is not None:
        m = daytime_mask & (y_true > 0.05 * capacity_mw)
        mape = np.mean(np.abs(err[m]) / y_true[m]) * 100 if m.any() else np.nan
    else:
        mape = np.nan

    # 两个细则合格率(15 min 步长 |err| / C ≤ 25%)
    pass_ratio = np.mean(np.abs(err) / capacity_mw <= 0.25) * 100

    # Skill Score vs 持续法
    persistence = np.roll(y_true, 1); persistence[0] = y_true[0]
    rmse_p = np.sqrt(np.mean((persistence - y_true) ** 2))
    skill  = 1 - rmse / rmse_p if rmse_p > 0 else np.nan

    return dict(
        RMSE_MW=rmse, MAE_MW=mae,
        nRMSE_pct=nrmse, nMAE_pct=nmae,
        MAPE_daytime_pct=mape,
        PassRatio_pct=pass_ratio,
        SkillScore=skill,
    )

6. 把准确率从 nRMSE 12% 压到 9% 的工程套路

这是实际项目工程中常见的「卷一卷」诉求,按 ROI 排序:

  1. 换更好的 NWP(最有效):在实际项目工程样本中,ECMWF-HRES 通常能改善中纬度 24h 辐射场 RMSE,但提升幅度必须以目标场站回测确认
  2. 集成预报:把 ECMWF + GFS + 区域中尺度模式做加权融合,nRMSE 再降 0.5-1pp
  3. 本地观测同化:场站实测 GHI / 气温反馈进入预测链路,4h 内预测 RMSE 显著下降
  4. 机器学习偏差订正:LightGBM / XGBoost 把 NWP → 实测的系统偏差吃掉,别指望深度学习(除非样本量 ≥ 3 年 / 装机 ≥ 100 MW)
  5. 多时间尺度融合:超短期用云图外推 + 短期用 NWP,按时长加权

7. 常见误区

误区 1:「RMSE 越低越好」 — 不对。RMSE 在限电 / 弃光的电站上会虚低,因为实测被压平了。 误区 2:「用 MAPE 比 RMSE 更直观」 — 在功率序列里 MAPE 在低出力时段会发散,只在日间样本上算误区 3:「准确率指标越多越好」 — 业务报告里报 nRMSE + 合格率两个就够,加 SkillScore 防止「看起来准但其实没跑赢持续法」。

常见问题

光伏功率预测准确率怎么算?用哪个指标? 没有单一指标。工程上最常用 RMSE(对大误差敏感)、MAE(更稳健)、归一化到装机容量的 nRMSE,以及衡量是否跑赢持续法的 Skill Score。业务报告通常报 nRMSE + 两个细则合格率即可,必要时加 Skill Score。

光伏功率预测的准确率一般能做到多少? 按本文实际项目工程脱敏样本,nRMSE 中位数大致为:超短期 4h 约 6.5%、短期 24h 约 9.0%、中期 72h 约 12.0%。这些数字受站点区域、限电/检修样本剔除、天气年份和时间分辨率影响,只能作经验参考,不是行业通用基线。

为什么光伏功率预测的误差总是降不下来? 因为误差的最主要来源是数值天气预报(NWP):在我们的脱敏复盘样本中,约 70%-80% 的误差可归因到 NWP/辐照预报(占比随站点与天气条件大幅波动,并非固定区间)。换言之,气象预报精度在很大程度上决定了功率预测精度的上限,限电、检修、积灰等机理外扰动则更难被算法覆盖。

两个细则的光伏预测合格率怎么考核? 以华北/华东为例,按 15 min 时段统计日合格率 = (|ŷ − y| / C ≤ 25% 的样本数) / 总日间样本数 × 100%;日合格率 < 80% 会触发分档考核电费。各省细则略有差异,以当地电力公司发布口径为准。

为什么不能直接用 MAPE 评估光伏功率? 因为 MAPE 在功率趋近 0 的夜间、清晨、阴雨时段会爆炸发散。行业实践是只取日间样本(如 GHI > 50 W·m⁻²)算 MAPE,否则数值毫无意义。

8. 参考与延伸阅读

  • 国家能源局.《电力并网运行管理规定》(国能发监管规〔2021〕60 号)与《电力辅助服务管理办法》(国能发监管规〔2021〕61 号)及各区域"两个细则"实施细则。
  • GB/T 40607—2021《调度侧风电或光伏发电功率预测系统技术要求》。
  • Faiman, D. (2008). Assessing the outdoor operating temperature of photovoltaic modules. Progress in Photovoltaics, 16(4), 307–315. DOI: 10.1002/pip.813
  • 组件 NOCT 与温度系数测试可参考 IEC 61215 / IEC 61853 系列标准。
  • 注:本文 §4 表格与关键要点中的 nRMSE 等数字均为脱敏工程样本经验范围,非公共行业基准。

9. 下一步

免费试用 →