Appearance
基于气候模态与深度学习的热带气旋生成频率预测
本文总结一个热带气旋生成频率预测项目的完整实现。项目最初尝试用 ENSO、IOD、NPMM 等海洋气候模态预测下一月的全球及分海盆生成数,随后逐步转向更符合 MJO 作用尺度的逐候预测,并加入分海盆建模、多随机种子集成和 bootstrap 显著性检验。
这项工作的重点在于不断校正问题定义:月平均为什么会抹去 MJO 信号?全球求和为什么会抵消区域增益?单个随机种子的高分是否可信?围绕这些问题,逐步形成了一条从物理尺度、特征表达、模型结构到统计验证都相互对应的技术路线。
问题定义
预测目标是未来一个时间段内的热带气旋生成数。项目覆盖 1980—2020 年,共整理 3548 个生成事件,并按七个海盆划分:
| 海盆代码 | 含义 | 事件数 |
|---|---|---|
| NA | 北大西洋 | 543 |
| EP | 东北太平洋 | 708 |
| WP | 西北太平洋 | 1056 |
| NI | 北印度洋 | 204 |
| SI | 南印度洋 | 643 |
| SP | 南太平洋 | 391 |
| SA | 南大西洋 | 3 |
Global 由各海盆生成数求和得到。南大西洋只有 3 个事件,几乎是全零序列,可用于数据质量检查,但不参与模型优劣判断。最终全球预测采用 NA、EP、WP、NI、SI、SP 六个海盆的预测结果求和。
项目先后研究了两种时间尺度:
- 月尺度:回看 12 个月,预测下一个月;
- 候尺度:回看 12 候(约 60 天),预测下一候(5 天)。
月尺度是用于发现问题的基线,候尺度才是最终主线。原因在于 MJO 的典型周期约为 30—60 天,其对热带气旋生成的调制发生在数天到两周的尺度上,用”上月均值预测下月总数”的月尺度基线难以捕捉这种变化。
总体技术路线
整个项目可以概括为下面的数据流:
text
SST / 10 m 风场 ──> 7 个海洋气候模态 ─┐
├─> 候尺度分海盆面板 ─> 滑动窗口 ─> 时序模型
每日 RMM1/RMM2 ──> MJO 相位占比 ──────┤ │
│ ├─> 六海盆求和
台风生成事件 ──> 分海盆逐候计数 ──────┘ └─> 多种子 + bootstrap工程实现分为四层:
- 用
xarray、NetCDF4和pandas计算并验证气候指数; - 将台风事件、低频海洋模态和每日 MJO 合成为统一时间面板;
- 用 PyTorch 实现 LTSF-Linear、TSMixer 和小型自注意力模型;
- 以气候态为基准计算 MSSS,并通过多种子集成与配对 bootstrap 检验结论。
数据与气候指数
海洋气候模态
输入物理场包括 NOAA ERSSTv5 月平均海表温度,以及 NCEP Reanalysis 的 10 m 纬向、经向风。所有经度先统一到
项目使用七个低频海洋模态:
| 指数 | 计算方式 |
|---|---|
| ENSO | Niño 3.4 区域海温距平面积加权平均 |
| IOD | 西赤道印度洋减去东南赤道印度洋 |
| IOB | 热带印度洋盆地海温距平平均 |
| SIOD | 西南副热带印度洋减去东南副热带印度洋 |
| TNA | 热带北大西洋海温距平平均 |
| NPMM | 北太平洋 SST—10 m 风耦合最大协方差模态 |
| SPMM | 南太平洋 SST—10 m 风耦合最大协方差模态 |
区域指数使用纬度余弦权重:
IOD、SIOD 等偶极子指数则计算两个区域平均之差。NPMM 和 SPMM 的计算依赖 SST 与风场的耦合结构:项目先对 SST 和风场去趋势、线性移除 CTI/ENSO 信号,再构造 SST 与风场的交叉协方差矩阵,通过 SVD 取得第一耦合模态,并用指定正位相区域统一符号。
MJO 表征从向量均值改为相位占比
月尺度试验直接使用月平均 RMM1、RMM2 和振幅,但结果表明这种表达会丢失关键信息。RMM1/RMM2 是传播振荡的正交分量,一个活跃 MJO 事件在月内经过多个相反相位后,向量平均可能接近零。
候尺度面板因此保留两套 MJO 表示进行消融:
mjo_mean:每候 RMM1、RMM2、振幅的均值;mjo_phase:活跃条件amplitude > 1下,8 个相位各自占该候天数的比例,再加平均振幅。
第
这种表示同时保留了“MJO 在哪里”和“MJO 有多活跃”,避免相反相位在向量平均中相互抵消。
候尺度建模面板
一年划分为 73 候,第 73 候吸收闰日。1980—2020 年共形成 2993 行连续样本:
- 目标:七海盆及 Global 的逐候生成数;
- 海洋因子:七个海洋模态的月值映射到候中心日所在月份;
- MJO 因子:逐候均值、8 相位占比及平均振幅;
- 季节项:
pentad_sin与pentad_cos。
除海洋指数外,MJO 特征也减去 1991—2020 年逐候气候态。目标通道则表示为“实际计数减去训练期逐候气候态”的距平。所有标准化统计量只使用训练集计算,避免测试信息泄漏。
滑动窗口与数据划分
模型输入形状统一为:
text
[batch, lookback, channels]最终方案使用 12 候历史窗口预测下一候。时间顺序划分为:
| 数据集 | 年份 | 候样本数(窗口前) |
|---|---|---|
| 训练集 | 1980—2010 | 2263 |
| 验证集 | 2011—2015 | 365 |
| 测试集 | 2016—2020 | 365 |
模型学习目标是相对于候气候态的标准化距平。预测后再执行反标准化、加回气候态,并将负数截断为 0:
这种设计让模型把容量用于学习“偏离常年状态的部分”,季节循环则由稳定的气候态基线承担。
模型实现
基线模型
项目保留三类容易解释的基线:
- Climatology:直接预测训练期同候气候态;
- Persistence:延用历史值;
- Linear Regression:将完整窗口展平后做线性回归。
候尺度上持续性方法表现很差,说明候间生成数波动剧烈,直接沿用历史值无法可靠预测下一候。
DLinear 与 NLinear
DLinear 先用移动平均将输入分解为趋势与季节项,再分别通过线性层预测;NLinear 则减去窗口最后时刻的值,在线性映射后加回目标通道末值。两者参数少,是小样本时序任务的重要对照。
TSMixer
TSMixer 由时间混合和特征混合两个残差 MLP 组成:
python
h = time_mlp(layer_norm(x).transpose(1, 2)).transpose(1, 2)
x = x + h
x = x + feature_mlp(layer_norm(x))时间混合用于学习不同滞后候之间的联系,特征混合用于组合生成数距平、海洋模态、MJO 相位和季节通道。项目使用 2 个 Mixer Block、隐藏维 32、dropout 0.3,保持模型规模与样本量匹配。
自注意力模型
AttnForecaster 将每个候的通道向量投影到 32 维,叠加可学习位置编码,再经过 1 层、2 头 Transformer Encoder。最后一个候的表征连接线性输出头。它的优势是能让任意滞后位置相互注意,在西北太平洋上尤其有效;但在全局小样本任务中,其方差也大于 TSMixer。
训练策略
深度模型使用 Adam、MSE 和权重衰减训练。训练目标是标准化距平,但早停监控的是还原到原始计数空间后的验证集 MSE。候尺度实验最多训练 150 个 epoch,patience 为 25,batch size 为 64。
评估指标与统计检验
核心指标是相对于气候态的均方技巧评分 MSSS:
- MSSS
:优于气候态; - MSSS
:与气候态相当; - MSSS
:不如气候态。
项目同时输出 MAE、RMSE 和 Pearson 相关系数,但最终选型不依赖单次 MSSS。每个候选模型使用 8 个随机种子独立训练,再对预测值取平均;随后对测试候进行 5000 次配对 bootstrap,估计 95% 置信区间和单侧概率
从月尺度失败到候尺度修正
月尺度实验给出了一个重要的负结果:加入低频海洋模态和月平均 RMM 后,模型的 Global MSSS 反而下降。根本原因是三种抵消同时发生:
- 时间尺度错配:MJO 的数天至两周调制被月平均平滑;
- 相位抵消:传播过程中的相反 RMM 向量在月内相互抵消;
- 空间抵消:同一相位可能增强一个海盆、抑制另一个海盆,Global 求和再次抹去区域信号。
将目标改为逐候生成数、将 MJO 改为相位占比后,结果出现反转。西北太平洋是最清楚的例子:8 种子集成中,TSMixer 的 MSSS 从无外生因子的
最终结果

