项目

一般

简介

行为

document_id: DICT-FEATURE-001
version: 1.0.0
status: Frozen (Baseline)
created_date: 2026-04-11
approved_by: Henry Lin
parent_spec: SPEC-FUND-DCA-001 (《基金量化定投选基系统 — 最终设计规约 v1.0》 4.1节)


特征字典基线文档 (V1.0 Frozen)

⚠️ 架构冻结声明
本文档为《系统设计规约 v1.0》4.1节的唯一刚性补充附件,具有同等红线效力。
代码实现(feature_engineering.py)、单测(test_feature_engineering.py)、标准化参数输出(standardization_params.parquetfeature_name 字段)必须与此文档列出的 38 个特征名严格一字不差。严禁擅自增删改。

一、 维度总控与决策记录

  • 最终特征总数38 维
  • 命名范式{特征语义}_{窗口期}w(无窗口期特征直接使用语义名)
  • 维度溯源:基于规约 4.1 节原始公式推导出 37 维,补充 1 维基础微观动量特征(weekly_return),共计 38 维。
  • 【关键架构决策 A 记录】:为何固守 38 维,放弃补齐至 40+ 维?
    • 冲突点:曾计划补充 nav_ma_26wnav_ma_52w(净值均线绝对值)以满足“40+维”字面要求。
    • 否决理由:累计净值(NAV)是强路径依赖的单调递增序列。老基金(如存续5年,MA=2.5)与新基金(存续1年,MA=1.1)的绝对均线存在巨大量纲差异。若强行执行规约 4.3 的“截面 Z-Score”,老基金与新基金的绝对净值信息将被强行拉平至同一正态分布,导致模型彻底丧失对基金存续期与净值规模的感知能力。
    • 结论:为捍卫规约 4.3“全量特征严格走 T-1 截面标准化”的普适性铁律,主动摒弃对标准化不友好的绝对值指标。38 维已实现对定投体验的完备刻画,不再引入特例豁免逻辑。

二、 特征详细字典

A. 均值回归类 (5维)

捕捉价格偏离均线的程度,是定投“越跌越买”策略的核心择时指标。

特征名 计算公式 (严格遵从规约) 窗口期 业务含义与定投必要性
price_vs_ma_ratio_12w nav / rolling_mean(nav, 12) 12 短期偏离度。捕捉近3个月的超买超卖。比值极低说明近期处于弱势阴跌,定投摊薄成本低,但需警惕趋势性下跌。
price_vs_ma_ratio_26w nav / rolling_mean(nav, 26) 26 中期偏离度。半年的均值回归基准,定投最核心的观测窗口。偏离度极低时是收集廉价筹码的黄金期。
price_vs_ma_ratio_52w nav / rolling_mean(nav, 52) 52 长期偏离度。过滤短期噪音,判断该基金是否处于历史级别的低估区域。
price_vs_ma_ratio_ewm_26w nav / ewm_mean(nav, span=26) 26 指数加权偏离度。相比等权MA,EWM更赋予近期净值更高权重,对趋势反转的灵敏度更高,有助于提前识别定投止盈拐点。
price_vs_ma_ratio_ewm_52w nav / ewm_mean(nav, span=52) 52 长期指数加权偏离度。长期趋势反转的早期信号。

B. 波动类 (6维)

波动率是定投体验的双刃剑:无波动难以摊薄成本,高波动易触发心理止损。

特征名 计算公式 (严格遵从规约) 窗口期 业务含义与定投必要性
weekly_return (nav_t / nav_{t-1}) - 1 微观基础动量。最细粒度的净值突变信息。作为波动与动量计算的基石,必须作为独立特征保留,防止信息断层。
rolling_std_12w rolling_std(weekly_return, 12) 12 短期波动率。衡量近期净值抖动程度。过高意味着近期定投账面波动剧烈,影响持有体验。
rolling_std_26w rolling_std(weekly_return, 26) 26 中期波动率。定投核心波动观测期。模型需学习出“何种中等波动率配合趋势能最快达到20%止盈”。
rolling_std_52w rolling_std(weekly_return, 52) 52 长期波动率。基金的固有波动属性标签。
downside_vol_26w rolling_std(min(weekly_return, 0), 26) 26 下行波动率。只计算跌幅的波动。定投最怕的不是震荡,而是单边下行,该特征直接刻画定投被套的痛苦程度。
downside_vol_52w rolling_std(min(weekly_return, 0), 52) 52 长期下行波动率。长期风险底线的度量。
volatility_regime rolling_std(12w) / rolling_std(52w) 12/52 波动率 Regime。比值>1说明近期波动放大(可能变盘),<1说明进入平静期。模型借此识别定投策略应“激进”还是“防守”。

C. 趋势与动量类 (11维)

动量是决定定投能否在150周内实现20%止盈的绝对核心。没有向上动量的基金,定投只是“钝刀子割肉”。

