一文讲透气象预报检验指标:TS评分、命中率、虚警率……(附Python实战)
2026/5/28 10:17:39 网站建设 项目流程

文章目录

    • 1. 二分类预报的“四格表”
    • 2. 核心指标大盘点
      • 2.1 准确率(Accuracy)
      • 2.2 TS评分(Threat Score, CSI)
      • 2.3 命中率 POD (Probability of Detection)
      • 2.4 虚警率 FAR (False Alarm Ratio)
      • 2.5 漏报率 MAR (Miss Alarm Ratio)
      • 2.6 预报偏差 Bias
      • 2.7 ETS公平技巧评分 (Equitable Threat Score)
      • 2.8 HSS海德克技巧评分 (Heidke Skill Score)
    • 3. Python实战:一键计算所有指标
    • 4. 业务中多指标怎么组合看?
    • 5. 小结

前言
在气象预报、短临降水预测、强对流天气预报等领域,评价一个预报系统好坏,不是看一眼“准不准”就完了。尤其对于降水有无、雷暴有无这类二分类事件,业界有一整套约定俗成的检验指标,比如大家经常听到的TS评分(Threat Score)命中率(POD)虚警率(FAR)ETS公平评分等等。
如果你正在做气象智能预报、机器学习后处理,或是跑WRF/数值模式结果检验,这篇文章能帮你把这些指标彻底理清,并直接拿去用(文末有完整Python代码)。

1. 二分类预报的“四格表”

任何检验都从一张列联表(Contingency Table)开始。假设我们要检验“未来1小时有无降水”(≥0.1mm为有),将实况和预报做比对:

实况:有实况:无
预报:有命中 (a)空报 (b)
预报:无漏报 ©正确否定 (d)
  • a (Hit):报有,且确实下了。
  • b (False Alarm):报了有,但没下——空报。
  • c (Miss):报了无,但下了——漏报。
  • d (Correct Negative):报了无,确实没下——无事发生的安宁。

所有常用指标都由这四个数组合而来。有了这张表,我们开始“盘”指标。


2. 核心指标大盘点

2.1 准确率(Accuracy)

[
ACC = \frac{a+d}{a+b+c+d}
]
缺点非常致命:当事件本身稀少时(比如暴雨网格点占1%),就算全部报“无”,准确率也能达到99%,毫无意义。气象中很少单独用它。

2.2 TS评分(Threat Score, CSI)

TS评分,学名Critical Success Index,也叫威胁评分,是气象业务最常用的“硬指标”之一:
[
TS = \frac{a}{a+b+c}
]

  • 含义:在所有“预报有”或“实况有”的事件里,正确命中的比例。
  • 范围:0~1,越接近1越好。
  • 特点:不考虑“正确否定(d)”,因此不会被大量“无事件”样本稀释,更专注于预报有事件的真实水平。
  • 注意:TS评分对命中率空报一视同仁,而且受事件频率影响,不可跨季节、跨区域直接横向比较。完美TS=1,但无事件时分母为0,无定义。

📌业务小贴士:通常降水TS评分为0.2~0.4属于还不错,短临强对流能到0.3以上就可以发文章了,但要根据具体阈值来。

2.3 命中率 POD (Probability of Detection)

[
POD = \frac{a}{a+c}
]

  • 含义:实况出现了,你报出来的概率。完美为1。
  • 弥补了TS对漏报的“粗放”,但单独看POD可能会很高,如果你“天天报有”,那a很大,c很小,POD接近1,但空报会爆炸。

2.4 虚警率 FAR (False Alarm Ratio)

[
FAR = \frac{b}{a+b}
]

  • 含义:你只要报了“有”,其中多少是空报。完美为0。
  • 与POD是一对博弈关系,提高POD往往以增加FAR为代价。

⚠️ 容易混淆的概念:False Alarm Rate也叫POFD= b/(b+d),表示无事件时你乱报的概率。本文FAR特指气象常用的“空报率”。

2.5 漏报率 MAR (Miss Alarm Ratio)

[
MAR = \frac{c}{a+c} = 1 - POD
]
实况发生了,你却漏掉的比例。

2.6 预报偏差 Bias

[
Bias = \frac{a+b}{a+c}
]

  • Bias >1:预报发生的次数比实况多,过度预报,容易空报。
  • Bias <1:预报次数少于实况,过于保守,容易漏报。
  • Bias = 1 表示预报次数和实况次数一致(并不代表完全准确,只是总数相当)。

2.7 ETS公平技巧评分 (Equitable Threat Score)