最终稳健结论如下:
| 范围 | 最终方案 | MSSS | 95% CI | 单侧概率 |
|---|---|---|---|---|
| Global | 12 候窗口、六海盆 TSMixer 求和、8 种子集成 | 0.0513 | [0.0135, 0.0869] | 0.0038 |
| WP | 12 候窗口、Attn、MJO 相位特征、8 种子集成 | 0.0679 | 约 [-0.013, 0.149] | 0.048 |
Global 上 TSMixer 是最简单且最稳健的选择。尝试把 NLinear、TSMixer 和 Attn 做门控融合时,单个幸运种子曾得到 0.064,但 8 种子检验后 HybridGated 的均值只有 0.011,且方差最大。复杂融合并没有稳定超越单体模型。
WP 上 Attn 的局部 MSSS 高于 TSMixer,但将 Global 中的 WP 模型替换成 Attn 后,Global MSSS 从 0.0513 变为 0.0479,差值为

为了便于阅读,上图将候预测聚合到月尺度展示。模型较好地恢复了季节循环和活跃期位置,但对单月极端峰值仍有明显低估。这与 MSSS 仅约 0.05—0.07 的结果一致:候尺度生成数噪声很高,MJO 提供的是小而可检验的增量,只能解释生成活动中的一小部分变化。
实验中被证伪的方案
这个项目中几条“看起来合理”的路线最终没有带来稳定收益:
- 直接用月平均 RMM:相位传播造成向量抵消;
- 直接预测 Global:区域驱动差异被聚合掩盖,分海盆预测后求和更合理;
- 扩大窗口到 18/24 候:测试 MSSS 从 0.0513 降到 0.0375/0.0156,更多历史只引入噪声;
- 复杂特征级融合或门控融合:小样本下增加方差,无法稳定超过 TSMixer;
- 按海盆混搭模型以提升 Global:WP 的局部改进被跨海盆误差协方差抵消;
- 保留 SA 参与比较:全期仅 3 个事件,逐海盆 MSSS 极不稳定。
这些负结果非常重要。它们说明正确的时间尺度、物理信息表达和统计验证,比模型复杂度更能决定结论能否成立。
项目结构与复现
主要脚本与作用如下:
| 脚本 | 作用 |
|---|---|
| calculate_climate_indices.py | 从 SST、10 m 风计算七个海洋气候指数 |
| build_pentad_dataset.py | 构建 1980—2020 年逐候分海盆面板与 MJO 相位特征 |
| forecast_lib.py | DLinear、NLinear、TSMixer、训练循环和评估指标 |
| forecast_lib_v2.py | 小型自注意力预测器 |
| forecast_lib_pentad.py | 候尺度滑动窗口、因子消融与分海盆评估 |
| run_gain_significance.py | MJO 相位增益的多种子与 bootstrap 检验 |
| run_basin_mix_attn.py | 验证集选模、六海盆聚合与模型混搭检验 |
核心流程可按下面的顺序复现:
powershell
python scripts/calculate_climate_indices.py
python scripts/build_pentad_dataset.py
python scripts/run_pentad_compare.py
python scripts/run_gain_significance.py
python scripts/run_basin_mix_attn.py
python scripts/make_basin_attn_figures.py项目依赖 numpy、pandas、xarray、NetCDF4、scikit-learn、PyTorch 和 matplotlib,使用 uv.lock 固定运行环境。
结论与后续方向
这项工作的核心结论是:在物理尺度匹配的候预测中,用 MJO 相位占比表达次季节信号;分海盆建模后求和;Global 采用轻量 TSMixer,WP 可采用小型自注意力;最后必须用多种子集成和 bootstrap 判断增益是否真实。
后续最值得继续的方向包括:
- 将 MSE 输出头改为 Poisson 或负二项分布,更贴合非负、零膨胀的计数目标;
- 显式构造 MJO 相位 × 海盆、ENSO × 季节交互;
- 引入低层涡度、垂直风切变、中层湿度和潜在强度等更接近生成机制的 GPI 分量;
- 使用
expanding-window回测,检验不同年代和气候背景下的稳定性; - 从点预测扩展到分位数或概率预测,输出可信预测区间。
对小样本气候预测而言,最可靠的提升来自让输入、目标和验证方法共同尊重问题的物理结构,堆叠更多模块带来的收益有限。