Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_017eEAG8HD3mm8gsKXgk8uU8
80 lines
6.8 KiB
Markdown
80 lines
6.8 KiB
Markdown
# TASK · 生时校正「角度类时间技法」研究:行运压角 / 次限推运 / 太阳弧(研究单,2026-10-01)
|
||
|
||
## 基线
|
||
|
||
- `origin/staging` @ `209352eb`(写作时 head;开工时以最新 `origin/staging` 为准)。
|
||
- 分支 `codex/rectification-angle-timing-research-20261001`,工作树 `.worktrees/rectification-angle-timing-research-20261001`。
|
||
- **离线研究,生产代码零改动**:不动 `sealed_holdout_rerun.py::PRODUCTION_FILES`、事件引擎、`frontend/`、任何常数。新代码只进 `scripts/research/` 与 `tests/`;可只读复用 `scripts/western_timing_engine.py`、`scripts/western_chart_engine.py`、`scripts/research/varga_resolution_lib.py`、`scripts/research/scoring_research_lib.py`。
|
||
- 数据:`references/real_case_calibration/minute_rectification_holdout_v5.json`(77 例公开 AA;事件 day 244 / month 143 / year 577)。
|
||
- 本机无 Docker 不影响本单(不碰数据库)。
|
||
|
||
## 先读
|
||
|
||
- `docs/research/rectification_scoring_research_2026_09_29.md`(打分层三条 no_benefit:42 个「大运 + 宫位」特征在 v5 上 36~39 个是噪声)
|
||
- `docs/research/rectification_varga_resolution_2026_09_30.md`(盘型口径基线:六题后头段命中、真值段保留)
|
||
- `docs/research/rectification_minute_resolution_closure_2026_09_14.md` §1、§7(1 分钟 ≈ 大运边界平移 3.8 天)
|
||
|
||
## 事故实证 / 动机
|
||
|
||
产品 2026-10-01 问「生时校正到底能不能改善」。已证实:现有计分全部是「大运主星 + 宫位 / 分盘宫位」类规则,出生时间差 1 分钟大运边界只挪约 4 天,灵敏度天生不够;数据定权重也救不回来。尚未测过的一类是**以度数计的角度技法**:
|
||
|
||
| 技法 | 对出生时间的灵敏度 |
|
||
| --- | --- |
|
||
| 本命上升 / 天顶度数 | 约 4 分钟 / 1° |
|
||
| 行运土星 / 木星压本命上升或天顶度数 | 土星约 1° / 月、木星约 2.5° / 月 → 记得到月的事件约对应 4~10 分钟 |
|
||
| 次限推运上升 / 天顶、太阳弧角度 | 约 1° / 年 → 记得到年的事件约对应 ±2 分钟 |
|
||
|
||
物理上灵敏度对路;风险是一生接触很多、事件与接触的对应有歧义(多重比较),所以必须有乱序对照。
|
||
|
||
## 根因假设
|
||
|
||
现有规则缺少「度数级」的时间信号;若角度技法在真实事件日期上的命中显著高于乱序日期,它就能在现有六题之外提供分钟级信息。
|
||
|
||
## 决策记录(产品 2026-10-01)
|
||
|
||
- **批准**离线测三类角度技法;**有收益才另立产品单**,并由产品决定是否在吠陀产品里作为「计算工具」使用(这类技法主要来自西洋占星的校正传统)。
|
||
- 不改现有六题、出卡时机、盘型交付;新信号只在研究侧与现有后验叠加评估。
|
||
- 打分层(大运 + 宫位)研究已关闭,本单不得重开其权重实验。
|
||
|
||
## 硬红线
|
||
|
||
1. **乱序对照必做**:每例把事件日期在该人的生存期内随机重排(保留精度与领域),重复 ≥ 50 次;任何技法只有在「真实日期」的指标显著优于乱序分布(报百分位,≥ 95% 才算显著)时才可称有信号。
|
||
2. **留一法**:所有阈值、容许度(orb)、权重在训练折上定、在留出例上量;同时报全集拟合作对照,只认留一法数字。
|
||
3. **不得挤出真值**:与盘型口径基线比,真值段保留(±10 / ±30 / ±60 = 76 / 76 / 75)任何一格不得下降;分钟区间口径下真值在区间不得下降。
|
||
4. 稳健性:事件日期 ±7 天、±1 个月偏移;年精度事件单列;LMT 时代(1900 年前)7 例单列。
|
||
5. 口径:行星与角度用同一黄道(回归或恒星任选其一并写明,相位与黄道选择无关);岁差、交点模式与现有研究一致时写明;容许度候选至少 1° / 2° / 3° 三档。
|
||
6. 生产代码零改动;`PYTHONHASHSEED=0`,结果 JSON 两次复跑逐字节一致;快速门 Python 部分与基线一致;隐私守卫通过;负结果完整写出。
|
||
|
||
## 任务分解
|
||
|
||
- **A0 特征抽取(BUG-1141)**:`scripts/research/angle_timing_lib.py`:对每例每个候选分钟(步长 1 分钟,窗口 ±60)、每件带日期事件,算:
|
||
- TR:事件日行运土星 / 木星 / 罗睺(及日精度事件加火星)对本命上升、天顶的 0° / 90° / 180° 相位离度;
|
||
- SP:次限推运上升、天顶对本命行星(日、月、水、金、火、木、土)的 0° / 90° / 180° 离度;
|
||
- SA:太阳弧推进的上升、天顶对本命行星的同上离度。
|
||
- 事件精度处理:日精度用当天;月精度取该月内最小离度;年精度只用于 SP / SA。
|
||
- 验收:单测(已知名人一例手算核对一个离度;窗口内上升度数随分钟单调变化;精度处理正确)。
|
||
- **A1 信号检验**:对每个技法 × 容许度,计算「真实日期命中率 vs 乱序分布」(每例:真值分钟的命中数在窗口内所有分钟中的排位;全集:排位均值 vs 乱序百分位)。只把显著(≥ 95 百分位)的技法带入 A2。
|
||
- 验收:表进研究文档;不显著的写 no_signal 并停止该技法。
|
||
- **A2 叠加评估**:把显著技法的分钟级分数(留一法定权重)叠加到现有六题后验(复用 `varga_resolution_lib` 的回放与 `minute_weights`),量:真值段保留、D1 / D9 / D10 头段命中、≤2 段比例、分钟区间宽度中位(同覆盖下)、头名 ±2 分钟命中。与基线逐格比。
|
||
- 验收:六格(3 档 × 有 / 无)表;红线逐格判定。
|
||
- **A3 结论**:`docs/research/rectification_angle_timing_2026_10_01.md`:一句话结论表(每技法:信号有无、叠加收益、是否建议进产品)、复跑命令、若有收益写产品单要点(只给结论口径,不写实现);`docs/research/ACTIVE_FRONTS.md` 索引;定论页追加一节;`docs/tasks/PROGRESS-rectification-angle-timing-research-20261001.md`;BUG-1141;README 行。
|
||
|
||
## 让步顺序
|
||
|
||
A0 > A1 > A2 > A3 的图表。A1 全部 no_signal 时 A2 不做,直接写结论。
|
||
|
||
## 开工前置命令
|
||
|
||
```bash
|
||
git fetch origin --prune
|
||
git worktree add -b codex/rectification-angle-timing-research-20261001 .worktrees/rectification-angle-timing-research-20261001 origin/staging
|
||
cd .worktrees/rectification-angle-timing-research-20261001
|
||
export PYTHONHASHSEED=0
|
||
python3 -m pytest -q tests/test_varga_resolution_research.py tests/test_scoring_research.py tests/test_repo_privacy_markers.py
|
||
python3 -c "import scripts.western_timing_engine as w; print([n for n in dir(w) if not n.startswith('_')])"
|
||
```
|
||
|
||
## BUG 编号
|
||
|
||
开工时核对 `docs/BUG_HISTORY.md` 最大号(写作时 `BUG-1140`;`1135`~`1139` 已用)。本单:**BUG-1141**(校正缺少度数级时间信号,待研究判定)。研究结束按结果改 `resolved`(有产品单)或 `closed_by_design`(无信号,附数字)。关联 BUG-1091、BUG-1105。
|