TS评分的一个缺陷是未排除随机命中的贡献。ETS则扣除了随机期望:
[
a_r = \frac{(a+b)(a+c)}{n}, \quad n=a+b+c+d
]
[
ETS = \frac{a - a_r}{a+b+c - a_r}
]

  • 范围:-1/3 ~ 1,0表示无技巧。
  • 优点:更公平,可对不同样本量进行对比。强对流、降水概率预报的“标准答案”之一。

2.8 HSS海德克技巧评分 (Heidke Skill Score)

也是常用技巧评分,考虑了a、b、c、d全部信息:
[
HSS = \frac{2(ad - bc)}{(a+c)(c+d)+(a+b)(b+d)}
]
完美为1,0表示无技巧,负值比随机还差。


3. Python实战:一键计算所有指标

下面给出一个函数,输入四个数,直接返回一个包含TS、POD、FAR、Bias、ETS、HSS等字典。可以直接用在你的后处理脚本里。

defcalc_verification(a,b,c,d):""" 计算二分类预报检验指标 :param a: 命中 Hit :param b: 空报 False Alarm :param c: 漏报 Miss :param d: 正确否定 Correct Negative :return: dict """n=a+b+c+d metrics={}# 准确率metrics['ACC']=(a+d)/nifn>0elsefloat('nan')# TS评分 (CSI)denom_ts=a+b+c metrics['TS']=a/denom_tsifdenom_ts>0elsefloat('nan')# 命中率 PODdenom_pod=a+c metrics['POD']=a/denom_podifdenom_pod>0elsefloat('nan')# 虚警率 FAR (空报率)denom_far=a+b metrics['FAR']=b/denom_farifdenom_far>0elsefloat('nan')# 漏报率 MARmetrics['MAR']=c/denom_podifdenom_pod>0elsefloat('nan')# 预报偏差 Biasmetrics['Bias']=(a+b)/denom_podifdenom_pod>0elsefloat('nan')# ETS公平TSifn>0anddenom_ts>0:ar=(a+b)*(a+c)/n metrics['ETS']=(a-ar)/(denom_ts-ar)ifdenom_ts!=arelsefloat('nan')else:metrics['ETS']=float('nan')# HSSifn>0:num=2*(a*d-b*c)denom_hss=(a+c)*(c+d)+(a+b)*(b+d)metrics['HSS']=num/denom_hssifdenom_hss!=0elsefloat('nan')else:metrics['HSS']=float('nan')returnmetrics# 示例:假设有1000个格点/样本a,b,c,d=80,30,20,870res=calc_verification(a,b,c,d)fork,vinres.items():print(f"{k}:{v:.3f}")

输出如下:

ACC: 0.950 TS: 0.615 POD: 0.800 FAR: 0.273 MAR: 0.200 Bias: 1.100 ETS: 0.517 HSS: 0.674

解读:准确率虽高,但那是d多造成的;TS=0.615算是相当不错;POD 0.8说明80%的实况降水都被捕捉到;FAR 0.273代表报了四次有降水,大约有一次是空报;偏差1.1稍微有点“偏向多报”,总体可以接受。


4. 业务中多指标怎么组合看?

  • TS + Bias:经典组合,TS看准确,Bias看倾向。TS高而Bias远离1,可能是有系统的空报/漏报。
  • POD + FAR:直接反映命中与虚警的平衡。在降水检验图上常画POD-FAR曲线(类似ROC)。
  • ETS:当你需要在不同样本、不同季节间比较模型技巧,用ETS比TS更公平。
  • HSS:同样适合公平比较,尤其是在“全报无”也能高分的情景下,HSS会把这种懒惰模型打回原形。

实际检验往往还用到降水量级分级检验(小雨、中雨、大雨……),对每一级降水分别算TS等。本质上还是这个框架。


5. 小结

写气象预报算法时,别再说“我模型准确率90%”这种容易被怼的话了。老老实实把列联表算出来,一票指标跑一遍。尤其TS评分,是气象入门的必修课。
上面这段Python代码,你可以封装到自己的检验模块里,搭配pandas批量计算不同时段、不同站点的指标,一键出图,非常实用。

希望这篇文章帮你理清了 TS、POD、FAR、ETS…… 那些眼花缭乱的符号。下一步,拿起你的预报场和观测场,去算一算模型的“真实水平”吧!

📊觉得有用?点个赞、收藏,防丢备用。
(气象检验系列持续更新,下次聊聊概率预报的Brier评分和可靠性图)

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

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

立即咨询