3. 估值因子(上):市盈率(PE)、市净率(PB)的计算逻辑、行业中性化处理、因子有效性初步检验
各位同学,今天我们来聊聊估值因子。说实话,估值因子是我个人在量化实战中最先接触、也最常用的一类因子。为什么?因为它逻辑清晰,数据好拿,而且效果稳定。你想想看,买股票不就是想买便宜货吗?PE、PB这些指标,说白了就是帮我们判断「这玩意儿到底贵不贵」。
3.1 市盈率(PE)的计算逻辑
市盈率,全称Price to Earnings Ratio。公式很简单:
PE = 股价 / 每股收益(EPS)
但这里有个坑——每股收益用哪个?
我刚开始做因子研究时,直接拿最新财报的EPS去算PE。结果回测效果一塌糊涂。后来才发现,我用的EPS是「过去四个季度」的滚动数据,而市场定价用的是「未来预期」的EPS。这就是静态PE和动态PE的区别。
关键点:
- 静态PE(TTM):用过去12个月的EPS。数据稳定,但滞后。
- 动态PE(Forward):用未来12个月的预测EPS。前瞻性强,但预测不准。
我个人习惯在因子构建中优先使用TTM PE。原因很简单——预测数据容易有偏差,而历史数据至少是「真实发生」的。
嗯,这里要注意:PE为负值怎么办?比如亏损企业。我的做法是直接剔除或赋一个极大值。你想想看,负PE在逻辑上没法解释「便宜」还是「贵」。
3.2 市净率(PB)的计算逻辑
PB = 股价 / 每股净资产(BVPS)
PB适用于重资产行业,比如银行、地产。为什么?因为这些公司的资产容易估值,净资产相对靠谱。
我曾经在分析科技公司时用过PB,结果发现这些公司的净资产主要是无形资产和商誉,账面价值跟实际价值差得远。所以PB在科技股上基本失效。
实战技巧:
PB小于1不一定就是「破净」机会。你得看看公司的资产质量。比如某地产公司PB=0.8,但它的存货(土地)可能已经贬值了。这时候PB低反而是价值陷阱。
3.3 行业中性化处理
为什么要做行业中性化?我举个例子:
银行股的平均PE是6倍,科技股的平均PE是30倍。如果你直接用PE排序,选出来的全是银行股。这合理吗?不合理。因为不同行业的估值中枢天然不同。
行业中性化的核心思想:在同一行业内比较估值。
具体做法分两步:
- 计算行业内的相对估值:比如用个股PE减去行业平均PE,再除以行业标准差。
- 得到行业中性化后的Z-score:这个值表示「该股票在行业内是贵了还是便宜了」。
# Python伪代码示例
import pandas as pd
def industry_neutralize(df, factor_col='pe_ttm', industry_col='industry'):
# 计算行业均值和标准差
industry_stats = df.groupby(industry_col)[factor_col].agg(['mean', 'std']).reset_index()
df = df.merge(industry_stats, on=industry_col, how='left')
# 计算Z-score
df['pe_neutral'] = (df[factor_col] - df['mean']) / df['std']
return df
注意:
行业分类不能太粗也不能太细。太粗(比如只分金融和非金融)会丢失行业特性;太细(比如申万三级行业)会导致样本量不足,统计结果不稳定。我个人推荐使用申万一级行业分类,28个行业刚刚好。
3.4 因子有效性初步检验
因子构建完了,怎么知道它有没有用?我一般做三个检验:
3.4.1 IC(信息系数)分析
IC就是因子值与未来收益的相关系数。简单说:因子值越高,未来收益是不是也越高?
| IC值范围 | 含义 |
|---|---|
| IC > 0.05 | 因子有效,正向选股 |
| IC < -0.05 | 因子有效,反向选股 |
| |IC| < 0.02 | 因子基本无效 |
我见过很多新手只看IC均值,不看IC的稳定性。其实IC的IR(信息比率)更重要——IC均值除以IC标准差。IR大于0.5才算靠谱。
3.4.2 分层回测
把股票按因子值分成10组(Decile),看每组未来的收益表现。理想情况是:第1组(最便宜)收益最高,第10组(最贵)收益最低,单调递减。
我曾经做过一个PE因子的分层回测,结果发现第1组和第10组收益差异很大,但中间几组乱成一团。这说明PE因子在极端值上有效,但在中间区域区分度不够。这时候我会考虑做一下极值处理(比如MAD去极值)。
3.4.3 多空组合收益
做多因子值最低的10%股票,做空因子值最高的10%股票。看这个多空组合的累计收益曲线。如果曲线平稳向上,说明因子有稳定的选股能力。
我的经验:
PE和PB因子单独使用时,效果一般。但把它们组合成「综合估值因子」,效果会好很多。比如:
综合估值 = 0.5 * Z(PE_neutral) + 0.5 * Z(PB_neutral)
这样既能捕捉盈利估值,又能捕捉资产估值,互补性很强。
3.5 本章知识体系
下面这张图是我自己画的,把本章的核心逻辑串起来了:
这张图把PE、PB的计算逻辑、行业中性化处理、以及因子有效性检验串在了一起。你可以把它当作一个检查清单——每做一个因子,都按这个流程走一遍。
最后说一句:
估值因子不是万能的。我见过很多人在牛市里用PE选股,结果跑不赢指数。为什么?因为牛市里大家不看估值,看的是「故事」和「情绪」。但拉长到3年以上的周期,估值因子的有效性就会显现出来。所以,别因为短期失效就放弃一个逻辑上正确的因子。
公众号:蓝海资料掘金营,微信deep3321