0001-Sprint5规划会议 » 历史记录 » 版本 1
Huarui Lin, 2026-04-25 22:08
| 1 | 1 | Huarui Lin | ### Sprint 5 规划会议 Agenda |
|---|---|---|---|
| 2 | |||
| 3 | **会议主题**:Sprint 5 规划会议 —— S5 标准化与 Spearman 降维防线落地 |
||
| 4 | **参会角色**:架构师、研发工程师、QA |
||
| 5 | **会议基调**:锁定“空间换时间”全局原则与“内存防爆”底线,确立 S5 阶段的物理拓扑与数据契约。 |
||
| 6 | **范围熔断声明**:本次 Sprint 严格止步于特征降维,产出最终特征子集与双形态参数,**绝对不包含 LightGBM 训练逻辑**。 |
||
| 7 | |||
| 8 | --- |
||
| 9 | #### 议题 1:架构基线修正决议(DRY 原则向内存红线让步)(5 分钟) |
||
| 10 | |||
| 11 | * **决议宣告**:基于企业级 50GB cgroup 内存硬限制,正式批准 S5 标准化 Apply 阶段**豁免**复用 `core.standardization_math`(纯 NumPy 算子)。 |
||
| 12 | * **执行路径锁定**:S5 必须强制采用 Polars 表达式原地 Apply 拓扑(即规约 7.4 骨架),利用 Arrow 广播机制在 3000 万行宽表上直接计算,严禁触发 3000 万行转 NumPy 导致的 8GB+ 内存膨胀。 |
||
| 13 | * **文档更新待办**:作为通过此项豁免的强制义务,S5 交付前必须完成对 `2-dry_module_list.md` 中 `core.standardization_math` 模块“被依赖方”说明的修正,明确标注“S5 训练阶段因内存红线豁免复用,仅作为 S6 推理单一真实来源”。 |
||
| 14 | |||
| 15 | #### 议题 2:数据流加载边界与配置契约(5 分钟) |
||
| 16 | |||
| 17 | * **动态时间窗口锁定**:确立从 `config.yaml` 中动态读取 `s5.train_start_year` 与 `s5.train_end_year` 作为全量数据加载边界的强制约束,由 `core.config_loader.py` 启动时加载并强校验。 |
||
| 18 | * **DRY 模块接入点**:确认 Spearman 阶段必须复用 `core.stream_engine`(按年流式加载标准化后特征,强制 3GB 内存峰值断言)。 |
||
| 19 | |||
| 20 | #### 议题 3:S5.1 截面聚合与双形态参数物理时序隔离拓扑(15 分钟) |
||
| 21 | |||
| 22 | * **纯横截面聚合**:对齐按 `net_value_date` 分组计算 38 维的 `mean, std, median, mad` 的数学动作,确认 MAD 裁剪上下界的推导逻辑。 |
||
| 23 | * **路径 A(训练宽表)T-1 对齐**:确认在宽表实体上直接执行 `.shift(1)` 的物理时机,保证与后续训练 Join 的绝对对齐。 |
||
| 24 | * **路径 B(推理长表)日历表关联**:锁定在 S5.1 阶段基于全量 S3 数据时间极值,动态生成绝对自然日频日历表,并落盘为 `calendar_dim.parquet`。长表必须通过关联此日历表执行 Forward Fill 至每日连续状态。 |
||
| 25 | * **长表物理排序死锁**:确认推理长表落盘前,必须强制注入 `.sort(["feature_name", "date"])`,对齐 `asof_join` 底层 C++ 的局部单调性要求。 |
||
| 26 | * **生产就绪哨兵生成**:确认 `std==0` 或 `mad==0` 时,强制置 `is_production_ready=False` 的防御逻辑。 |
||
| 27 | |||
| 28 | #### 议题 4:S5.2 标准化 Apply 物理防线(10 分钟) |
||
| 29 | |||
| 30 | * **“死刑级”封杀重申**:全员对齐“严禁 3000 万行宽表 Unpivot 成 11.4 亿行”的绝对红线。 |
||
| 31 | * **Polars 原地 Apply 执行**:基于议题 1 的豁免决议,确认读取 `standardization_params_wide.parquet` 与 3000 万行实体表执行等值 Join 后,原地构建 Polars 表达式的实施细节。 |
||
| 32 | * **IEEE 754 除零拦截**:审查标准化 Apply 表达式,确认 `pl.when(std==0).then(None)` 拦截器的强制注入,封杀隐式除零产生 `Inf` 击穿下游。 |
||
| 33 | |||
| 34 | #### 议题 5:S5.3 训练 Join 三键死锁与毒样本截断(10 分钟) |
||
| 35 | |||
| 36 | * **三键强锁 Join**:确认特征宽表与标签表关联时,必须且只能使用 `["fund_id", "net_value_date", "segment_id"]`,严禁遗漏 `segment_id` 导致笛卡尔积爆炸。 |
||
| 37 | * **毒样本物理截断点**:确认基于 `is_feature_complete == False` 将 `label` 强制覆写为 `0` 的动作必须发生在 Join 之后,且必须作为标准化后、Spearman 计算前的绝对前置步骤。 |
||
| 38 | |||
| 39 | #### 议题 6:S5.4 Spearman 秩相关内存防爆防线(15 分钟) |
||
| 40 | |||
| 41 | * **分块物理标尺具象化**:确认严格按自然年分块加载标准化特征,严禁按固定行数分块,确认 `core.stream_engine` 的接入方式。 |
||
| 42 | * **环境自适应开关对齐**:确认 `config.yaml` 中 `spearman.load_mode` 配置项的读取逻辑,锁定生产环境默认强制走 `yearly_chunked` 模式。 |
||
| 43 | * **防漂移与数学等价防线审查**:确认 `scipy.stats.rankdata` 必须显式传入 `method="average"`;确认“算秩后立即减均值(中心化)” -> “Pearson 展开项联合累加” -> “动态有效样本量联合累加” -> “对称化强制截断 `(matrix + matrix.T) / 2`”的算法链路不可裁剪。 |
||
| 44 | * **降维产物契约**:确认基于 `config.yaml` 中的 `0.90` 阈值剔除共线性特征后,输出 `final_feature_list.json` 的物理落盘动作。 |
||
| 45 | |||
| 46 | #### 议题 7:交付物全景清单与 CI 验收标准对齐(5 分钟) |
||
| 47 | |||
| 48 | * 输出 Sprint 5 必须新增的物理文件清单及其 Schema 约束(对齐 `2-dry_module_list.md` 模型与参数层要求)。 |
||
| 49 | * 确认针对双形态参数文件、日历表文件及特征列表 JSON 的单测覆盖策略(如 Pydantic 结构校验、对称性矩阵断言、排序键断言等)。 |