mirror of
https://github.com/shy3130/tick-stock-panel.git
synced 2026-11-02 10:26:13 +00:00
自定义 (DSL) 因子此前每次求值都全量重算 frame_transform (132 万行帧上 每因子 ~36ms, 随因子数线性增长 — 回测/守护复验/实验室批量的共同热路径)。 - app/factors/materialize_cache.py: 键 = sha256(定义 + 依赖列内容指纹 + 行数) — 内容指纹即失效传播 (公式变/输入任何值变 → 键变), 无需数据版本 号。两层: 进程内 LRU (字节上限) + 磁盘 parquet (跨进程, 文件数上限, 目录可整删)。fail-open: 任何故障回退现算。列指纹按帧记忆化 (weakref finalize 回收), 同帧 K 个因子每列只哈希一次 (~8ms/百万行)。 - materialize_scoring_columns 两段式: 命中列一次批量附着 (成本与因子数 无关); 未命中逐个现算 (依赖顺序)。DSL 分阶段临时列不再泄漏进下游帧 (与命中路径列集合完全一致)。 - 顺带修复存量 bug: winsorize(x) 省略 k 时 DSL 编译器直接 IndexError (该写法此前完全不可用), 补回归测试。 - 基准 (132 万行, K3→K13): 热路径 0.0ms→0.1ms (+10 因子绝对增量 0.1ms, 基线 +400ms 线性); 冷启动 480.7ms vs 无缓存 478ms (开销 ~0.5%)。 端到端优化器复测 trials 4.23×/含 prepare 3.16×, stats 完全一致。 - 回归: 552 个相关测试全过 (含 6 个缓存契约测试: 命中等价/输入与定义 变更失效/损坏回退/小帧旁路/临时列不泄漏); ruff 新增文件全清。 Signed-off-by: shy3130 <shy3130@qq.com>