第二章:常见因子家族全景解析
做量化投资这些年,我接触过形形色色的因子。说实话,真正经得起时间考验的,也就那么几大家族。今天咱们就把这些「常青树」因子掰开揉碎,好好聊一聊。
我个人习惯把因子分为六大类:价值、动量、质量、低波、规模和成长。你想想看,这六个维度基本覆盖了股票收益的绝大部分来源。嗯,咱们一个一个来看。
2.1 价值因子(Value Factor)
价值因子,说白了就是「捡便宜货」。买那些被市场低估的股票,等价格回归合理水平。我在项目中遇到过不少新手,以为市盈率低就是价值股,结果踩了「价值陷阱」的坑。
常用的价值指标有这些:
| 指标 | 计算公式 | 说明 |
|---|---|---|
| 市盈率(P/E) | 股价 / 每股收益 | 越低越便宜,但要注意盈利质量 |
| 市净率(P/B) | 股价 / 每股净资产 | 适合重资产行业 |
| 市销率(P/S) | 股价 / 每股销售额 | 适合亏损但营收高的公司 |
| 股息率(Dividend Yield) | 每股股息 / 股价 | 高股息往往意味着低估 |
2.2 动量因子(Momentum Factor)
动量因子,就是「追涨杀跌」的学术版。过去涨得好的股票,未来一段时间还会继续涨。为什么会这样?行为金融学告诉我们,这是投资者反应不足和羊群效应共同作用的结果。
我常用的动量指标:
- 过去12个月收益率(剔除最近1个月,避免短期反转)
- 过去6个月收益率(中期动量,A股效果不错)
- 过去3个月收益率(短期动量,噪音较大)
- RSI相对强弱指标(辅助判断超买超卖)
2.3 质量因子(Quality Factor)
质量因子,就是选「好公司」。盈利能力强的、财务健康的、管理优秀的公司,长期来看能跑赢市场。我记得刚开始做多因子模型时,总觉得质量因子太「基本面」了,后来发现它和动量因子搭配起来,效果出奇的好。
核心指标包括:
# 质量因子常用指标
ROE(净资产收益率) > 15% # 盈利能力
资产负债率 < 60% # 财务安全
毛利率 > 30% # 竞争优势
经营性现金流/净利润 > 1.0 # 盈利质量
重要提醒:质量因子不是越高越好。ROE超过40%的公司,往往不可持续。我见过太多高ROE公司,第二年就暴雷了。
2.4 低波因子(Low Volatility Factor)
低波因子,听起来有点反直觉——波动小的股票,长期收益反而更好。这被称为「低波动异象」。我在实盘中发现,低波因子在熊市里特别抗跌,牛市里虽然跑不赢,但回撤控制得非常好。
衡量波动的方法:
- 历史波动率:过去252个交易日收益率的标准差
- 贝塔系数:相对于市场的敏感度
- 最大回撤:过去一年的最大跌幅
- 特异波动率:剔除市场因素后的剩余波动
2.5 规模因子(Size Factor)
规模因子,就是「小市值效应」。小盘股长期跑赢大盘股,这是Fama-French三因子模型的核心发现之一。不过,A股的小市值效应比美股更明显,但波动也更大。
我一般这样处理规模因子:
# 规模因子构建示例
import pandas as pd
def size_factor(df):
"""
df: 包含市值数据的DataFrame
返回:标准化后的规模因子值
"""
# 取对数市值
df['log_mktcap'] = np.log(df['market_cap'])
# 市值中性化处理(剔除行业影响)
df['size_neutral'] = df.groupby('industry')['log_mktcap'].transform(
lambda x: (x - x.mean()) / x.std()
)
return df['size_neutral']
2.6 成长因子(Growth Factor)
成长因子,就是买「高增长」的公司。营收增长快、利润增长快的公司,市场愿意给更高的估值。但这里有个坑——高增长往往不可持续。
常用的成长指标:
| 指标 | 计算方式 | 注意事项 |
|---|---|---|
| 营收增长率 | (本期营收-上期营收)/上期营收 | 连续3年增长更可靠 |
| 净利润增长率 | (本期净利润-上期净利润)/上期净利润 | 小心非经常性损益 |
| 分析师预期增长率 | 未来1-2年EPS增长率预测 | 预期差是超额收益来源 |
| 可持续增长率 | ROE × (1-分红率) | 反映内生增长能力 |
核心逻辑:成长因子和价值因子其实是硬币的两面。高成长对应高估值,低成长对应低估值。我习惯把这两个因子结合起来做「GARP策略」(Growth at a Reasonable Price),也就是用合理的价格买成长。
2.7 因子家族知识体系
下面这张图,是我自己总结的因子家族全景图。你可以看到,六大因子之间既有独立性,又有交叉关系。
2.8 因子组合的实战思路
单因子策略,说白了就是「赌一个方向」。我建议至少用3个因子做组合。举个例子:
# 多因子打分组合示例
def multi_factor_score(df):
"""
综合打分:价值 + 动量 + 质量
权重分配:价值40% + 动量30% + 质量30%
"""
# 各因子标准化
df['value_z'] = (df['value_score'] - df['value_score'].mean()) / df['value_score'].std()
df['momentum_z'] = (df['momentum_score'] - df['momentum_score'].mean()) / df['momentum_score'].std()
df['quality_z'] = (df['quality_score'] - df['quality_score'].mean()) / df['quality_score'].std()
# 综合得分
df['total_score'] = 0.4 * df['value_z'] + 0.3 * df['momentum_z'] + 0.3 * df['quality_z']
return df.sort_values('total_score', ascending=False)
好了,六大因子家族就聊到这儿。记住一句话:没有完美的因子,只有合适的组合。下一章咱们聊聊因子数据的获取和清洗,那可是实盘的第一步。