7.1 KiB
sanguo_vnpy_v2 因子审计 — 终审裁定(final)
日期:2026-09-27 | 链条:审计报告(factor-review-report.md, 09-26)→ Rebuttal(factor-review-rebuttal.md, 09-27 独立复核)→ 本终审 性质:逐条最终裁定——接受=将修、驳回=不改并给理由;截至本文件落盘,仓库/生产零改动,修复批等用户口令 复核基础:全部 10 条 finding 均经本域独立取证(代码复现/运行时探针/NAS 产物硬复核),非引用式接受
一、最终结论(一句话)
10 条 finding:7 条接受(4 代码+测试、3 配置/文档/记忆勘误)、1 条接受但转交 data 域(F-6)、1 条事实认修法驳(F-9)、1 条部分接受(F-10);「需人工」5 项中 2 项消解、1 项转 infra、2 项归后续验证。 审计对主链的正面结论(FM 恒等式/RankIC/十分组/WLS 数学正确、VPS 产物六诊断复现)接受为终局确认。
二、裁定总表
| # | 级别 | 内容 | 裁定 | 修复动作 | 域 |
|---|---|---|---|---|---|
| F-1 | 🔴 | S 族评估管线不可达 | ✅ 接受·将修 | sentiment_library 导入提升至 __init__.py(与 fundamental_library 同款)+ 集成回归测试(batch_eval 取到 4 个 sent_*) |
factor |
| F-2 | 🔴 | ridge 对照实质失效 | ✅ 接受·将修 | 惩罚改尺度不变形(A + λ·diag(A) 方向)+ 真实市值量级强共线下 flip 非空数值断言(替换现有 isinstance-only 断言);设计变更携因子档 |
factor |
| F-3 | 🟡 | 血统注册表 5/8 名漂移(09-27 补正:原审计「5/9」系条目数误记,yaml 实 8 条目=3 HIT+5 MISS) | ✅ 接受·已修(5e69e3d) | yaml 一次性改名对齐库名(保留 hypothesis/版本史;映射权威=sentiment_library.py 调研编号列 S01→S01 逐号对齐);plan_batch 不可解析名防线+入库 yaml 守门测试 | factor |
| F-4 | 🟡 | 「12 源≈+7%」基线失真 | ✅ 接受·勘误 | 基线修订=+2.85%(算术和);勘误面已圈死=两处记忆文件行(factor-session-mainline.md:302、research-to-trading-pipeline-plan-20260922.md:145),仓库 docs 已核无此错;后续引用一律以勘误值为准 | factor(记忆) |
| F-5 | 🟡 | 8 算子≠13 | ✅ 接受·文档修 | factor-system-design.md §3 「8 算子」→ 13(照 register_fast_ops 清单) |
factor |
| F-6 | 🟡 | 「vt_symbol 形」三处误标 | ✅ 接受·转交 | 错在 data 域三处(exporter docstring + 函数名 to_vt_symbol + fusion spec §20.3);因子域档 line 200 记录正确无需动;SendMessage 提醒 data session 一次,不代改 |
data |
| F-7 | 🟢 | fast_ops 绝对路径 | ✅ 接受·将修 | fast_ops.py:19 改 dirname(__file__) 相对定位(照 alpha_datasets.py 同款一行) |
factor |
| F-8 | 🟢 | _quantile_mask 死代码 |
✅ 接受·将修 | 删首次 ranks 计算+过程注释(卫生修) | factor |
| F-9 | 🟢 | 年化 244 vs √252 | ⚖️ 事实认·改码驳 | 不改任何常量:评估线 244 沉淀 h2 考场+排行榜历史基线不可平移;归因线 √252 改动会破坏已产 63 月件与未来月度件 rolling_ir 跨件可比性(1.6% 静默平移)——两线都不动。落地=因子档口径表一处注明双轨 | factor(仅文档) |
| F-10 | 🟢 | 测试盲区六项 | ⚖️ 部分接受 | 10.1/10.2 接受·随 F-1/F-2 主修自动闭环;10.3(227 可算守门)/10.4(round-trip)/10.5(缓存负例)/10.6(gate↔registry 联动)=合理观察,驳回入本波、归 backlog(10.3 需全量跑批非单测可守门) | factor |
三、争议项裁定理由(仅列有保留意见的三条)
F-6 接受但转交——归属边界
误标三处全在 data 域交付物(scripts/data_platform/export_sw_industry_map.py docstring+函数名、fusion spec §20.3),系 0c22e8b 行业表交付时引入;我域消费端已做归一且域档记录正确。按分工底线(跨域最多提醒一次),裁定=提醒 data session 修三处措辞,不越界代改。功能无损(unknown_industry_share=0 实证),不阻塞任何链路。
F-9 事实认、改码驳——基线不可平移
双轨事实成立,但两条修法代价均大于收益:
- 统一到 244:评估线全部已落库年化值(h2 考场、排行榜历史)平移 ~1.6%,新旧不可比;
- 仅归因线 √252→√244:看似便宜,实则已产
attribution_2026-09-23.json(63 月)与 10-04 起月度件的 rolling_ir 会出现 1.6% 静默口径断层——跨件对拍恰是月度批评的核心动作。 当前无任何消费方跨线直比两口径,风险纯理论。裁定=只注明、不动码。
F-10.3-10.6 驳回入本波——修批边界控制
四项均为合理观察,但 10.3 需数据机全量跑批(单测无法守门)、10.4/10.5 为增量小测试、10.6 模块级测试已在。塞进本波会稀释两🔴主修的注意力;归 backlog 随下波排期。
四、「需人工」清单终审
| # | 审稿项 | 终审 |
|---|---|---|
| 1 | VPS schtask 月度批评核验 | 转 infra 例行——首班 10-04 部署接线本就待用户在场,「VPS 无月度产出」与阶段定位一致,非缺陷 |
| 2 | 归因输入截面目录定位 | 消解——跑在 NAS 一次性容器 --sections-dir /volume1/stock/factor_cross_section(runbook §7.7 显式目录,非 mkdtemp);VPS 件=infra #578 冒烟投放副本;NAS 命令即复现,VPS 侧截面生产已含在 10-04 月度批方案 |
| 3 | 「227 可算」复核 | 后续验证项——需全量跑批,随下次批带出,不阻塞 |
| 4 | v2c 12 档案拟合产物核验 | 后续项——超本轮范围 |
| 5 | NAS 对拍件位置 | 消解——/volume1/stock/factor_cross_section/attribution/(在位者件+challenger/ 子目录) |
五、修复批形状(已定未动,等口令)
| 笔 | 内容 | 标签预期 | 档随码走 |
|---|---|---|---|
| 1 | F-1 + F-3(联动:导入提升+yaml 5 名对齐+registry 可解析校验)+ 集成回归测试 | [vps] |
F-1 属挂载实现细节,[no-doc] 候选;F-3 yaml 不触因子档强制范围 |
| 2 | F-2(ridge 尺度不变形 + flip 非空断言) | [vps] |
设计变更,携因子档 §7.5(ridge 对照语义修订) |
| 3 | F-7 + F-8(相对路径+死代码,卫生修) | [vps] [no-doc] |
纯实现 |
| 4 | F-4 记忆勘误 + F-5 文档 8→13 + F-9 口径表注明 | —(文档/记忆,非代码笔) | 即文档本身 |
| 跨域 | F-6 → SendMessage 提醒 data session 一次 | — | data 域自理 |
依赖:笔 1 内 F-1 先于 F-3(或同车);笔 2/3 独立;全部 TDD(先红后绿);测试口径 PYTHONPATH=. ./venv310/bin/python -m pytest tests/factor(424 绿基线之上只增不减)。
六、状态
- 本终审为止:仓库、NAS、VPS、config、记忆文件均零改动(含 F-4 的两处记忆勘误行——等口令一并落)
- 修复批(五笔形状如上)待用户口令启动
- 审计正面结论(主链数学、六诊断、恒等式防护)无需动作,终局确认