research(rectification): typed events scored as answered probes — no benefit (BUG-1089)

v4 open holdout, ±10/±30/±60, raw and percent priors: only 4/9/14 of 57
day-precision training events split candidates; widths unchanged, top-1
drops. Narrowed year blocking (R3) mixed. All arms no_benefit; no
implementation brief recommended. Two runs byte-identical.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017eEAG8HD3mm8gsKXgk8uU8
This commit is contained in:
Jesse_Chen
2026-09-29 10:06:13 +08:00
co-authored by Claude Opus 5.5
parent 56b51e2170
commit bcf0c86feb
6 changed files with 8763 additions and 8 deletions
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,104 @@
# 打字经历按选择题规则计分:离线研究(2026-09-29)
- 任务书:`docs/tasks/TASK-rectification-typed-event-scoring-research-20260929.md`;进度:`docs/tasks/PROGRESS-rectification-typed-event-research-20260929.md`
- 分支:`codex/rectification-typed-event-research-20260929`,基线 `origin/staging` @ `56722063`。
- 性质:**离线测量,不改线上默认值。** 研究补丁(R3 的 `_existence_blocked_years`)只在一次调用内替换,调用后与脚本末尾都断言已恢复原函数。
- 数据:`references/real_case_calibration/minute_rectification_holdout_v4.json`,20 例公开 Rodden-AA。v4 的事件是 59 件日精度、84 件年精度,**没有月精度**;每例留一件作 holdout,训练集为日精度 57 件、年精度 67 件。**这是开放集回放,不是盲测,下面的数字不是准确率。**
- 口径:ayanamsa `raman`,node mode `mean`,步长 2 分钟,半径 ±10 / ±30 / ±60;六题回放(`ASK_COUNT = 6`,按真值作答);交付区间 = 未淘汰且落后头名不足 8 分的簇的并集。两种先验都报:`raw`(引擎行原始分,09-14 / 09-26 研究口径)与 `percent`(公开代表按正比例换成整数百分比,线上 `relative_support` 口径)。
- 复跑:`PYTHONHASHSEED=0 python3 scripts/research/typed_event_as_probe.py`(约 1.5 分钟)→ `docs/research/rectification_typed_event_scoring_2026_09_29.json`。同机两次运行 JSON 逐字节一致。
- 判门(任务书):三档**同时**满足「头名命中不降、真值在区间不降、宽度中位下降」才算有收益。
## 结论
| 项 | 一句话结论 | 是否建议立实现单 |
| --- | --- | --- |
| R0 学业质量题措辞(BUG-1088) | 已修:按经历类型称呼(升学 / 学业变动 / 学业中断),年精度经历不再显示「1 月」;计分输出逐字节不变,已按 ERR-110 用新路径重新冻结 | 已在本分支实现 |
| R1 打字经历当作已答「是」的选择题 | **不过门。** 打字经历绝大多数分不开候选:±10 / ±30 / ±60 下,57 件日精度训练经历只有 4 / 9 / 14 件(7% / 16% / 25%)能把代表候选分到两边;宽度中位三档都不变,头名在 raw 口径下三档都降 | **不建议** |
| R2 经历年月记错 ±1–3 个月 | 挤出真值的比例 0–2.9%,与 09-26 答错两题(±30 约 7%)相比不高;但 R1 本身没有收益,R2 不改变结论 | 不适用 |
| R3 挡题范围缩到「同领域同年」 | **不过门,但宽窗有信号。** raw 口径下 ±30 头名 0.50 → 0.65、±60 0.35 → 0.45;±10 头名 0.75 → 0.60(宽度 15 → 14)。宽度三档基本不变。60 格中有 45 格实际问到的六题因此换了 | **不建议直接实现**;若要继续,需另立研究,先解释 ±10 的头名下降 |
**给产品的话:** 「打字说的经历不参与收窄」在代码里确实是两条不同的通道,但把打字经历改成按选择题规则计分**几乎没有用处**:一件你记得清清楚楚的事,多半恰好落在所有候选时刻都一样的那段大运里,本来就分不开候选。能分开候选的,是系统专门挑出来的「边界月份」选择题。这也解释了 09-26 研究 R3c 的发现:边界月份里只有 3–4.5% 能把代表候选分开。所以止血单「门开后不再索要经历、选择题问完就出卡」的方向是对的,本研究不支持再往打字经历上加计分。
## R1 · 打字经历当作已答选择题
**方法。** 对每件训练经历,用出题器的同一个判定函数 `event_probes._evaluate_contexts`(代表候选、签名聚类、同一套集合版本),以经历的领域和年月(日精度取所在月;R1y 的年精度取 `month=None`,即现有「整年」判定)生成一道「题」,按「是」作答(±2,强冲突计数同线上),然后照常回放六道选择题。函数返回 `None` 的经历(候选在那个月没有分边)不计分。
**能分开候选的经历(每档 20 例合计):**
| 半径 | 日精度训练经历 | 能分边的 | 年精度训练经历 | 能分边的 |
| --- | ---: | ---: | ---: | ---: |
| ±10 | 57 | 4 | 67 | 5 |
| ±30 | 57 | 9 | 67 | 10 |
| ±60 | 57 | 14 | 67 | 14 |
**raw 口径:**
| 半径 | 方案 | 头名命中 | 真值在区间 | 宽度中位 | 并列率 | 每例提问 | 每例计分经历 |
| --- | --- | ---: | ---: | ---: | ---: | ---: | ---: |
| ±10 | B0 | 0.75 | 1.00 | 15 | 0.05 | 4.25 | 0 |
| ±10 | R1d | 0.70 | 1.00 | 15 | 0.05 | 4.25 | 0.20 |
| ±10 | R1y | 0.60 | 1.00 | 14 | 0.05 | 4.25 | 0.45 |
| ±30 | B0 | 0.50 | 1.00 | 33 | 0.05 | 5.40 | 0 |
| ±30 | R1d | 0.45 | 1.00 | 33 | 0.05 | 5.40 | 0.45 |
| ±30 | R1y | 0.45 | 1.00 | 33 | 0.05 | 5.40 | 0.95 |
| ±60 | B0 | 0.35 | 1.00 | 56 | 0.05 | 5.40 | 0 |
| ±60 | R1d | 0.30 | 1.00 | 56 | 0.05 | 5.40 | 0.70 |
| ±60 | R1y | 0.30 | 1.00 | 56 | 0.05 | 5.40 | 1.40 |
**percent 口径(线上先验尺度):**
| 半径 | 方案 | 头名命中 | 真值在区间 | 宽度中位 | 并列率 |
| --- | --- | ---: | ---: | ---: | ---: |
| ±10 | B0 | 0.50 | 1.00 | 11 | 0.40 |
| ±10 | R1d | 0.45 | 1.00 | 11 | 0.40 |
| ±10 | R1y | 0.35 | 1.00 | 11 | 0.45 |
| ±30 | B0 | 0.40 | 1.00 | 33 | 0.55 |
| ±30 | R1d | 0.40 | 1.00 | 33 | 0.55 |
| ±30 | R1y | 0.40 | 1.00 | 33 | 0.45 |
| ±60 | B0 | 0.15 | 1.00 | 53 | 0.75 |
| ±60 | R1d | 0.20 | 1.00 | 53 | 0.75 |
| ±60 | R1y | 0.15 | 1.00 | 53 | 0.75 |
**读法。**
1. 每例平均只有 0.2–0.7 件日精度经历能计分,宽度中位三档都不动。多出来的 ±2 只改排序,而且往往改错:raw 口径下头名三档都下降。
2. 真值从未被挤出区间(真值在区间保持 1.00):单件经历的 ±2 不够 8 分淘汰线。
3. percent 口径的并列率高(0.40–0.75),是整数百分比把相近原始分压成同一个数所致,与本研究的方案无关;这是线上先验尺度(BUG-560)的另一面,只记录,不处理。
## R2 · 经历年月记错 ±1–3 个月
每例每档随机挑 1 件或 2 件日精度训练经历,把月份挪 ±1–3 个月(种子 `20260929`,每格重复 10 次),按 R1d 计分后回放。k=2 只在日精度训练经历 ≥2 的 14 例上跑。
| 口径 | 半径 | k | 回放次数 | 挤出真值比例 | 至少一次挤出的例子 | 宽度中位 |
| --- | --- | ---: | ---: | ---: | ---: | ---: |
| raw | ±10 | 1 / 2 | 200 / 140 | 0.0% / 2.9% | 0 / 1 | 15 / 15 |
| raw | ±30 | 1 / 2 | 200 / 140 | 1.5% / 2.1% | 1 / 1 | 33 / 36 |
| raw | ±60 | 1 / 2 | 200 / 140 | 0.0% / 0.0% | 0 / 0 | 56 / 54 |
| percent | ±10 | 1 / 2 | 200 / 140 | 0.0% / 2.9% | 0 / 1 | 11 / 12 |
| percent | ±30 | 1 / 2 | 200 / 140 | 1.5% / 2.9% | 1 / 1 | 33 / 34 |
| percent | ±60 | 1 / 2 | 200 / 140 | 0.0% / 0.7% | 0 / 1 | 53 / 53 |
挤出率低,原因同 R1:挪错后的月份多半也分不开候选,等于没计分。R2 不改变 R1 的结论。
## R3 · 挡题范围缩到「同领域同年」
线上 `_existence_blocked_years` 会把已入账年份及同领域相邻年份(`EXISTENCE_NEARBY_YEARS`)的存在题挡掉。研究补丁改为只挡「同领域同一年」,其余不变。
| 口径 | 半径 | B0 头名 / 宽度 | R3 头名 / 宽度 | R3+R1d 头名 / 宽度 | R3 判定 |
| --- | --- | --- | --- | --- | --- |
| raw | ±10 | 0.75 / 15 | 0.60 / 14 | 0.55 / 14 | 头名降 |
| raw | ±30 | 0.50 / 33 | 0.65 / 33 | 0.60 / 33 | 宽度未降 |
| raw | ±60 | 0.35 / 56 | 0.45 / 55 | 0.40 / 54 | 过 |
| percent | ±10 | 0.50 / 11 | 0.45 / 11 | 0.40 / 11 | 头名降 |
| percent | ±30 | 0.40 / 33 | 0.50 / 31 | 0.50 / 30 | 过 |
| percent | ±60 | 0.15 / 53 | 0.15 / 54 | 0.20 / 53 | 宽度升 |
真值在区间:除 percent ±60 R3+R1d 为 0.95 外全部 1.00。出题供给(截断到 `MAX_PROBES = 8` 之后)几乎不变(每例 5.1 / 7.1 / 7.2 → 5.1 / 7.1 / 7.15),但 60 格中有 45 格实际问到的前六题换了:放开相邻年份后,出题器会挑到别的年份。
**读法。** 宽窗(±30 / ±60)头名有 +0.10 到 +0.15 的改善,但样本只有 20 例(每例 0.05),±10 头名下降同样幅度,三档不同时过门。按任务书的门槛判 `no_benefit`。若产品想追,下一步应是另立研究:只在窗口 ≥30 分钟时放开,并先解释 ±10 下降是换题带来的随机波动还是系统性问题。
## 偏离与说明
- 基线头名与 09-26 研究略有差异(raw B0:本文 0.75 / 0.50 / 0.35,09-26 为 0.80 / 0.55 / 0.40;宽度 15 / 33 / 56 完全一致)。本脚本自己实现了回放循环(为了在六题之前插入经历计分),`top1_hit` 用的是相邻合并后的簇;各方案之间用的是同一条回放链路,比较有效,但数字不要与 09-26 逐格对照。
- 任务书以「记得到月」为主设想;v4 没有月精度事件,日精度事件按所在月判定,等价于月精度判定。
- 任务书写的 R1 年精度口径「只在跨年边界时计分」,实现为出题器现有的整年判定(`_evaluate_contexts(month=None)`,事件日取 7 月 1 日),它已经只在候选整年激活状态不同时才分边。