Files
Jyotisha/docs/tasks/TASK-rectification-varga-resolution-research-20260930.md
T

109 lines
9.1 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.
# TASK · 生时校正「盘型口径」研究:以分盘上升段为目标(研究单,2026-09-30)
## 基线
- `origin/staging` @ `84475195`(写作时 head;开工时以最新 `origin/staging` 为准)。
- 分支 `codex/rectification-varga-resolution-research-20260930`,工作树 `.worktrees/rectification-varga-resolution-research-20260930`。
- **离线研究,不改生产代码**:不动 `scripts/research/sealed_holdout_rerun.py::PRODUCTION_FILES` 的 10 个冻结文件、`active_rectification_event_engine.py`、任何常数、`frontend/`。研究侧复用 `scripts/research/scoring_research_lib.py`(已与线上 `score_candidates` 逐分对账 0 差)与 `futile_collect_stop_replay.py::evaluate_case`(六题回放)。
- 数据:`references/real_case_calibration/minute_rectification_holdout_v5.json`(77 例公开 AA;BUG-1090)。
- 起点材料(Claude 2026-09-30 已算,未入库,在 `/tmp/claude-1000/-workspace-Jyotisha/6c057fd4-eb1e-47e4-9dc1-3192c44dcc49/scratchpad/`):`chart_configs.py`(77 例 ±60 逐分钟 D1/D9/D10/D12 上升,`chart_configs_v5.json`)、`v5_intervals.py`(truth 方向六题后交付区间,`v5_intervals.json`,231 行)。M0 先把它们入库并复现下表。
## 先读
- `docs/research/rectification_scoring_research_2026_09_29.md`(打分层三条 no_benefit;稳定特征 0 个)
- `docs/research/rectification_minute_resolution_closure_2026_09_14.md` §1–§2、§8–§9
- `docs/research/holdout_v5_build_2026_09_29.md`(v5 基线:六题后头名 0.64 / 0.49 / 0.26,真值在区间 76/77、76/77、75/77,宽度 15 / 35 / 63)
## 事故实证与已算出的数字
产品 2026-09-29 真机:31 分钟窗答完题范围不动;2026-09-30 三轮打分研究证明**星盘先验在分钟级几乎不携带信息**(42 个特征在 77 例上 36–39 个是噪声,数据定权重比人拍权重更差)。产品追问"那用户信息没用了?"——答案是:分钟不可分,但**用户真正要的是"用哪张盘解读"**,而分盘上升段远少于候选分钟。
Claude 2026-09-30 用 v5 实测(步长 1 分钟,raman / mean):
**窗口内有几种上升(77 例)**
| 窗口 | D1 只有 1 种 | D9 平均种数 | D10 平均种数 | D1×D9×D10 平均组合数 |
| --- | --- | --- | --- | --- |
| ±10 | 64/77 | 2.4 | 2.5 | 3.8 |
| ±15 | 51/77 | 3.2 | 3.3 | 5.3 |
| ±30 | 37/77 | 5.4 | 5.3 | 9.7 |
| ±60 | 10/77 | 9.3 | 8.5 | 18.3 |
**六题后交付区间(线上口径 `unionStillValidRange`,truth 方向)里盘型能否定下来**
| 半径 | 盘 | 区间内只剩 1 种 | ≤2 种 | 区间内多数分钟的盘型 = 真值盘型 |
| --- | --- | --- | --- | --- |
| ±10 | D1 | 75/77 | 77/77 | 76/77 |
| ±10 | D9 | 22/77 | 68/77 | 68/77(88%) |
| ±10 | D10 | 27/77 | 63/77 | 65/77(84%) |
| ±10 | D1×D9×D10 | 15/77 | 34/77 | 52/77(68%) |
| ±30 | D9 / D10 | 7 / 4 | 24 / 22 | 33 / 34 |
| ±60 | D9 / D10 | 1 / 2 | 11 / 10 | 15 / 25 |
读法:±10 级窗口,D1 几乎总是定的;D9 / D10 六题后能收到二选一(82–88%),按"多数"选对 84–88%——比"最可能的分钟"(头名 0.64)有用得多。±30 起分盘也分不开。
## 根因(产品层,不是算法层)
1. 目标函数是"分钟":选题按"分开候选分钟"排序、交付按分钟区间展示、并列按分钟数。用户要的是"用哪张盘"。
2. 窗口内 D1 / D9 / D10 一次都不换的用户(±15 时 D1 有 2/3)照样走完整流程。
3. 不按问题域取盘:问事业的人被 D9 分歧点的题占用额度,反之亦然。
4. 没有"分盘不可判"的诚实出口:±30 以上仍给分钟区间,实际上分盘已不可靠。
## 决策记录(产品 2026-09-30)
- **批准**本研究单:目标从"分钟"改为"分盘上升段";先在 v5 上量,**不做实现**。实现单等本单数字出来后另立。
- **不改**:引擎、11 张计分分盘、`MIN_SEPARATION_LEAD`、45 天闸门、七条采集线、选择题形式、采用 / 确认门、来源标签(BUG-690)、训练门与留一件对照。研究侧只在这些之上加"按段汇总"与"按段选题"。
- **不加静态题**(外貌、兄弟姐妹数、父母资料):D1 在窗内基本不变、D3 40 分钟一换,静态信息对所有候选同真,2026-09-30 产品已知悉。
- 按问题域取盘:事业 → D1 + D10;婚恋 → D1 + D9;综合 / 报告 → D1 + D9 + D10(可加 D12 作参考,不作目标)。
- 可信度按档位说话,阈值由本单校准,不得报假精度。
- 打分层研究已关闭(BUG-1091 closed_by_design),本单不得重开权重 / 特征类实验。
## 硬红线
1. **真值所在段不得被排除**:每个盘、每档半径,"真值盘型段仍在候选段集合内"的比例 ≥ 现在"真值在区间"的比例(76/77、76/77、75/77)。任何一格变差即该方案不过门,把数字写进 PROGRESS,不得调阈值凑。
2. 阈值-准确率表必须用留一法 / 分折给出(阈值在训练折定、在验证折量),并报全集拟合作对照。
3. 稳健性必测:答错 1 题、答错 2 题(09-26 R1 口径);事件日期 ±7 天;LMT 时代记录(1900 年前出生)单独一列,不得剔除。
4. 生产代码零改动;研究计分器与线上逐分对账(沿用 `scoring_research_lib.reconcile_rows`);`PYTHONHASHSEED=0`,所有 JSON 两次复跑逐字节一致。
5. 快速门与开工基线逐条一致;隐私守卫全绿;文档不写真机会话内容。
6. 负结果完整写出,不得只报有利档位或有利分盘。
## 任务分解
- **M0 入库起点(BUG-1105)**
- 把 `chart_configs.py` / `v5_intervals.py` 整理为 `scripts/research/varga_resolution_lib.py` + `varga_resolution_probe.py`(CLI:`--radii`、`--vargas`、`--json-out`),复现上面两张表,数字逐格一致;JSON 进 `docs/research/varga_resolution_baseline_2026_09_30.json`。
- 验收:`tests/test_varga_resolution_research.py`(段切分正确性、跨午夜偏移、与上表逐格一致、两次复跑一致)。
- **M1 段级汇总与可信度校准**
- 定义:某盘的"段" = 窗口内该盘上升相同的连续分钟;段质量 = 段内候选分数之和(三种口径:`raw`、`percent`、均匀)。六题后(沿用线上出题)计算每盘"最强段占比"。
- 输出:每盘 × 每档半径的**阈值-准确率表**(占比 ≥ t 时最强段 = 真值段的比例,t = 0.5 / 0.6 / 0.7 / 0.8 / 0.9),留一法;"剩余 ≤2 段"比例;真值段被排除比例(硬红线 1)。
- 验收:表进研究文档;三口径对比;给出推荐口径与档位(较可信 / 倾向 / 分不开)的候选阈值。
- **M2 按段选题**
- 研究侧实现"段级信息增益"排序:同一探针池(`event_probes` 现有候选题,不改其文件),按"两侧候选分属不同段的质量差"排序,替代按分钟排序;只针对目标盘出题。
- 比较(同样六题,或达到 M1 推荐阈值即停):题数、真值段保留率、最强段准确率、与线上选题逐格差异。
- 验收:表进文档;若按段选题反而更差,如实写并给原因。
- **M3 按问题域取盘 + "不用校正"比例**
- 三种取盘策略(事业 / 婚恋 / 综合)各跑一遍:题数、准确率;并统计每档半径"目标盘在窗内只有 1 段"的比例(= 可以直接告知"不用校正"的用户)。
- 验收:三策略表 + "不用校正"比例表。
- **M4 结论与实现单要点**
- `docs/research/rectification_varga_resolution_2026_09_30.md`:一句话结论表(M1–M3 各一行 + 是否建议实现)、推荐口径、档位阈值、每档半径的诚实出口(±30 以上只给 D1)、实现单要点(录入后段扫描 / 选题目标 / 段级汇总与停止 / 交付卡与采用卡文案,须点名要改的模块与不改的模块)。
- `docs/research/ACTIVE_FRONTS.md` 索引;定论页 §10;`docs/tasks/PROGRESS-rectification-varga-resolution-research-20260930.md`;BUG-1105 状态;`docs/tasks/README.md` 行。
## 让步顺序
M0 > M1 > M3 > M2 > M4 的图表。M0 与 M1 缺一不可合入;M2 / M3 未做写 `not_started`,不得写成结论。
## 开工前置命令
```bash
git fetch origin --prune
git worktree add -b codex/rectification-varga-resolution-research-20260930 .worktrees/rectification-varga-resolution-research-20260930 origin/staging
cd .worktrees/rectification-varga-resolution-research-20260930
export PYTHONHASHSEED=0
python3 -m pytest -q tests/test_scoring_research.py tests/test_holdout_v5_schema.py tests/test_rectification_validation_integrity_gate.py tests/test_repo_privacy_markers.py # 基线
python3 scripts/research/scoring_research.py --help
python3 scripts/research/futile_collect_stop_replay.py --help
```
## BUG 编号
开工时核对 `docs/BUG_HISTORY.md` 最大号(写作时 `BUG-1104`)。本单:**BUG-1105**(校正目标函数是分钟而非用户要用的分盘;窗内盘型不变的用户被迫答题;无"分盘不可判"出口)。执行方以 `investigating` 登记,研究结束按结果改 `resolved`(有实现单)或 `closed_by_design`。关联 BUG-560、BUG-1084、BUG-1090、BUG-1091。