基本面因子的事故率高于量价因子,原因是口径自由度大:同一个「ROE 因子」,十个人能有十种实现,每种都「看起来对」。本篇是一份把口径自由度关进笼子的 SOP——每一步都给出默认选择与理由,团队可直接采纳为内部规范。
十步规范
① 字段选择:用原始科目,不用成品比率。 优先取「净利润、净资产、营业收入、经营现金流」等报表科目自行组合,而非数据商的成品「ROE」字段——成品字段的口径(平均 vs 期末、归母 vs 扣非)不透明且随数据商版本漂移。科目 + 自算 = 口径自主可控。
② 时点对齐:公告日为王。 一切基本面字段以 announce_date 重索引进 PIT 查询(见数据清洗
)。公告日缺失的记录视为不可用,禁止用报告期兜底——这是本规范唯一不可妥协的一条。
③ 频率与平滑:TTM 为默认。 财务数据季度阶跃,因子若直接用单季值会「每季度跳变一次」。默认 TTM(滚动 12 个月)平滑;季节性强的行业(如白酒 Q4 占比高)补同比口径交叉验证。增长类因子用「单季同比」保敏锐、TTM 同比保稳定,两版都留。
④ 分母安全:比率爆炸防护。 分母绝对值 < 全市场中位数的 5% 时(微利、微净资产),比率无意义——用行业分位数替代原值,或对分母 winsorize 后再除。算例:净利润 200 万的公司,ROE 从 3% 到 300% 只需利润波动几百万——这类「超高 ROE」是噪声不是质量。
⑤ 行业内标准化:分位优于 z-score。 基本面比率分布重尾,z-score 被极端值主导;**行业内秩/百分位(0–1)**稳健且跨期可比。金融行业单列(杠杆与盈利口径不同,见财务比率 )。
⑥ 缺失处理:区分「未知」与「无意义」。 未披露 = 缺失(因子置 NaN,组合层按「缺因子」规则处理,如跳过该股或按截面均值降权);「该指标对该行业无意义」(软件的存货周转)= 结构性缺失,单独标记 not_applicable,合成时降权而非填均值——填均值会制造虚假中性暴露。
⑦ 稳定性修饰:慢变量不追新。 基本面信息本身低频,因子值可用 3 个月均值或「分位数的指数平滑」降低季度跳变带来的换手——但平滑窗口要当作参数做敏感性检验(3/6/12 个月),而不是拍脑袋(见因子检验 )。
⑧ 中性化:行业 + 市值为默认。 基本面因子与市值的相关性极强(小公司增长快但质量差),先做行业+市值中性化再看 IC,才能分清「因子本身的选股力」与「风格暴露的搭车收益」(中性化技术见因子构建 )。
⑨ 更新与版本:因子随财报季再生成。 触发器 = 新财报公告事件(而非日历日);每次再生成打版本号,旧版本归档;跨版本 IC 对比进因子库 的例行体检。
⑩ 文档:一因子一卡片。 每个因子登记:定义公式、依赖字段与数据商版本、处理参数(TTM/分位/平滑窗口)、检验摘要(IC、分组单调性、衰减、容量)、适用与不适用行业、「已知失效历史」。这张卡片比代码本身更长久——半年后接手的人只能靠它(模板见因子检验报告模板 )。
三个反模式(每条都来自真实事故)
- 「用最近的年报」:年报公告在 4 月底,一季报在 4 月中——很多公司的 Q1 信息比去年年报更新。按「报告期类型」选数据(只去年报)会系统性滞后三个月以上。正确做法是按公告日取最新可知报告期,无论年报季报;
- 「回测快进快出的财报跳变」:未做第 ⑦ 步平滑的因子在财报季集中跳变,换手率脉冲 → 成本翻倍。绩效好的回测配上真实成本后消失,多半是它。量级感:未平滑的基本面组合财报季单月换手可达平时的 2–3 倍,年成本多 2%–3%;
- 「合成前不检相关性」:把 ROE、净利率、净现比、毛利率直接等权合成,实际上四者高度相关(0.6–0.8),「四因子」实为 1.3 个因子,而真正的独立信息(如资产周转)没进来——合成前先看因子相关性矩阵(见因子库建设 )。
与量价因子的接口
基本面因子的独特价值在于低换手、低拥挤、与量价低相关——它是多因子组合里的「慢信号」。工程上常见的组合方式:基本面因子定「可买池」与权重锚(慢),量价因子做日内/周度的执行与微调(快)——两层信号的频率分工见策略组合与 Meta-Strategy 。