Expose DEB quality guidance

This commit is contained in:
2569718930@qq.com
2026-06-07 23:57:47 +08:00
parent 4389d4a40d
commit bbe3871b7c
9 changed files with 264 additions and 3 deletions
+31
View File
@@ -1198,6 +1198,7 @@ def _analyze(
deb_bias_adjustment, deb_bias_samples = 0.0, 0
deb_intraday_adjustment = 0.0
deb_hourly_consensus = None
deb_quality = {}
if current_forecasts:
deb_result = calculate_deb_prediction(city, current_forecasts)
if deb_result.get("prediction") is not None:
@@ -1207,6 +1208,14 @@ def _analyze(
deb_bias_adjustment = deb_result.get("bias_adjustment") or 0.0
deb_bias_samples = deb_result.get("bias_samples") or 0
deb_weights = deb_result.get("weights_info") or ""
deb_quality = {
"quality_tier": deb_result.get("quality_tier"),
"recommendation": deb_result.get("recommendation"),
"recent_hit_rate": deb_result.get("recent_hit_rate"),
"recent_samples": deb_result.get("recent_samples"),
"recent_hits": deb_result.get("recent_hits"),
"recent_mae": deb_result.get("recent_mae"),
}
deb_hourly_consensus = build_deb_hourly_consensus_path(
city=city,
hourly_times=mm.get("hourly_times") or [],
@@ -1366,6 +1375,7 @@ def _analyze(
deb_bias_adjustment = sd.get("deb_bias_adjustment") or 0.0
deb_bias_samples = sd.get("deb_bias_samples") or 0
deb_weights = sd.get("deb_weights", "")
deb_quality = sd.get("deb_quality") or deb_quality
if deb_hourly_consensus is None and sd.get("deb_hourly_consensus"):
deb_hourly_consensus = sd.get("deb_hourly_consensus")
@@ -1675,6 +1685,7 @@ def _analyze(
d_val, d_winfo = None, ""
d_raw_val, d_version = None, None
d_bias_adjustment, d_bias_samples = 0.0, 0
d_quality = {}
d_probs = []
d_probs_all = []
if day_m:
@@ -1688,6 +1699,14 @@ def _analyze(
d_bias_adjustment = deb_result.get("bias_adjustment") or 0.0
d_bias_samples = deb_result.get("bias_samples") or 0
d_winfo = deb_result.get("weights_info") or ""
d_quality = {
"quality_tier": deb_result.get("quality_tier"),
"recommendation": deb_result.get("recommendation"),
"recent_hit_rate": deb_result.get("recent_hit_rate"),
"recent_samples": deb_result.get("recent_samples"),
"recent_hits": deb_result.get("recent_hits"),
"recent_mae": deb_result.get("recent_mae"),
}
# Calculate future probability based on model divergence
m_vals = [v for v in day_m.values() if v is not None]
@@ -1714,6 +1733,7 @@ def _analyze(
"weights_info": d_winfo,
"bias_adjustment": d_bias_adjustment,
"bias_samples": d_bias_samples,
**d_quality,
},
"probabilities": d_probs if i > 0 else probabilities, # Use today's real prob for today
"probabilities_all": d_probs_all if i > 0 else probabilities_all,
@@ -1880,6 +1900,7 @@ def _analyze(
"hourly_consensus": deb_hourly_consensus,
"hourly_path": deb_hourly_path,
"hourly_correction": (deb_hourly_path or {}).get("correction") if isinstance(deb_hourly_path, dict) else None,
**deb_quality,
},
"deviation_monitor": deviation_monitor,
"ensemble": ens_data,
@@ -2201,6 +2222,7 @@ def _analyze_summary(city: str, force_refresh: bool = False) -> Dict[str, Any]:
deb_version = None
deb_bias_adjustment = 0.0
deb_bias_samples = 0
deb_quality = {}
if current_forecasts:
deb_result = calculate_deb_prediction(city, current_forecasts)
if deb_result.get("prediction") is not None:
@@ -2209,6 +2231,14 @@ def _analyze_summary(city: str, force_refresh: bool = False) -> Dict[str, Any]:
deb_version = deb_result.get("version")
deb_bias_adjustment = deb_result.get("bias_adjustment") or 0.0
deb_bias_samples = deb_result.get("bias_samples") or 0
deb_quality = {
"quality_tier": deb_result.get("quality_tier"),
"recommendation": deb_result.get("recommendation"),
"recent_hit_rate": deb_result.get("recent_hit_rate"),
"recent_samples": deb_result.get("recent_samples"),
"recent_hits": deb_result.get("recent_hits"),
"recent_mae": deb_result.get("recent_mae"),
}
if deb_val is None:
deb_val = om_today
@@ -2285,6 +2315,7 @@ def _analyze_summary(city: str, force_refresh: bool = False) -> Dict[str, Any]:
"version": deb_version,
"bias_adjustment": deb_bias_adjustment,
"bias_samples": deb_bias_samples,
**deb_quality,
},
"deviation_monitor": deviation_monitor or {},
"updated_at": datetime.now(timezone.utc).isoformat(),