HKO 预测模型信号 Review — 2026-04-29
状态: P0 已修复 ✅ | 基于 10:45 最后一次预测快照
一、信号清单与当前状态
A. 实时观测信号 (共 5 个)
| # | 信号 | 计算逻辑 | 权重 | 当前值 | 问题 |
|---|---|---|---|---|---|
| 5 | inland | 内陆站回归: 0.88×avg(lead_maxes)+3.0 + max_lead-2.5 混合 | 12% | 28.2 | ⚠️ 回归系数未校准 |
| 6 | trajectory | progress_pred0.6 + linear_proj0.4 → cap | 7% | 29.9 | ✅ 已 cap |
| 6b | diurnal_curve | 7-day EMA peak + time-of-day diff adjustment | 5% | 29.1 | ⚠️ 过去7天可能偏热 |
| 6d | humidity_potential | base + hum_boost (-0.8 to +2.2) | 5% | 27.2 | ✅ |
| 10 | current_max | hko_max_midnight + 1.0 + inland_boost | 7% | 28.7 | ⚠️ 早上+1°C 假设过于激进 |
B. 预报信号 (共 7 个)
| # | 信号 | 计算逻辑 | 权重 | 当前值 | 问题 |
|---|---|---|---|---|---|
| 1 | forecast | HKO 预报 + bias correction | 8% | 29.1 | ⚠️ bias +1.1°C 系统偏高 |
| 2 | weather_text | HKO 天气描述 NLP → 调整量 | 4% | 25.3 | 🔴 多云/rainy 产生 -3.4°C 调整 |
| 3 | rain_cooling | PSR → rain_suppression | 4% | 26.0 | ⚠️ 80% 雨概率 → -2°C |
| 4 | warning | WTS/WHOT 警告 | 5% | 26.0 | ⚠️ WTS → -2°C |
| 8 | wind | 海风/陆风方向 | - | (未触发) | ✅ |
| 9 | climatology | 过去7天平均 + trend | 4% | 28.3 | ✅ |
C. 模型信号 (共 3 个)
| # | 信号 | 计算逻辑 | 权重 | 当前值 | 问题 |
|---|---|---|---|---|---|
| 11 | nwp_ensemble | 6 模型集成 mean + bias | 6% | 27.6 | ✅ |
| 12 | shenzhen | SZ forecast max - 0.8°C | 5% | 25.2 | ⚠️ 固定减 0.8°C 无校准 |
| 13a-e | OM 气象 (5个子信号) | 云量/辐射/雨/CAPE/湿度 | 各 1-2% | 26-27 | 🔴 权重太低,合计 ~10% |
D. 统计/模式信号 (共 4 个)
| # | 信号 | 计算逻辑 | 权重 | 当前值 | 问题 |
|---|---|---|---|---|---|
| 6c | temp_declining | 温度回落检测 | (未触发) | - | ✅ |
| 6e | warming_accel | 升温加速 vs 历史 | 3% | 27.2 | ⚠️ 微小窗口除以 0.1 |
| 15 | analog_day | 气象指纹相似度匹配 | 4% | 30.1 | 🔴 只有一个匹配日=29.4°C |
| 16 | early_aggressive | 内陆+湿度+辐射+加速度 | 7% | 27.6 | ✅ |
E. AI 信号
| # | 信号 | 计算逻辑 | 权重 | 当前值 | 问题 |
|---|---|---|---|---|---|
| LLM | llm_reasoning | DeepSeek V4 Pro 综合推理 | 10% | 28.5 | ✅ 最可靠的"综合判断" |
F. 特殊覆盖(当前禁用)
| # | 信号 | 状态 | 原因 |
|---|---|---|---|
| 6f | rapid_warming | 🔴 OFF | 多云天:日照<0.5,速率<3.6°C/h |
二、核心问题
🔴 P0: 多个信号基于 base = forecast_max,形成正反馈回路
weather_text = base - 3.4 = forecast_max(28) - 3.4 = 24.6
rain_cooling = base - 2.0 = 26.0
warning = base - 2.0 = 26.0
cloud_cover = base - 1.2 = 26.8
rain_forecast = base - 1.2 = 26.8
cape = base - 0.6 = 27.4
forecast_humidity = base - 0.8 = 27.2
humidity_potential = base - 0.8 = 27.2
9 个信号都用 forecast_max 作为锚点再减去不同量。当 forecast_max 从 27→28 时,所有 9 个信号同时向上偏移 1°C,形成虚假的多信号一致性。实际上只有一个信源(HKO 预报)。
影响: 预测容易跟随 HKO 预报上下波动,失去了"独立验证"的意义。
修复 (2026-04-29 10:33): 所有 OM 信号 + weather_text/rain_cooling/warning/humidity_potential/sunshine/wind 改用 _clim_base(过去7天平均),负向信号增加 lower_bound 钳制。
🔴 P1: 默认 bias_correction = +0.7°C 无下限 ✅ 已修复
bias_correction = max(-1.5, min(1.5, recent_bias * 0.5))
# 默认 0.7(当 past_fc_errors 不足时)
今天过去3天 HKO 实际最高远超预报(+2.4°C),导致 recent_bias = +2.4 * 0.5 = +1.2°C。这个 bias 加到 ensemble 上,导致预测系统性高于 HKO 预报 1-2°C。
历史数据:
如果这几天都是晴朗异常天气,用它们来 bias-correct 今天的雨天的预报会产生严重高估。
✅ P2: 快速升温 skip_ensemble → 常规信号(权重 8-15%,不再绕过集成)
w_total = sum(weights.values())
weights = {k: round(v / w_total, 4) for k, v in weights.items()}
权重归一化后,多个冗余信号(9 个基于 forecast_max)各自分到 ~4% 权重,合计 ~35-40%——这本质上是 HKO 预报占了 35% 份额,但以 9 个不同信号的形式出现。LLM 只有 10%,内陆站 12%。
建议: 给"信源类别"设上限(预报类 ≤25%,实时类 ≥40%,模型类 ≥20%),而非简单归一化。
🟡 P3: weather_text 信号在雨天产生极端负向偏差
当前 HKO 描述 "mainly cloudy with occasional showers" + 80% rain PSR → wx_score = -3.4 → weather_text = fc - 3.4*0.8 = fc - 2.72。
当 forecast_max=27 时,weather_text 预测 24.3°C——比 lower_bound (27.3) 还低!这个信号对 cloudy/rainy 天气过度惩罚了。
建议: weather_text 调整量应受 lower_bound 约束。
🟡 P4: inland 信号回归系数硬编码
lead_pred = 0.88 * avg_lead + 3.0
这个 0.88/3.0 系数是固定写死的,但内陆站和天文台的关系随季节、天气类型变化。夏天可能内陆高出 2-3°C,冬天可能只差 0.5-1°C。
建议: 用过去 7 天数据动态拟合斜率,而非固定系数。
🟡 P5: analog_day 只有一个匹配日时信号不可靠
当前唯一匹配: 04-28 (29.4°C, sim=0.10)。这一天 HKO 预报 27°C 但达到 29.4°C(+2.4°误差)。用这一天类比今天,预测 30.1°C——如果今天不像昨天那样异常,这个信号会严重高估。
建议: 单日匹配时权重至少减半(0.04 而非 0.08)。
🟡 P6: shenzhen 信号固定减 0.8°C
HK 和 SZ 的温差不是常数。Open-Meteo SZ 预报来源不同模型,精度也未知。
建议: 与 inland 信号合并或至少验证 SZ→HK 映射关系。
🟢 P7: Open-Meteo 气象子信号 (13a-e) 权重过低
云量、辐射、雨概率、CAPE、预报湿度是物理驱动的核心指标,但 5 个信号合计只占 15% 权重。而 weather_text(NLP 解析)就占 4%。
建议: OM 气象信号整体权重翻倍到 30%,减少冗余的 forecast 锚定信号。
三、合并算法 Review
当前流程
1. 逐个计算 21+ 信号,各赋初始权重
2. decline / cold_front 检测 → 抑制非核心信号
3. past_peak 检测 → 大幅抑制升温信号
4. current_max 检测 → 下午大幅抑制其他信号
5. rapid_warming 检测 → 如果触发,跳过 ensemble(仅与 ensemble_rapid 混合)
6. 权重归一化(sum → 1.0)
7. 加权平均 → predicted_max
8. bias_correction 偏移
9. decline_triggered → 锁上限
10. 预测平滑(±1°C 钳制)
优点
问题
四、改进建议(按优先级)
立即 (today)
1. ✅ 快速升温禁能(多云条件)— 已完成
2. ✅ 预测平滑 ±1°C — 已完成
3. ✅ 关键数据缺失 guard — 已完成
短期 (本周)
4. 将 analog_day 单日匹配权重从 0.08 → 0.04
5. weather_text 调整值受 lower_bound 约束
6. warming_accel 的微小窗口问题(同 rapid_warming 修复)
7. OM 气象信号整体权重从 ~15% → 25%
中期 (下周)
8. 信源类别权重上限(预报≤25%, 实时≥40%)
9. inland 回归系数从过去7天动态拟合
10. bias_correction 支持负向(默认 0,而非 +0.7)
11. 将 rapid_warming 从 override 改为常规信号(不加 skip_ensemble)
12. LLM-ensemble 冲突检测:LLM 高置信度且与 ensemble 偏差 >1°C 时提升 LLM 权重