0001-特征字典基线文档 » 历史记录 » 版本 2
Huarui Lin, 2026-04-17 13:53
| 1 | 1 | Huarui Lin | |
|---|---|---|---|
| 2 | --- |
||
| 3 | 2 | Huarui Lin | |
| 4 | 1 | Huarui Lin | **document_id:** DICT-FEATURE-001 |
| 5 | **version:** 1.0.0 |
||
| 6 | **status:** Frozen (Baseline) |
||
| 7 | **created_date:** 2026-04-11 |
||
| 8 | **approved_by:** Henry Lin |
||
| 9 | **parent_spec:** SPEC-FUND-DCA-001 (《基金量化定投选基系统 — 最终设计规约 v1.0》 4.1节) |
||
| 10 | 2 | Huarui Lin | |
| 11 | 1 | Huarui Lin | --- |
| 12 | |||
| 13 | # 特征字典基线文档 (V1.0 Frozen) |
||
| 14 | |||
| 15 | > **⚠️ 架构冻结声明** |
||
| 16 | > 本文档为《系统设计规约 v1.0》4.1节的**唯一刚性补充附件**,具有同等红线效力。 |
||
| 17 | > 代码实现(`feature_engineering.py`)、单测(`test_feature_engineering.py`)、标准化参数输出(`standardization_params.parquet` 的 `feature_name` 字段)**必须与此文档列出的 38 个特征名严格一字不差**。严禁擅自增删改。 |
||
| 18 | |||
| 19 | ## 一、 维度总控与决策记录 |
||
| 20 | |||
| 21 | - **最终特征总数**:**38 维** |
||
| 22 | - **命名范式**:`{特征语义}_{窗口期}w`(无窗口期特征直接使用语义名) |
||
| 23 | - **维度溯源**:基于规约 4.1 节原始公式推导出 37 维,补充 1 维基础微观动量特征(`weekly_return`),共计 38 维。 |
||
| 24 | - **【关键架构决策 A 记录】**:为何固守 38 维,放弃补齐至 40+ 维? |
||
| 25 | - **冲突点**:曾计划补充 `nav_ma_26w` 与 `nav_ma_52w`(净值均线绝对值)以满足“40+维”字面要求。 |
||
| 26 | - **否决理由**:累计净值(NAV)是强路径依赖的单调递增序列。老基金(如存续5年,MA=2.5)与新基金(存续1年,MA=1.1)的绝对均线存在巨大量纲差异。若强行执行规约 4.3 的“截面 Z-Score”,老基金与新基金的绝对净值信息将被强行拉平至同一正态分布,导致模型彻底丧失对基金存续期与净值规模的感知能力。 |
||
| 27 | - **结论**:为捍卫规约 4.3“全量特征严格走 T-1 截面标准化”的普适性铁律,主动摒弃对标准化不友好的绝对值指标。38 维已实现对定投体验的完备刻画,不再引入特例豁免逻辑。 |
||
| 28 | |||
| 29 | --- |
||
| 30 | |||
| 31 | ## 二、 特征详细字典 |
||
| 32 | |||
| 33 | ### A. 均值回归类 (5维) |
||
| 34 | 捕捉价格偏离均线的程度,是定投“越跌越买”策略的核心择时指标。 |
||
| 35 | |||
| 36 | | 特征名 | 计算公式 (严格遵从规约) | 窗口期 | 业务含义与定投必要性 | |
||
| 37 | | :--- | :--- | :--- | :--- | |
||
| 38 | | `price_vs_ma_ratio_12w` | `nav / rolling_mean(nav, 12)` | 12 | **短期偏离度**。捕捉近3个月的超买超卖。比值极低说明近期处于弱势阴跌,定投摊薄成本低,但需警惕趋势性下跌。 | |
||
| 39 | | `price_vs_ma_ratio_26w` | `nav / rolling_mean(nav, 26)` | 26 | **中期偏离度**。半年的均值回归基准,定投最核心的观测窗口。偏离度极低时是收集廉价筹码的黄金期。 | |
||
| 40 | | `price_vs_ma_ratio_52w` | `nav / rolling_mean(nav, 52)` | 52 | **长期偏离度**。过滤短期噪音,判断该基金是否处于历史级别的低估区域。 | |
||
| 41 | | `price_vs_ma_ratio_ewm_26w` | `nav / ewm_mean(nav, span=26)` | 26 | **指数加权偏离度**。相比等权MA,EWM更赋予近期净值更高权重,对趋势反转的灵敏度更高,有助于提前识别定投止盈拐点。 | |
||
| 42 | | `price_vs_ma_ratio_ewm_52w` | `nav / ewm_mean(nav, span=52)` | 52 | **长期指数加权偏离度**。长期趋势反转的早期信号。 | |
||
| 43 | |||
| 44 | ### B. 波动类 (6维) |
||
| 45 | 波动率是定投体验的双刃剑:无波动难以摊薄成本,高波动易触发心理止损。 |
||
| 46 | |||
| 47 | | 特征名 | 计算公式 (严格遵从规约) | 窗口期 | 业务含义与定投必要性 | |
||
| 48 | | :--- | :--- | :--- | :--- | |
||
| 49 | | `weekly_return` | `(nav_t / nav_{t-1}) - 1` | 无 | **微观基础动量**。最细粒度的净值突变信息。作为波动与动量计算的基石,必须作为独立特征保留,防止信息断层。 | |
||
| 50 | | `rolling_std_12w` | `rolling_std(weekly_return, 12)` | 12 | **短期波动率**。衡量近期净值抖动程度。过高意味着近期定投账面波动剧烈,影响持有体验。 | |
||
| 51 | | `rolling_std_26w` | `rolling_std(weekly_return, 26)` | 26 | **中期波动率**。定投核心波动观测期。模型需学习出“何种中等波动率配合趋势能最快达到20%止盈”。 | |
||
| 52 | | `rolling_std_52w` | `rolling_std(weekly_return, 52)` | 52 | **长期波动率**。基金的固有波动属性标签。 | |
||
| 53 | | `downside_vol_26w` | `rolling_std(min(weekly_return, 0), 26)` | 26 | **下行波动率**。只计算跌幅的波动。定投最怕的不是震荡,而是单边下行,该特征直接刻画定投被套的痛苦程度。 | |
||
| 54 | | `downside_vol_52w` | `rolling_std(min(weekly_return, 0), 52)` | 52 | **长期下行波动率**。长期风险底线的度量。 | |
||
| 55 | | `volatility_regime` | `rolling_std(12w) / rolling_std(52w)` | 12/52 | **波动率 Regime**。比值>1说明近期波动放大(可能变盘),<1说明进入平静期。模型借此识别定投策略应“激进”还是“防守”。 | |
||
| 56 | |||
| 57 | ### C. 趋势与动量类 (11维) |
||
| 58 | **动量是决定定投能否在150周内实现20%止盈的绝对核心**。没有向上动量的基金,定投只是“钝刀子割肉”。 |
||
| 59 | |||
| 60 | | 特征名 | 计算公式 (严格遵从规约) | 窗口期 | 业务含义与定投必要性 | |
||
| 61 | | :--- | :--- | :--- | :--- | |
||
| 62 | | `momentum_4w` | `(nav_t / nav_{t-4}) - 1` | 4 | **月度动量**。极短期的爆发力,捕捉右侧起涨点。 | |
||
| 63 | | `momentum_12w` | `(nav_t / nav_{t-12}) - 1` | 12 | **季度动量**。验证短期趋势是否确立。 | |
||
| 64 | | `momentum_26w` | `(nav_t / nav_{t-26}) - 1` | 26 | **半年动量**。中期趋势强度的核心指标。 | |
||
| 65 | | `momentum_52w` | `(nav_t / nav_{t-52}) - 1` | 52 | **年度动量**。长期牛熊分界线。 | |
||
| 66 | | `max_drawdown_26w` | `1 - nav_t / rolling_max(nav, 26)` | 26 | **中期最大回撤**。距离半年内高点的回撤。深回撤区间定投是构建低成本底仓的良机,但过深可能反映基本面恶化。 | |
||
| 67 | | `max_drawdown_52w` | `1 - nav_t / rolling_max(nav, 52)` | 52 | **长期最大回撤**。基金的极端风险承受力测试。 | |
||
| 68 | | `trend_slope_26w` | `log(nav) OLS斜率 × 年化` | 26 | **中期趋势斜率**。剔除复利影响后的纯方向性指标。正斜率是定投止盈的先决条件。 | |
||
| 69 | | `trend_slope_52w` | `log(nav) OLS斜率 × 年化` | 52 | **长期趋势斜率**。基金长期盈利能力的确定性。 | |
||
| 70 | | `trend_r_squared_26w` | `OLS回归的R²` | 26 | **中期趋势稳定性**。R²越高说明净值走势越符合单边趋势,定投的“画线”体验越好。 | |
||
| 71 | | `trend_r_squared_52w` | `OLS回归的R²` | 52 | **长期趋势稳定性**。区分“慢牛”与“剧烈震荡”。 | |
||
| 72 | | `consecutive_down_weeks` | 从当前向前连续 `weekly_return < 0` 的周数 | 无 | **连阴周数**。极端情绪指标。连阴末期往往是定投建仓的极佳左侧信号。 | |
||
| 73 | |||
| 74 | ### D. 定投特有类 (10维) |
||
| 75 | 本系统**区别于传统排名系统的灵魂所在**。传统指标看“买入并持有”收益,此类指标看“分批买入”体验。 |
||
| 76 | |||
| 77 | | 特征名 | 计算公式 (严格遵从规约) | 窗口期 | 业务含义与定投必要性 | |
||
| 78 | | :--- | :--- | :--- | :--- | |
||
| 79 | | `dca_cost_ratio_12w` | `rolling_mean(nav, 12) / nav` | 12 | **12周定投成本浮盈率**。值<1表示过去3个月定投的平均成本低于当前净值(处于浮盈),直接刻画定投盘状态。 | |
||
| 80 | | `dca_cost_ratio_26w` | `rolling_mean(nav, 26) / nav` | 26 | **26周定投成本浮盈率**。半年度定投持仓的盈亏体验。 | |
||
| 81 | | `dca_cost_ratio_52w` | `rolling_mean(nav, 52) / nav` | 52 | **52周定投成本浮盈率**。长线定投盘的安全垫厚度。 | |
||
| 82 | | `dca_return_12w` | `(nav - rolling_mean(nav, 12)) / rolling_mean` | 12 | **12周定投收益率**。与上方互为印证,更符合基民阅读习惯。 | |
||
| 83 | | `dca_return_26w` | `(nav - rolling_mean(nav, 26)) / rolling_mean` | 26 | **26周定投收益率**。 | |
||
| 84 | | `dca_return_52w` | `(nav - rolling_mean(nav, 52)) / rolling_mean` | 52 | **52周定投收益率**。 | |
||
| 85 | | `dca_return_vol_26w` | `rolling_std(dca_return序列, 26)` | 26 | **定投收益波动率**。定投收益的抖动程度。波动过大说明虽然涨,但定投体验像坐过山车。 | |
||
| 86 | | `dca_return_vol_52w` | `rolling_std(dca_return序列, 52)` | 52 | **长期定投收益波动率**。 | |
||
| 87 | | `dca_win_rate_26w` | `rolling_mean(dca_return > 0, 26)` | 26 | **26周定投正收益周占比**。定投的“舒适度”指标。胜率越高,客户越容易拿得住,从而真正等到20%止盈。 | |
||
| 88 | | `dca_win_rate_52w` | `rolling_mean(dca_return > 0, 52)` | 52 | **52周定投正收益周占比**。长期的持有体验指标。 | |
||
| 89 | |||
| 90 | ### E. 风险调整类 (5维) |
||
| 91 | 将收益与风险结合,寻找“性价比”最高的定投标的。 |
||
| 92 | |||
| 93 | | 特征名 | 计算公式 (严格遵从规约) | 窗口期 | 业务含义与定投必要性 | |
||
| 94 | | :--- | :--- | :--- | :--- | |
||
| 95 | | `rolling_sharpe_26w` | `(rolling_mean(weekly_ret) - weekly_rf) / rolling_std(weekly_ret) × √52` | 26 | **半年期夏普比率**。承担1单位风险能获得多少超额收益,定投应优选高Sharpe基金。 | |
||
| 96 | | `rolling_sharpe_52w` | `(rolling_mean(weekly_ret) - weekly_rf) / rolling_std(weekly_ret) × √52` | 52 | **一年期夏普比率**。 | |
||
| 97 | | `rolling_sortino_26w` | `(rolling_mean(weekly_ret) - weekly_rf) / rolling_std(min(weekly_ret, 0)) × √52` | 26 | **半年期索提诺比率**。只惩罚下行风险。对于定投,上行波动是好事,**Sortino比Sharpe更契合定投场景**。 | |
||
| 98 | | `rolling_sortino_52w` | `(rolling_mean(weekly_ret) - weekly_rf) / rolling_std(min(weekly_ret, 0)) × √52` | 52 | **一年期索提诺比率**。 | |
||
| 99 | | `calmar_ratio_52w` | `annualized_return(52) / max_drawdown(52)` | 52 | **卡玛比率**。年化收益除以最大回撤。直接回答“为了赚这点钱,定投最多可能被套多少”,是止盈效率的终极体现。 | |
||
| 100 | |||
| 101 | --- |
||
| 102 | |||
| 103 | ## 三、 工程实现红线约束重申 |
||
| 104 | |||
| 105 | 1. **存储形态红线**:上述 38 维特征在 `features.parquet` 中必须为**长表形态**(Schema: `fund_id`, `net_value_date`, `feature_name`, `feature_value`)。严禁 Pivot 成宽表(即严禁出现 38 列并排的 DataFrame)。 |
||
| 106 | 2. **标准化红线**:38 维特征**无条件、无特例**全部进入规约 4.3 的 T-1 截面 Z-Score + MAD clip 流水线。 |
||
| 107 | 3. **空值判定红线**:所有带窗口期的特征,必须执行规约 4.2 的有效值判定(`min_valid_ratio=0.20`),不足则输出 NULL,交由 LightGBM 原生处理。 |