Files
PolyWeather/README_ZH.md
T

154 lines
6.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 🌡️ PolyWeather: 智能天气量化分析机器人
PolyWeather 是一款专为 **Polymarket** 等预测市场打造的天气分析工具。它通过聚合多源气象预报、实时机场 METAR 观测,并引入数学概率模型与 AI 决策支持,帮助用户更科学地评估天气博弈风险。
<p align="center">
<img src="docs/images/demo_ankara.png" alt="PolyWeather 效果展示 - 安卡拉实时分析" width="420">
<br>
<em>📊 实时查询效果:DEB 融合预测 + 结算概率 + Groq AI 决策</em>
</p>
---
## ✨ 核心功能
### 1. 🧬 动态权重集合预报 (DEB 算法)
系统会自动追踪各个气象模型(ECMWF, GFS, ICON, GEM, JMA)在特定城市的历史表现:
- **误差加权**:根据过去 7 天的平均绝对误差(MAE),动态调整各模型的权重。误差越小的模型,话语权越大。
- **融合预报**:给出经过历史偏差修正后的"DEB 融合最高温"建议值。
- **自学习机制**:系统需要至少 2 天的实测记录才会启动权重分化。冷启动期间以等权平均过渡。
- **准确率追踪**:通过 `/deb` 命令查看 DEB 融合预测的历史 WU 结算命中率和 MAE,并与各个单一模型对比。
- **自动清理**:只保留最近 14 天的记录,防止数据无限增长。
### 2. 🎲 数学概率引擎 (Settlement Probability)
基于集合预报的正态分布拟合,自动计算每个 WU 结算整数温度的概率:
- **分布中心 μ**:以 DEB/多模型中位数(70% 权重)和集合中位数(30%)的加权均值为中心。当实测最高温已超过 μ 且仍在升温时,自动向上修正。
- **标准差 σ**:由 51 成员集合预报的 P10/P90 反推(σ = (P90-P10) / 2.56)。
- **时间衰减**:σ 会根据当前时间与预计最热时段的关系动态收窄:
- 峰值前:σ × 1.0(最大不确定性)
- 峰值窗口内:σ × 0.7(正在定型)
- 峰值后:σ × 0.3(大局已定)
- **实测过滤**:已实测到的最高温对应 WU 值以下的候选温度自动排除(不可能回退)。
- **区间积分**:对每个 WU 取整区间 [N-0.5, N+0.5) 做正态积分,得到结算落入该整数的概率。
- **展示格式**`🎲 结算概率 (μ=3.7)4°C [3.5~4.5) 68% | 3°C [2.5~3.5) 32%`
### 3. 🤖 AI 深度分析 (Groq LLaMA 3.3 70B)
将风速、风向、云量、太阳辐射、METAR 趋势等全部投喂给 LLaMA 70B 大模型:
- **逻辑推演**:用 2-3 句话深度分析机场动力因子对升温的促进/阻碍,明确引用 Open-Meteo 预报值和 DEB 融合值作为对标。
- **时间感知**:分析中会考虑当前时间距预计最热时段的距离,判断剩余升温空间。
- **盘口判定**:明确给出预计最热时段和具体博弈温度区间。降温确认后直接给出死盘结论。
- **置信度评分**:1-10 分量化置信度参考。
- **高可用保障**:内置自动重试 + 备用模型降级机制(70B → 8B),抵御 Groq API 503/500 故障。
### 4. ⏱️ 实时机场观测 (Zero-Cache METAR)
- **精确时间**:从 METAR 原始报文 (`rawOb`) 中提取真实观测时间,而非 API 取整后的 `reportTime`,精确到分钟。
- **实时穿透**:通过动态请求头绕过 CDN 缓存,获取机场第一手 METAR 报文。
- **结算预警**:自动计算 Wunderground 结算边界(X.5 进位线),提醒潜在波动。
- **异常过滤**:自动过滤 MGM 等数据源的 -9999 哨兵值,避免垃圾数据污染输出。
### 5. 📈 历史数据采集
- 提供 `fetch_history.py` 脚本,可一键获取各城市过去 3 年的小时级历史气象数据(温度、湿度、辐射、气压等 10+ 维度),为后续机器学习模型(XGBoost/MOS)提供数据基础。
---
## ⚡ 部署说明
### 环境要求
- **Python 3.11+**
- 依赖安装: `pip install -r requirements.txt`
- **环境变量**: 在 `.env` 中设置 `TELEGRAM_BOT_TOKEN``GROQ_API_KEY`
### VPS 快捷部署
1. 克隆仓库并安装依赖。
2. 配置 `.env` 文件。
3. 使用以下脚本实现一键更新与重启:
```bash
cat > ~/update.sh << 'EOF'
#!/bin/bash
cd ~/PolyWeather
git fetch origin
git reset --hard origin/main
pkill -f bot_listener.py
sleep 1
nohup python3 bot_listener.py > bot.log 2>&1 &
echo "✅ PolyWeather 已重启!"
EOF
chmod +x ~/update.sh
```
---
## 🕹️ 机器人指令
| 指令 | 说明 |
| :--------------- | :---------------------------------------------------------- |
| `/city [城市名]` | 获取深度气象分析、结算概率、实测追踪及 AI 决策建议。 |
| `/deb [城市名]` | 查看 DEB 融合预测的历史准确率(WU 命中率、MAE)和模型对比。 |
| `/id` | 查看当前对话的 Chat ID。 |
| `/help` | 显示说明信息。 |
### 支持城市示例
`lon`(伦敦)、`par`(巴黎)、`ank`(安卡拉)、`nyc`(纽约)、`chi`(芝加哥)、`dal`(达拉斯)、`mia`(迈阿密)、`atl`(亚特兰大)、`sea`(西雅图)、`tor`(多伦多)、`sel`(首尔)、`ba`(布宜诺斯艾利斯)、`wel`(惠灵顿) 等。
---
## 🏗️ 系统架构
```mermaid
graph TD
User[用户] -->|查询指令| Bot[bot_listener.py 核心调度器]
subgraph 数据获取层
Bot --> Collector[WeatherDataCollector]
Collector --> OM[Open-Meteo 预报/集合]
Collector --> MM[多模型 ECMWF/GFS/ICON/GEM/JMA]
Collector --> METAR["机场实时 METAR (rawOb精确时间)"]
end
subgraph 算法层
Collector --> Peak[峰值时段预测]
Collector --> DEB[DEB 动态权重融合]
DEB --> DB[(daily_records 数据库)]
Peak --> Prob[正态分布概率引擎]
Collector --> Prob
Collector --> Logic[结算边界 / 趋势分析]
end
subgraph AI 决策层
DEB --> AI[Groq LLaMA 70B]
Prob --> AI
Logic --> AI
METAR --> AI
end
AI -->|盘口 + 逻辑 + 置信度| Bot
Bot -->|DEB融合 + 概率 + AI分析| User
```
---
## 💡 交易提示
1. **紧盯结算概率**:概率引擎基于数学模型计算,比 AI 的主观判断更客观。当某个温度概率 > 65%,说明方向较为明确。
2. **关注时间衰减**:概率会随时间推进自动锁定。峰值过后,概率引擎自动缩窄 σ,结果高度集中在实测最高值附近。
3. **参考 DEB 融合值**:当多模型分歧较大时,DEB 的修正值通常比单一预报更具参考意义。
4. **观察 AI 置信度**:置信度低于 5 分时,说明当前气象环境处于高度不确定状态,建议观望。
5. **注意结算边界**:实测最高温接近 X.5 时,需警惕 Wunderground 结算时的进位跳动。
6. **分布中心 μ**:概率展示中的 μ 值代表算法预期的最可能实际最高温,可与 Polymarket 盘口价格直接对比。
---
_更新于 2026-03-01_