geo

电力现货市场的气象账本:用功率预测支撑报量报价与偏差考核

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

电力现货市场的气象账本:用功率预测支撑报量报价与偏差考核 封面

现货市场把新能源从"有多少发多少、电网兜底"的角色,推到了"先报量报价、再按偏差结算"的交易主体位置。一座光伏电站的日前申报曲线、一座风电场的实时滚动修正,本质上都是在对未来几小时到几天的天气下注。报得保守,弃掉了本可拿到高价的电量;报得激进,偏差考核又会把利润吃掉一截。这篇文章想把这本"气象账"摊开讲清楚:负荷、电价、出力这三条曲线分别被什么天气变量驱动,报量报价和偏差考核是怎么和功率预测咬合在一起的,以及如何用 ERA5 历史规律加德国气象局短期预报,把报价决策和天气风险管理做成一套可落地的工程流程。

关键要点

  • 现货市场里的系统负荷、节点电价、场站出力三条曲线,由同一批气象变量驱动:负荷主看气温(tas)与相对湿度(hurs),出力看辐照(rsds/dni/dhi)和 100 米风速(u100/v100 派生),价格则是负荷与新能源出力差额的放大器,对天气的弹性比负荷更陡。
  • 报量报价不是直接报功率预测点预测(P50),而是在偏差考核的惩罚结构下,对预测分布(P10/P50/P90)做期望收益最优化;当价格高或惩罚不对称时,最优申报量会系统性偏离 P50。
  • 风电出力对轮毂高度风速近似呈三次方关系,风速预报差 1 m/s,出力误差可能放大到两位数百分比,因此风功率预测必须用 100 米风速而非 10 米的 uas/vas。
  • ERA5 是 ECMWF 第五代再分析,长时序、全球一致、按 CF 命名约定组织变量,用于把"过去为什么被罚"的天气规律量化成"情景—误差订正—申报偏移量"查找表,降低考核成本。
  • 天气风险管理按预报时效分层:日前到日内(未来约 7 天)用德国气象局(dataSourceId 为 ger)预报驱动申报与滚动修正,事后用 ERA5(dataSourceId 为 era5)复盘,形成预报管敞口、再分析沉淀规律的闭环。

三条曲线,背后都是同一套天气变量

现货市场里真正决定收益的有三条曲线:系统负荷、节点电价、自家场站出力。容易被忽略的是,它们很大程度上由同一批气象变量驱动,只是传递路径不同。

负荷侧最敏感的是气温。夏季制冷负荷对气温近似呈非线性上凸关系,超过某个阈值后每升高一度,负荷增量会明显放大;冬季采暖负荷则在低温区间快速抬升。相对湿度通过体感温度进一步放大空调负荷,这也是为什么单看干球温度预测负荷往往不够,需要把 tas(气温)hurs(相对湿度) 一起喂进负荷模型。

电价侧是天气影响的"放大器"。当一个区域同时出现高温(负荷高)和小风、寡照(新能源出力低),供需缺口会把现货价格顶到尖峰;反过来,大风加强辐照的午间时段,新能源集中出力会把价格压到地板价甚至负电价。也就是说,气象变量先驱动负荷和新能源出力,两者的差额再驱动价格,价格对天气的弹性比负荷本身更陡。

出力侧最直接。光伏出力跟着 rsds(地表水平短波/GHI)dni(直接法向)dhi(散射) 走,并受 tas 影响组件效率;风电出力对轮毂高度风速呈三次方关系,所以哪怕风速预报只差 1 m/s,出力误差也可能放大到两位数百分比,这就是为什么风功率预测必须用 u100/v100 派生的 100 米风速,而不是 10 米的 uas/vas

报量报价:把预测分布翻译成申报曲线

报量报价不是"把功率预测的点预测直接当申报量"这么简单。点预测给的是期望值,而申报决策要的是在一条价格信号下的最优期望收益,这中间隔着两层。

第一层是预测的不确定性。功率预测输出的应该是一个分布,至少是分位数(P10/P50/P90),而不是单一数字。日前阶段预报时效长、误差大,分布更宽;临近实时(日内滚动)误差收窄,分布变窄。报量报价的核心,是在"考核规则定义的惩罚结构"下,对这个分布做期望收益最优化,而不是简单报 P50。

第二层是价格与考核的耦合。在两个细则(即并网发电厂"两个细则")框架下,预测准确率直接关联考核费用;在现货市场里,日前申报量与实时出力的偏差还要按实时价格结算。当某时段预期价格高、且偏差惩罚不对称(少发罚得比多发狠,或相反)时,最优申报量会系统性地偏离 P50,向惩罚更轻的一侧移动。把这件事工程化,就是用历史天气-出力-价格联合分布,去标定"该报哪个分位数"的策略表。报得越接近真实分布的最优点,单位电量的考核成本就压得越低。

