0002-Sprint3规划会议-会议纪要 » 历史记录 » 版本 1
Huarui Lin, 2026-04-17 16:34
| 1 | 1 | Huarui Lin | # <div align="center"> Sprint 3 规划会议纪要:M3a 特征基建与 38 维字典红线冻结 </div> |
|---|---|---|---|
| 2 | |||
| 3 | **会议日期**:2026-04-17 |
||
| 4 | **项目名称**:基金量化定投选基系统 (2026-04-11-01) |
||
| 5 | **会议目标**:锁定 M3a(特征基建)交付标准,对齐 CR-002/CR-003 变更落地方案,确立 38 维特征工程防线与标准化纯函数的强卡控边界,解决存储形态架构冲突。 |
||
| 6 | **参会角色**:项目经理、算法/研发工程师、基础架构/运维工程师 |
||
| 7 | |||
| 8 | --- |
||
| 9 | ## 一、 会议确认项 |
||
| 10 | |||
| 11 | 1. **CONF-01 特征命名绝对红线确立**:全局特征命名一律以《特征字典基线文档 (DICT-FEATURE-001)》中的 `_{窗口期}w`(如 `_12w`)格式为准,历史草稿文档中的 `_w{N}` 格式作废。 |
||
| 12 | 2. **CONF-02 段隔离强制约束确立**:所有涉及滚动计算的特征,在 Polars 语境下必须强制执行 `group_by(['fund_id', 'segment_id'])`,严禁出现跨段数据污染。 |
||
| 13 | 3. **CONF-03 有效值判定单一信源确立**:全面采纳 `with_validity_check` 高阶函数包装方案,作为全项目规约 4.2 `min_valid_ratio=0.20` 判定逻辑的唯一标准实现路径。 |
||
| 14 | 4. **CONF-04 底层计算引擎与依赖红线锁定**:OLS 回归计算(`trend_slope` 与 `trend_r_squared`)纯采用 `np.linalg.lstsq` 进行矩阵求解,严禁引入 SciPy;单测必须强卡控其在极端情况下的数值精度。 |
||
| 15 | 5. **CONF-05 无风险利率参数化决策**:公式中的 `0.02`(年化无风险收益率基准)严禁硬编码,必须作为 `params.risk_free_rate_annual` 节点写入 `config/config.yaml`,由代码运行时动态计算 `weekly_rf`。 |
||
| 16 | 6. **CONF-06 纯函数接口契约冻结**:锁定 `calculate_stats()`、`apply_standardization()`、`remove_collinear_features()` 三个公开函数的入参、出参及基础行为作为研发基线。 |
||
| 17 | 7. **CONF-07 单测组织与覆盖粒度确认**:单测文件按 A/B/C/D/E 特征类拆分为独立测试类,且必须覆盖 38 维全量特征的精确度验证,不可抽样。 |
||
| 18 | 8. **CONF-08 T-1 验证构造策略确认**:采用“2 个时间截面(t0, t1)极简 DataFrame”的方式,构造调用 `apply_standardization()` 后断言 t0 截面全为 NULL 的用例。 |
||
| 19 | 9. **CONF-09 预览文件物理标识机制确认**:`standardization_params.parquet` 必须增加 `is_production_ready` 物理列,全表填入 `false`,防止下游误读。 |
||
| 20 | 10. **CONF-10 物理目录结构变更批准**:正式批准新建 `data/models/` 目录用于存放预览级参数与特征列表产物。 |
||
| 21 | 11. **CONF-11 落盘形态架构变更确认**:特征存储形态由长表变更为宽表(触发 CR-004),内存计算与最终落盘统一为宽表 Schema,废弃原 `unpivot` 转换链路。 |
||
| 22 | 12. **CONF-12 落盘物理参数延续确认**:PyArrow 写入继续强制指定 `row_group_size=100000`(契合当前量级下 30MB/Group 的最优 Block Size)且采用覆盖写模式。 |
||
| 23 | 13. **CONF-13 CI 流水线扩展确认**:`.gitea/workflows/ci.yml` 新增 `pytest tests/test_feature_engineering.py -v --tb=short` 步骤,作为 PR 强阻断门禁。 |
||
| 24 | |||
| 25 | --- |
||
| 26 | ## 二、 会议待办项 |
||
| 27 | |||
| 28 | | 编号 | 责任人 | 任务描述 | 截止时间 | 验收标准 | |
||
| 29 | | :--- | :--- | :--- | :--- | :--- | |
||
| 30 | | **TODO-01** | 研发工程师 | 物理目录结构文档同步 | S3-04 首个 PR | 在首个 PR 中同步更新 `project-structure.md`,补充 `data/models/` 目录及其存放内容的说明。 | |
||
| 31 | | **TODO-02** | 研发工程师 | OLS 回归精度单测验证 | S3-02 交付同步 | 提交单测报告,证明基于 `np.linalg.lstsq` 计算的斜率与 R² 在极小矩阵、全 NaN 边界情况下精度符合浮点容差要求。 | |
||
| 32 | | **TODO-03** | 项目经理 | Redmine 验收标准录入与派发 | 会后 4 小时内 | S3-01 至 S3-04 任务卡片的自定义字段已按 CONF-01 至 CONF-13 逐条填入,并指派给研发。 | |
||
| 33 | |||
| 34 | --- |
||
| 35 | ## 三、 会议风险项 |
||
| 36 | |||
| 37 | | 编号 | 风险描述 | 应对策略/演进路线 | 跟踪机制 | |
||
| 38 | | :--- | :--- | :--- | :--- | |
||
| 39 | | 无 | M3a 阶段架构边界清晰,历史长表引发的性能与计算冲突已通过 CR-004 彻底根除,当前无遗留风险项。 | - | - | |
||
| 40 | |||
| 41 | --- |
||
| 42 | ## 四、 Sprint 3 (M3a) 交付物全景清单(已对齐) |
||
| 43 | |||
| 44 | | 分类 | 文件路径 | 核心约束简述 | |
||
| 45 | | :--- | :--- | :--- | |
||
| 46 | | **业务参数** | `config/config.yaml` | 新增 `params.risk_free_rate_annual` 节点。 | |
||
| 47 | | **核心源码** | `src/feature_engineering.py` | 包含宽表计算主链路、`with_validity_check` 包装器、三个标准化纯函数。严禁 SciPy 依赖。 | |
||
| 48 | | **核心源码** | `src/utils/ols_solver.py` (或内聚) | 基于 `np.linalg.lstsq` 的 OLS 求解封装,带严格 Type Hints。 | |
||
| 49 | | **质量保障** | `tests/test_feature_engineering.py` | 按 A~E 分类建类,覆盖 38 维精确度、T-1 首日 NULL、OLS 极端精度。 | |
||
| 50 | | **数据产出** | `data/features/features_YYYY.parquet` | **宽表形态**,Schema 为 38 列特征加基础键;`row_group_size=100000`,覆盖写。 | |
||
| 51 | | **数据产出** | `data/models/standardization_params.parquet` | 含 `is_production_ready=false` 物理列的全局基准预览。 | |
||
| 52 | | **数据产出** | `data/models/final_feature_list.json` | 严格符合 `_12w` 命名范式的 38 维特征名字符串列表。 | |
||
| 53 | | **技术真相** | `docs/data_contract.md` | 新增《特征矩阵接口契约单》,声明宽表落盘架构与 38 维字典引用。 | |
||
| 54 | | **技术真相** | `docs/project-structure.md` | 同步更新 `data/models/` 目录说明。 | |
||
| 55 | |||
| 56 | --- |
||
| 57 | **会议闭环状态**:✅ 全部议程结束,无遗留阻塞项。研发团队可依据本纪要及 CR-004 启动 Sprint 3 (M3a) 实施。 |