4、因子分类与构建:估值因子、成长因子、质量因子、动量因子、反转因子、波动率因子、流动性因子
好,咱们进入正题。这一章聊的是多因子模型的核心——因子本身。你想想看,没有好的因子,再牛的模型也是白搭。我个人习惯把因子分成几大类,每一类背后都有不同的逻辑和故事。今天咱们就把估值、成长、质量、动量、反转、波动率、流动性这七大类因子,一个一个拆开来看。
4.1 估值因子:便宜才是硬道理?
估值因子,说白了就是看股票贵不贵。最常用的三个指标:PE、PB、PS。
- PE(市盈率):股价 / 每股收益。PE低,说明市场对这家公司的盈利预期不高,可能被低估。但要注意,亏损公司的PE是负的,没法直接用。
- PB(市净率):股价 / 每股净资产。适合银行、保险这类重资产行业。PB小于1,理论上你买股票比买公司净资产还便宜。
- PS(市销率):股价 / 每股销售收入。适合还没盈利的成长型公司,比如早期的亚马逊。
我在项目中遇到过一个问题:直接用原始PE做因子,效果很差。为什么?因为不同行业的PE差异太大了。银行股PE常年5-8倍,科技股PE动不动50倍以上。所以一定要做行业中性化处理。
核心要点:估值因子必须做行业中性化,否则你选出来的全是行业因子,不是估值因子。
4.2 成长因子:买的是未来
成长因子关注的是公司的增长速度。两个核心指标:营收增长率和利润增长率。
我一般用过去3-5年的复合增长率,而不是单年数据。单年数据太容易受偶然因素影响了。比如某公司今年卖了一套房产,利润暴增,但这不是常态。
构建成长因子时,有个坑要注意:基数效应。一家公司去年利润是1亿,今年是2亿,增长率100%。另一家公司去年利润是100亿,今年是110亿,增长率只有10%。你能说前者成长性更好吗?不一定。所以我会结合增长率的绝对值一起看。
小技巧:我习惯用「标准化增长率」——把增长率除以增长率的波动率。这样能剔除掉那些靠运气暴增的公司。
4.3 质量因子:好公司长什么样?
质量因子衡量的是公司的盈利能力、运营效率和财务健康度。三个经典指标:ROE、ROA、毛利率。
| 指标 | 公式 | 含义 |
|---|---|---|
| ROE | 净利润 / 净资产 | 股东每投入1块钱能赚多少 |
| ROA | 净利润 / 总资产 | 公司每用1块钱资产能赚多少 |
| 毛利率 | (收入-成本) / 收入 | 产品本身的赚钱能力 |
ROE高不一定就是好公司。我曾经踩过一个坑:某公司ROE高达30%,但仔细一看,它的负债率也高得吓人。ROE可以通过加杠杆来虚增,所以一定要结合负债率来看。我一般会用「ROE - 负债率调整项」来构建质量因子。
注意:毛利率要分行业看。软件公司的毛利率可以到80%,零售公司可能只有20%。跨行业比较毛利率没有意义。
4.4 动量因子与反转因子:趋势还是回归?
这两个因子放在一起说,因为它们是一对冤家。
动量因子:过去N个月收益高的股票,未来还会继续涨。N一般取6-12个月。我习惯用过去12个月剔除最近1个月的收益,这样可以避免短期反转效应的影响。
反转因子:过去N个月收益低的股票,未来会反弹。N一般取1个月或更短。说白了就是「跌多了会涨」。
为什么会有这两种相反的效应?我个人理解是:动量反映的是趋势延续,反转反映的是过度反应后的修正。两者在不同时间尺度上起作用。
构建动量因子时,我建议用累计超额收益,而不是简单收益。因为大盘涨的时候,几乎所有股票都在涨,动量因子会失效。用超额收益可以剔除市场整体走势的影响。
4.5 波动率因子:风险与收益的博弈
波动率因子衡量的是股票价格的波动程度。常用的指标有:
- 历史波动率:过去N天收益的标准差
- 已实现波动率:日内高频收益的标准差
- 特异波动率:剔除市场因子后的残差波动率
有意思的是,低波动率股票长期来看反而比高波动率股票收益更高。这就是著名的「低波动率异象」。我在做A股回测时也验证了这一点——低波动率组合的年化收益比高波动率组合高出3-5个百分点。
构建波动率因子时,要注意波动率聚集效应。高波动率时期往往持续一段时间,低波动率时期也是。所以直接用原始波动率做因子,会有很强的自相关性。我一般会做一阶差分,或者用波动率的排名变化来构建因子。
4.6 流动性因子:能买能卖才是王道
流动性因子衡量的是股票交易的难易程度。常用的指标有:
- 换手率:成交量 / 流通股本
- Amihud非流动性指标:日收益率的绝对值 / 日成交额
- 买卖价差:卖一价 - 买一价
流动性差的股票,你买进去容易,想出来就难了。我见过一个策略,回测收益很高,但一实盘就崩了。为什么?因为策略选的全是小盘股,换手率极低,根本买不到足够的量。
构建流动性因子时,我建议用对数换手率而不是原始换手率。因为换手率的分布是右偏的,取对数后更接近正态分布,因子效果更好。
4.7 因子构建的通用流程
不管哪种因子,构建流程都差不多。我总结了一个四步法:
- 数据清洗:处理缺失值、异常值、停牌数据
- 因子计算:按照公式计算原始因子值
- 因子处理:去极值、标准化、中性化
- 因子检验:IC分析、分组回测、多空收益
下面是一个简单的因子构建代码示例:
import pandas as pd
import numpy as np
def build_pe_factor(df):
"""
构建PE因子
df: 包含'close', 'eps'列的DataFrame
"""
# 计算PE
df['pe'] = df['close'] / df['eps']
# 处理异常值:用MAD方法去极值
median = df['pe'].median()
mad = (df['pe'] - median).abs().median()
df['pe'] = df['pe'].clip(median - 5*mad, median + 5*mad)
# 标准化
df['pe_zscore'] = (df['pe'] - df['pe'].mean()) / df['pe'].std()
return df[['pe_zscore']]
经验之谈:因子处理这一步,很多人会忽略。但恰恰是这一步,决定了因子最终的效果。我见过有人直接用原始因子做回测,结果因为几个极端值,整个策略都变形了。
4.8 本章小结
好了,七大类因子咱们都过了一遍。估值因子看便宜,成长因子看增速,质量因子看盈利,动量因子看趋势,反转因子看回归,波动率因子看风险,流动性因子看交易。每个因子都有自己的逻辑和适用场景。
最后说一句:没有完美的因子,只有合适的组合。下一章咱们就聊聊怎么把这些因子组合起来,构建一个稳健的多因子模型。