☰
如何评估AI天气模型:Earth2Studio CRPS、RMSE与Scorecard评分完全指南
2026/10/14 17:51:40 网站建设 项目流程
  • 人工智能
  • 大模型
  • 深度学习
  • 科学计算
  • 科研

【免费下载链接】earth2studio

Open-source deep-learning framework for exploring, building and deploying AI weather/climate workflows.

项目地址:https://gitcode.com/gh_mirrors/ea/earth2studio
点击查看免费下载

Earth2Studio是 NVIDIA 开源的深度学习框架,用于构建和部署 AI 天气/气候工作流。本文带你从零开始掌握它的模型评估体系:看懂CRPS与RMSE两大核心指标,并学会用自带的Scorecard评分配方对 AI 天气模型做完整、可复现的技能评估——即使你是第一次接触气象模型验证,也能照着一步步完成。

1️⃣ 为什么需要一套标准的 AI 天气模型评估方法?

AI 天气模型(如 FCN、GraphCast、Aurora 等)跑出一个预报结果后,真正的问题来了:它预报得准不准?比传统数值模式强在哪?预报 3 天和 14 天分别有多可靠?

手动写脚本对比预报和再分析数据费时费力,而且不同人用的网格、权重、区域口径不一致,结果没法横向比较。Earth2Studio 的解法是把评估变成可配置、可复现的流水线:

  • 📦统计指标库earth2studio/statistics/:CRPS、RMSE、LSD、ACC 等现成指标,统一接口,支持加权与分布式计算
  • 🧪评估配方(Eval Recipe)recipes/eval/:预下载数据 → 分布式推理 → 评分 → 生成报告的完整流程
  • 📊Scorecard 评分卡recipes/eval/scorecard/:所有模型跑同一套标准 campaign,保证横向可比

核心思路:同一个模型、同一套初始条件、同一套验证数据(ERA5 再分析)、同一套指标,才能公平对比技能。

2️⃣ 指标全家福:CRPS、RMSE 和其他常用评分

Earth2Studio 在 earth2studio/statistics/init.py 中统一导出了全部指标,每个指标都是独立的源文件,可以按需取用:

指标类型方向源码文件
RMSE/MAE误差类越低越好rmse.py
CRPS(连续排序概率评分)概率/集合越低越好crps.py
ACC(异常相关系数)确定性技能越高越好acc.py
LSD(对数谱距离)功率谱误差越低越好lsd.py
Energy Score概率/集合越低越好energy_score.py
Brier Score二值概率越低越好brier.py
Rank Histogram(排序直方图)集合可靠性越平越好rank.py
lat_weight(余弦纬度权重)加权工具—weights.py

官方 Scorecard 页面默认把rmse、mae、lsd、ensemble_mean_mse、crps、ensemble_variance视为"越低越好",acc为"越高越好"(见 docs/scorecard/config/default.md)。看图表前先确认指标方向,是新手最常踩的坑。

3️⃣ CRPS 详解:衡量概率预报质量的黄金指标

什么是 CRPS?

CRPS(Continuous Ranked Probability Score,连续排序概率评分)用来回答一个问题:"模型给出的一整套可能性(集合预报),离真实情况有多近?"它的定义是对预报的经验累积分布函数 F(x) 与实际观测指示函数做积分:

CRPS = ∫ [F(x) - 1(x - y)]² dx

其中 F 是集合成员构成的经验 CDF,y 是真实观测。直觉上:

  • 集合越集中且越覆盖观测值,CRPS 越小
  • 集合均值很准但离散度(spread)严重偏大或偏小,CRPS 都会变差
  • 因此 CRPS 同时惩罚偏差、欠离散和过离散,比单纯看集合均值的 RMSE 更严格

Earth2Studio 的 CRPS 实现要点

实现位于 earth2studio/statistics/crps.py,使用"精确 CDF 法"(对排序后的成员做分段积分,见 crps.py 中的_crps_from_empirical_cdf),关键参数:

