气象数据缺口插补:从线性插值到再分析回填与矩阵补全

做新能源功率预测、风光资源评估,测风塔停电三小时、辐照仪积灰一整天、SCADA 通道丢了半个月——这类缺口几乎是常态。问题从来不是"有没有缺口",而是"用什么方法补、补完之后还能不能信"。很多团队的默认动作是 pandas 里一行 interpolate(),线性插值一把梭,缺口是填上了,但容量因子、爬坡事件、超短期功率曲线已经被悄悄带偏。气象序列的缺口插补是一门需要按缺口结构和变量物理性质分类施治的工程——短缺口、长缺口、整片缺测、多通道同时缺,对应的合理方法完全不同。本文把缺口插补从最朴素的线性插值,一路讲到再分析回填和矩阵补全,说清每一档方法的适用边界与陷阱。
关键要点
- 插补方法要按缺口长度和变量物理性质分档:短缺口(1–2 小时)的连续量可线性插值,长缺口绝不能硬插,整片或系统性缺测应优先用再分析回填,多通道同时缺则适合矩阵补全。
- 风向、辐射、累积量是线性插值的三大雷区:风向是 0°/360° 环绕量,必须在 u/v 笛卡尔空间插再合成;辐射要分昼夜,夜间补 0、白天宁可标缺;累积量要先按官方约定差分再当瞬时值用。
- 再分析回填把"时间维插值"升级为"用物理一致的外部场补缺":ERA5 提供 1940 年至今逐小时的全球格点,能补出局地观测彻底丢失的长缺口,但落地前必须先做站点级偏差订正,否则会把网格平滑误差一起灌进去。
- 矩阵补全适合"多站点/多变量、缺口分散"的场景:把数据组织成时间 × 通道矩阵,用低秩假设(SVD/软阈值迭代)一次性恢复整片缺失,前提是各通道之间确实存在可被低秩结构捕获的相关性。
- 插补必须留痕、可审计、并参与不确定性核算:每个被填的点都应带"原始缺测"标记,下游训练、回测、考核都要能区分真实观测与插补值,避免把插补的人为平滑当成真实变率。
- 运梦气象 API 用 ERA5(历史回填,
era5,可取 1950 年至今)+ 德国气象局(预报,ger)双源,正好对应"再分析回填底座 + 预报落地"两类插补需求。
一、先把缺口分类,再谈方法
气象数据的缺口不是同一种东西。把它们混为一谈、用同一招对付,是大多数插补事故的源头。工程上至少要分清三个维度。
按缺口长度分:一两个小时的孤立缺口,与连续几天的长缺口,本质不同。短缺口里,相邻真实观测携带了足够的局地信息,时间维内插是合理的;长缺口里,相邻点早已"失忆",任何沿时间轴的内插都只是在画一条没有物理依据的平滑曲线。
按缺口结构分:随机散点缺测(偶发丢包),与系统性缺测(仪器在某个量程、某个时段、某种天气下成片失效)完全不同。后者往往不是"缺得随机",而是"在你最需要的极端工况下集中缺"——比如强风导致测风塔通讯中断,恰恰丢掉的是爬坡事件。这类缺口用普通插补会系统性低估极端,必须靠独立外部源(再分析、邻站)回填。
按缺口跨越的维度分:单站单变量的时间缺口、跨站点的空间缺口、同一时刻多个通道同时缺的多变量缺口。时间缺口靠时间维方法,空间缺口靠空间插值或邻站迁移,多变量缺口则是矩阵补全的主场。
一句话纪律:先诊断缺口属于哪一类,再选方法。把"缺口长度 + 结构 + 维度"写进数据画像,是任何插补流程的第一步。
二、线性插值:能用,但要守住边界
线性插值是最常用、也最容易被滥用的方法。它假设两个已知点之间的量沿直线变化,对短缺口的连续、缓变物理量是合理的——气温、气压在一两个小时内变化平滑,线性内插带来的误差通常可接受。
但它有几条硬边界,越界就出问题:
风向不能直接线性插值。 风向是 0°/360° 环绕的角度量,359° 和 1° 物理上只差 2°,线性插值却会插出 180° 的荒谬结果,下游风机偏航修正、风切变计算全错。正确做法是把风拆成 u(纬向)、v(经向)两个笛卡尔分量,对分量分别插值,再合成回风速风向。这条规则对所有方向类变量(如海浪向)都成立。
辐射要分昼夜,且不能跨越日界乱插。 太阳辐射有强烈的日变化和硬零边界——日落后 GHI 必须是 0。如果一个缺口跨越黄昏,线性插值会在本该为零的夜间插出虚假辐照,或把白天的峰值人为拉低。辐射缺口的纪律是:夜间一律补 0,白天的短缺口宁可借助晴空模型(clear-sky index/clearness index 思路,先除以理论晴空辐照得到清晰度指数再插,最后乘回)也别在原始辐照上直接线性插。
累积量要先差分。 ERA5 的地表短波 ssrd、降水等原生是累积量,逐时差分后才是该小时的通量。直接对累积序列线性插值,再差分,会把误差放大并可能插出负值。顺序必须是"先按官方约定差分成瞬时/通量,再考虑插补"。
长缺口是绝对禁区。 超过几个小时(风、辐射)或半天到一天(更慢变量)的缺口,线性插值就是在凭空造一条直线。它最危险的地方在于"看起来很合理"——曲线连续、无突变,但中间的天气过程(一次锋面过境、一段连续阴天)被彻底抹平。长缺口要交给后面的再分析回填或邻站迁移,而不是内插。
样条插值(spline)、KNN 插补、按相似日匹配等是线性插值的常见升级:样条更平滑但可能在缺口边缘过冲(overshoot)插出非物理极值;KNN 插补用历史上气象状态最相似的若干时刻的均值来补,对有强日/季节周期的变量往往比纯时间内插更靠谱。但它们都改变不了一个事实——当局地信息已经丢失,再精巧的"自我插值"也补不出真相,只能向外部求援。
三、再分析回填:用物理一致的外部场补缺
当缺口长、或成系统性、或局地观测彻底没有时,正确的思路不是"在自己的序列里插",而是"用一个独立、物理一致、时空连续的外部场把缺口填上"。这就是再分析回填(reanalysis backfill / infilling)。
ERA5 这类再分析数据集的本质,是把卫星、地面站、探空、浮标等多源历史观测,通过数据同化系统投影到一致的全球网格上,得到一套"伪观测"。它的关键价值正是连续性:同一套模式、同一套同化算法跑出长序列的全球场,不会因为你那个测风塔停测两周而断档。ERA5 数据集本身覆盖 1940 年至今、逐小时、约 0.25°(约 31 km)网格——这正是补长缺口最需要的特性。
再分析回填的标准做法分三步:
- 空间定位与提取:取缺口站点对应的再分析格点序列(或对周边几个格点做空间插值到站点位置)。
- 偏差订正:再分析是约 31 km 网格的平均态,不是你机位、辐照仪所在点的真值,二者存在可量化的系统偏差,且在复杂地形、近海会放大。直接拿格点值填进站点序列,等于把网格平滑误差灌进数据。务实做法是用缺口前后有重叠的实测期,拟合一个站点级订正(最简单是线性回归/比例订正,更稳的是分位数映射类方法),把再分析序列对齐到本站口径后再回填。
- 拼接与平滑:在缺口边界做衔接处理,避免回填段与实测段之间出现台阶状跳变。
这套方法在风资源评估里早有成熟范式——MCP(Measure-Correlate-Predict,测量-相关-预测) 就是用短期塔测与长期再分析建立相关关系,再把长期序列订正回站点,本质上就是大尺度的再分析回填。它能解决线性插值永远解决不了的问题:补出局地序列里根本不存在的天气过程。代价是回填段的"局地细节"来自网格、经过订正,精度天然低于真实观测,必须如实标记。
四、矩阵补全:多通道相关性的低秩恢复
前面的方法都偏"一维"——沿时间补、从外部场补。但现实中常遇到的是另一种结构:一个风电场十几台机舱风速、一个区域几十个辐照站、或同一站点多个气象通道,缺口分散地散落在这张大表的各处。这时把每条序列单独插补,浪费了通道之间的相关信息;正确的工具是矩阵补全(matrix completion)。
核心思想:把数据组织成一个"时间 × 通道"的矩阵,其中散布着缺失项。如果这些通道之间存在足够的相关性(相邻风机看到相似的风、相邻辐照站共享同一片云系),那么这个矩阵在数学上近似低秩——它的有效自由度远小于行列数。低秩假设下,缺失项不是随便填,而是被"必须与已观测项保持同一低秩结构"这个约束唯一地(或近似唯一地)决定下来。
经典的求解路线有两类:
- 基于 SVD 的迭代填充:先用列均值粗填缺口,做奇异值分解、只保留前几个主成分重构矩阵、用重构值更新缺口,反复迭代到收敛(即 soft-impute / 迭代 SVD 思路)。直观上等价于"用主导的几个时空模态来解释整张表,缺口顺着模态被恢复"。
- 核范数最小化(nuclear-norm minimization):把"低秩"松弛为可优化的核范数(奇异值之和)目标,在拟合已观测项的同时最小化核范数,是矩阵补全的经典凸优化表述(著名的 Netflix 推荐问题就是同一类方法)。
矩阵补全在气象/能源场景的价值在于:它同时利用了空间相关(站点间)和时间相关(同一通道的时序结构),对随机散布的缺口尤其高效,一次性恢复整张表而不必逐列处理。但它有明确的前提和边界:
- 必须真的存在低秩结构。 如果各通道彼此独立(毫不相关的远距离站点),低秩假设不成立,补出来的就是噪声。
- 整行/整列全缺难恢复。 某个时刻所有通道都缺(全场停电)、或某个通道从头缺到尾,矩阵补全无从借力,仍要退回再分析回填。
- 对系统性、非随机缺失偏弱。 经典矩阵补全假设缺失大致随机;若缺失本身与数值相关(大风时集中丢数),需要更谨慎的建模,否则会系统性低估极端。
实践中,矩阵补全常和前两类方法组合:先用再分析回填把成片的长缺口、整列缺失垫起来,再用矩阵补全收拾分散的随机缺口,最后对短缺口做物理感知的内插。
五、贯穿始终的工程纪律
无论用哪一档方法,下面几条纪律决定了插补结果能不能信。
留痕,且可审计。 每个被填的点都要带一个"原始缺测"的掩码(mask)标记。下游做训练、回测、考核时,必须能随时区分"这是真实观测"还是"这是插补值"。把校验→标缺→插补→留痕做成 pipeline 里独立、可回溯的步骤,记录每一步改了多少点、用了什么规则。质量问题最怕的不是有缺口,而是缺口被悄悄抹平、事后无从追溯。
插补值要参与不确定性核算。 插补不是"把缺口变成和真值一样可信的点"。再分析回填段、矩阵补全的恢复值,都带着比真实观测更大的不确定性。在做 P50/P90 资源评估、概率功率预测时,插补比例高的时段应被赋予更大的不确定性,而不是与实测同等对待。
别让插补污染极端与考核。 系统性缺测往往集中在极端工况,而极端事件(爬坡、限功率触发点、连续低辐射)恰恰是新能源最关心、国家"两个细则"考核最敏感的部分。如果用会平滑极端的方法去补这些缺口,预测精度会在最关键的时刻塌方。对疑似落在极端区间的长缺口,优先用能保住尾部的外部源回填,并显式核查回填后的极值分布是否合理。
先校验再插补。 插补前必须先把填充值(−9999、1e20)显式转成 NaN、用物理上下界(湿度 0–100%、夜间 GHI 为 0、地面风速一般 < 60 m·s⁻¹)剔除伪值。否则一个没被识别的 −9999 进了均值,整列统计量就废了,再好的插补也是在错的基线上做的。
六、在运梦气象 API 上手
缺口插补里最难、也最有价值的一环是再分析回填,而它最依赖一个连续、长序列、口径一致的历史底座。运梦气象 API 采用 ERA5(历史回填,era5)+ 德国气象局(预报,ger) 双数据源:历史回填、偏差订正、长期资源重建走 ERA5(产品可取 1950 年至今),短期预报落地走德国气象局。两者都通过同一个 downloadSync 端点、按 dataSourceId 与 fields 取数,返回统一 JSON envelope(外层 code/success/data/msg,data 里是 timeList 加每个字段的等长平行数组)。
做再分析回填时,典型动作是:先拉取缺口站点对应的 ERA5 历史序列,与缺口前后有重叠的本场实测对齐、拟合站点级订正,再把订正后的 ERA5 填进缺口。下面是取回填底座的最小请求:
{
"dataSourceId": "era5",
"lat": 32.03253,
"lon": 117.35184,
"stime": "2023-01-01 00:00",
"etime": "2023-12-31 23:00",
"timezone": "8",
"fields": ["ws", "wd", "u100", "v100", "rsds", "tas"]
}
取数后的工程纪律与本文一致:timezone 必填、显式传 "8" 让 timeList 直接对齐到东八区,从源头消除时区平移;取 data 前先判 success、组装前先校验每个字段数组与 timeList 等长;风向回填走 u100/v100 笛卡尔分量再合成,绝不直接插 wd;rsds 已是 W·m⁻²、tas 已是 ℃,省掉了 /3600 与 −273.15 这两步最易错的换算。把订正系数(站点 vs ERA5)沉淀下来后,后续每次缺口都能复用同一套回填逻辑。
更多上手信息见 ERA5 数据源产品页,接口与字段细节见 API 参考 和 数据要素解释;气象数据落地的命名、单位、时区、缺测、数组对齐五类坑,见延伸阅读 气象数据工程化最容易踩的五个坑。
常见问题
气象数据缺口能不能直接用 pandas 的线性插值一把补完? 不建议。线性插值只适合短缺口(1–2 小时)的连续缓变量(如气温、气压)。风向是环绕角度量、辐射有昼夜硬边界、累积量要先差分,这三类直接线性插会插出非物理值;长缺口、系统性缺测更是禁区,应改用再分析回填或矩阵补全。
风向的缺口该怎么插补? 不能直接对风向角度线性插值,否则 359° 和 1° 会插出 180° 的荒谬结果。正确做法是把风拆成 u(纬向)、v(经向)笛卡尔分量分别插值,再合成回风速风向。
什么时候该用再分析回填而不是时间维插值? 当缺口长(超过几小时到一天)、成系统性(极端工况集中缺),或局地观测彻底没有时。再分析(如 ERA5)提供物理一致、时空连续的长序列,能补出局地序列里根本不存在的天气过程;但回填前必须先用重叠实测期做站点级偏差订正,否则会把约 31 km 网格的平滑误差灌进去。
矩阵补全适合什么样的气象缺口? 适合"多站点/多通道、缺口随机分散"且通道之间确实相关的场景(如同一风场多台机舱风速、区域多个辐照站)。它把数据组织成时间×通道矩阵,用低秩假设一次性恢复整片缺失。但整行/整列全缺、通道彼此独立、或缺失与数值强相关(大风集中丢数)时不适用,要退回再分析回填。
插补后的数据能当成真实观测一样用吗? 不能。插补值(尤其再分析回填段、矩阵补全恢复值)带着比真实观测更大的不确定性。每个被填的点都应带"原始缺测"掩码,下游训练、回测、考核要能区分真实与插补,做 P50/P90 或概率预测时给插补比例高的时段更大的不确定性,绝不能把插补的人为平滑当成真实变率。
收尾
气象数据缺口插补没有"一招通吃"的方法,只有"按缺口诊断分类施治"的纪律:短缺口的连续量做物理感知的内插,长缺口和系统性缺测交给经过偏差订正的再分析回填,多通道分散缺口用矩阵补全,并自始至终守住留痕、可审计、参与不确定性核算这三条底线。把这套流程沉淀到数据管线入口,缺口就不再是功率预测精度的隐形漏点。落地这一切的前提,是有一个连续、长序列、口径一致的再分析底座——这正是运梦气象 API 用 ERA5 历史回填想解决的那一层。
参考与延伸阅读
- Hersbach, H., Bell, B., Berrisford, P., et al. (2020). The ERA5 global reanalysis. Quarterly Journal of the Royal Meteorological Society, 146(730), 1999–2049. https://doi.org/10.1002/qj.3803
- Candès, E. J., & Recht, B. (2009). Exact Matrix Completion via Convex Optimization. Foundations of Computational Mathematics, 9(6), 717–772. https://doi.org/10.1007/s10208-009-9045-5
- Mazumder, R., Hastie, T., & Tibshirani, R. (2010). Spectral Regularization Algorithms for Learning Large Incomplete Matrices. Journal of Machine Learning Research, 11, 2287–2322. https://www.jmlr.org/papers/v11/mazumder10a.html
- Eaton, B., Gregory, J., Drach, B., Taylor, K., Hankin, S., et al. NetCDF Climate and Forecast (CF) Metadata Conventions. CF Conventions(官方规范文件). https://cfconventions.org/cf-conventions/cf-conventions.html