特征名 计算公式 (严格遵从规约) 窗口期 业务含义与定投必要性
momentum_4w (nav_t / nav_{t-4}) - 1 4 月度动量。极短期的爆发力,捕捉右侧起涨点。
momentum_12w (nav_t / nav_{t-12}) - 1 12 季度动量。验证短期趋势是否确立。
momentum_26w (nav_t / nav_{t-26}) - 1 26 半年动量。中期趋势强度的核心指标。
momentum_52w (nav_t / nav_{t-52})^(52/52) - 1 52 年度动量。长期牛熊分界线。
max_drawdown_26w 1 - nav_t / rolling_max(nav, 26) 26 中期最大回撤。距离半年内高点的回撤。深回撤区间定投是构建低成本底仓的良机,但过深可能反映基本面恶化。
max_drawdown_52w 1 - nav_t / rolling_max(nav, 52) 52 长期最大回撤。基金的极端风险承受力测试。
trend_slope_26w log(nav) OLS斜率 × 年化 26 中期趋势斜率。剔除复利影响后的纯方向性指标。正斜率是定投止盈的先决条件。
trend_slope_52w log(nav) OLS斜率 × 年化 52 长期趋势斜率。基金长期盈利能力的确定性。
trend_r_squared_26w OLS回归的R² 26 中期趋势稳定性。R²越高说明净值走势越符合单边趋势,定投的“画线”体验越好。
trend_r_squared_52w OLS回归的R² 52 长期趋势稳定性。区分“慢牛”与“剧烈震荡”。
consecutive_down_weeks 从当前向前连续 weekly_return < 0 的周数 连阴周数。极端情绪指标。连阴末期往往是定投建仓的极佳左侧信号。

D. 定投特有类 (10维)

本系统区别于传统排名系统的灵魂所在。传统指标看“买入并持有”收益,此类指标看“分批买入”体验。

特征名 计算公式 (严格遵从规约) 窗口期 业务含义与定投必要性
dca_cost_ratio_12w rolling_mean(nav, 12) / nav 12 12周定投成本浮盈率。值<1表示过去3个月定投的平均成本低于当前净值(处于浮盈),直接刻画定投盘状态。
dca_cost_ratio_26w rolling_mean(nav, 26) / nav 26 26周定投成本浮盈率。半年度定投持仓的盈亏体验。
dca_cost_ratio_52w rolling_mean(nav, 52) / nav 52 52周定投成本浮盈率。长线定投盘的安全垫厚度。
dca_return_12w (nav - rolling_mean(nav, 12)) / rolling_mean 12 12周定投收益率。与上方互为印证,更符合基民阅读习惯。
dca_return_26w (nav - rolling_mean(nav, 26)) / rolling_mean 26 26周定投收益率
dca_return_52w (nav - rolling_mean(nav, 52)) / rolling_mean 52 52周定投收益率
dca_return_vol_26w rolling_std(dca_return序列, 26) 26 定投收益波动率。定投收益的抖动程度。波动过大说明虽然涨,但定投体验像坐过山车。
dca_return_vol_52w rolling_std(dca_return序列, 52) 52 长期定投收益波动率
dca_win_rate_26w rolling_mean(dca_return > 0, 26) 26 26周定投正收益周占比。定投的“舒适度”指标。胜率越高,客户越容易拿得住,从而真正等到20%止盈。
dca_win_rate_52w rolling_mean(dca_return > 0, 52) 52 52周定投正收益周占比。长期的持有体验指标。

E. 风险调整类 (5维)

将收益与风险结合,寻找“性价比”最高的定投标的。

特征名 计算公式 (严格遵从规约) 窗口期 业务含义与定投必要性
rolling_sharpe_26w (rolling_mean(weekly_ret) - weekly_rf) / rolling_std(weekly_ret) × √52 26 半年期夏普比率。承担1单位风险能获得多少超额收益,定投应优选高Sharpe基金。
rolling_sharpe_52w (rolling_mean(weekly_ret) - weekly_rf) / rolling_std(weekly_ret) × √52 52 一年期夏普比率
rolling_sortino_26w (rolling_mean(weekly_ret) - weekly_rf) / rolling_std(min(weekly_ret, 0)) × √52 26 半年期索提诺比率。只惩罚下行风险。对于定投,上行波动是好事,Sortino比Sharpe更契合定投场景
rolling_sortino_52w (rolling_mean(weekly_ret) - weekly_rf) / rolling_std(min(weekly_ret, 0)) × √52 52 一年期索提诺比率
calmar_ratio_52w ((nav_t / nav_{t-52})^(52/52) - 1) / max_drawdown(52) 52 卡玛比率。年化收益除以最大回撤。直接回答“为了赚这点钱,定投最多可能被套多少”,是止盈效率的终极体现。

三、 工程实现红线约束重申

  1. 存储形态红线:上述 38 维特征在 features.parquet 中必须为长表形态(Schema: fund_id, net_value_date, feature_name, feature_value)。严禁 Pivot 成宽表(即严禁出现 38 列并排的 DataFrame)。
  2. 标准化红线:38 维特征无条件、无特例全部进入规约 4.3 的 T-1 截面 Z-Score + MAD clip 流水线。
  3. 空值判定红线:所有带窗口期的特征,必须执行规约 4.2 的有效值判定(min_valid_ratio=0.20),不足则输出 NULL,交由 LightGBM 原生处理。

Huarui Lin 更新于 大约 5 小时 之前 · 4 修订