文章目录1. 二分类预报的“四格表”2. 核心指标大盘点2.1 准确率Accuracy2.2 TS评分Threat Score, CSI2.3 命中率 POD (Probability of Detection)2.4 虚警率 FAR (False Alarm Ratio)2.5 漏报率 MAR (Miss Alarm Ratio)2.6 预报偏差 Bias2.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{ad}{abcd}]缺点非常致命当事件本身稀少时比如暴雨网格点占1%就算全部报“无”准确率也能达到99%毫无意义。气象中很少单独用它。2.2 TS评分Threat Score, CSITS评分学名Critical Success Index也叫威胁评分是气象业务最常用的“硬指标”之一[TS \frac{a}{abc}]含义在所有“预报有”或“实况有”的事件里正确命中的比例。范围0~1越接近1越好。特点不考虑“正确否定(d)”因此不会被大量“无事件”样本稀释更专注于预报有事件的真实水平。注意TS评分对命中率和空报一视同仁而且受事件频率影响不可跨季节、跨区域直接横向比较。完美TS1但无事件时分母为0无定义。业务小贴士通常降水TS评分为0.2~0.4属于还不错短临强对流能到0.3以上就可以发文章了但要根据具体阈值来。2.3 命中率 POD (Probability of Detection)[POD \frac{a}{ac}]含义实况出现了你报出来的概率。完美为1。弥补了TS对漏报的“粗放”但单独看POD可能会很高如果你“天天报有”那a很大c很小POD接近1但空报会爆炸。2.4 虚警率 FAR (False Alarm Ratio)[FAR \frac{b}{ab}]含义你只要报了“有”其中多少是空报。完美为0。与POD是一对博弈关系提高POD往往以增加FAR为代价。⚠️ 容易混淆的概念False Alarm Rate也叫POFD b/(bd)表示无事件时你乱报的概率。本文FAR特指气象常用的“空报率”。2.5 漏报率 MAR (Miss Alarm Ratio)[MAR \frac{c}{ac} 1 - POD]实况发生了你却漏掉的比例。2.6 预报偏差 Bias[Bias \frac{ab}{ac}]Bias 1预报发生的次数比实况多过度预报容易空报。Bias 1预报次数少于实况过于保守容易漏报。Bias 1 表示预报次数和实况次数一致并不代表完全准确只是总数相当。2.7 ETS公平技巧评分 (Equitable Threat Score)TS评分的一个缺陷是未排除随机命中的贡献。ETS则扣除了随机期望[a_r \frac{(ab)(ac)}{n}, \quad nabcd][ETS \frac{a - a_r}{abc - a_r}]范围-1/3 ~ 10表示无技巧。优点更公平可对不同样本量进行对比。强对流、降水概率预报的“标准答案”之一。2.8 HSS海德克技巧评分 (Heidke Skill Score)也是常用技巧评分考虑了a、b、c、d全部信息[HSS \frac{2(ad - bc)}{(ac)(cd)(ab)(bd)}]完美为10表示无技巧负值比随机还差。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 nabcd metrics{}# 准确率metrics[ACC](ad)/nifn0elsefloat(nan)# TS评分 (CSI)denom_tsabc metrics[TS]a/denom_tsifdenom_ts0elsefloat(nan)# 命中率 PODdenom_podac metrics[POD]a/denom_podifdenom_pod0elsefloat(nan)# 虚警率 FAR (空报率)denom_farab metrics[FAR]b/denom_farifdenom_far0elsefloat(nan)# 漏报率 MARmetrics[MAR]c/denom_podifdenom_pod0elsefloat(nan)# 预报偏差 Biasmetrics[Bias](ab)/denom_podifdenom_pod0elsefloat(nan)# ETS公平TSifn0anddenom_ts0:ar(ab)*(ac)/n metrics[ETS](a-ar)/(denom_ts-ar)ifdenom_ts!arelsefloat(nan)else:metrics[ETS]float(nan)# HSSifn0:num2*(a*d-b*c)denom_hss(ac)*(cd)(ab)*(bd)metrics[HSS]num/denom_hssifdenom_hss!0elsefloat(nan)else:metrics[HSS]float(nan)returnmetrics# 示例假设有1000个格点/样本a,b,c,d80,30,20,870rescalc_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多造成的TS0.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评分和可靠性图