Files
PolyWeather/docs/weathernext2-integration.md
2026-07-02 20:25:40 +08:00

98 lines
3.7 KiB
Markdown

# WeatherNext 2 接入说明
PolyWeather 已新增 WeatherNext 2 的内部接入层,当前定位是“概率底座”和“DEB 参考模型”,不是公开 API。
## 已落地
- `src.data_collection.weathernext2_sources`
- 将 64 成员最高温预报聚合成 Polymarket 口径概率桶。
- 摄氏城市按单温度选项,例如 `33°C`
- 华氏城市按两度市场选项,例如 `94-95°F`
- 支持从 hourly 成员序列按城市当地日期切出今日最高温。
- `WeatherDataCollector.fetch_weathernext2_probability`
- 默认关闭,不影响现有生产采集。
- `WEATHERNEXT2_ENABLED=1` 后启用。
- 优先读取 worker 生成的 `/app/data/weathernext2_city_highs.json`,再降级读取 fixture。
- 若存在 LightGBM 校准模型,会对 raw 成员分布做 quantile residual 校准后再生成市场桶概率。
- `web.weathernext2_worker`
- 独立低频 worker,不在 API/Telegram 请求中训练或访问 GCS。
- 从 GCS Zarr 对城市经纬度最近格点取 2m temperature hourly ensemble。
- 按城市当地日期切今日最高温,写入离线 JSON 产物。
- 使用 `training_feature_records_store` + `truth_records_store` 训练 LightGBM q10/q50/q90 residual calibrator。
- `trend_engine`
-`weather_data["weathernext2"]` 存在,`distribution_full` 使用 WeatherNext 2 概率桶,`probability_engine=weathernext2`
- WeatherNext 2 ensemble median/mean 会作为 `WeatherNext 2` 进入 `current_forecasts`,供 DEB 融合参考。
## 环境变量
```bash
WEATHERNEXT2_ENABLED=1
WEATHERNEXT2_BACKEND=gcs_zarr
WEATHERNEXT2_DATA_ROOT=/app/data/weathernext2
WEATHERNEXT2_CITY_HIGHS_PATH=/app/data/weathernext2_city_highs.json
WEATHERNEXT2_MODEL_DIR=/app/data/models/weathernext2_calibrator
WEATHERNEXT2_WORKER_INTERVAL_SEC=21600
WEATHERNEXT2_CACHE_TTL_SEC=21600
WEATHERNEXT2_GCS_ZARR_URI=gs://weathernext/weathernext_2_0_0/zarr
WEATHERNEXT2_MEAN_GCS_ZARR_URI=gs://weathernext/weathernext_2_0_0_mean/zarr
GOOGLE_APPLICATION_CREDENTIALS=/app/secrets/gcp-sa.json
```
Google 官方说明中 WeatherNext 2 GCS Zarr 路径为 `gs://weathernext/weathernext_2_0_0/zarr`,访问前需要 WeatherNext Data Request 权限。缺 GCP 凭据或无访问权限时,worker 会失败退出本轮,不覆盖旧产物;Web/API 仍按现有数据源运行。
## Artifact / Fixture 格式
```json
{
"schema_version": 1,
"source": "weathernext2",
"backend": "gcs_zarr",
"generated_at": "2026-07-01T10:00:00+00:00",
"cities": {
"houston": {
"target_date": "2026-06-29",
"source_run": "2026-06-29T00:00:00Z",
"member_highs": {
"member_00": 94.1,
"member_01": 94.8,
"member_02": 95.2,
"member_03": 96.7
},
"summary": {
"members": 4,
"median": 95.0
},
"buckets": []
}
}
}
```
也可以提供 hourly 成员序列:
```json
{
"shanghai": {
"target_date": "2026-06-29",
"timezone_offset_seconds": 28800,
"utc_times": ["2026-06-28T16:00:00Z", "2026-06-29T06:00:00Z"],
"member_hourly": {
"member_00": [31.2, 33.0],
"member_01": [30.8, 32.6]
}
}
}
```
## 后续真实拉取
Google 官方 WeatherNext 2 数据源包括 GCS Zarr、BigQuery、Earth Engine 和 Vertex AI。当前第一版已经按独立离线 job 落地:
- 每 6 小时拉取最近一次 WeatherNext 2 run。
- 对 50 个城市插值到机场/结算点。
- 切城市当地日期今日最高温。
- 写入 `/app/data/weathernext2_city_highs.json` 或数据库表。
- Web/API 只读本地结果,避免实时请求 Google 数据集影响响应时间。
后续可以评估 BigQuery 后端作为替代路径,但不应让 API 请求直接依赖外部 WeatherNext 数据集。