HKO 预测模型信号 Review — 2026-04-29


状态: P0 已修复 ✅ | 基于 10:45 最后一次预测快照

一、信号清单与当前状态


A. 实时观测信号 (共 5 个)


#信号计算逻辑权重当前值问题
5inland内陆站回归: 0.88×avg(lead_maxes)+3.0 + max_lead-2.5 混合12%28.2⚠️ 回归系数未校准
6trajectoryprogress_pred0.6 + linear_proj0.4 → cap7%29.9✅ 已 cap
6bdiurnal_curve7-day EMA peak + time-of-day diff adjustment5%29.1⚠️ 过去7天可能偏热
6dhumidity_potentialbase + hum_boost (-0.8 to +2.2)5%27.2
10current_maxhko_max_midnight + 1.0 + inland_boost7%28.7⚠️ 早上+1°C 假设过于激进

B. 预报信号 (共 7 个)


#信号计算逻辑权重当前值问题
1forecastHKO 预报 + bias correction8%29.1⚠️ bias +1.1°C 系统偏高
2weather_textHKO 天气描述 NLP → 调整量4%25.3🔴 多云/rainy 产生 -3.4°C 调整
3rain_coolingPSR → rain_suppression4%26.0⚠️ 80% 雨概率 → -2°C
4warningWTS/WHOT 警告5%26.0⚠️ WTS → -2°C
8wind海风/陆风方向-(未触发)
9climatology过去7天平均 + trend4%28.3

C. 模型信号 (共 3 个)


#信号计算逻辑权重当前值问题
11nwp_ensemble6 模型集成 mean + bias6%27.6
12shenzhenSZ forecast max - 0.8°C5%25.2⚠️ 固定减 0.8°C 无校准
13a-eOM 气象 (5个子信号)云量/辐射/雨/CAPE/湿度各 1-2%26-27🔴 权重太低,合计 ~10%

D. 统计/模式信号 (共 4 个)


#信号计算逻辑权重当前值问题
6ctemp_declining温度回落检测(未触发)-
6ewarming_accel升温加速 vs 历史3%27.2⚠️ 微小窗口除以 0.1
15analog_day气象指纹相似度匹配4%30.1🔴 只有一个匹配日=29.4°C
16early_aggressive内陆+湿度+辐射+加速度7%27.6

E. AI 信号


#信号计算逻辑权重当前值问题
LLMllm_reasoningDeepSeek V4 Pro 综合推理10%28.5✅ 最可靠的"综合判断"

F. 特殊覆盖(当前禁用)


#信号状态原因
6frapid_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。


历史数据:

  • 04-28: fc=27, actual=29.4, err=+2.4
  • 04-27: fc=?, actual=27.9
  • 04-22: fc=?, actual=29.4

  • 如果这几天都是晴朗异常天气,用它们来 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.4weather_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 钳制)
    

    优点

  • ✅ 动态权重:早上内陆站权重高,下午 current_max 权重高
  • ✅ decline 检测有效抑制过度乐观
  • ✅ 权重归一化保证总和为 1
  • ✅ 预测平滑防止单点跳变
  • ✅ rapid_warming cap 防止极端值

  • 问题

  • 🔴 skip_ensemble 路径: rapid_warming 触发时,全部规则信号被绕过。即使降低到 30-50%,仍是对 ensemble 的不连续切换
  • 🔴 冗余信号放大单一信源: 多个基于 forecast_max 的信号合计权重占优
  • 🔴 bias_correction 只能正向: 默认+0.7,即使系统持续高估也不会自动转为负向
  • 🟡 LLM 和规则信号无冲突检测: LLM 可能识别出规则看不到的模式,但被低权重(≤10%)压制
  • 🟡 不确定度仅用 spread_unc: 未利用信号的历史误差来标定权重



  • 四、改进建议(按优先级)


    立即 (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 权重