一文讲透气象预报检验指标:TS评分、命中率、虚警率……(附Python实战)


前言
在气象预报、短临降水预测、强对流天气预报等领域,评价一个预报系统好坏,不是看一眼“准不准”就完了。尤其对于降水有无、雷暴有无这类 二分类事件,业界有一整套约定俗成的检验指标,比如大家经常听到的 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)

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

2.2 TS评分(Threat Score, CSI)

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

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

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

2.3 命中率 POD (Probability of Detection)

P O D = a a + c POD = \frac{a}{a+c} POD=a+ca

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

2.4 虚警率 FAR (False Alarm Ratio)

F A R = b a + b FAR = \frac{b}{a+b} FAR=a+bb

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

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

2.5 漏报率 MAR (Miss Alarm Ratio)

M A R = c a + c = 1 − P O D MAR = \frac{c}{a+c} = 1 - POD MAR=a+cc=1POD
实况发生了,你却漏掉的比例。

2.6 预报偏差 Bias

B i a s = a + b a + c Bias = \frac{a+b}{a+c} Bias=a+ca+b

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

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

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

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

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

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


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

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

def calc_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) / n if n > 0 else float('nan')
    
    # TS评分 (CSI)
    denom_ts = a + b + c
    metrics['TS'] = a / denom_ts if denom_ts > 0 else float('nan')
    
    # 命中率 POD
    denom_pod = a + c
    metrics['POD'] = a / denom_pod if denom_pod > 0 else float('nan')
    
    # 虚警率 FAR (空报率)
    denom_far = a + b
    metrics['FAR'] = b / denom_far if denom_far > 0 else float('nan')
    
    # 漏报率 MAR
    metrics['MAR'] = c / denom_pod if denom_pod > 0 else float('nan')
    
    # 预报偏差 Bias
    metrics['Bias'] = (a + b) / denom_pod if denom_pod > 0 else float('nan')
    
    # ETS公平TS
    if n > 0 and denom_ts > 0:
        ar = (a + b) * (a + c) / n
        metrics['ETS'] = (a - ar) / (denom_ts - ar) if denom_ts != ar else float('nan')
    else:
        metrics['ETS'] = float('nan')
    
    # HSS
    if n > 0:
        num = 2 * (a*d - b*c)
        denom_hss = (a+c)*(c+d) + (a+b)*(b+d)
        metrics['HSS'] = num / denom_hss if denom_hss != 0 else float('nan')
    else:
        metrics['HSS'] = float('nan')
    
    return metrics

# 示例:假设有1000个格点/样本
a, b, c, d = 80, 30, 20, 870
res = calc_verification(a, b, c, d)
for k, v in res.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评分和可靠性图)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值