docs(research): measure why delivered range width equals the search window
Offline v4 holdout probe. Last round's width=window result was the no-elimination metric; production still-valid ranges after six answers are 15/33/56 minutes. Adjacent merge never fires under step-2 radii. W1/W2 match baseline; W3 is uncertain after one coverage squeeze. No production clustering or scoring defaults changed.
This commit is contained in:
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,128 @@
|
||||
# 交付区间宽度与簇合并测量(2026-09-14)
|
||||
|
||||
- 口径:ayanamsa `raman`,node mode `mean`。不得与上游 true-node 数字直接对比。
|
||||
- 数据:`references/real_case_calibration/minute_rectification_holdout_v4.json`,20 例公开 Rodden-AA。
|
||||
- 半径:±10, ±30, ±60,步长 2 分钟。
|
||||
- 性质:离线测量。生产 `candidate_contrast.py` / `scoring_service.py` / `active_rectification_event_engine.py` 默认值未改。
|
||||
- 线上对照:`unionStillValidRange` = 未淘汰且落后头名不足 8 分的簇覆盖并集(`MIN_SEPARATION_LEAD = 8`)。
|
||||
|
||||
## 结论
|
||||
|
||||
**不确定,不立实现单。** 线上 `MAX_PUBLIC_CLUSTERS=64` 与「公开簇并集」交付保持不动。
|
||||
|
||||
| 改法 | 判定 | 要点 |
|
||||
| --- | --- | --- |
|
||||
| **W1 提高簇上限** | 无收益 | 本网格合并次数全是 0,改上限与基线相同 |
|
||||
| **W2 按分差拒绝合并** | 无收益 | 同上,合并不触发,分差门槛无事可拒 |
|
||||
| **W3 分位覆盖区间** | 不确定 | ±10 / ±60 能收窄且覆盖不降;±30 的 0.7/0.8 覆盖下降。 挤出:W3@0.7 ±30 `chad_everett_1937_aa_v4_holdout`;W3@0.8 ±30 `chad_everett_1937_aa_v4_holdout` |
|
||||
|
||||
读数字时先看 M0:**上一轮「宽度中位 = 整窗」是测量口径,不是线上答完题之后的行为。** 不含淘汰时并集确实恒等于搜索窗(21 / 61 / 121);按线上 `unionStillValidRange` 做六题淘汰后,宽度中位已经是 **15.0 / 33.0 / 56.0**,真值覆盖仍是 20/20。合并在步长 2 的三档半径上不会触发(簇数低于 64)。
|
||||
|
||||
过运与三大外部引擎未参与本单(纯聚类/交付口径,不解释运势)。
|
||||
|
||||
| 改法 | 判定 | 说明 |
|
||||
| --- | --- | --- |
|
||||
| W1@128 | **no_benefit** | ±10:no_benefit;±30:no_benefit;±60:no_benefit |
|
||||
| W1@none | **no_benefit** | ±10:no_benefit;±30:no_benefit;±60:no_benefit |
|
||||
| W2@1 | **no_benefit** | ±10:no_benefit;±30:no_benefit;±60:no_benefit |
|
||||
| W2@2 | **no_benefit** | ±10:no_benefit;±30:no_benefit;±60:no_benefit |
|
||||
| W2@4 | **no_benefit** | ±10:no_benefit;±30:no_benefit;±60:no_benefit |
|
||||
| W2@8 | **no_benefit** | ±10:no_benefit;±30:no_benefit;±60:no_benefit |
|
||||
| W3@0.7 | **uncertain** | ±10:benefit;±30:no_benefit;±60:benefit |
|
||||
| W3@0.8 | **uncertain** | ±10:benefit;±30:no_benefit;±60:benefit |
|
||||
| W3@0.9 | **uncertain** | ±10:no_benefit;±30:benefit;±60:benefit |
|
||||
|
||||
## M0 · 上一轮宽度口径
|
||||
|
||||
上一轮 `width_median` **不含淘汰**,取全部公开簇并集。公开簇划分整个搜索窗且合并从不丢分钟,所以该口径下宽度等于整窗是恒等式。
|
||||
|
||||
| 半径 | 上一轮宽度(无淘汰) | 本轮引擎并集 | 六题后未淘汰并集 | 六题后线上口径(lead 8) | 真值挤出 |
|
||||
| --- | ---: | ---: | ---: | ---: | ---: |
|
||||
| ±10 | 21 | 21 | 15 | 15 | 0 |
|
||||
| ±30 | 61 | 61 | 36 | 33 | 0 |
|
||||
| ±60 | 121 | 121 | 104 | 56 | 0 |
|
||||
|
||||
## M1 · 簇结构画像(生产合并,max=64)
|
||||
|
||||
| 半径 | 合并前簇数中位 | 合并次数中位 | 合并后簇数中位 | 真值簇独立率 | 窗内候选中位 | ±10 内恒定层 |
|
||||
| --- | ---: | ---: | ---: | ---: | ---: | ---: |
|
||||
| ±10 | 6 | 0 | 6 | 1 | 21 | d1, md |
|
||||
| ±30 | 16 | 0 | 16 | 1 | 61 | 无 |
|
||||
| ±60 | 31 | 0 | 31 | 1 | 121 | 无 |
|
||||
|
||||
三档半径上合并次数中位都是 0:步长 2 分钟时候选数最多 61,低于 `MAX_PUBLIC_CLUSTERS=64`,`cap_clusters_by_adjacent_merge` 根本不会触发。宽度等于整窗,是因为公开簇**划分**了整个窗口,不是因为弱簇被并回去。
|
||||
|
||||
签名簇最多 46,仍低于 64。真值簇独立率在三档半径上都是 20/20。±10 窗内 `md` 恒定;变化最多的是 `d24`。
|
||||
|
||||
### ±10 签名层变化
|
||||
|
||||
| 层 | 取值种数中位 | 相邻变化次数中位 | 窗内恒定比例 |
|
||||
| --- | ---: | ---: | ---: |
|
||||
| d1 | 1 | 0 | 0.8 |
|
||||
| d9 | 2 | 1 | 0 |
|
||||
| d10 | 2 | 1 | 0.05 |
|
||||
| d24 | 4 | 3 | 0 |
|
||||
| d4 | 2 | 1 | 0.4 |
|
||||
| d12 | 3 | 2 | 0 |
|
||||
| md | 1 | 0 | 1 |
|
||||
|
||||
## M2 · 三个改法(六题后线上口径)
|
||||
|
||||
### ±10 分钟
|
||||
|
||||
| 方案 | 头名簇命中 | 区间覆盖 | 宽度中位 | 并列率 | 真值簇独立率 | 公开簇中位 | 挤出 |
|
||||
| --- | ---: | ---: | ---: | ---: | ---: | ---: | ---: |
|
||||
| baseline | 0.8 | 1 | 15 | 0 | 1 | 6 | 0 |
|
||||
| W1@128 | 0.8 | 1 | 15 | 0 | 1 | 6 | 0 |
|
||||
| W1@none | 0.8 | 1 | 15 | 0 | 1 | 6 | 0 |
|
||||
| W2@1 | 0.8 | 1 | 15 | 0 | 1 | 6 | 0 |
|
||||
| W2@2 | 0.8 | 1 | 15 | 0 | 1 | 6 | 0 |
|
||||
| W2@4 | 0.8 | 1 | 15 | 0 | 1 | 6 | 0 |
|
||||
| W2@8 | 0.8 | 1 | 15 | 0 | 1 | 6 | 0 |
|
||||
| W3@0.7 | 0.8 | 1 | 9 | 0 | 1 | 6 | 0 |
|
||||
| W3@0.8 | 0.8 | 1 | 11 | 0 | 1 | 6 | 0 |
|
||||
| W3@0.9 | 0.8 | 1 | 15 | 0 | 1 | 6 | 0 |
|
||||
|
||||
### ±30 分钟
|
||||
|
||||
| 方案 | 头名簇命中 | 区间覆盖 | 宽度中位 | 并列率 | 真值簇独立率 | 公开簇中位 | 挤出 |
|
||||
| --- | ---: | ---: | ---: | ---: | ---: | ---: | ---: |
|
||||
| baseline | 0.55 | 1 | 33 | 0 | 1 | 16 | 0 |
|
||||
| W1@128 | 0.55 | 1 | 33 | 0 | 1 | 16 | 0 |
|
||||
| W1@none | 0.55 | 1 | 33 | 0 | 1 | 16 | 0 |
|
||||
| W2@1 | 0.55 | 1 | 33 | 0 | 1 | 16 | 0 |
|
||||
| W2@2 | 0.55 | 1 | 33 | 0 | 1 | 16 | 0 |
|
||||
| W2@4 | 0.55 | 1 | 33 | 0 | 1 | 16 | 0 |
|
||||
| W2@8 | 0.55 | 1 | 33 | 0 | 1 | 16 | 0 |
|
||||
| W3@0.7 | 0.55 | 0.95 | 21 | 0 | 1 | 16 | 1 |
|
||||
| W3@0.8 | 0.55 | 0.95 | 25 | 0 | 1 | 16 | 1 |
|
||||
| W3@0.9 | 0.55 | 1 | 30 | 0 | 1 | 16 | 0 |
|
||||
|
||||
### ±60 分钟
|
||||
|
||||
| 方案 | 头名簇命中 | 区间覆盖 | 宽度中位 | 并列率 | 真值簇独立率 | 公开簇中位 | 挤出 |
|
||||
| --- | ---: | ---: | ---: | ---: | ---: | ---: | ---: |
|
||||
| baseline | 0.4 | 1 | 56 | 0 | 1 | 31 | 0 |
|
||||
| W1@128 | 0.4 | 1 | 56 | 0 | 1 | 31 | 0 |
|
||||
| W1@none | 0.4 | 1 | 56 | 0 | 1 | 31 | 0 |
|
||||
| W2@1 | 0.4 | 1 | 56 | 0 | 1 | 31 | 0 |
|
||||
| W2@2 | 0.4 | 1 | 56 | 0 | 1 | 31 | 0 |
|
||||
| W2@4 | 0.4 | 1 | 56 | 0 | 1 | 31 | 0 |
|
||||
| W2@8 | 0.4 | 1 | 56 | 0 | 1 | 31 | 0 |
|
||||
| W3@0.7 | 0.4 | 1 | 40 | 0 | 1 | 31 | 0 |
|
||||
| W3@0.8 | 0.4 | 1 | 43 | 0 | 1 | 31 | 0 |
|
||||
| W3@0.9 | 0.4 | 1 | 52 | 0 | 1 | 31 | 0 |
|
||||
|
||||
W3 挤出的例子:W3@0.7 ±30 `chad_everett_1937_aa_v4_holdout`;W3@0.8 ±30 `chad_everett_1937_aa_v4_holdout`。任务书硬红线「不得为了把宽度做窄而牺牲真值覆盖率」,所以 W3 不能直接上线。
|
||||
|
||||
## 方法
|
||||
|
||||
1. 每个例子走生产 `build_event_contribution_matrix` + `score_from_matrix`,再按签名层聚簇。
|
||||
2. 合并实现复刻 `cap_clusters_by_adjacent_merge`,研究脚本内可改上限或加分差门槛,不改线上模块。
|
||||
3. 引擎并集 = 全部公开簇 `cluster_times` 的 min–max(上一轮口径)。
|
||||
4. 线上口径 = 对公开代表做六题最优答淘汰,再取落后头名不足 8 分的簇覆盖并集。
|
||||
5. W3 在同一组仍然有效簇上,取覆盖 posterior 质量 70/80/90% 的最短连续钟面区间。
|
||||
6. 真值簇独立 = 真分钟所在的合并前签名簇,合并后成员集合不变。
|
||||
|
||||
错误 0 例。20 例跑完。
|
||||
|
||||
@@ -179,3 +179,19 @@
|
||||
|
||||
配对组合用 R1=`len`、R3=1.0、R4=`lse`。
|
||||
|
||||
## 勘误(2026-09-14 簇宽度研究)
|
||||
|
||||
上一轮表里的「区间宽度中位」取的是**全部公开簇成员的并集跨度**,没有把答案淘汰算进去。
|
||||
`scripts/research/minute_resolution_sweep.py` 的 `metrics_from_public` 遍历每一个公开簇的 `cluster_times`;
|
||||
`cap_clusters_by_adjacent_merge` 按设计不丢分钟,所以并集恒等于搜索窗。六题回放虽然调用了 `apply_answer`,
|
||||
但 `summarize()` 仍读 `engine.width`,回放里的 `remaining_count` 还是代表分钟封顶 5,不是交付区间宽度。
|
||||
|
||||
因此「所有方案宽度中位数都等于整窗」只对**不含淘汰的引擎并集口径**成立,不能直接当成线上范围卡在答完题之后的宽度。
|
||||
线上 `unionStillValidRange` 用的是未淘汰且落后头名不足 8 分的簇覆盖并集。含淘汰后的数字见 `docs/research/cluster_width_2026_09_14.md`。
|
||||
|
||||
| 半径 | 上一轮宽度中位(无淘汰) | 六题后线上口径宽度中位 | 真值仍在回放剩余代表里 |
|
||||
| --- | ---: | ---: | ---: |
|
||||
| ±10 | 21.0 | 15.0 | 20/20 |
|
||||
| ±30 | 61.0 | 33.0 | 20/20 |
|
||||
| ±60 | 121.0 | 56.0 | 20/20 |
|
||||
|
||||
|
||||
@@ -0,0 +1,42 @@
|
||||
# 进度 · 交付区间宽度与簇合并研究(2026-09-14)
|
||||
|
||||
## 范围
|
||||
|
||||
- 分支:`codex/rectification-cluster-width-research-20260914`(基于 `origin/staging` @ `ada2cfb1`)
|
||||
- 任务单:`docs/tasks/TASK-rectification-cluster-width-research-20260914.md`
|
||||
- 结果:`docs/research/cluster_width_2026_09_14.md` + 同名 `.json`
|
||||
- 勘误:`docs/research/minute_resolution_2026_09_14.md` 追加「勘误(2026-09-14 簇宽度研究)」
|
||||
- 脚本:`scripts/research/cluster_width_lib.py`、`scripts/research/cluster_width_probe.py`(离线,不进 API)
|
||||
- 未改 `candidate_contrast.py`、`scoring_service.py`、`active_rectification_event_engine.py`、确认门、`SCORE_DELTA`
|
||||
- 本单不占 BUG 号
|
||||
|
||||
## 完成
|
||||
|
||||
- 开工读了上一轮 `minute_resolution_2026_09_14.md`、对照报告、`candidate_contrast.py` 全文。
|
||||
- M0:上一轮 `width_median` 取全部公开簇并集,**不含淘汰**。六题回放虽调用 `apply_answer`,`summarize()` 仍读 `engine.width`;`remaining_count` 是代表分钟封顶 5。按线上 `unionStillValidRange`(未淘汰且落后头名不足 8 分的簇覆盖)重跑基线。
|
||||
- M1:v4 20 例 × ±10/±30/±60。合并次数全是 0(签名簇最多 46 < 64)。真值簇独立率 20/20。`md` 在 ±10 窗内 20/20 恒定。
|
||||
- M2:W1 / W2 与基线相同(合并不触发)。W3 0.7/0.8 在 ±10、±60 收窄且覆盖不降,±30 挤出 1 例公开 AA(`chad_everett_1937_aa_v4_holdout`)。
|
||||
- 判定:**不确定,不立实现单。**
|
||||
|
||||
## 验收数字
|
||||
|
||||
含淘汰的线上口径(六题最优答):
|
||||
|
||||
| 半径 | 无淘汰并集 | 六题后线上口径 | 区间覆盖 | 真值簇独立率 |
|
||||
| --- | ---: | ---: | ---: | ---: |
|
||||
| ±10 | 21 | 15 | 1.00 | 1.00 |
|
||||
| ±30 | 61 | 33 | 1.00 | 1.00 |
|
||||
| ±60 | 121 | 56 | 1.00 | 1.00 |
|
||||
|
||||
W3@0.8:±10 宽度 15→11 覆盖 1.00;±30 33→25 覆盖 1.00→0.95;±60 56→43 覆盖 1.00。
|
||||
|
||||
- `python -m pytest tests/test_cluster_width_research.py tests/test_minute_resolution_research.py tests/test_rectification_v5_services.py`:63 passed
|
||||
- 本机无项目 `.venv`,用 Anaconda Python 3.11.7 + swisseph 跑完全量 20 例,错误 0。`run_quality_gate.py --profile quick` 编译通过后在 `interpretation_source_inventory_gate.py` 因缺少 `mcp` 包退出 1——基线环境缺口(本机无 `.venv`),与本单无关,不计入。
|
||||
|
||||
## 未做
|
||||
|
||||
- 未改线上聚类或交付
|
||||
- 未把研究脚本接到 API
|
||||
- 未立实现单(W3 未过覆盖门)
|
||||
- 未做 PyJHora / VedAstro / jyotishganit 对照(本单不解释运势)
|
||||
- 未 push
|
||||
@@ -186,7 +186,7 @@
|
||||
|
||||
| `TASK-rectification-tiebreak-hold-exit-fix-20260914.md` | `PROGRESS-rectification-tiebreak-hold-exit-20260914.md` | **P0 回归修复单**:BUG-686 的风格题前置把耗尽与收口路径的交付也压住了,`npm test` 由 27 红涨到 33(6 条「该交付却不交付」)。后续 `6fd7925a` 只改断言把它们改绿:4 条文案放宽可接受,2 条实质弱化(「恰好一条交付闸」退化成短路、参考题确认语被算作出口载体)必须恢复;行为层根因未动。hold 要带出口、不得作用于 exhausted/closed-ceiling,最多 hold 一次(BUG-688)。尚未部署,未影响线上 | 待验收 | `codex/rectification-tiebreak-hold-exit-20260914` |
|
||||
|
||||
| `TASK-rectification-cluster-width-research-20260914.md` | `PROGRESS-rectification-cluster-width-research-20260914.md` | **研究单**:上一轮证明调权重改不动交付区间宽度——所有方案宽度中位数都等于整个搜索窗。先确认 sweep 的宽度口径是否含淘汰(M0),再画簇结构像(M1),最后量三个改法:放宽簇上限、按分差决定是否合并、交付区间改分位覆盖(M2)。真值覆盖率不得下降 | 待执行 | `codex/rectification-cluster-width-research-20260914` |
|
||||
| `TASK-rectification-cluster-width-research-20260914.md` | `PROGRESS-rectification-cluster-width-research-20260914.md` | **研究单**:上一轮证明调权重改不动交付区间宽度——所有方案宽度中位数都等于整个搜索窗。先确认 sweep 的宽度口径是否含淘汰(M0),再画簇结构像(M1),最后量三个改法:放宽簇上限、按分差决定是否合并、交付区间改分位覆盖(M2)。真值覆盖率不得下降 | 待验收 | `codex/rectification-cluster-width-research-20260914` |
|
||||
|
||||
| `TASK-rectification-minute-resolution-research-20260914.md` | `PROGRESS-rectification-minute-resolution-research-20260914.md` | **研究单**:候选分不开的根因是打分尺度——窗口内恒定项 11.5 分 vs 随分钟变化项 2.125 分(≈5:1)。先修封存基准(v3 每例仅 3 件事且被标 invalidated)出 v4,再离线量五个改法:分盘除数、去底座、**KP 宫头子主计分(产品 09-14 拍板,推翻 BUG-325 一条红线)**、年精度事件改边际似然、聚类签名层对齐。有收益才立实现单 | 待验收 | `codex/rectification-minute-resolution-research-20260914` |
|
||||
|
||||
|
||||
Reference in New Issue
Block a user