diff --git a/docs/research/ACTIVE_FRONTS.md b/docs/research/ACTIVE_FRONTS.md index a0b95a75..d25b007f 100644 --- a/docs/research/ACTIVE_FRONTS.md +++ b/docs/research/ACTIVE_FRONTS.md @@ -105,3 +105,9 @@ Do not open new product surfaces before at least one of these four lanes is clos - Still open: - Vimsopaka semantic mapping for `NEECHA_BHANGA / GREAT_FRIEND / GREAT_ENEMY` - functional role now enters strict evidence; follow-up is Technique Audit Table rendering. + +## 生时校正:候选分不开(2026-09-14 收口) + +- 定论页(先读这个):`/docs/research/rectification_minute_resolution_closure_2026_09_14.md` +- 两个已被证伪的假设:加权重能拉开候选;簇合并把候选并没了(合并从未触发)。 +- 未解决的只剩「区间内部并列」,目前唯一被证明有效的信息源是用户提供的带年月新经历。 diff --git a/docs/research/rectification_minute_resolution_closure_2026_09_14.md b/docs/research/rectification_minute_resolution_closure_2026_09_14.md new file mode 100644 index 00000000..53f03fcf --- /dev/null +++ b/docs/research/rectification_minute_resolution_closure_2026_09_14.md @@ -0,0 +1,86 @@ +# 生时校正「候选分不开」两轮研究的结论页(2026-09-14) + +> 这一页是索引与定论。**下次有人想从"打分权重不够"或"簇合并把候选并没了"出发再查一遍之前,先读这页。** +> 口径:ayanamsa `raman`、node mode `mean`,步长 2 分钟,样本 `references/real_case_calibration/minute_rectification_holdout_v4.json`(20 例公开 Rodden-AA,每例 ≥7 件带年月事件、≥4 个领域)。不得与上游 true-node 数字直接对比。 + +## 0. 起因 + +真机反复出现:带年月的选择题问完,仍剩 4–5 个候选并列(例如相对可能性 26% / 26% / 20%),用户只能蒙。 +最初的假设有三个,两轮离线测量后**两个被证伪、一个被缩小**。 + +| 原始假设 | 结论 | +| --- | --- | +| A. 打分尺度对分钟不敏感(窗内恒定项 ≈ 11.5 分 vs 随分钟变化项 ≈ 2.1 分,约 5:1),加权重就能拉开 | **证伪**:五个改法三档半径无一过门 | +| B. 交付区间宽度永远等于整个搜索窗(簇合并"从不丢簇") | **证伪**:那是不含淘汰的测量口径产物;线上含淘汰后是 15 / 33 / 56 分钟 | +| C. 上游 `yinduzhanxing` 有我们缺的技法 | **证伪**:校正相关增量为零;上游自己也停在"整窗零淘汰" | + +## 1. 已经定论的事实 + +### 1.1 交付区间宽度:没有想象中糟,真值也从没丢 + +按线上口径(`unionStillValidRange` = 未淘汰且落后头名不足 8 分的簇覆盖并集),答完六题后: + +| 搜索半径 | 不含淘汰的并集(旧口径) | **线上真实宽度中位** | 真值落在交付区间 | +| --- | ---: | ---: | ---: | +| ±10 | 21 | **15** | 20/20 | +| ±30 | 61 | **33** | 20/20 | +| ±60 | 121 | **56** | 20/20 | + +### 1.2 簇合并根本没运行过 + +`cap_clusters_by_adjacent_merge` 的 docstring 写着 *"Keep the whole window…merge adjacent weak ones"*,容易让人以为弱簇被并回整窗。**实测三档半径上合并次数中位都是 0**:步长 2 分钟时候选最多 61 个,低于 `MAX_PUBLIC_CLUSTERS = 64`,函数压根不触发。真值簇独立率三档都是 20/20。 + +**→ 「簇合并把候选并没了」是假线索,不要再从这里查。** + +### 1.3 加权重类改法:全部不过门 + +| 改法 | 结果 | +| --- | --- | +| R1 分盘项除数(`2·len` → `len` / `√len` / 2) | 只在 ±10 提升头名命中 0.35→0.45,宽窗消失 | +| R2 去底座(每事件减窗内最小值) | 命中与宽度都不动,仅引擎熵略降 | +| R3 **KP 宫头子主计分** | ±10 命中 0.35 → 0.20(权重越大越差)。**不是假阴性**:20/20 例窗内子主确实变 5–9 次 | +| R4 年精度事件改边际似然(max / lse) | `max` 命中升到 0.50,但并列率 0.05 → 0.50,把峰值摊成平手 | +| R5 动态签名层 | 命中下降或持平,熵上升 | +| W1 提高簇上限 / W2 按分差拒绝合并 | 无收益(见 1.2,合并不触发) | +| W3 交付区间改分位覆盖 | ±10 / ±60 能收窄且覆盖不降,但 **±30 有一例把真值挤出区间** → 按红线不放行 | + +### 1.4 问答链本身是有效的 + +基线引擎头名簇命中只有 0.35 / 0.15 / 0.10;**按真值方向回放六题后升到 0.80 / 0.55 / 0.35**。 +也就是说:问对题是有用的,瓶颈不在"问了没用"。 + +## 2. 还没解决的,只剩一件 + +**区间内部的候选并列。** 真机 26% / 26% / 20% 属于这一类:宽度已经收窄,但区间里前两名分数相等。 +两轮实测的共同结论是:**靠调打分尺度拉不开**。要真正分开,只有两条路—— + +1. 用户再提供**带年月的新经历**(这是目前唯一被证明有效的信息源); +2. 接受并列,把它诚实地呈现成"这两分钟分不开",而不是给一个看似有推荐的代表分钟。 + +第 2 条已经在产品侧落地(风格参考题前置、并列时说明"按现有信息分不开")。 + +## 3. 产品决策存档 + +- **2026-09-14:KP 宫头子主参与评分**(产品负责人拍板,推翻 BUG-325 防复发条里的"不得把 KP 观察计分")。方向仍然有效,但 **R3 实测表明默认权重不能直接上线**,需要单独标定后再谈实现单。 +- **2026-09-14:风格题(D9/D10)在出交付卡之前必问**(放宽版 A),仍然不淘汰候选、只做 ±1 排序微调;并删除了风格题的事件锚点闸,保留"候选在该分盘上上升星座 ≥2 种"的区分力门。 + +## 4. 明确不采用 + +上游 `scripts/ashtakavarga.py` 的 `PL9_BAV_CELL_OVERRIDES`——为对齐某份 PDF 硬编码覆写特定行星/星座的 bindu 值。那是对答案,不是算法修正。 + +## 5. 索引 + +| 文档 | 内容 | +| --- | --- | +| `docs/research/upstream_rectification_gap_2026_09_14.md` | 与上游 `yinduzhanxing` 的逐项能力对照、许可证边界 | +| `docs/research/minute_resolution_2026_09_14.md` | 第一轮:R1–R5 打分尺度测量(**文末有勘误,务必读**) | +| `docs/research/cluster_width_2026_09_14.md` | 第二轮:宽度口径校正、簇结构画像、W1–W3 | +| `docs/research/holdout_v4_build_2026_09_14.md` | v4 封存基准的构建与标注协议 | +| `scripts/research/minute_resolution_sweep.py` / `cluster_width_probe.py` | 两轮的测量脚本(离线,未接生产) | +| `tests/test_minute_resolution_research.py` / `test_cluster_width_research.py` | 两轮脚本的回归测试 | + +## 6. 给下一个人的三条提醒 + +1. **先确认指标口径再下结论。** 第一轮的头条结论就是被"不含淘汰"的宽度口径带偏的;第二轮 M0 才把它纠回来。 +2. **不要从 docstring 推断行为。** 簇合并那条假线索就是这么来的——实测它从未触发。 +3. **真值覆盖率优先于区间宽度。** 把区间做窄很容易,把真实分钟挤出去是更严重的错误(`AGENTS.md` Part B B4)。W3 就是卡在这一条。