From d0a53173d758505e92f12b2c35a922f4feb96e7a Mon Sep 17 00:00:00 2001 From: "2569718930@qq.com" <2569718930@qq.com> Date: Sun, 1 Mar 2026 18:59:17 +0800 Subject: [PATCH] feat: enhance /deb with error labels, bias analysis, and actionable trading suggestions --- bot_listener.py | 41 ++++++++++++++++++++++++++++++++++++++--- 1 file changed, 38 insertions(+), 3 deletions(-) diff --git a/bot_listener.py b/bot_listener.py index 16206db7..1cb9ca9c 100644 --- a/bot_listener.py +++ b/bot_listener.py @@ -423,6 +423,7 @@ def start_bot(): total_days = 0 hits = 0 deb_errors = [] + signed_errors = [] # 有正负的误差 (DEB - 实测) model_errors = {} for date_str in sorted(city_data.keys()): @@ -448,10 +449,17 @@ def start_bot(): deb_wu = round(deb_pred) hit = deb_wu == actual_wu if hit: hits += 1 - deb_errors.append(abs(deb_pred - actual)) + err = deb_pred - actual + deb_errors.append(abs(err)) + signed_errors.append(err) icon = "✅" if hit else "❌" retro = "≈" if 'deb_prediction' not in record else "" - lines.append(f" {date_str}: DEB {retro}{deb_pred}→{deb_wu} vs 实测 {actual}→{actual_wu} {icon}") + # 错误类型标签 + if not hit: + err_label = f" 低估{abs(err):.1f}°" if err < 0 else f" 高估{abs(err):.1f}°" + else: + err_label = f" 偏差{abs(err):.1f}°" + lines.append(f" {date_str}: DEB {retro}{deb_pred}→{deb_wu} vs 实测 {actual}→{actual_wu} {icon}{err_label}") elif date_str == today_str: lines.append(f" {date_str}: 📍 今天进行中 (实测暂 {actual})") @@ -478,7 +486,34 @@ def start_bot(): tag = " ⭐" if mae <= deb_mae else "" lines.append(f" {m}: {mae:.1f}°{tag}") lines.append(f" DEB融合: {deb_mae:.1f}°") - lines.append(f"\n💡 MAE = 平均绝对误差,数值越小预测越准。⭐ 表示优于 DEB 融合。") + + # 偏差模式分析 + mean_bias = sum(signed_errors) / len(signed_errors) + underest = sum(1 for e in signed_errors if e < -0.3) + overest = sum(1 for e in signed_errors if e > 0.3) + + lines.append(f"\n🔍 偏差分析:") + if abs(mean_bias) > 0.3: + bias_dir = "低估" if mean_bias < 0 else "高估" + lines.append(f" ⚠️ 系统性{bias_dir}:平均偏差 {mean_bias:+.1f}°") + else: + lines.append(f" ✅ 无明显系统偏差(平均 {mean_bias:+.1f}°)") + lines.append(f" 低估 {underest} 次 | 高估 {overest} 次 | 准确 {total_days - underest - overest} 次") + + # 可操作建议 + lines.append(f"\n💡 建议:") + if underest > overest and abs(mean_bias) > 0.5: + lines.append(f" 该城市模型集体低估趋势明显({mean_bias:+.1f}°),实际最高温可能比 DEB 融合值高 {abs(mean_bias):.0f}-{abs(mean_bias)+0.5:.0f}°。交易时建议适当看高。") + elif overest > underest and abs(mean_bias) > 0.5: + lines.append(f" 该城市模型集体高估趋势明显({mean_bias:+.1f}°),实际最高温可能比 DEB 融合值低。交易时建议适当看低。") + elif deb_mae > 1.5: + lines.append(f" 该城市预报波动大 (MAE {deb_mae:.1f}°),建议观望或轻仓。") + elif hit_rate >= 60: + lines.append(f" DEB 表现良好,可作为主要参考。") + else: + lines.append(f" 数据积累中,建议结合 AI 分析综合判断。") + + lines.append(f"\n📝 MAE = 平均绝对误差,越小越准。⭐ = 优于 DEB 融合。") else: lines.append("\n⏳ 尚无完整的 DEB 预测记录,明天起开始统计。")