偏差考核:用 ERA5 把规律量化出来

偏差考核的罚款,长期看不是随机噪声,而是有结构、可被气象规律解释的。能不能把这部分结构提前识别出来,决定了一家场站的考核成本是行业平均还是显著优于平均。

这正是 ERA5 历史再分析的用武之地。ERA5 是 ECMWF 的第五代再分析,长时序、全球一致、按 CF 命名约定组织变量,非常适合做"天气情景—预测误差—考核成本"的回溯分析。务实的做法是:

  • 把过去一到三年的实际出力、申报曲线、考核结算逐时对齐,再用 ERA5 取同期同点位的 rsds/dni/dhi/tas/hurs/sp(光伏)或 u100/v100/ws/wd(风电)。
  • 按天气情景聚类(如"高压晴空午后""锋面过境大风""平流雾寡照"),统计每类情景下的预测误差分布与对应的考核罚款。
  • 找出系统性偏差的天气根因。常见的有:晴空积云生消导致的辐照分钟级波动、风电爬坡事件(ramp)前后风速骤变、低温高湿下结霜或积雪压低出力等。

把这些规律沉淀成"情景—误差订正—申报偏移量"的查找表后,预测系统在判断出当前或未来处于某类高风险情景时,可以主动调整申报策略,而不是被动挨罚。ERA5 在这里的价值不在于预测未来,而在于把"过去为什么被罚"讲清楚,从而让风险管理有据可依,也让模型的再训练有干净、长时序的真值底座。

天气风险管理:从预报时效到对冲动作

把上面两件事串起来,就是一套天气风险管理流程,关键是按预报时效分层处理,不同时效用不同数据源、对应不同动作。

日前阶段(未来 1–7 天),用 德国气象局(DWD,dataSourceId 为 ger) 预报数据驱动日前申报。德国气象局预报覆盖未来约 7 天,是做日前报量报价和次日风险预案的合适输入。这一阶段重点关注极端情景的提前预警:是否有大风导致全网新能源高出力压价、是否有高温寡照导致尖峰高价,提前决定申报曲线的激进或保守基调,并对可调资源(储能、可中断负荷、辅助服务)做预案。

日内滚动阶段,随着预报时效缩短、不确定性收窄,用最新一轮 ger 预报做滚动修正,把申报量向收窄后的分布中枢靠拢,减少不必要的偏差敞口。爬坡事件的临近识别尤其重要,一次未被预警的风电爬坡,可能在十几分钟内造成大额实时偏差,远比稳态时段的小误差更伤利润。

事后复盘阶段,回到 ERA5。用再分析数据复盘"昨天那场罚款到底是预报错了、模型错了,还是策略错了",把新的天气情景补进规律库。这个闭环跑得越勤,规律库越厚,未来同类情景下的考核成本就越低。这就是天气风险管理的复利:预报负责管住未来的敞口,再分析负责把过去的教训变成可复用的资产。

在运梦气象 API 上手

南京运梦科技的运梦气象 API 把上述两类数据统一在一个接口下:历史规律用 ERA5(dataSourceId 为 era5),短期预报用德国气象局(dataSourceId 为 ger,覆盖未来约 7 天)。两者请求体结构完全一致,便于在"预报申报—事后复盘"之间无缝切换。

接口为 POST /api/energy-weather/search/weather/action/downloadSync,请求体是 JSON,必填 timezone(时区偏移,东八区填 "8"),时间格式为 yyyy-MM-dd HH:mm。响应是统一 JSON envelope,用 resp.json() 解析后取 data 下的 timeList 与各字段数组,字段与时间一一对应。

import requests

URL = "https://console.yun-meng.top/api/energy-weather/search/weather/action/downloadSync"
HEADERS = {
    "Authorization": "Bearer sk-your-api-key",
    "Content-Type": "application/json",
}

def fetch(data_source_id, fields, stime, etime, lat=32.03253, lon=117.35184):
    body = {
        "dataSourceId": data_source_id,   # "era5" 历史 / "ger" 德国气象局预报
        "lat": lat,
        "lon": lon,
        "stime": stime,                   # "yyyy-MM-dd HH:mm"
        "etime": etime,
        "timezone": "8",                  # 必填,时区偏移,东八区
        "fields": fields,
    }
    resp = requests.post(URL, headers=HEADERS, json=body, timeout=60)
    result = resp.json()                  # 统一 JSON envelope
    if not result["success"]:
        raise RuntimeError(result["msg"])
    return result["data"]                 # {timeList, rsds, tas, ...}

