Files
2026-09-27 22:37:06 +08:00

7.1 KiB
Raw Permalink Blame History

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 的两处记忆勘误行——等口令一并落)
  • 修复批(五笔形状如上)待用户口令启动
  • 审计正面结论(主链数学、六诊断、恒等式防护)无需动作,终局确认