Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_017eEAG8HD3mm8gsKXgk8uU8
9.5 KiB
9.5 KiB
TASK · 生时校正打分方法研究:似然比权重 / 缺席证据 / 精度追问(研究单,2026-09-29)
基线
origin/staging@b9133154(写作时 head;开工时以最新origin/staging为准)。- 分支
codex/rectification-scoring-research-20260929,工作树.worktrees/rectification-scoring-research-20260929。 - 串行关系:脚手架(研究计分器、特征抽取、留一法框架)可以先在 v4 上开发调试;R-A / R-B / R-C 的任何"有收益 / 无收益"判定必须在
TASK-rectification-holdout-expansion-20260929.md交付的 v5(≥60 例)上做。v5 未交付时只能写pending_v5,不得在 v4 上下结论。 - 本单是离线研究:不改任何生产代码,不动
sealed_holdout_rerun.py::PRODUCTION_FILES的 10 个冻结文件。研究计分器按 09-26 做法独立实现,并与线上score_candidates在 v4 上逐分对账后才算可信。
先读
docs/research/rectification_minute_resolution_closure_2026_09_14.md(定论页,含 §7 勘误)docs/research/rectification_offline_research_2026_09_26.mddocs/research/rectification_typed_event_scoring_2026_09_29.mddocs/research/pre_work_error_ledger.mdERR-110 / ERR-111
事故实证
产品 2026-09-29 staging 真机:31 分钟窗,开场 12 件带年份经历,答约 10 张卡,范围整窗不动(止血单 BUG-1084~1087 已处理流程层)。离线事实:
| 事实 | 数字 | 出处 |
|---|---|---|
| 引擎原始分头名簇命中(v4,±10/±30/±60) | 0.35 / 0.15 / 0.10;随机水平约 0.09 / 0.03 / 0.02 | 定论页 §1.4 |
| 按真值方向答六张卡后 | 0.80 / 0.55 / 0.35 | 同上 |
| 六题后交付宽度中位 | 15 / 33 / 56 分钟 | 定论页 §1.1 |
| 打字经历按选择题规则计分(R1,09-29) | 57 件日精度经历只有 4 / 9 / 14 件能把候选分到两边 | BUG-1089 |
| 出生时间每差 1 分钟,大运边界平移 | 中位 3.8 天(1.3–5.9) | 09-26 R3a |
根因(打分层)
scripts/active_rectification_event_engine.py::_score_event(:192)对每件事、每个候选分钟按 11 条规则加分(大运主星落领域宫 +2.0、分运 +1.5、次分运 +0.75、分盘命中 +weight/(2·len(varga_charts))、Narayana +2.0/+1.0、Arudha +0.35、功能吉凶 ±0.2/0.1、受控过运、Ashtakavarga 辅助),再乘精度权重。三个结构性问题:
- 只奖不罚。候选"能解释"事件加分;候选"预测了没发生的事"不扣分。选择题能动分,正因为它允许答"没有"(
core/build-state.ts::applyProbeOutcome,±2)。口述时间线里的空白(例如事业线 2019-10 到 2025-02 之间没有变动)目前不是证据。 - 权重是人拍的,没有校准。一条规则若对真分钟和错分钟同样常常命中,它只是噪声,但照样 +2。R1–R5 / V1 / V2 / V1n 都是"再拍一个权重看结果",不是让数据定权重。
- 高分辨率信号没进计分。KP 宫头子主每分钟在算(
scripts/rectification/kp_cusp_observation.py),被OBSERVATION_ONLY_LAYERS(:71)挡住;Pranapada 已算(:449)未计分;D60 未入 11 张计分分盘。09-14 KP@默认权重更差,是"权重没校准"的另一个症状,不能证明信号无用。
决策记录(产品 2026-09-29)
- 批准三项离线研究:R-A 似然比校准权重、R-B 缺席证据、R-C 精度追问可行性。有收益才立实现单;实现单必须按 ERR-110 重冻结 sealed holdout / reported offset 记录。
- 保留:2026-09-14"KP 宫头子主参与评分"的方向有效——KP 作为 R-A 的一个特征进入,权重由数据定,不再手工试。
- 保留:BUG-560 维持
blocked,直到某个方案在 v5 上过门。 - 保留:09-26"定向追问最多 2 条问完出卡"。R-C 若进入实现,精度追问算在这 2 条额度内,不另加轮次。
- 不做:不改
MIN_SEPARATION_LEAD、淘汰次数、采用 / 确认门、45 天闸门、领域门槛;不改冻结文件;不接上游PL9_BAV_CELL_OVERRIDES。 - 预期口径(写进文档,不得夸大):月精度经历最多分开相差 ≥8 分钟的候选;31 分钟窗做到极致约 8–10 分钟,不承诺 1–2 分钟。
硬红线
- 真值在区间不降(v5 三档半径 × truth / opposite 六格,每格都不低于基线)。头名命中不降。任何一格变差即该方案不过门,把数字写进 PROGRESS,不得调参数凑。
- 留一法:R-A 权重估计必须 leave-one-case-out(不是 leave-one-event-out);报告里必须同时给"全集拟合"与"留一法"两组数字,只有留一法数字可用于判定。
- 稳健性三项必测:事件日期偏移 ±7 天 / ±1–3 月;答错 1–2 题(09-26 R1 口径);R-B 另加"用户漏说 1–2 件真实事件"。任何一项把真值挤出区间的比例 > 基线,方案不过门。
- 研究计分器与线上
score_candidates在 v4 上逐分对账(09-26 做法),差异 0 才能开始实验。 PYTHONHASHSEED=0(ERR-111);所有 JSON 结果两次复跑逐字节一致。- 生产代码零改动;
run_quality_gate.py --profile quick与开工基线逐条一致;新增研究测试全绿。 - 隐私:只用 v4 / v5 公开名人数据;文档不写真机会话的事件内容。
- 负结果必须完整写出;不得只报有利档位。
任务分解
- R-0 脚手架(可在 v4 上做)
scripts/research/scoring_research_lib.py:特征抽取——对每个 (case, candidate, event) 输出各规则是否命中(现有 11 条规则拆成独立特征;再加 KP 宫头子主是否与真值簇同、Pranapada 宫位是否为领域宫、D60 上升星座是否含领域主、Narayana 层;特征名与rule_ids对齐),以及候选是否属真值簇(步长 2 分钟,簇口径同cluster_width_probe.py)。- 研究计分器复算线上分数并逐分对账。
- 验收:
tests/test_scoring_research.py覆盖对账 0 差、特征表形状、留一法拆分不泄漏案例。
- R-A 似然比校准权重(BUG-1091)
- 每个特征 f 估
LR_f = P(f 命中 | 真值簇) / P(f 命中 | 非真值簇)(加拉普拉斯平滑,平滑量写明),候选分 = Σ log LR_f × 精度权重;淘汰与区间沿用线上unionStillValidRange口径。 - 变体:A1 只用现有 11 特征;A2 加 KP / Pranapada / D60 / Narayana;A3 在 A2 上加只奖不罚 → 允许负 log LR(命中反而降分)。
- 指标:头名命中、真值在区间、宽度中位、并列率、每轮熵降;六题回放前后各一组;留一法与全集各一组;稳健性三项。
- 判定沿用
precision_gate_lib.gate_verdict(头名不降且宽度下降,覆盖不降)。另报"校准曲线":预测概率分桶 vs 真值命中率。 - 验收:结果 JSON
docs/research/scoring_research_lr_2026_09_29.json;每个特征的 LR 与置信区间列表;哪些特征 LR≈1(即噪声)单独列出。
- 每个特征 f 估
- R-B 缺席证据(BUG-1091)
- 定义"覆盖时段":每个领域内,该例第一件与最后一件带年月事件之间的年份;覆盖时段内没有该领域事件的年份 = 缺席年。
- 对每个候选,用
event_probes.py的激活判定(_has_domain_activation/_boundary_windows逻辑,研究侧复制不改原文件)算它在缺席年是否预测该领域强激活;预测了就扣分,幅度三档 0.5 / 1.0 / 2.0(卡片答"没有"是 2)。 - 必测"用户漏说":随机删掉每例 1–2 件真实事件后重跑,看真值被挤出区间的比例。
- 验收:三档幅度 × 三档半径的表;漏说稳健性表;判定。
- R-C 精度追问可行性(产品层,不改计分)
- 对每例每件年精度事件,算"若精确到月,是否恰好落在候选之间的大运边界(±4 个月内)";统计每例可追问事件数。
- 模拟:把 v5 日精度事件降为年精度作为"口述",再按真月"追问"一件,与六题基线比头名 / 宽度。
- 验收:每例可追问数分布;追问 1 件 / 2 件的增益表;判定是否值得进产品(额度按决策记录,算在定向追问 2 条内)。
- R-D 文档
docs/research/rectification_scoring_research_2026_09_29.md:三项结论表(一句话 + 是否立实现单)、全部复跑命令;docs/research/ACTIVE_FRONTS.md索引;定论页追加 §9;若某项过门,写实现单草案要点(含 ERR-110 重冻结步骤)。
让步顺序
R-0 > R-A > R-C > R-B > R-D 之外的图表。R-0 与 R-A 缺一不可合入;R-B / R-C 未做要在 PROGRESS 写 not_started,不得写成"无收益"。
开工前置命令
git fetch origin --prune
git worktree add -b codex/rectification-scoring-research-20260929 .worktrees/rectification-scoring-research-20260929 origin/staging
cd .worktrees/rectification-scoring-research-20260929
export PYTHONHASHSEED=0
.venv/bin/python -m pytest tests/test_minute_resolution_research.py tests/test_cluster_width_research.py tests/test_rectification_validation_integrity_gate.py -q # 基线
.venv/bin/python scripts/research/minute_resolution_sweep.py --help
.venv/bin/python scripts/research/cluster_width_probe.py --help
BUG 编号
开工时核对 docs/BUG_HISTORY.md 最大号(写作时 BUG-1089;BUG-1090 由扩集单预留)。本单:BUG-1091(打分只奖不罚、权重未校准、高分辨率信号未计分)。由执行方以 investigating 登记;研究结束按结果改 resolved(有实现单)或 closed_by_design(无收益,附数字)。关联 BUG-560、BUG-1048、BUG-1089、BUG-1090。