From c66b9f898d8b5725b789c0d9ce82a96cd12e4f9e Mon Sep 17 00:00:00 2001 From: "2569718930@qq.com" <2569718930@qq.com> Date: Wed, 15 Apr 2026 13:57:27 +0800 Subject: [PATCH] Refresh Busan snapshots and prefer populated nearby stations --- data/probability_training_snapshots.jsonl | 3 +++ frontend/hooks/useDashboardStore.tsx | 22 ++++++++++++++++++++-- 2 files changed, 23 insertions(+), 2 deletions(-) diff --git a/data/probability_training_snapshots.jsonl b/data/probability_training_snapshots.jsonl index 61c59202..e78fab3c 100644 --- a/data/probability_training_snapshots.jsonl +++ b/data/probability_training_snapshots.jsonl @@ -183,3 +183,6 @@ {"city": "seoul", "timestamp": "2026-04-14T03:30:00.000Z", "date": "2026-04-14", "temp_symbol": "°C", "raw_mu": 23.3, "raw_sigma": 0.6666666666666673, "deb_prediction": 18.7, "ensemble": {"p10": 17.7, "median": 18.2, "p90": 19.3}, "multi_model": {"Open-Meteo": 16.3, "ECMWF": 22.3, "GFS": 14.7, "ICON": 21.0, "GEM": 21.8, "JMA": 16.3}, "max_so_far": 23.0, "observation": {"current_temp": 23.0, "humidity": null, "wind_speed_kt": 5.0, "visibility_mi": null, "local_hour": 12.966666666666667}, "peak_status": "before", "prob_snapshot": [{"v": 23, "p": 0.569}, {"v": 24, "p": 0.391}, {"v": 25, "p": 0.04}], "shadow_prob_snapshot": [{"v": 23, "p": 0.498}, {"v": 24, "p": 0.398}, {"v": 25, "p": 0.104}], "probability_engine": "legacy", "probability_mode": "emos_shadow", "calibration_version": "emos-20260402162744", "calibration_source": "artifacts\\probability_calibration\\default.json", "calibrated_mu": 23.3, "calibrated_sigma": 0.9000000000000009} {"city": "tokyo", "timestamp": "2026-04-14T03:30:00.000Z", "date": "2026-04-14", "temp_symbol": "°C", "raw_mu": 22.7, "raw_sigma": 1.3499999999999996, "deb_prediction": 22.3, "ensemble": {"p10": null, "median": null, "p90": null}, "multi_model": {"Open-Meteo": 20.6, "ECMWF": 22.9, "GFS": 22.7, "ICON": 21.7, "GEM": 23.3, "JMA": 20.6}, "max_so_far": 20.0, "observation": {"current_temp": 20.0, "humidity": null, "wind_speed_kt": 7.0, "visibility_mi": null, "local_hour": 12.966666666666667}, "peak_status": "before", "prob_snapshot": [{"v": 23, "p": 0.285}, {"v": 22, "p": 0.257}, {"v": 24, "p": 0.188}, {"v": 21, "p": 0.137}], "shadow_prob_snapshot": [{"v": 23, "p": 0.294}, {"v": 22, "p": 0.263}, {"v": 24, "p": 0.188}, {"v": 21, "p": 0.134}], "probability_engine": "legacy", "probability_mode": "emos_shadow", "calibration_version": "emos-20260402162744", "calibration_source": "artifacts\\probability_calibration\\default.json", "calibrated_mu": 22.7, "calibrated_sigma": 1.3014441113240975} {"city": "tokyo", "timestamp": "2026-04-14T03:30:00.000Z", "date": "2026-04-14", "temp_symbol": "°C", "raw_mu": 23.089999999999996, "raw_sigma": 1.2890624999999998, "deb_prediction": 22.3, "ensemble": {"p10": 21.8, "median": 24.0, "p90": 25.0}, "multi_model": {"Open-Meteo": 20.6, "ECMWF": 22.9, "GFS": 22.7, "ICON": 21.7, "GEM": 23.3, "JMA": 20.6}, "max_so_far": 20.0, "observation": {"current_temp": 20.0, "humidity": null, "wind_speed_kt": 7.0, "visibility_mi": null, "local_hour": 12.966666666666667}, "peak_status": "before", "prob_snapshot": [{"v": 23, "p": 0.303}, {"v": 24, "p": 0.24}, {"v": 22, "p": 0.216}, {"v": 25, "p": 0.107}], "shadow_prob_snapshot": [{"v": 23, "p": 0.313}, {"v": 24, "p": 0.244}, {"v": 22, "p": 0.218}, {"v": 25, "p": 0.103}], "probability_engine": "legacy", "probability_mode": "emos_shadow", "calibration_version": "emos-20260402162744", "calibration_source": "artifacts\\probability_calibration\\default.json", "calibrated_mu": 23.089999999999996, "calibrated_sigma": 1.2428312132581776} +{"city": "busan", "timestamp": "2026-04-15T05:00:00.000Z", "date": "2026-04-15", "temp_symbol": "°C", "raw_mu": 22.3, "raw_sigma": 0.5699999999999995, "deb_prediction": 21.9, "ensemble": {"p10": null, "median": null, "p90": null}, "multi_model": {"Open-Meteo": 21.9}, "max_so_far": 22.0, "observation": {"current_temp": 21.0, "humidity": null, "wind_speed_kt": 11.0, "visibility_mi": null, "local_hour": 14.866666666666667}, "peak_status": "past", "prob_snapshot": [{"v": 22, "p": 0.606}, {"v": 23, "p": 0.375}, {"v": 24, "p": 0.019}], "shadow_prob_snapshot": [{"v": 22, "p": 0.602}, {"v": 23, "p": 0.377}, {"v": 24, "p": 0.021}], "probability_engine": "legacy", "probability_mode": "emos_shadow", "calibration_version": "emos-20260402162744", "calibration_source": "artifacts\\probability_calibration\\default.json", "calibrated_mu": 22.3, "calibrated_sigma": 0.5797635451114579} +{"city": "busan", "timestamp": "2026-04-15T05:00:00.000Z", "date": "2026-04-15", "temp_symbol": "°C", "raw_mu": 23.4, "raw_sigma": 0.5699999999999995, "deb_prediction": 23.0, "ensemble": {"p10": null, "median": null, "p90": null}, "multi_model": {"Open-Meteo": 21.9, "ECMWF": 24.7, "GFS": 23.4, "ICON": 21.2, "GEM": 24.9, "JMA": 21.9}, "max_so_far": 22.0, "observation": {"current_temp": 21.0, "humidity": null, "wind_speed_kt": 11.0, "visibility_mi": null, "local_hour": 14.866666666666667}, "peak_status": "past", "prob_snapshot": [{"v": 23, "p": 0.513}, {"v": 24, "p": 0.404}, {"v": 22, "p": 0.057}, {"v": 25, "p": 0.027}], "shadow_prob_snapshot": [{"v": 23, "p": 0.518}, {"v": 24, "p": 0.405}, {"v": 22, "p": 0.053}, {"v": 25, "p": 0.024}], "probability_engine": "legacy", "probability_mode": "emos_shadow", "calibration_version": "emos-20260402162744", "calibration_source": "artifacts\\probability_calibration\\default.json", "calibrated_mu": 23.4, "calibrated_sigma": 0.5587884763366653} +{"city": "busan", "timestamp": "2026-04-15T05:00:00.000Z", "date": "2026-04-15", "temp_symbol": "°C", "raw_mu": 23.939999999999998, "raw_sigma": 0.6621236111111106, "deb_prediction": 23.1, "ensemble": {"p10": 23.5, "median": 23.8, "p90": 24.3}, "multi_model": {"Open-Meteo": 21.9, "ECMWF": 24.7, "GFS": 24.0, "ICON": 21.2, "GEM": 24.9, "JMA": 21.9}, "max_so_far": 22.0, "observation": {"current_temp": 21.0, "humidity": null, "wind_speed_kt": 11.0, "visibility_mi": null, "local_hour": 14.866666666666667}, "peak_status": "past", "prob_snapshot": [{"v": 24, "p": 0.553}, {"v": 23, "p": 0.241}, {"v": 25, "p": 0.191}, {"v": 22, "p": 0.015}], "shadow_prob_snapshot": [{"v": 24, "p": 0.565}, {"v": 23, "p": 0.236}, {"v": 25, "p": 0.186}, {"v": 22, "p": 0.013}], "probability_engine": "legacy", "probability_mode": "emos_shadow", "calibration_version": "emos-20260402162744", "calibration_source": "artifacts\\probability_calibration\\default.json", "calibrated_mu": 23.939999999999998, "calibrated_sigma": 0.6441124755606287} diff --git a/frontend/hooks/useDashboardStore.tsx b/frontend/hooks/useDashboardStore.tsx index a052fb80..e387a32f 100644 --- a/frontend/hooks/useDashboardStore.tsx +++ b/frontend/hooks/useDashboardStore.tsx @@ -233,6 +233,18 @@ function hasMeaningfulDailyModelMap( ); } +function pickPreferredNearbyStations( + currentValue: CityDetail["official_nearby"] | CityDetail["mgm_nearby"], + incomingValue: CityDetail["official_nearby"] | CityDetail["mgm_nearby"], +) { + const currentList = Array.isArray(currentValue) ? currentValue : []; + const incomingList = Array.isArray(incomingValue) ? incomingValue : []; + if (incomingList.length > 0) { + return incomingList; + } + return currentList; +} + function mergeCityDetail( current: CityDetail | undefined, incoming: CityDetail, @@ -264,8 +276,14 @@ function mergeCityDetail( } : current.multi_model_daily, forecast: current.forecast || incoming.forecast, - official_nearby: current.official_nearby || incoming.official_nearby, - mgm_nearby: current.mgm_nearby || incoming.mgm_nearby, + official_nearby: pickPreferredNearbyStations( + current.official_nearby, + incoming.official_nearby, + ), + mgm_nearby: pickPreferredNearbyStations( + current.mgm_nearby, + incoming.mgm_nearby, + ), network_lead_signal: current.network_lead_signal || incoming.network_lead_signal, airport_vs_network_delta: