ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

NSE与R²到底有啥区别?水文模型评价指标深度解析

NSE与R²到底有啥区别?水文模型评价指标深度解析 我从一个非常具体的场景说起帮人审一篇水文模型的稿子时模型率定期NSE是0.82检验期掉到0.63但同一个模型在论文里配的可决系数R²是0.88。作者在正文里写模型预测精度良好纳什系数与决定系数均满足要求。懂行的人一眼就能看出这段话说得很别扭——这两个指标根本不是一回事混着写只会让审稿人怀疑你有没有真正理解自己在用什么。这些年我见过不少类似的写法有人把NSE算出来写在R²的位置有人在对比实验里只用R²评价模型却绝口不提系统偏差还有人把两者直接划等号。这篇东西就想把纳什效率系数与可决系数之间的差异彻底讲清楚包括它们的数学形式、各自的敏感点、在什么条件下会趋同、什么条件下会分道扬镳以及实际建模时到底该怎么选、怎么汇报。1. 表面都是1减或平方底层逻辑完全不同1.1 先从公式看起一个分母相同一个分母各异纳什效率系数Nash-Sutcliffe EfficiencyNSE的标准形式是NSE 1 - Σ(Qobs - Qsim)² / Σ(Qobs - Qobs_mean)²可决系数coefficient of determinationR²的标准形式是R² [Σ(Qobs - Qobs_mean)(Qsim - Qsim_mean)]² / [Σ(Qobs - Qobs_mean)² · Σ(Qsim - Qsim_mean)²]第一眼看过去两个式子都长在离差平方的基础上所以很多人觉得它们是一回事。但你仔细拆一下NSE的分子是逐点残差平方和直接把每个时间步上模拟值到底偏离观测值多少拎出来算惩罚。分母是观测值本身的变异程度——也就是拿观测均值做预测时误差会有多大。R²的分子是两个变量离差乘积之和的平方衡量的是两者一起偏离各自均值的同步程度。分母把观测离差平方和与模拟离差平方和乘在一起本质上是一个归一化后的相关程度。用一句话概括NSE量的是绝对位置上的重合程度R²量的是波动形态上的同步程度。前者要求模拟值在数值上贴得住观测值后者只关心模拟值是否跟着观测值一起涨一起落。1.2 为什么模型圈里常把这两个指标混着用水文模型、陆面过程模型、水质模型这些领域里NSE和R²几乎总会同时出现在率定报告里。原因是历史习惯早期文献里Moriasi等人给出过NSE的分级标准同时很多统计软件默认输出R²于是大家顺手把两个都贴上。这本身没问题问题出在表述上——不少人在讨论模型性能时把高R²当作高NSE的依据或者在两个指标数值不一致时选好看的那个写在摘要里。我在实际工作中见过一个极端情况某个模型模拟流量过程R²达到0.95但NSE只有0.3。当时做汇报的同事很困惑觉得相关性这么高为什么纳什系数这么低我给他看了散点图——模拟值和观测值的散点几乎完美落在一条直线上但那条直线的斜率是0.5截距也不为零。也就是说模拟值大约是观测值的一半多一点峰值全部矮了一截。相关性高不高高。准不准不准。这个案例就是NSE和R²差异最直观的注脚。2. 一组算例把差异摆到明面上2.1 构造数据相同观测序列两种模拟水平为了把账算明白我构造一个简单但不失代表性的场景。观测序列取8个时段的流量值单位随便m³/s或者mm都行模拟方案A做整体缩放模拟值恒等于观测值的0.8倍。模拟方案B则在观测值附近做小幅随机抖动均值尽量对齐相关性接近但略低于1。观测序列Qobs12, 18, 13, 20, 22, 16, 25, 30均值19.5方案A的模拟序列Qsim_A0.8×Qobs9.6, 14.4, 10.4, 16, 17.6, 12.8, 20, 24方案B的模拟序列Qsim_B13, 17, 14, 19, 23, 15, 26, 292.2 手算两种指标结果差异惊人先算方案A。残差Qsim_A - Qobs为-2.4, -3.6, -2.6, -4, -4.4, -3.2, -5, -6平方和等于132.08。观测离差平方和为(-7.5)²(-1.5)²(-6.5)²(0.5)²(2.5)²(-3.5)²(5.5)²(10.5)²260。于是NSE_A 1 - 132.08/260 0.492而R²_A由于Qsim_A与Qobs严格线性相关系数等于1所以R²_A 1。这就出现了一个很有说服力的对比R²是满分NSE却不到0.5按水文模拟的常规标准连合格都勉强。再算方案B。残差为1, -1, 1, -1, 1, -1, 1, -1平方和等于8。NSE_B 1 - 8/260 0.969R²_B先算Qsim_B的离差平方和。Qsim_B均值为19.5离差为-6.5, -2.5, -5.5, -0.5, 3.5, -4.5, 6.5, 9.5平方和244。观测离差与模拟离差的乘积之和为248。于是R²_B 248² / (260 × 244) 0.969两种指标在方案B里几乎相等但在方案A里一个天上一个地下。指标 | Qsim_A0.8倍缩放 | Qsim_B随机抖动±1 R² | 1.000 | 0.969 NSE | 0.492 | 0.969方案A告诉你模拟曲线和观测曲线形状完全一样只是整体矮了一截。这就像你预测气温时每天预测的趋势都对但每天都比实际低2℃。相关性挑不出毛病但逐点误差始终存在。方案B告诉你模拟值和观测值在每个时段上都贴得很近虽然残差有正有负可幅度很小这才是我们真正想要的准。2.3 算例背后的直觉R²是形状相似度NSE是数值贴合度把上面两组数据画成时间序列图会更直观方案A的两条线走势完全平行方案B的两条线几乎重合成一条。凡是在实际建模中见过这两种曲线的人立刻能理解NSE的设计哲学——它要的是两条线重合不是平行。这也是为什么NSE在模型率定过程中比R²更苛刻R²不在乎系统偏差整体偏高或偏低NSE对系统偏差深恶痛绝。模型如果有一个常数性的低估或者高估R²可以照样很高NSE却会明显掉下来。3. 系统偏差是R²的盲区却是NSE的雷区3.1 三种典型偏差场景的分解把模拟值写成观测值的线性函数是分析这个问题最方便的形式Qsim a × Qobs b场景一a1b0。完美模拟R²和NSE都等于1。场景二a0.8b0。整体低估20%形状一样R²1NSE明显偏低。场景三a1b10单位恒定平移。模拟值整体偏高10个单位R²1NSE同样会掉。场景二和场景三里的R²都不会惩罚系统偏差因为相关性衡量的中心化后的线性共变常数偏移和整体缩放都被中心化这个操作消掉了。这也是为什么只看R²选模型很容易选中一个存在显著偏差的模型。3.2 NSE的惩罚机制是怎么设计出来的NSE的分母固定是观测值围绕自身均值的离差平方和。这个分母对应的基准模型是如果我不会做任何预测那么最简单粗暴的做法就是永远预测观测均值。这个基准模型的误差平方和就是分母。NSE的含义因此非常直白你的模型误差平方和比这个永远猜均值的基准模型好多少。当NSE接近1时说明模型误差远小于天然波动当NSE接近0时说明模型效果和无脑猜均值差不多当NSE为负时说明模型误差比猜均值还大这个模型连作为基准的资格都没有。这就解释了为什么R²没有负值而NSE会有负值R²的构造决定了它的取值只会落在0到1之间而NSE的分子一旦比分母大负值就会出现。传统上很多文献把NSE0.5视为可接受NSE0.75视为良好其实就是在衡量你的模型有没有显著打败均值基准。3.3 时间序列的均值偏移和方差失真为什么重要水文模型模拟流量时如果整体水量平衡算错了比如蒸散发被高估导致产流偏低模拟时间序列的均值就会和观测均值拉开距离。这种偏差在洪水过程线、日径流过程里极其常见而且单靠R²完全看不出来。我做过一个流域模拟率定期NSE是0.71R²是0.82。单独看R²以为模型还行再看PBIAS百分偏差发现模拟径流总量比实测低18%。后来调整了产流参数NSE升到0.78R²只升到0.84。NSE的改善明显比R²大就是因为NSE能感受到均值偏移的修正R²对这个修正几乎不敏感。这也是为什么任何靠谱的模型评价报告里很少只放NSE和R²而不放PBIAS或者水量误差项。NSE、R²、PBIAS三者各管一摊NSE管逐点贴合R²管动态相关性PBIAS管总量平衡。只看前两个总量偏到哪儿去了都会漏掉。4. 从分解式看透NSE的构成它比R²多了两座大山4.1 NSE的经典三分量分解把NSE写成观测方差、模拟方差、相关系数和均值偏移的函数可以得到一个很有启发性的分解式。这里我直接给出业界常用的形式NSE 2αR - α²R² - β²其中α σsim / σobs即模拟序列标准差与观测序列标准差的比值衡量动态幅度是否一致R为模拟值与观测值的线性相关系数β (μsim - μobs) / σobs即模拟均值偏离观测均值的标准化程度。这个分解式很有用它直接暴露了NSE要同时照顾三件事相关性要够高R幅度不能失真α均值不能偏移β。对比之下R²只关心R²这一项。一个模型只要R够高R²就好看但NSE如果α明显偏离1或者β明显偏离0即使R接近1NSE照样会被拉下来。4.2 什么时候NSE会约等于R²从分解式可以反推NSER²的条件。忽略β项令NSER²得到2αR - α²R² R²解一下这个方程可以发现αR和黄R之间有一个特殊关系实际更常见的经验判断是当模拟序列与观测序列的均值几乎一致β≈0且模拟序列的方差接近观测方差α≈1时NSE就会非常接近R²。但这里有个微妙的差异R²恒为正且对α不敏感NSE对α极敏感。若模拟序列的方差被压缩比如模型把洪峰削平了α小于1NSE会明显低于R²。若模拟序列的方差被放大模型洪峰过度膨胀α大于1NSE也会掉。也就是说NSE是一种对过度保守和过度激进都会惩罚的指标而R²对这两者都无感。4.3 为什么KGE的出现和这个分解式有关当你把NSE分解成α、β、R三个分量时会发现一个尴尬NSE对均值偏移β的惩罚是二次方对方差比α的惩罚也是二次方但这两者在NSE的合成公式里权重并不直观。于是Kling-Gupta效率系数KGE出场了它直接把三个分量拆开做欧氏距离KGE 1 - sqrt[(R-1)² (α-1)² (β-1)²]KGE的思想是相关性、变异性、均值偏差三个维度各自离完美值1有多远合起来就是总误差。从NSE到KGE的演进本质上就是建模人发现一个单值指标没法面面俱到不如把维度拆开的过程。所以你现在再看NSE和R²的差异不应该只停留在它们计算公式不一样这个层面而应该意识到NSE已经把R²包含进去了但它额外要求幅度和均值都对齐。这就是为什么在模型率定期NSE的变化往往比R²更能反映参数调整的实际效果。5. 实际建模中的选型顺序与汇报红线5.1 不同场景下的指标优先级不同用途的模型对NSE和R²的侧重不完全一样。我按实际经验给出一个参考顺序洪水预报NSE优先甚至要配合峰值误差和峰现时间误差一起看。洪水过程最怕削峰或者滞后这两个问题R²完全看不出来。水量平衡/长期径流模拟NSE和PBIAS并列优先R²只作辅助。模拟径流总量的长期偏差比逐时的相关性更影响水资源调度决策。水质模型N、P负荷NSE的逐点惩罚特征在负荷模拟里依然适用但水质数据噪声大容易出现NSE很低而R²很高的情况建议配合对数变换后的NSENSE-ln使用。趋势分析/气候变化影响研究R²反而是主流因为这类研究关注的是相对变化的方向是否一致绝对量往往通过距平或者标准化处理过了。这个顺序不是我拍脑袋定的。前面说过NSE对系统偏差极其敏感水质模型的时间序列里如果存在监测误差或者采样时段偏差逐点残差很容易被个别异常值放大导致NSE跑不起来。此时R²的高值至少能说明季节和峰谷的相对相位是对得上的。反过来如果做的是洪水预报你告诉防汛部门R²有0.9但NSE是0.2人家第一反应一定是那你们的洪峰是不是矮了因为这是NSE低最常见的原因。5.2 汇报时的三条红线我看到过太多论文和报告在这几个地方踩红线列出来供大家自查第一不要把NSE和R²混为一个指标。描述模型性能时纳什系数就指NSE决定系数就指R²不要写成纳什决定系数也不要把其中一个指标的数值安到另一个指标的名字下面。第二不要在摘要里只挑好看的数放。我见过不少论文摘要只写R²0.93模型精度高正文里NSE只有0.45。这不是欺骗但至少是误导。审稿人一旦较真这个论文的可信度直接打折。正确的做法是把NSE、R²、PBIAS或RMSE一并列出让读者自己判断。第三给NSE分级时要说明用的标准来源和样本时间尺度。同样的NSE0.65在月尺度模拟里可能算优秀在日尺度洪水模拟里只能算及格。Moriasi等人2007年给的标准被引了很多次但那个标准针对的是流域尺度日/月径流模拟拿到城市雨洪模型或者瞬时流量过程里去用会有点错位。5.3 率定过程中如何利用两者的差异率定模型时我会把NSE和R²放在一起观察用来判断参数调偏了哪个方向。具体经验当R²升高而NSE停滞不前多半是模型在形状上进步了但绝对水平上仍有系统偏差。这时候优先检查水量平衡参数如产流系数、前期土壤含水量初始化而不是急着调河道糙率或者汇流速度。当NSE升高而R²变化不大说明参数调整在修正逐点误差这对洪水预报这种看重绝对值的场景是好消息。当NSE和R²同时升高才是模型整体变好的最有说服力的信号。另外我习惯在率定过程中用NSE-ln对流量取对数后计算做辅助判断。原因是NSE对高流量很敏感洪水峰的误差在平方项里被放大得厉害低水流量的误差反而容易被淹没。对流量取对数后低水流量的权重被提上来能防止模型只优化洪峰、忽略枯季基流的偏科现象。这个做法在很多水文模型软件里已经成为标配选项。6. 给审稿人和工程师的识别清单6.1 三分钟识别一篇论文有没有误用指标由于这两种指标在公式上的亲近感误用情况很常见。我总结了一份快速检查清单适用于审稿或者自己做技术复核看摘要里的指标数值如果NSE和R²同时出现且数值非常接近可以留意正文中是否提供散点图或流量过程线。若过程线明显存在整体偏低或偏高那么NSE应该低于R²才对若两者相等反而说明有问题。看散点图与1:1线的贴合程度R²描述的是散点对回归线的贴近程度NSE描述的是散点对1:1线的贴近程度。如果论文中的散点图显示回归线斜率不是1、截距明显不为0但作者却用R²证明模型精度这就是误用。看率定参数是否平滑NSE的变化对参数调整非常敏感如果你在参数率定表格里发现NSE随参数单调上升后突然掉头向下这通常是正常的但如果R²一路平坦、NSE忽高忽低就要检查是不是某个参数把均值偏移或者方差放大了。这条清单不是为了挑刺而是想提醒大家指标本身没有对错错的是用一个指标的价值主张去替代另一个指标的价值主张。R²适合回答趋势对不对NSE适合回答数值准不准。想回答哪个问题就用哪个指标最好两个一起上再加一个PBIAS。6.2 被审稿人问到为什么NSE和R²不一致时怎么回应这个问题我在研究生时期被问过后来当了审稿人也常问别人。礼貌且专业的回应方式分三步第一步先算清楚差异来源。将NSE按α、β、R分解看看主要是均值偏移β还是幅度失真α造成的。第二步用图表把差异可视化。把观测值和模拟值的散点图画出来同时画1:1线和线性回归线两条线的差异一眼可见。第三步给出归因和改进方向。如果是均值偏移说明模型水量平衡有问题如果是幅度失真说明模型对洪峰/枯季过程刻画不够。不要把锅甩给数据噪声了事NSE和R²的差异在多数情况下是模型结构决定的噪声只会让两个指标都下降不会单独制造出R²高而NSE低的局面。6.3 指标汇报的推荐模板最后给一个我实际在技术报告里使用的模板大家可以拿去改模型率定期NSE0.77R²0.85PBIAS-5.2%RMSE12.3m³/s。模拟径流过程与观测在峰谷相位上一致性较好R²达到0.85NSE低于R²主要源于汛期部分场次洪水模拟峰值偏低约10%对应PBIAS为-5.2%存在轻微低估后续将通过调整产流参数进一步改善。这段写法把数值、差异归因、改进方向都交代清楚了。审稿人看到这种表述基本不会再揪着指标问题发难。我自己在实际项目里反复体会过一件事没有哪个单个指标能承载全部的模型评价责任。NSE和R²的差异其实反映的是相关与准确这两个完全不同的概念。你能把这两个概念在报告里区分得越清楚别人就越相信你真正理解你手里的模型在做什么。未来如果再遇到纳什系数和决定系数哪个大哪个小这类问题建议直接拿一组真实数据算给提问者看比解释一百句都管用。
返回列表