CR-001-M2里程碑 Parquet Schema 变更 » 历史记录 » 版本 1
Huarui Lin, 2026-04-12 18:37
| 1 | 1 | Huarui Lin | # CR-001: M2 里程碑 Parquet Schema 变更(新增 segment_id) |
|---|---|---|---|
| 2 | |||
| 3 | | 字段 | 内容 | |
||
| 4 | |------|------| |
||
| 5 | | **CR ID** | CR-001 | |
||
| 6 | | **标题** | 清洗后 Parquet 新增 `segment_id` 列 | |
||
| 7 | | **发起人** | Henry Lin (PM) | |
||
| 8 | | **日期** | 2026-04-11 | |
||
| 9 | | **状态** | ✅ Approved | |
||
| 10 | | **影响范围** | M2 Done 标准、规约 1.3 存储方案、Step 3/4/5 模块接口 | |
||
| 11 | |||
| 12 | --- |
||
| 13 | |||
| 14 | ### 1. 变更描述 |
||
| 15 | |||
| 16 | **原文(项目章程 M2 Done 标准)**: |
||
| 17 | > Parquet 文件产出,Schema **仅含** `fund_id`/`net_value_date`/`cumulative_net_value` |
||
| 18 | |||
| 19 | **变更为**: |
||
| 20 | > Parquet 文件产出,Schema 含 `fund_id`/`net_value_date`/`cumulative_net_value`/`segment_id` |
||
| 21 | |||
| 22 | 新增列定义: |
||
| 23 | |||
| 24 | | 字段 | 类型 | 可否 NULL | 说明 | |
||
| 25 | |------|------|-----------|------| |
||
| 26 | | `segment_id` | `UInt32` | **NOT NULL** | 截断段标识。同一 `fund_id` 内,连续有效数据段从 `0` 起递增。被 `>4周连续缺失` 截断后,下一段 `segment_id + 1`。用于后续 Step 3 滚动窗口计算的物理隔离边界。 | |
||
| 27 | |||
| 28 | ### 2. 变更原因(根因追溯) |
||
| 29 | |||
| 30 | 规约 1.2 规定"连续缺失 > 4 周的区段直接截断,截断后各段独立参与后续计算"。 |
||
| 31 | 若不引入 `segment_id`,后续 Step 3 的 Polars 滚动窗口将无法识别截断边界, |
||
| 32 | 导致跨段窗口计算引入"未来穿越"的脏数据。此为**数据完整性红线**, |
||
| 33 | 不是功能增强,而是工程必需。 |
||
| 34 | |||
| 35 | ### 3. 影响分析 |
||
| 36 | |||
| 37 | | 受影响模块 | 影响说明 | 应对措施 | |
||
| 38 | |-----------|---------|---------| |
||
| 39 | | `data_loader.py` (Step 2) | 输出 Parquet 必须包含 `segment_id` | 在 Polars 截断逻辑中增加列生成 | |
||
| 40 | | `feature_engineering.py` (Step 3) | 滚动窗口必须按 `segment_id` 隔离 | `group_by(['fund_id', 'segment_id'])` | |
||
| 41 | | `label_generator.py` (Step 4) | DCA 标签计算不可跨段 | 按 `segment_id` 切片后独立计算 | |
||
| 42 | | `trainer.py` (Step 5) | 训练数据 JOIN 需携带 `segment_id` | 无额外逻辑,自动透传 | |
||
| 43 | | `data_audit.json` | 新增 `truncated_rows_by_gap` 字段 | 已纳入审计 Schema | |
||
| 44 | |||
| 45 | ### 4. 更新后的 M2 Done 标准(完整版) |
||
| 46 | |||
| 47 | ① Parquet 文件产出,Schema 含 `fund_id`(String)/`net_value_date`(Date)/`cumulative_net_value`(Float64)/`segment_id`(UInt32); |
||
| 48 | ② 实体机压测峰值内存 ≤ 40GB; |
||
| 49 | ③ 审计日志 `data_audit.json` 包含:`whitelist_retention_rate`、`missing_rate`、`anomaly_rate`、`building_period_dropped`、`survival_filtered`、`truncated_rows_by_gap`; |
||
| 50 | ④ `fund_basic_info` 多余 4 列已显式丢弃; |
||
| 51 | ⑤ `v_net_value_processed` DuckDB VIEW 创建成功。 |
||
| 52 | |||
| 53 | --- |
||
| 54 | **PM 签字**:Henry Lin | **日期**:2026-04-11 |