# 1) 用德国气象局预报做日前/日内报量报价(光伏辐照 + 配套气象)
fc = fetch("ger",
           ["rsds", "dni", "dhi", "tas", "hurs"],
           "2026-06-09 00:00", "2026-06-15 23:00")
print("预报点数:", len(fc["timeList"]), "首条 GHI:", fc["rsds"][0])

# 2) 用 ERA5 历史回溯同点位规律,标定偏差订正与申报策略
hist = fetch("era5",
             ["rsds", "dni", "dhi", "tas"],
             "2023-01-01 00:00", "2025-12-31 23:00")
print("历史样本:", len(hist["timeList"]), "条")

风电场景把字段换成 ["u100", "v100", "ws", "wd", "tas"],由 100 米风分量派生轮毂高度风速再接功率曲线即可。拿到 ger 预报序列后接报量报价的分位数优化,拿到 ERA5 历史序列后做情景聚类与偏差订正,两端共用同一套字段口径,复盘到申报的链路就闭合了。

收尾

现货市场没有取消天气的不确定性,只是把它明码标价了。负荷、电价、出力都被同一批气象变量驱动,报量报价是对预测分布在考核规则下的最优化,偏差考核的罚款里藏着可被 ERA5 量化的天气规律。把德国气象局预报用于管住未来的申报敞口、把 ERA5 用于把过去的教训沉淀成规律库,让报价决策有分布、风险管理有闭环,才是新能源在现货市场里把气象因素从成本项做成能力项的现实路径。

常见问题

电力现货报量报价应该直接报功率预测的点预测吗?

不应该。点预测(P50)给的是期望值,而申报决策要的是在偏差考核惩罚结构下的最优期望收益。正确做法是用预测分布(至少 P10/P50/P90),在考核规则定义的惩罚结构下做期望收益最优化;当某时段价格高或惩罚不对称(少发与多发罚得不一样)时,最优申报量会系统性偏离 P50,向惩罚更轻的一侧移动。

新能源偏差考核的罚款能提前预测吗?

长期看偏差考核罚款不是随机噪声,而是有结构、可被气象规律解释的。用 ERA5 历史再分析把实际出力、申报曲线、考核结算逐时对齐并按天气情景聚类后,能找出系统性偏差的天气根因(如晴空辐照分钟级波动、风电爬坡事件、低温高湿结霜),沉淀成"情景—误差订正—申报偏移量"查找表,从而在判断进入高风险情景时主动调整申报策略。

风功率预测为什么必须用 100 米风速而不是 10 米风速?

因为风电出力对轮毂高度风速近似呈三次方关系,风速预报哪怕只差 1 m/s,出力误差也可能放大到两位数百分比。轮毂高度更接近 100 米,因此功率预测要用 u100/v100 派生的 100 米风速,而不是 10 米的 uas/vas。

日前申报和事后复盘分别该用哪个数据源?

日前到日内阶段(未来约 7 天)用德国气象局预报(dataSourceId 为 ger)驱动申报与滚动修正;事后复盘用 ERA5 历史再分析(dataSourceId 为 era5)回溯"罚款到底是预报错、模型错还是策略错"。在运梦气象 API 上两者请求体结构完全一致,便于在预报申报与事后复盘之间无缝切换。

负荷预测为什么要同时用气温和相对湿度?

因为单看干球温度预测负荷往往不够。夏季制冷负荷对气温近似呈非线性上凸关系,超过阈值后每升高一度负荷增量明显放大,而相对湿度会通过体感温度进一步放大空调负荷,所以需要把 tas(气温)和 hurs(相对湿度)一起喂进负荷模型。

参考与延伸阅读

  • Hersbach, H., Bell, B., Berrisford, P., Hirahara, S., Horányi, A., Muñoz-Sabater, J., 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
  • Eaton, B., Gregory, J., Drach, B., Taylor, K., Hankin, S., Caron, J., et al. NetCDF Climate and Forecast (CF) Metadata Conventions. CF Conventions Community. https://cfconventions.org/cf-conventions/cf-conventions.html
  • Zängl, G., Reinert, D., Rípodas, P., & Baldauf, M. (2015). The ICON (ICOsahedral Non-hydrostatic) modelling framework of DWD and MPI-M: Description of the non-hydrostatic dynamical core. Quarterly Journal of the Royal Meteorological Society, 141(687), 563–579. https://doi.org/10.1002/qj.2378
  • International Electrotechnical Commission. (2022). IEC 61400-12-1:2022 Wind energy generation systems – Part 12-1: Power performance measurements of electricity producing wind turbines (Ed. 3.0). IEC. https://webstore.iec.ch/en/publication/68499