Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01N4f2nya58RoRu4yEmJgRGE
15 KiB
生时校正:甲8 事件映射与甲9 月亮行运在 v5 77 例上的试算(2026-10-03)
研究分支归档:代码与脚本留在分支(甲1
codex/affliction-weight-trial-20261003bcaeb990;甲8/甲9codex/rectification-mapping-trial-202610033767b899),不合入。staging 只收本记录。
研究记录,不合入、不上线。分支
codex/rectification-mapping-trial-20261003,基线origin/staging80160d20(引擎与评测代码与之后的d0233e3c相同,后者只多一份任务书)。 提议来源:占星师侧交回的「裁决记录」(判定为其 Agent 自拟,待她本人确认),见docs/research/astrologer_questions_v3_2026_10_03.md甲8、甲9。
结论
- 甲8 映射(变体 A)明显变差:±10 / ±30 / ±60 三档的六题回放头名分别降 13.0 / 10.4 / 7.8 个百分点(cluster 口径降 16.9 / 15.6 / 20.8),±60 六格真值在区间 76 → 72。按「任一档降 >1pt 即变差」,判 变差。
- 主因是事业行把 10 宫扩成 10、6、9、11:单独只改事业一行,±10 回放头名就降 10.4pt(cluster 口径 13.0pt),±30 降 14.3pt。宫位放宽后几乎每个候选都「命中」,题卡能分开的候选变少:±10 平均可问题数从 5.1 降到 3.8,±60 六题后淘汰的候选中位数从 15 降到 7。
- 甲9 月亮行运按提议写法(变体 B:两锚各算、每命中 1.0 分)轻微变差:±10 / ±30 不变,±60 回放头名降 1.3pt(1 例),六格真值在区间 76 → 74。判 变差(够门槛,但只差 1–2 例,属噪声边缘)。
- 只加月亮锚、行运权重保持 0.25(变体 B0)对所有档位零影响:77 例中 8 例先验名次挪了 1–4 位,没有一个档位的数字变。行运只看木星、土星落宫,同一时间窗里所有候选的月亮星座几乎都一样,加月亮锚近似给所有候选加同一个常数。
- 两者都改(变体 C)最差:±10 / ±30 / ±60 回放头名降 13.0 / 13.0 / 7.8pt,±60 真值覆盖 98.7% → 93.5%,六格真值在区间 76 → 71。
- 建议:甲8 不按此表上线;若占星师本人确认要用,事业行先不要扩宫,或扩宫的同时要有「只奖不罚」以外的区分机制(这一点 09-29 的打分研究已证实做不出稳定信号)。甲9 月亮行运可以按「分别记录、不改权重」的方式做成观察项(B0 无害),但它对校正几乎没有信息量,不值得为它升级打分版本。
方法
- 评测:
scripts/research/holdout_v5_baseline.py --dataset v5(v5 77 例、964 件事件;sweep / cluster_width / futile_collect 三套),PYTHONHASHSEED=0。基线在未改动的代码上跑;分支上开关关闭(off)再跑一遍,三段结果与基线逐项相同、sweep 逐例结果逐字节相同,说明开关关闭时生产行为不变。 - 变体由环境变量切换(只在
scripts/active_rectification_event_engine.py导入时读取,默认关闭):RECTIFICATION_MAPPING_TRIAL=a:只改甲8 映射。=b:只改甲9,行运从命宫和月亮各算一项,每命中 1.0 分(原为命宫一项、每命中 0.25 分)。=b0:只加月亮锚,行运每命中仍 0.25 分(用来把「加锚」和「加权重」拆开)。=c:a + b。RECTIFICATION_MAPPING_TRIAL_DOMAINS=career等:只启用甲8 表中的某一行(消融)。
- 运行与对比脚本:
scripts/research/rectification_mapping_trial.py(run给每个变体用独立的临时数据集文件名,可并行;compare出下表)。各档汇总数字存docs/research/rectification_mapping_trial_2026_10_03.json。 - Dasha 权重(Vimshottari 2.0 / 1.5 / 0.75、Narayana 2.0 / 1.0)、分盘分摊公式
weight / (2·分盘数)、精度权重、功能吉凶辅助、Ashtakavarga / Shadbala 辅助、出卡与闸门全部不动;没有改打分版本号、迁移和前端。
变体 A 实际实现的映射
| 事件 | 现行(网站) | 试算 A | 说明 |
|---|---|---|---|
| 婚恋 | 7 宫 + D9;A7、UL | 7、2、11 宫 + D9;只看 UL | 提议表没有 A7,按表去掉 |
| 事业 | 10 宫 + D10;A10 | 10、6、9、11 宫 + D10;A10 | |
| 财富 | 2、11 宫 + D2、D11 | 2、11、5、9 宫 + D2、D11 | 「Dhana 相关宫主」按这四宫的宫主计 |
| 健康 | 6、8、12 宫 + D30 | 1、6、8、12 宫 + D6、D8、D30 | D6、D8 为试算新算,不进候选指纹 |
| 学业 | 4、5、9 宫 + D24、D5 | 4、5、9 宫 + D24 | 去掉 D5 |
| 迁居 | 4、12 宫 + D4 | 不变 | |
| 父亲 | (六亲统一:3、4、5、9 宫 + D12、D7、D3) | 9、10 宫 + D12 | 按事件文本拆分,见下 |
| 母亲 | 同上 | 4 宫 + D12 | |
| 父母(未指明哪一方) | 同上 | 4、9、10 宫 + D12 | 提议表没有这一行,取父、母两行并集 |
| 子女 | 同上 | 5、2、11 宫 + D7 | |
| 兄弟姐妹 | 同上 | 3、11 宫 + D3 | |
| 六亲中无法归类 | 同上 | 保持现行六亲映射 |
「D1」在提议表每一行都有:现行引擎本来就按 D1 宫位和宫主计分,不需要另加。「1 宫主 / 4 宫主 / 5 宫主 / 7 宫主 / 3 宫主」都已被「目标宫的宫主」规则覆盖。「缺必要分盘不计分、不替代」与现行规则一致(缺分盘该事件跳过)。
六亲拆分怎么做的
v5 事件只有 family 一个标签,没有子类。本轮用事件英文描述的关键词拆分(trial_family_subdomain,顺序:子女 → 父母 → 父亲 → 母亲 → 兄弟姐妹)。130 件六亲事件的归类:
| 子类 | 件数 |
|---|---|
| 子女 | 78 |
| 父亲 | 16 |
| 母亲 | 10 |
| 父母(未指明) | 7 |
| 兄弟姐妹 | 8 |
| 无法归类(配偶/伴侣去世 6 件、叔伯、祖辈、治疗师、被收养等) | 11 |
线上用户口述经历没有这样的英文描述,也没有子类字段;题卡生成的六亲探针同样只有「六亲」一类,本轮一律保持现行映射。所以六亲拆分只覆盖 v5 的口述事件,线上要用必须先让采集环节区分父/母/子女/兄弟姐妹。
结果:基线 vs A / B / B0 / C
「回放头名」= 六张题卡答完后头名候选是真值;sweep 与 cluster 两套口径分别来自 minute_resolution_sweep 与 cluster_width_probe(后者用线上 unionStillValidRange)。「六格真值在区间」来自 futile_collect_stop_replay(truth / opposite 两个方向)。括号内为与基线之差;1 例 ≈ 1.3pt。
| 指标 | 基线 | A 甲8 | B 甲9(1.0) | B0 月亮锚(0.25) | C 甲8+甲9 |
|---|---|---|---|---|---|
| ±10 引擎先验头名 | 18.2% | 18.2% (+0.0) | 19.5% (+1.3) | 18.2% (+0.0) | 16.9% (−1.3) |
| ±10 回放头名(sweep) | 63.6% | 50.6% (−13.0) | 63.6% (+0.0) | 63.6% (+0.0) | 50.6% (−13.0) |
| ±10 回放头名(cluster) | 66.2% | 49.4% (−16.9) | 66.2% (+0.0) | 66.2% (+0.0) | 48.1% (−18.2) |
| ±10 真值覆盖(cluster) | 98.7% | 97.4% (−1.3) | 98.7% | 98.7% | 97.4% (−1.3) |
| ±10 区间宽度中位(分钟) | 13 | 15 | 13 | 13 | 15 |
| ±30 引擎先验头名 | 9.1% | 9.1% | 9.1% | 9.1% | 9.1% |
| ±30 回放头名(sweep) | 49.4% | 39.0% (−10.4) | 49.4% | 49.4% | 36.4% (−13.0) |
| ±30 回放头名(cluster) | 55.8% | 40.3% (−15.6) | 55.8% | 55.8% | 37.7% (−18.2) |
| ±30 真值覆盖(cluster) | 98.7% | 97.4% (−1.3) | 98.7% | 98.7% | 97.4% (−1.3) |
| ±30 区间宽度中位(分钟) | 33 | 41 | 35 | 35 | 41 |
| ±60 引擎先验头名 | 7.8% | 6.5% (−1.3) | 7.8% | 7.8% | 5.2% (−2.6) |
| ±60 回放头名(sweep) | 31.2% | 23.4% (−7.8) | 29.9% (−1.3) | 31.2% | 23.4% (−7.8) |
| ±60 回放头名(cluster) | 40.3% | 19.5% (−20.8) | 39.0% (−1.3) | 40.3% | 19.5% (−20.8) |
| ±60 真值覆盖(cluster) | 98.7% | 96.1% (−2.6) | 98.7% | 98.7% | 93.5% (−5.2) |
| ±60 区间宽度中位(分钟) | 65 | 73 | 65 | 69 | 73 |
| ±10 六格真值在区间 truth / opposite | 76 / 76 | 76 / 76 | 76 / 76 | 76 / 76 | 76 / 76 |
| ±30 六格真值在区间 truth / opposite | 75 / 75 | 74 / 73 | 75 / 75 | 75 / 75 | 74 / 73 |
| ±60 六格真值在区间 truth / opposite | 76 / 76 | 72 / 73 | 74 / 75 | 76 / 76 | 71 / 70 |
| 判定(任一档降 >1pt = 变差) | — | 变差 | 变差(只差 1–2 例) | 不变 | 变差 |
基线说明:本轮基线比 09-29 发布的 v5 数字(holdout_v5_baseline_v5_all_2026_09_29.json)略有不同(例如 ±30 先验头名 7.8% → 9.1%、±60 cluster 回放 32.5% → 40.3%),因为 staging 之后合入了功能吉凶 v2、sync4、sync5 等改动;本文所有差值都相对本轮同代码基线。
为什么 A 变差:题卡失去区分力
| ±档 | 平均可问题数 基线 → A | 平均实问题数 基线 → A | 六题后淘汰候选中位 基线 → A | 引擎先验真值平均名次 基线 → A |
|---|---|---|---|---|
| ±10 | 5.10 → 3.82 | 4.21 → 3.51 | 2 → 1 | 3.58 → 3.47 |
| ±30 | 7.10 → 6.27 | 5.44 → 5.25 | 7 → 4 | 9.01 → 8.05 |
| ±60 | 7.25 → 6.96 | 5.45 → 5.44 | 15 → 7 | 17.74 → 15.68 |
A 让口述事件的先验排名略好(真值平均名次前移约 1–2 位),但宫位放宽后不同候选对同一年份的「命中/不命中」更趋一致,题卡能问的、能淘汰的都少了,六题后的头名反而大幅下降。校正的信息主要来自问答而不是先验(见 09-29 定论),所以总体是变差。
消融:甲8 每一行单独启用
| 指标 | 基线 | 只改婚恋 | 只改事业 | 只改财富 | 只改健康 | 只改学业 | 只拆六亲 |
|---|---|---|---|---|---|---|---|
| ±10 回放头名(sweep) | 63.6% | −1.3 | −10.4 | −1.3 | −2.6 | −1.3 | +1.3 |
| ±10 回放头名(cluster) | 66.2% | +0.0 | −13.0 | +0.0 | −1.3 | +0.0 | −2.6 |
| ±30 回放头名(sweep) | 49.4% | +0.0 | −14.3 | +0.0 | −3.9 | +3.9 | +0.0 |
| ±30 回放头名(cluster) | 55.8% | −3.9 | −15.6 | −3.9 | +1.3 | +1.3 | −3.9 |
| ±60 回放头名(sweep) | 31.2% | +3.9 | −1.3 | −3.9 | +1.3 | +1.3 | +1.3 |
| ±60 回放头名(cluster) | 40.3% | −2.6 | −9.1 | −6.5 | +1.3 | −2.6 | −3.9 |
| ±10 六格真值在区间 truth / opposite | 76 / 76 | 75 / 75 | 76 / 76 | 76 / 76 | 76 / 76 | 76 / 76 | 76 / 76 |
| ±30 六格真值在区间 truth / opposite | 75 / 75 | 74 / 76 | 75 / 75 | 76 / 76 | 75 / 75 | 76 / 76 | 76 / 76 |
| ±60 六格真值在区间 truth / opposite | 76 / 76 | 74 / 73 | 73 / 74 | 76 / 76 | 74 / 74 | 76 / 76 | 75 / 75 |
事业行是唯一一个稳定大幅变差的行;其余各行在 ±1~4 例之间来回摆,按 1pt 门槛也都算「变差」,但量级在 77 例的噪声线上,不能据此说它们有益或有害。
逐例变化最大的 5 例
排序分 = 三档先验真值名次变化之和 + 每次回放头名翻转记 5 分。只列案例 id。
- A(75/77 例有变化):
serena_williams_1981_aa_v5_holdout(±10 回放头名中→失)、silvio_santos_1930_aa_v5_holdout(三档回放头名都中→失)、chad_everett_1937_aa_v4_holdout(三档都中→失)、george_w_bush_1946_aa_v5_holdout(±60 失→中)、lionel_messi_1987_aa_v5_holdout(±30、±60 失→中)。 - B(27/77):
joseph_kennedy_iii_1980_aa_v4_holdout(先验名次 3→1 / 9→5 / 12→5)、audrey_hepburn_1929_aa_v5_holdout、cher_1946_aa_v5_holdout、frida_kahlo_1907_aa_v5_holdout(±60 回放头名中→失)、muhammad_ali_1942_aa_v5_holdout。 - B0(8/77,全部只是先验名次挪 1–4 位):
cher_1946_aa_v5_holdout、charles_de_gaulle_1890_aa_v5_holdout、elizabeth_montgomery_1933_aa_v4_holdout、lou_diamond_phillips_1962_aa_v5_holdout、sigmund_freud_1856_aa_v4_holdout。 - C(76/77):
serena_williams_1981_aa_v5_holdout、chad_everett_1937_aa_v4_holdout、george_w_bush_1946_aa_v5_holdout、lionel_messi_1987_aa_v5_holdout、silvio_santos_1930_aa_v5_holdout。
没实现 / 无法试算
| 项 | 状态 | 原因 |
|---|---|---|
| 征象星:金星、DK(婚恋);AmK、太阳(事业);太阳、月亮(健康);水星、木星(学业);月亮(迁居);太阳、PiK(父亲);月亮、MK(母亲);木星(子女);火星(兄弟姐妹) | 未实现,需新增通道 | 现行引擎只有「大运主星落目标宫 / 是目标宫主 / 在分盘落目标宫」三条通道,没有「大运主星是某征象星」或「征象星受激活」的计分通道;Chara karaka(DK、AmK、PiK、MK)也没有进校正上下文。本轮只实现宫位、分盘部分。 |
| 「Dhana 相关宫主」 | 近似 | 按 2、11、5、9 宫主计(目标宫宫主规则);没有实现 Dhana yoga 组合判断。 |
| 父母 / 子女 / 兄弟姐妹拆分 | 只对 v5 口述事件生效 | 数据只有「六亲」标签,按英文描述关键词拆;11 件无法归类的保持现行映射。线上采集与题卡没有子类,上线前要先改采集。 |
| 题卡(探针)的六亲题 | 保持现行映射 | 题卡只有「六亲」一类。其余领域的题卡随映射一起变(同一张 DOMAIN_CONFIG)。 |
行运锚点记录 transit_anchor |
以规则名记录 | 命宫锚保持原规则名 controlled_transit_*_domain_house;月亮锚记为 transit_anchor_moon_controlled_transit_*_domain_house。没有在证据结构里加独立字段(避免动输出契约)。 |
| 行运权重 1.0 的含义 | 按「每个锚点每命中一颗星 1.0 分」解释 | 提议原文只写「transit 权重 1.0」。另跑 B0(保持 0.25)把加锚和加权重分开。 |
研究辅助模块(minute_rectification_fact_ranker_v4、dynamic_rectification_* 等) |
只随标准领域变化 | 它们直接读 DOMAIN_CONFIG[领域],不认识六亲子类;本评测不经过这些模块。 |
测试
python3 -m pytest tests/test_repo_privacy_markers.py -q:通过。- 定向测试(本机无
.venv,用系统python33.13):events / events_v4 / memoization / raman / convergence / confirmation / dated_transitions / api / 冻结身份四个文件。分支比origin/staging多 4 个失败,全部是冻结哈希检查(test_sealed_holdout_contract_freshness三条、test_reported_offset_research::test_recorded_specification_and_all_prespecified_cells):引擎文件内容变了,冻结哈希对不上。这是预期结果,本分支不合入,所以没有重新冻结;真要上线须按 ERR-110 重新冻结并升级打分版本。另两条失败(test_frozen_implementation_hash_matches_manifest、test_long_real_conversation_reaches_vedastro_after_local_range_is_narrow)在origin/staging上同样失败,与本轮无关。 - 快速门
python3 scripts/run_quality_gate.py --profile quick(无.venv,系统python3):origin/staging一次性检出 Python 段 1047 passed / 1 skipped,随后npm test因检出里没有node_modules失败(环境缺口);本分支 Python 段 1042 passed / 4 failed / 1 skipped,4 条失败全是test_rectification_validation_integrity_gate.py里的同一组冻结哈希检查(同上原因),门禁在 Python 段停下、未跑前端。本分支没有改前端。