Files
Jyotisha/docs/research/cluster_width_2026_09_14.md
T
jesse-ux cf972f4040
Independent Staging Quality Gate / validate (push) Successful in 10m20s
Independent Staging Quality Gate / publish (push) Successful in 2m18s
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.
2026-09-14 22:11:47 +08:00

129 lines
6.6 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.
# 交付区间宽度与簇合并测量(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 例跑完。