项目

一般

简介

行为

CR-001: M2 里程碑 Parquet Schema 变更(新增 segment_id)

字段 内容
CR ID CR-001
标题 清洗后 Parquet 新增 segment_id
发起人 Henry Lin (PM)
日期 2026-04-11
状态 ✅ Approved
影响范围 M2 Done 标准、规约 1.3 存储方案、Step 3/4/5 模块接口

1. 变更描述

原文(项目章程 M2 Done 标准)

Parquet 文件产出,Schema 仅含 fund_id/net_value_date/cumulative_net_value

变更为

Parquet 文件产出,Schema 含 fund_id/net_value_date/cumulative_net_value/segment_id

新增列定义:

字段 类型 可否 NULL 说明
segment_id UInt32 NOT NULL 截断段标识。同一 fund_id 内,连续有效数据段从 0 起递增。被 >4周连续缺失 截断后,下一段 segment_id + 1。用于后续 Step 3 滚动窗口计算的物理隔离边界。

2. 变更原因(根因追溯)

规约 1.2 规定"连续缺失 > 4 周的区段直接截断,截断后各段独立参与后续计算"。
若不引入 segment_id,后续 Step 3 的 Polars 滚动窗口将无法识别截断边界,
导致跨段窗口计算引入"未来穿越"的脏数据。此为数据完整性红线
不是功能增强,而是工程必需。

3. 影响分析

受影响模块 影响说明 应对措施
data_loader.py (Step 2) 输出 Parquet 必须包含 segment_id 在 Polars 截断逻辑中增加列生成
feature_engineering.py (Step 3) 滚动窗口必须按 segment_id 隔离 group_by(['fund_id', 'segment_id'])
label_generator.py (Step 4) DCA 标签计算不可跨段 segment_id 切片后独立计算
trainer.py (Step 5) 训练数据 JOIN 需携带 segment_id 无额外逻辑,自动透传
data_audit.json 新增 truncated_rows_by_gap 字段 已纳入审计 Schema

4. 更新后的 M2 Done 标准(完整版)

① Parquet 文件产出,Schema 含 fund_id(String)/net_value_date(Date)/cumulative_net_value(Float64)/segment_id(UInt32);
② 实体机压测峰值内存 ≤ 40GB;
③ 审计日志 data_audit.json 包含:whitelist_retention_ratemissing_rateanomaly_ratebuilding_period_droppedsurvival_filteredtruncated_rows_by_gap
fund_basic_info 多余 4 列已显式丢弃;
v_net_value_processed DuckDB VIEW 创建成功。


PM 签字:Henry Lin | 日期:2026-04-11

Huarui Lin 更新于 5 天 之前 · 1 修订