docs(research): measure why delivered range width equals the search window
Independent Staging Quality Gate / validate (push) Successful in 10m20s
Independent Staging Quality Gate / publish (push) Successful in 2m18s

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:
jesse-ux
2026-09-14 22:11:47 +08:00
parent 963c147c58
commit cf972f4040
8 changed files with 36482 additions and 1 deletions
File diff suppressed because it is too large Load Diff
+128
View File
@@ -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` 的 minmax(上一轮口径)。
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 |