ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

统计降尺度与机器学习:把全球气候模式细化到局地的技术路线

统计降尺度与机器学习:把全球气候模式细化到局地的技术路线 做气候变化影响评估的人十有八九都被同一个问题卡住过手里需要的是流域尺度甚至站点尺度的未来气候数据可全球气候模式GCM的输出分辨率动辄一两百公里起步一个格点可能覆盖大半个省份。理想很丰满现实很骨感——你没法直接把这么粗的画面喂给水文模型、作物模型或者城市规划评估。于是基于统计方法与机器学习的气候降尺度就成了绕不开的功课。这篇文章不打算写成教科书我想以这几年实际跑降尺度项目的视角聊清楚几件事统计降尺度的经典思路是什么机器学习能帮上什么忙以及真正落地时最容易在哪些环节翻车。无论你是刚入门的气候专业学生还是做影响评估的工程师又或是想把方法论迁移到其他领域的算法同学读完之后应该能对把全球模式细化到局地这件事建立一张完整的技术地图。1. 全球模式的分辨率之痛为什么必须降尺度1.1 一个上百公里的格点装不下一个流域先举个例子。CMIP6里的典型全球模式大气网格大约是100到250公里。中国东南沿海一个格点在模式里可能同时包含了海洋、平原、丘陵实际地形高度也被抹平到一两千米的平均值。这种分辨率下的气温、降水本质上是一个区域大尺度的平均气候而不是任何具体地点的气候。但实际决策需要的是点上的信息。水库调度要知道某个流域的降水农业评估要知道某个县的高温天数城市规划要知道城市热岛尺度上的夜间温度。把全球模式的分辨率从百公里量级提升到公里甚至站点量级这个过程就是降尺度downscaling。这里要强调一点降尺度不是把格点变细的插值。插值只是把粗格点的值摊到细网格上无法产生任何新的信息降尺度要做的是建立在大尺度环流如何影响局地气候的物理认识之上建立一种映射关系再从大尺度信息中推导出有额外价值的小尺度细节。换句话说降尺度输出的不仅是一张更高分辨率的图而是一套带有局地物理过程烙印的气候数据。1.2 动力降尺度与统计降尺度两条路线怎么选降尺度有两条主流路线。动力降尺度本质是把全球模式的结果作为边界条件驱动一个高分辨率的区域气候模式比如WRF再跑一遍。优点是物理过程完整理论上可以刻画山谷风、局地对流、海陆风这些小尺度过程缺点是计算开销非常大跑一个区域情景可能要消耗几万核时而且区域模式本身也有偏差并不是换了细网格就一定准。做一次动力降尺度实验光数据准备和调参就能耗掉一个团队几个月的时间。统计降尺度则完全不同。它是在历史观测中寻找大尺度大气状态与局地观测要素之间的经验统计关系然后把这种关系应用到全球模式的输出上。计算量极小一台普通工作站就能跑完几十个GCM模式的集合实现也快一个合理的回归或机器学习模型几天内就能产出结果。因此在实际影响评估项目中统计和机器学习降尺度是更普遍的选择。动力降尺度和统计降尺度不是非此即彼。很多项目会先用区域模式做相对较粗比如12km的动力降尺度再用统计/机器学习方法进一步细化到公里级这种混合策略在复杂地形区域很常见。但是对于大多数只有资源限制的团队从统计/机器学习路线切入是性价比最高的起点。1.3 降尺度赖以成立的核心假设统计降尺度做的一切都押在一个核心假设上大尺度环流与局地气候之间的关系在历史时期和未来情景下是稳定成立的。这套逻辑本身说得通。局地气候由大气环流、地形和陆面过程共同决定其中地形和陆面在几十到上百年尺度内基本不变局地天气很大程度是被大尺度天气系统强制出来的。无论是台风外围的水汽输送、冷空气南下引起的降温还是夏季风带来的降水局地的响应都嵌在一个更大的环流背景里。统计降尺度要做的就是把这个强制-响应的关系从历史数据里学出来。但要注意这个假设在用过去预测未来时存在天然的悖论。气候变暖背景下热力条件、水循环强度都在发生根本性变化历史统计关系未必能完全外推到未来。这不是方法本身的瑕疵而是所有经验外推方法的共同边界。我在后面会专门讲平稳性失效问题——统计降尺度能给出看似漂亮的结果但真实可靠性最终取决于对这种假设边界的清醒认识。2. 经典统计降尺度方法从Delta到分位数映射2.1 Delta法所有降尺度项目的第一道基线如果新接触降尺度我建议先跑通Delta法它是最简单也最容易被低估的基线。Delta法的原理一句话就能说清假设全球模式对气候变化的响应信号比它的绝对状态更可信用模式未来时刻的气候态减去模式历史时刻的气候态作为变化量再把这变化量叠加到局地观测的多年平均态上。举个例子。某站点的观测历史平均气温是15摄氏度模式历史时段模拟的平均气温是14.5度未来情景下模拟为17.5度那模式自身显示升温3度。Delta法给出的未来站点气温就是观测平均值15度加3度等于18度。对降水一般用比率而不是差值即乘上降水变化的倍率避免出现负降水。这个方法的优势是没有假设任何统计模型需要的计算量几乎为零做什么项目都可以先拿它当对照。它的短板也很明显只改变了气候平均态几乎没有改变变率和极端值的分布连模式自身对各年波动的信息都没有用到本质上就是一个气候平均偏移。Delta法虽然简陋但它提供的变化信号至今仍被很多复杂方法作为后处理的组成部分。我建议所有项目都保留这个基线结果后面无论用多先进的模型都要能解释清楚为什么你的结果优于Delta法。如果连简单基线都打不赢复杂模型的价值就要打问号。2.2 回归与典型相关分析把大尺度环流翻译成局地气候统计降尺度最经典的骨架是回归类方法。先找一组预测因子通常是能代表大尺度大气状态的变量500hPa位势高度、海平面气压、850hPa温度、比湿等再找一个预测量通常就是局地站点或网格的月均气温或降水总量。然后在历史期建立两者的回归关系最后把未来GCM输出的预测因子代进去得到局地的未来值。线性回归的假设是大尺度变量与局地要素之间是线性可加的这在温度上表现尚可因为气温受环流和海拔控制相对稳定降水就麻烦降水过程本身高度非线性而且有大量零值线性回归会被要不要下雨和下多少雨两种机制同时困扰结果往往平庸。为处理多变量之间的相关结构统计降尺度历史上还常用典型相关分析CCA。CCA的思想是从预测因子组和预测量组中各自提取少数几个典型变量让两组典型变量之间的相关性最大化从而把多维问题压缩成少数相关通道来处理。这个方法在月尺度温度和环流型预报中运作了多年也是很多业务化统计降尺度工具如SDSM的底层思路之一。这类方法虽然不新但它们为后来的机器学习方法提供了一个重要基准线性映射的上限在哪里非线性能不能超越它如果你在数据上发现机器学习和线性回归结果几乎一样那大概率是这个问题本身接近线性而不是模型不够高级。2.3 分位数映射纠偏差神器也要小心矫正过枉分位数映射Quantile MappingQM一开始更多被归为偏差校正而不是降尺度但现在几乎每个降尺度项目都会在最后一步用到它。道理很简单模式模拟的某变量分布与观测有系统性偏差QM用观测分布去替换模式分布的分位数。对某个值x假设它在模式分布F_model中的累计概率是p那么校正后的值就是观测分布在概率p处的分位数写成公式就是x_corrected F_obs^{-1}(F_model(x))。这样不仅校正了平均态还校正了方差和分布形态对降水的湿日频率、极端分位数都有明显的改进效果而且QM在理论上保证了校正后的分布和观测分布一致。这也是它在降水降尺度后处理里几乎是标配的原因。不过QM有一个真问题未来校正是否仍然有效。当未来气候整体变暖、或者降水分布明显位移时直接套用历史期拟合的转换函数会把未来分布强行拉回观测的形状导致极端温度偏保守或高估。实用解法是使用带趋势的QM比如分位数增量映射或者对模式未来分布和转换函数分开拟合再叠加变化量。这里面的精细处理往往是项目成败的关键之一却被很多教程一笔带过。2.4 为什么这些老方法没被淘汰现在机器学习这么热还有人用Delta和线性回归吗仔细想想这些经典方法在业务化项目中反而更常见原因无非三点。可解释性——每步变换的物理含义清楚写成报告经得起审问。比如你说用500hPa高度场的异常解释局地温度变化这个因果链条天然好懂。可解释性在气候影响的决策场景里太重要了很多用户不需要黑箱需要的是为什么给出这个数字。计算成本——跑上百个GCM模式成员和多情景机器学习模型的训练开销积累起来相当可观。经典方法基本都是线性代数级别的计算可以瞬间跑完整个集合。稳定性——不需要调参不会有模型崩溃在数据匮乏或者变量复杂时至少有一个不丢人的结果。还有一个现实因素很多领域的决策流程里结果的可追溯性比精度重要得多。经典统计方法就像工具箱里的扳手不一定最时髦但你要拧螺丝的时候它肯定可靠。所以千万不要因为老就轻视它们它们既是基线也是做机器学习时最好的对照物。3. 机器学习进场非线性映射带来的改变与边界3.1 传统方法的天花板在哪里经典统计方法的本质大多可以归结为线性或低阶多项式映射。比如你用线性回归拟合降水模型天然无法表达500hPa高度异常超过某个阈值时降水激增这类非线性突变。即便CCA可以考虑线性相关结构它也无法自动构造新的非线性组合特征。气候系统最突出的特征恰恰是非线性。降水对环流的响应、山谷风对背景风向的依赖、极端温度对土壤湿度的反馈都带有明显的阈值效应。机器学习的核心优势是用通用函数逼近器替代人工设计的线性映射让数据自己告诉算法这个关系应该长什么样。于是从2010年代中期开始随机森林、梯度提升树、支持向量机、神经网络陆续进入降尺度领域这几年CNN和U-Net做空间降尺度也成了热点。机器学习并不是要取代统计降尺度而是把其中建模关系这一环变得更灵活、表达能力更强。3.2 常用机器学习模型的选型比较谁更适合降尺度不是所有场景都适合堆深度学习。我基于自己做过的实验和文献里的广泛结论把常见模型做一个横向比较。模型核心优势主要局限适合场景随机森林 / GBDT非线性强、对特征交互友好、自带特征重要性外推能力弱、对极值倾向保守站点/格点的中期预测、特征探索SVM小样本下稳健、核函数能捕捉非线性超参数敏感、大数据训练慢样本量几千级的中小数据集ANN全连接拟合灵活、可扩展为分布模型容易过拟合、调参成本高大量站点联合建模CNN / U-Net天然处理空间结构、能学习邻域影响需要大量高品质训练数据、可解释性差空间连续场的公里尺度降尺度随机森林和梯度提升树至今仍是降水降尺度项目的实用首选重要原因是它们不容易在训练误差降到零之后全面崩塌也方便用袋外误差和特征重要性做诊断。但我提醒一句树模型的外推能力非常弱。如果未来GCM预测因子的取值范围超出了历史训练范围树模型预测会倾向停在叶子节点的边界值上输出的局地变化量容易被低估。这个问题在温度变量上尤其常见值得警惕。3.3 深度学习做空间降尺度从超分辨率重建借来的思路图像超分辨率领域有个常识一张低分辨率图可以通过卷积神经网络重建出细节丰富的高分辨率图。气候领域的空间降尺度几乎就是同一个问题——把低分辨率的全球模式场超分成高分辨率局地场因此很自然地引入了CNN和U-Net。典型做法是把某个区域的大尺度气象场比如500hPa高度、海表温度、低层风场作为输入以高分辨率观测再分析场的降尺度产物作为目标训练一个深度卷积模型。训练好之后把GCM的未来场灌进去就得到公里级的空间降尺度结果。这种思路的优势是同时学到了空间邻域信息与多变量协同关系不再像传统逐点回归那样每个格点孤立建模。代价也明显这类框架普遍需要大量的输入-目标样本对而再分析资料时间跨度有限比如ERA5只有最近几十年GCM历史期样本也不多深度学习在大样本需求上天然吃亏。另外深度学习对输入的域漂移很敏感训练时用再分析资料学到的大尺度-局地关系迁移到GCM输出时不一定完全成立。所以用深度学习做空间降尺度我建议至少再加一道分位数映射后处理控制最终分布偏差否则结果可能看起来纹理清晰、实际上数值分布跑偏。3.4 特征工程降尺度项目里隐藏的胜负手很多人在机器学习降尺度项目里只关注模型选型却忽视了特征工程才是决定结果上限的那一半功夫。气候降尺度的预测因子不是越多越好。合理的预测因子至少要满足三个条件一是与局地预测量有物理机制联系而不是纯统计相关二是能被GCM可靠模拟——很多局地过程在GCM里根本没被表达拿它当特征等于引入噪声三是未来情景下的变化范围不能离谱超出训练域。我常用的特征组合是500hPa位势高度及梯度反映环流型、850hPa气温和露点反映热力和水汽条件、海平面气压反映天气系统位置、相对湿度或比湿反映水分供给对降水再额外加一个可降水量或水汽通量散度。温度降尺度的预测因子比降水简单不少核心是环流型气团温度降水则对水汽项非常敏感少了水汽特征任何模型都难有好的表现。4. 跑通一个降尺度项目数据、特征、训练与验证的完整链路4.1 数据准备和时空匹配项目里最容易被低估的工作量几乎所有降尺度项目真正耗时最多的不是建模而是数据准备和时空对齐。我见过不少同学在这上面栽跟头所以这里多说几句。数据源上GCM输出一般从CMIP6数据门户下载注意区分历史情景和自然历史情景以及不同SSP情景SSP126、SSP245、SSP370、SSP585观测目标可以用站点资料气象站逐日观测或者高分辨率网格资料比如国内的CN05.1、全球的CRU、再分析的ERA5-Land预测因子的高分辨率历史真相则常常用再分析资料如ERA5来构建。时空匹配至少要处理三件事统一坐标系和网格、统一时间频率、统一变量单位。GCM网格通常是曲线网格需要先插值到规则的经纬网格最好和你的观测目标网格一致。这里有个容易被忽视的细节降水这类变量做空间插值时面积平均比点插值稳健。直接用双线性插值逐点取GCM格点值容易平滑掉局地信号还会把网格的锯齿状信息保留下来更稳妥的做法是先在GCM原始网格上做面积加权平均再重采样到目标网格。时间上GCM输出一般是日或月观测站点可能是日值逐日匹配时要先检查日历体系——有的模式用360天日历或365天日历不去日历对齐后面所有匹配都会错乱。4.2 预测因子的选择与处理方式特征的处理会影响整个降尺度质量。我建议先做相关性普查把每个候选预测因子和局地目标变量做相关系数、互信息的初步检查圈定物理上说得通、相关性稳定的特征进入正式模型。相关性不是因果关系但至少相关性太低的特征大概率是噪声留着只会增加过拟合风险。对于站点或网格逐点模型常见的做法是把GCM预测因子插值到该站点或格点后的值加上该点的高程、坡度、离海岸距离等静态地理特征。静态特征本质是让模型有机会学习同一种大尺度天气在不同地形下的反应在很多山区项目里加上这些静态特征能让距离较远的站点共享更多地形信息这也是一个不太被新手注意的加分项。标准化处理方面我特意再提醒一次数据泄漏问题必须在每一折交叉验证内部单独对训练集拟合标准化参数再去变换验证集和测试集否则验证分数会虚高。气候序列有强时间自相关相邻年份的天气状态高度相似随机划分训练集和验证集往往会因背答案而高估模型能力更稳妥的是按年份分组做交叉验证。4.3 模型训练与验证以随机森林为例的完整流程我不打算贴很长的代码给你一个可以快速复现的核心流程。import numpy as np from sklearn.ensemble import RandomForestRegressor from sklearn.preprocessing import StandardScaler from sklearn.model_selection import GroupKFold from sklearn.metrics import mean_squared_error, mean_absolute_error, r2_score # X: 已处理好的预测因子矩阵形状 (n_samples, n_features) # y: 目标变量站点或格点的气温/降水 # group: 年份标签用于按年分组交叉验证 scaler StandardScaler() gkf GroupKFold(n_splits5) rmse_list, mae_list, r2_list [], [], [] for train_idx, valid_idx in gkf.split(X, y, groupsgroup): X_tr, X_va X[train_idx], X[valid_idx] y_tr, y_va y[train_idx], y[valid_idx] X_tr_scaled scaler.fit_transform(X_tr) X_va_scaled scaler.transform(X_va) model RandomForestRegressor( n_estimators300, max_depth12, min_samples_leaf3, n_jobs-1, random_state42 ) model.fit(X_tr_scaled, y_tr) pred model.predict(X_va_scaled) rmse_list.append(np.sqrt(mean_squared_error(y_va, pred))) mae_list.append(mean_absolute_error(y_va, pred)) r2_list.append(r2_score(y_va, pred)) print(CV RMSE:, np.mean(rmse_list)) print(CV MAE:, np.mean(mae_list)) print(CV R2:, np.mean(r2_list))这段代码有三个关键点。一是必须用GroupKFold按年份分组。气候序列有很强的逐年自相关相邻年份的天气状态高度相似如果随机抽样模型很可能靠着背下邻近年份的信息拿到虚高的验证成绩放到未来情景就完蛋。按年份分组是对这个问题的简单补救。二是随机森林对输入特征的尺度几乎不敏感但标准化仍建议做。一是为了将来对比神经网络或SVM时的公平性二是在做特征重要性解释时更容易对齐。三是对于降水这类半连续且含零的变量直接回归的效果通常一般。更讲究一点的做法是用两阶段建模先分类这天下不下雨再回归下的话下多少。这也是降水降尺度中很常见且被验证能显著改善结果的方案。我在实际项目中几乎都采用分类加回归的两阶段结构日降水降尺度尤其应该这么干。4.4 从历史验证到未来情景生成结果的完整交付形式模型在历史期验证完最后一步是把未来GCM预测因子输入训练好的模型生成未来局地气候情景。这个环节有几个细节需要注意。第一要区分直接输出和偏差校正输出。机器学习模型的直接输出通常分布已经比较接近观测因为训练目标就是观测但仍有残余偏差建议再做一次分位数映射确保最终产品的统计分布与观测相符。这一步对降水尤其重要它决定你输出的是不是一套统计形态合理的气候数据。第二要尽量输出多模式、多情景的集合结果而不是只用单个GCM模式。气候预测本身有巨大的模式间差异降尺度并没有减少物理上的不确定性但至少要如实传达不同模式给出的变化区间。很多只跑一个模式就下结论的项目后面被质疑时很难自圆其说。第三指标上不能只看均方根误差。对气候应用而言分布形状、趋势、极端分位数都比平均误差重要。我通常会同时报告RMSE、MAE、相关系数外加95%分位数误差和连续排位概率评分CRPS并用泰勒图把不同模型的表现放在一张图里对比。单个数字不能说明模型好坏分布能力才是降尺度真正的战场。5. 排雷指南数据泄漏、平稳性失效与极值丢失5.1 数据泄漏标准化里藏着的坑与空间交叉验证数据泄漏是机器学习降尺度里最容易被忽视的隐患。典型场景从全部历史数据计算均值和标准差然后做标准化接着按年份划分训练集和验证集。训练集标准化后的值实际上已经知道了验证集的统计量验证集被间接放进了训练过程结果当然虚高。正确的做法是像前面代码里写的那样在每一折内部先拟合scaler再变换训练集和测试集。涉及特征选择时也一样在交叉验证中使用全量特征重要性筛选也属于泄漏应该把特征选择包进每一折里做或者至少用嵌套交叉验证检验误差。空间维度上的泄漏更隐蔽。由于相邻格点的气候高度相关随机划分训练集去训练一个格点模型隔壁格点的信息很可能已经进了训练集。当最终要预测的目标格点与训练格点在空间上相邻时模型分数会过度乐观。应对办法是使用空间分块交叉验证把相邻格点分到同一折按空间块切分。这个问题在格点化数据建模中非常常见但很多公开教程代码里都直接用了随机split这里我特意多写一句。5.2 平稳性假设的悖论过去关系能不能推未来降尺度模型的训练数据几乎都来自历史观测但应用对象是未来几十年的气候情景中间横着一条变迁的河。气候在变大尺度环流与局地气候的关系真的不变吗未必。比如在高纬地区海冰退缩之后局地气温对同一套环流型的响应明显改变在季风区全球变暖让强降水事件的水汽供给显著增加历史期拟合的环流强度-降水量曲线很可能低估未来的强降水增幅。对这种悖论没有完美解法只能从三方面对冲一是尽量选择物理基础扎实的预测因子让模型学习的是机制性关系而不是纯粹的历史巧合二是检查未来期间预测因子是否显著超出训练范围超出部分的结果要有降级期望三是在报告里如实说明平稳性假设的风险甚至用Delta法这种直接变化量方法做交叉对照。统计降尺度不是水晶球它是在一个物理假设下做合理推断承认这个边界结果才可靠。5.3 极值被平均化为什么降尺度后极端降水变温和几乎所有基于最小化均方误差的回归模型都会出现预测向均值收缩的现象。因为均方误差最小化的最优解是条件均值而条件均值天然会把极端样本拉向中心。反映到降尺度结果上就是极端高温被偏低估计、强降水被明显摊平。这可能是机器学习降尺度常被气候学家质疑的一个核心技术理由。应对思路有几条。一是换目标函数用分位数回归或分位数回归森林QRF直接预测分位数而不是均值从而保留极端事件的量级二是两阶段分类加回归方法至少先把湿日频率校正准确三是把模型输出再做分位数映射用观测极端分位数去拉伸模型的分布。即使这样对极端降水的降尺度结果也应该保持保守态度。降水极值的时间变化具有强随机性没有任何统计方法能精确预测某次大暴雨的量级。降尺度能提供的是变化方向和量级的合理估计而不是确定性数值预报。5.4 降尺度结果该怎么用合理的期望与科学的交付最后聊一点方法论之外的东西。降尺度产物在应用侧经常被误用。常见误解是把降尺度的未来气温当作精准预报——其实它提供的是未来气候情景是某个温室气体排放路径下的合理可能而不是确定性预报。水文模型需要的正是这种包含不确定性的情景输入而不是一个看似准确的未来值。所以交付结果时我习惯附带三样东西一是多模式多情景的区间至少要给出25到75百分位的范围二是与观测对比的验证指标和泰勒图三是方法局限性说明包括平稳性假设、极值低估风险。这样既对用户负责也保护自己不被事后质疑。做降尺度这种交叉学科活儿方法学上多走一步应用侧就能少踩一个坑。这些年做降尺度项目最大的体会可能不是模型多厉害而是清楚自己不知道什么这件事比什么都重要。统计方法和机器学习给了我们一套把全球模式细化到局地的工具但这套工具的有效性始终受制于数据质量、平稳性假设和物理过程的表达能力。如果你也想在这个方向深入我的建议是从Delta法和一个站点的小数据集开始先把全流程跑通再逐步加入机器学习模型对比每一层带来的真实增益——这个过程中你会对方法的边界有一种远超论文里的认识。先别急着上深度学习先把基线走扎实。
返回列表