参数作用
ensemble_dimension集合成员所在维度名(如ensemble),CRPS 沿它归约
reduction_dimensions额外要平均掉的维度(如lat、lon),可配余弦纬度权重
fair设为True时计算"公平(无偏)CRPS",消除成员数带来的系统性偏差,跨模型对比时建议开启
crps_metric = crps( ensemble_dimension="ensemble", reduction_dimensions=["lat", "lon"], weights=lat_weight, # 余弦纬度加权,避免高纬度被过度放大 )

💡小贴士:Scorecard 在线评分产出的crps__{变量}就是公平 CRPS(fair CRPS),不同集合大小的模型之间可以直接比较。

4️⃣ RMSE 详解:最直观的误差度量

RMSE(均方根误差)衡量预报场与真实场逐格点偏差的大小,是确定性预报最经典的技能指标。Earth2Studio 的 rmse.py 提供了几个很实用的开关:

参数作用
reduction_dimensions沿哪些维度归约(如["lat", "lon"]得全球 RMSE)
weights纬度加权张量,配合纬度余弦权重使用
batch_update数据以批次流式到达时,输出累积 RMSE(内部对运行 MSE 开方)
ensemble_dimension指定后先取集合均值再算 RMSE,用于评价集合平均预报

两个使用细节值得注意(来自 recipes/eval/README.md):

  1. 配reduction_dimensions: [lat, lon]得到的是每个 (初始时刻, 预报时次) 一个 RMSE 值;要得到跨所有初始时刻的聚合 RMSE,需要sqrt(mean(rmse²)),报告的report.py会自动处理这一步。
  2. 同文件里还有mae(平均绝对误差)、skill_spread、spread_skill_ratio(离散度-技巧比),常与 RMSE 搭配诊断集合预报的校准状况。

5️⃣ Scorecard 评分卡:所有模型同一套考卷

统一 campaign 是什么?

Scorecard(recipes/eval/scorecard/README.md)的核心设计:每个参评模型都跑完全相同的标准战役——

  • ⏱️48 个初始条件(IC):全年每月 4 个,分别在 00/06/12/18 UTC 时次
  • 📅14 天预报时效(56 步 × 6 小时)
  • 🌍ERA5 再分析验证:通过 ARCO_ERA5 数据源取"真值"
  • 🗺️全球 + 区域分割:区域定义统一在 cfg/regions/standard.yaml
  • 📉两条基线对比:persistence(持续性预报)与 climatology(气候态)

同一考卷下,分数才能横向比较。已内置的模型 campaign 配置包括 FCN3、FCN、Aurora、Aurora 1.5 Ensemble、Atlas CRPS、GraphCast、FengWu、Fuxi、Pangu、DLWP 等,都在 recipes/eval/scorecard/cfg/campaign/ 目录下,每个文件自包含、开箱即用。

在线评分:把 12 TB 压到几百 MB

大规模 campaign 的最大瓶颈是存储:50 个成员 × 730 个 IC × 14 天的原始预报场可达 ~170 TB,而最终分数只有 ~20 MB。Earth2Studio 的在线评分(scoring.mode: online)在推理循环内直接把每帧预报压成"充分统计量"写入stats.zarr,再从中导出scores.zarr,从不落盘原始预报(recipes/eval/README.md)。

以 Atlas CRPS 的 campaign 为例(atlas_crps_2025_scorecard.yaml):

scoring: mode: online lat_weights: true # 余弦纬度加权 online: members_per_rank: 2 # CRPS 成员间交换留在节点内 NVLink mae: true lsd: true

在线评分自动产出的指标包括:mse__{变量}、ensemble_mean_mse__{变量}(集合均值误差)、ensemble_variance__{变量}(集合离散度²)、crps__{变量}(公平 CRPS)、rank_reliability__{变量}(排序可靠性)、bias__{变量}与corr__{变量}(recipes/eval/README.md)。

6️⃣ 一键跑起来:Scorecard 三步走

在装有 GPU 和配方环境的节点上,整个流程只需三条命令(recipes/eval/scorecard/README.md):

# 1. 运行 campaign:predownload -> infer(在线评分) -> score/prune python run_scorecard.py fcn3_2025_scorecard # 2. 导出分数 JSON python export_scores.py fcn3 --docs # 3. 重新生成文档评分页 python ../../../docs/generate_scorecard.py

每个阶段都支持resume: true断点续跑,大 campaign 可以跨多次队列分配逐步推进。如果你想自己搭一套 campaign(而不是用 Scorecard 的模板),底层入口是 eval 配方的四件套(recipes/eval/):

python predownload.py campaign=my_campaign # 预下载 IC 与验证数据 python main.py campaign=my_campaign # 分布式推理(torchrun 扩展) python score.py campaign=my_campaign # 评分(离线或在线模式) python report.py campaign=my_campaign # 生成 markdown 报告

campaign 配置只需覆盖差异项,三层配置结构为:基础层cfg/default.yaml+ 模型层cfg/model/*.yaml+ 战役层cfg/campaign/*.yaml(recipes/eval/README.md)。

报告长什么样?

report.py生成一个自包含的report/目录:report.md主报告 +figures/曲线图 +tables/scores_summary.csv(recipes/eval/README.md)。可配置的章节类型包括:

章节内容
summary_table关键预报时次(1/3/5/7/10/14 天)× 关键变量的分数总表
lead_time_curves指标随预报时次变化的技能曲线,可按季节(DJF/MAM/JJA/SON)分组
ic_heatmap时间 × 预报时次的 RMSE/CRPS 热力图,快速定位"哪次初始条件预报差"
spread_skill离散度-技巧比诊断(基于ensemble_mean_mse+ensemble_variance)
visualization预报场 vs 真实场地图(需保留原始预报数据)

例如 Atlas CRPS 的报告配置在 atlas_crps_2025_scorecard.yaml 的report段:汇总表选t2m, z500, u10m, t850, msl五个变量、六个预报时次,并附带季节分解与 IC 热力图。

7️⃣ 进阶技巧:区域评分与事件评分

区域评分:在scoring.regions中声明任意经纬度方框即可在全球评分之外叠加区域分,例如(recipes/eval/README.md):

scoring: regions: global: null # 全球 europe: {lat: [35, 75], lon: [-12.5, 42.5]} # 欧洲框 extra_tropics: # 多个框取并集 - {lat: [20, 90]} - {lat: [-90, -20]}

事件评分:想专门考察模型在某次极端天气(如某次风暴)中的表现,用scoring.events把"时间窗口 + 区域"绑定为一个命名事件即可。Scorecard 自带模板:StormCast 的 2025 严重对流事件 campaign(stormcast_2025_events.yaml),每个事件导出独立的技能曲线并与全年曲线对照。

⚠️注意:离线评分可以事后补区域(重跑score.py即可);但在线评分的区域掩码是烧进累积权重里的,区域必须在运行前确定。

8️⃣ 结果解读避坑指南

结合 Scorecard 的标准考卷,给你一份新手解读清单:

  1. 先认方向:RMSE、MAE、LSD、CRPS、ensemble_variance越低越好;ACC 越高越好。混淆方向会得出完全相反的结论。
  2. 看技能曲线而非单点:lead_time_curves里曲线与 persistence / climatology 基线的差距,才是模型"真实增值"。14 天外多数模型都会逼近气候态。
  3. CRPS 要看公平版本:不同模型集合成员数不同(如 16 vs 50),用fair: True(公平 CRPS)消除成员数偏差后才可比。
  4. 诊断集合校准:spread_skill_ratio接近 1 说明离散度与误差匹配;明显 <1 说明集合"过于自信",>1 说明过于发散。配合rank_reliability(排序可靠性)一起看。
  5. 区域分 ≠ 全球分:热带、中纬度的技能常常差异很大,regions分割能暴露全球平均数掩盖的短板;LSD 是谱指标,仅在网格全框下有值(区域框内为 NaN,属正常)。
  6. 分数全为 NaN 时:先检查 IC 日期是否落在数据源覆盖窗口内——这是评估配方文档特别强调的第一排查项(recipes/eval/README.md)。

9️⃣ 小结

你想做的事去哪里
理解单个指标的实现earth2studio/statistics/(crps.py、rmse.py、acc.py…)
指标接口与自定义指标docs/userguide/components/statistics.md
自己搭评估 campaignrecipes/eval/README.md(predownload → main → score → report)
标准横向对比recipes/eval/scorecard/README.md + cfg/campaign/ 各模型配置
区域/事件/在线评分细节recipes/eval/README.md 的 Scoring 章节

一句话总结:用 RMSE 看确定性误差,用 CRPS 看概率预报质量,用 Scorecard 的统一 campaign 保证结论可复现、可对比——这就是 Earth2Studio 评估 AI 天气模型的完整方法论。现在,挑一个cfg/campaign/里的配置文件,跑一次run_scorecard.py吧 🚀

  • 人工智能
  • 大模型
  • 深度学习
  • 科学计算
  • 科研

【免费下载链接】earth2studio

Open-source deep-learning framework for exploring, building and deploying AI weather/climate workflows.

项目地址:https://gitcode.com/gh_mirrors/ea/earth2studio
点击查看免费下载

相关推荐

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询