数量技术宅团队在CSDN学院推出了量化投资系列课程
欢迎有兴趣系统学习量化投资的同学,点击下方链接报名:
量化投资速成营(入门课程)
Python股票量化投资
Python期货量化投资
Python数字货币量化投资
C++语言CTP期货交易系统开发
数字货币JavaScript语言量化交易系统开发
上一篇写 PE 历史分位数,留了一个尾巴没展开:这个因子在悄悄 缩小你的股票池。
市盈率的分母是净利润。公司一旦亏损,PE 就变成负数或者干脆没有意义, 只能从样本里剔除。而在 A 股,亏损从来不是小概率事件—— 最新一个估值截面上,全市场 5203 只股票里,PE 有效的只有 3624 只, 占 69.7%;而市净率的 PB 有 5149 只有效, 占比 99.0%。整个回测区间平均下来, PE 覆盖 85.1%,PB 覆盖 99.2%—— 按可用股票数算,PB 的池子比 PE 大 17%; 而在最新这一个截面上,差距拉大到 42%。
净资产是存量,几乎不会凭空消失;净利润是流量,说没就没。 所以任何人第一次看到这组数字,都会冒出一个很自然的念头:PB 覆盖更全、样本更大、还不用因为亏损把公司踢出去—— 那它是不是一个更好用的估值因子?
图 1 PE 与 PB 的可用股票数:整个回测区间 PB 的池子都更大,缺口随年份拉宽
我把这个念头做成了五个可以检验的方案,跑了 200 个月度截面。 先把结论放在这里:直觉错了。而且错得相当彻底。
一、把"便宜"拆成五个可以检验的问题
"便宜"这两个字太笼统了,笼统到没法做实验。所以我先把它拆开—— 同样是"估值低",至少有五种不同的含义,对应五个方案:
| 方案 | 定义 | 它想回答的问题 |
|---|---|---|
| PE 历史分位 | 个股 PE 在其自身过去 N 年中的位置 | 上一轮的老办法,作为参照组 |
| PB 历史分位 | 个股 PB 在其自身过去 N 年中的位置 | 把因子直接换成 PB,会怎样 |
| PB 当期截面分位 | 只在当天全市场内比谁 PB 更低 | 如果去掉时序分位,还剩多少 |
| 行业内中性化 PB 分位 | 先算自身历史分位,再在所属行业内排序 | PB 的毛病是不是行业差异造成的 |
| PE+PB 双分位合成 | 两个分位各占一半权重的均值 | 两个口径一起用会不会更稳 |
窗口沿用 3 / 5 / 10 / 20 年四档,持股数 10 / 20 / 50 / 100 四档, 月度调仓、等权持有、买卖双边扣费(佣金万 2.5 + 印花税千 1 单边卖出)。
这里有一个容易被忽略的口径问题。 两个方案的股票池规模确实不同——5 年窗口下, PB 组合的中位可用池是 2387 只,PE 是 2077 只,多出约 15%。 如果两组策略都拿"全市场等权"当基准, 那么 PB 多出来的收益(或亏损)里,有一部分只是池子不同造成的, 和因子本身有没有选股能力无关。
所以每个方案我都额外配了一条同池等权基准—— 在该方案自己的可行域内,所有股票等权买入。 超额 = 策略收益 − 同池收益,这才是纯粹的选股能力。下文所有"超额"都指这个口径。
二、总成绩:PB 分位没赢
先看最直接的对比。下表统一取 5 年窗口、持股 100 只、扣费后的结果:
| 方案 | 年化收益 | 夏普 | 最大回撤 | 超额(同池) | IR | 年化双边换手 |
|---|---|---|---|---|---|---|
| PE 历史分位 | 19.01% | 0.71 | -35.7% | +9.20% | 0.83 | 12.4 倍 |
| PB 历史分位 | 6.70% | 0.30 | -45.4% | -2.92% | -0.31 | 13.6 倍 |
| 行业内中性化 PB 分位 | 7.57% | 0.32 | -52.3% | -2.05% | -0.25 | 13.1 倍 |
| PE+PB 双分位合成 | 14.56% | 0.57 | -38.9% | +4.77% | 0.34 | 10.1 倍 |
| PB 当期截面分位 | 9.95% | 0.42 | -34.6% | +0.15% | -0.05 | 2.8 倍 |
| 全A等权(无因子) | 9.90% | 0.40 | -53.4% | — | — | 0.6 倍 |
图 2 五个方案的净值曲线(对数刻度)与全A等权对比,2010—2026,已扣费
表里的数字很干净地分成三档:
PE 历史分位 19.01%, 超额+9.20%, IR 0.83——参照组依旧稳健。
PB 历史分位 6.70%,不但跑输 PE,还跑输了"什么都不选"—— 超额-2.92%, IR -0.31。 把它换成等权买入同一批股票,结果反而更好。
双分位合成14.56%, 超额 +4.77%——救回了一大半, 但依然够不着纯 PE。而 PB 截面分位几乎是一条平线, 超额 +0.15%,IR -0.05。
还有一个藏在细节里的规律。把持股数从 100 只降到 10 只,PB 的超额不是变好,而是越来越差:
| 方案 \ 持股数 | 10 只 | 20 只 | 50 只 | 100 只 |
|---|---|---|---|---|
| PE 历史分位 | +4.49% | +6.57% | +8.81% | +9.20% |
| PB 历史分位 | -5.60% | -4.20% | -3.47% | -2.92% |
| 行业内中性化 PB 分位 | -2.27% | -0.93% | -1.82% | -2.05% |
| PE+PB 双分位合成 | +2.67% | +2.64% | +3.05% | +4.77% |
| PB 当期截面分位 | -7.53% | -3.63% | -0.84% | +0.15% |
PB 那一行是 -5.60% → -4.20% → -3.47% → -2.92%, 一路往零靠。反过来看 PE,持股越多超额越高。
这个方向上的差异非常说明问题:PB 的亏损不是均匀分布的, 它集中在你最想抓住的那一端——最便宜的那几只股票上。持股越少、越往因子的极端端走,PB 的表现就越糟。
图 3 五个方案的风险—收益定位,气泡标签已标注方案名
这个差距跨年份稳定吗?把 2010 年以来的每一年单独拆出来, 统计各方案跑赢"全A等权"的年份数:
| 方案 | 年度胜率 | 胜出年份 | 平均年度排名(1 = 最好) |
|---|---|---|---|
| PE 历史分位 | 82% | 14 / 17 | 1.94 |
| PB 历史分位 | 41% | 7 / 17 | 4.59 |
| 行业内中性化 PB 分位 | 41% | 7 / 17 | 4.41 |
| PE+PB 双分位合成 | 65% | 11 / 17 | 2.59 |
| PB 当期截面分位 | 47% | 8 / 17 | 3.71 |
| 全A等权(基准) | — | — | 3.76 |
图 4 分年度收益率热力图:同一色阶下越红越好
结果很干脆。PE 历史分位 17 年里有 14 年跑赢全A等权, 胜率 82%,平均年度排名 1.94——几乎是常年的第一名。而PB 历史分位只有 7 年跑赢,胜率 41%, 平均排名 4.59,在"5 个方案 + 全A等权"这 6 个对象里垫底。
这不是某一年的运气,而是贯穿整个样本期的结构性差异。一个连"什么都不选"都打不过的因子,无论覆盖度多高,都不该被直接拿来用。
读到这里其实已经可以收尾了:PB 覆盖更全,但它做不出超额收益。 但如果只停在这一句,这篇文章就白写了—— 真正有价值的问题是:为什么?下面三个反常之处,一层层剥开看。
三、反常之一:IC 显著为正,组合却在亏钱
第一个反常来自因子有效性检验。RankIC 衡量的是"因子值排序"与 "下期收益排序"之间的秩相关,是判断因子有没有信息量的标准动作。
结果是这样的(5 年窗口):
| 方案 | IC 均值 | ICIR | NW t 值 | IC>0 占比 | 平均样本数 |
|---|---|---|---|---|---|
| PE 历史分位 | 0.0528 | 0.486 | 8.31 | 67.7% | 2136 |
| PB 历史分位 | 0.0460 | 0.314 | 5.50 | 62.2% | 2731 |
| 行业内中性化 PB 分位 | 0.0441 | 0.426 | 7.42 | 66.7% | 2726 |
| PE+PB 双分位合成 | 0.0590 | 0.396 | 6.99 | 63.7% | 2131 |
| PB 当期截面分位 | 0.0396 | 0.233 | 3.78 | 55.2% | 3055 |
PB 历史分位的 IC 是 0.0460, t 值 5.50——按任何一本教科书的门槛, 这都算统计上显著。可它对应的组合超额是 -2.92%。
IC 显著为正,钱却没赚到。这不是数据出错,而是"IC"和"组合收益"本来就是两件事: IC 看的是整个截面的相关性,包含了大量中间段股票; 而 TopN 组合只吃最极端的那一小撮。 只要因子的排序能力集中在中间段、在极端端失灵, IC 就会好看,组合却做不出来。
图 5 左:各方案 RankIC 均值;右:Newey-West t 值(虚线为 5% 显著性门槛)
第二个线索藏在 IC 的衰减速度里。把持有期从 1 个月拉长到 12 个月, 各方案的 IC 走出了完全不同的形状:
| 方案 | 1 个月 | 3 个月 | 6 个月 | 12 个月 |
|---|---|---|---|---|
| PE 历史分位 | 0.0528 | 0.0663 | 0.0570 | 0.0495 |
| PB 历史分位 | 0.0460 | 0.0605 | 0.0633 | 0.0846 |
| 行业内中性化 PB 分位 | 0.0441 | 0.0576 | 0.0619 | 0.0784 |
| PE+PB 双分位合成 | 0.0590 | 0.0783 | 0.0743 | 0.0830 |
| PB 当期截面分位 | 0.0396 | 0.0615 | 0.0713 | 0.0942 |
图 6 IC 随持有期的变化:PE 在 3 个月见顶后衰减,PB 一路上行
形状的分歧非常刺眼。PE 的 IC 在 3 个月达到峰值 (0.0663),随后一路回落到 12 个月的 0.0495——它是短周期信号, 一个月的调仓间隔正好吃在它的高点上。
PB 恰好相反:IC 从 1 个月的 0.0460 单调爬升到 12 个月的0.0846, 越高越长。它是慢信号,信息在一年尺度上才释放完。 而我的策略每月换仓一次——等于在信号还没长出来的时候就把它卖掉了。
这一点在 PB 截面分位上更极端:IC 从 1 个月的 0.0396 一路涨到 12 个月的 0.0942,是所有方案里最高的。
反常一的小结:PB 不是没有信息,而是信息的时间尺度和月度调仓对不上; 同时它的 ICIR(0.314)明显低于 PE(0.486), 意味着单期信号里的噪声大得多。
四、反常之二:最便宜的那一端,没有区分度
第二个反常来自分层。常规做法是切五层,但五层太粗—— 它恰好会把极端端平均掉。所以我把它切到十层, 从最便宜的 D1 到最贵的 D10。
| 方案 | D1 最便宜 | D2 | D3 | D4 | D5 | D6 | D7 | D8 | D9 | D10 最贵 |
|---|---|---|---|---|---|---|---|---|---|---|
| PE 历史分位 | 18.7% | 14.7% | 11.8% | 10.3% | 8.5% | 8.6% | 6.9% | 5.4% | 3.7% | -0.9% |
| PB 历史分位 | 9.5% | 10.5% | 12.7% | 9.8% | 11.4% | 10.0% | 7.8% | 5.6% | 5.2% | 0.7% |
| 行业内中性化 PB | 9.9% | 11.6% | 11.8% | 10.9% | 10.2% | 10.2% | 8.3% | 6.5% | 4.9% | -0.0% |
| PE+PB 双分位(10 年) | 16.4% | 13.8% | 10.9% | 10.7% | 9.2% | 7.9% | 7.2% | 4.3% | 0.3% | -2.9% |
图 7 十层分解:PE 逐层下滑,PB 在便宜端横盘
PE 那一行是一条教科书式的斜线: 18.7%, 14.7%, 11.8%, 10.3% … 一路跌到 -0.9%。每一层都比下一层好,毫无含糊。
PB 那一行则完全乱了:9.5%, 10.5%, 12.7%, 9.8% …最便宜的 D1(9.5%)竟然不如 D3 (12.7%),甚至不如 D5(11.4%)。前六层全部挤在 9.5% ~ 12.7% 这个窄带里, 上下起伏全无规律。
把行业中性化的版本(9.9% ~ 11.8%)放进来也一样——前六层几乎是平的。
这就是"IC 好看但组合亏钱"的微观解释。PB 的排序能力几乎全部集中在"贵"的那一端—— D7 到 D10 确实一层比一层差,这部分贡献了 IC; 但投资者真正想买的是 D1、D2,而这一端的 PB 数值高低 和未来收益之间没有稳定关系。IC 是全截面的平均数, 被"贵"的那一半拉正了,钱却只能从"便宜"的那一半去赚。
图 8 五层分层热力图:PE 的 G1 是全场唯一的深红块,PB 的 G1/G2 难分高下
五、那把它按行业抹平呢
PB 有一个众所周知的老毛病:它天生带行业属性。 银行、地产、钢铁、建筑的 PB 长期在 1 倍附近, 电子、医药、计算机的 PB 轻易上到 5 倍、10 倍。"PB 低"很可能只是"所属行业本来 PB 就低"的另一种说法。
如果这是根因,那么把每只股票的 PB 分位在它所属行业内重新排序, 应该能把问题解决掉。先看效果:
ICIR 从 0.314 提升到0.426, t 值从 5.50 提到 7.42, 分层的单调性也从 ρ = -0.7 修到 -0.9。信号确实变干净了。
但组合收益呢?超额从 -2.92% 只挪到-2.05%, 改善不到 1 个百分点,依然是负的。 10 年和 20 年窗口下勉强转正(+1.22% / +0.98%),但幅度微弱。
图 9 各方案持仓的行业分布对比(取 PB 组合的前十大行业)
结论是:行业差异确实存在,但它不是 PB 失效的主因。把行业抹平能提高信号的统计质量,却改变不了"便宜端没有区分度"这件事。
不过这一节挖出了一个更有意思的东西—— PB 截面分位(方案三)的行业集中度,高得离谱:
| 方案 | 行业集中度 HHI | 第一大行业 | 占比 | 前三大合计 | 覆盖行业数 |
|---|---|---|---|---|---|
| PE 历史分位 | 0.0498 | 医药 | 12.0% | 25.7% | 30 个 |
| PB 历史分位 | 0.0508 | 医药 | 12.2% | 26.3% | 30 个 |
| 行业内中性化 PB 分位 | 0.0606 | 机械 | 11.5% | 31.1% | 28 个 |
| PE+PB 双分位合成 | 0.0563 | 医药 | 13.5% | 27.5% | 30 个 |
| PB 当期截面分位 | 0.1182 | 银行 | 22.4% | 52.1% | 28 个 |
图 10 持仓行业集中度 HHI:PB 截面分位是全场的异类
PB 截面分位的第一大行业是银行, 占 22.4%,前三大行业合计 52.1%(银行 / 房地产 / 钢铁)——超过一半的仓位压在三个行业上。
道理很简单:不做时序分位,只比"今天谁 PB 最低", 答案永远是那批破净的银行、地产和钢铁。它不是在做估值比较,而是在做行业押注。这也解释了为什么它的超额收益几乎是零。
六、两个口径一起用,会更好吗
最自然的想法是:PE 和 PB 各有短板,那就各占一半, 用分位数的均值当作合成因子。这个方案(DUAL)的答案是——好于纯 PB,但不如纯 PE。
为了看清"为什么会这样",我把 PE 分位和 PB 分位各切五档, 交叉出 25 个格子,每个格子单独建一个等权组合:
| PE 档 \ PB 档 | PB-Q1 最便宜 | PB-Q2 | PB-Q3 | PB-Q4 | PB-Q5 最贵 |
|---|---|---|---|---|---|
| PE-Q1(最便宜) | 13.93% | 19.34% | 18.23% | 15.68% | 15.13% |
| PE-Q2() | 9.32% | 11.13% | 12.13% | 11.78% | 9.64% |
| PE-Q3() | 7.74% | 10.32% | 9.33% | 7.20% | 6.29% |
| PE-Q4() | 8.03% | 8.68% | 6.96% | 5.07% | 3.52% |
| PE-Q5(最贵) | 2.05% | 6.13% | 5.82% | 0.76% | -4.34% |
图 11 PE 分位 × PB 分位:25 个双因子组合的年化收益
看最上面那一行——PE 已经帮你挑出了全市场最便宜的一批股票。 在这批股票里,收益最高的格子不是"PB 也最便宜"的 PB-Q1 (13.93%),而是 PB 只排在中间档的 PB-Q2 (19.34%)和 PB-Q3(18.23%)。
这个结果很反直觉,但它一句话解释清楚了合成因子的困境:把 PB 分位加进来,等于给"PE 便宜但 PB 不便宜"的那批股票扣了分, 而它们恰恰是最赚钱的一批。所以双分位合成不是在补充信息,而是在稀释信息。
沿 PE 方向看,每一档都稳定地比下一档好(以 PB-Q2 列为例:19.34% → 11.13% → 10.32% → 8.68% → 6.13%);而沿 PB 方向看,格子值是先升后降的。PE 提供了单调的排序能力,PB 提供的是噪声。
这也解释了方案一(纯 PE)为什么最难被超越—— 不是因为 PE 完美,而是因为它在"A 股 2010—2026"这段样本里, 恰好抓住了最有效的那一维。
七、根因:低 PB 从来不等于便宜
三个反常都指向同一个地方。剩下的问题只有一个:为什么 PB 的低估端会失灵?
第一个线索是全市场估值中枢的漂移。 把每年全市场的中位 PB 排在一起:
| 年份 | 全市场中位 PB | 破净股占比(PB < 1) |
|---|---|---|
| 2010 | 4.51 | 0.2% |
| 2015 | 4.83 | 0.4% |
| 2018 | 2.50 | 5.1% |
| 2020 | 2.61 | 8.3% |
| 2022 | 2.59 | 6.8% |
| 2024 | 2.07 | 10.4% |
| 2026 | 2.82 | 6.9% |
图 12 全市场中位 PB 与破净股占比(2010—2026)
中位 PB 从 2010 年的 4.51 倍 一路降到 2024 年的 2.07 倍, 16 年间几乎腰斩;同期破净股占比从 0.2% 升到 10.4%。
这意味着什么?"某只股票的 PB 处于自身历史低位"这个判断, 被一个更大的力量污染了——全市场的估值锚本身在下移。2015 年 PB 5 倍算便宜,2024 年 PB 5 倍已经很贵。 用固定窗口(比如 5 年)算出来的历史分位, 会把"全市场系统性下移"错误地读成"个股变便宜了"。
第二个线索是最便宜那批股票究竟长什么样。 把 2018 年以来所有处于全市场 PB 最低 10% 的样本身挑出来:
PB 最低 10% 的画像
破净(PB < 1)占比:71.4%| 中位 PB:0.89
前五大行业:房地产、电力及公用事业、银行、交通运输、建筑
PB 最高 10% 的画像
破净占比:0.0%| 中位 PB:10.10
前五大行业:电子、医药、计算机、机械、基础化工
最便宜的 10% 里,超过七成是破净股, 集中在房地产、电力公用、银行、交运、建筑。 而"破净"这件事本身,不是市场算错了,而是市场在给资产质量打折—— 可能收不回来的应收账款、卖不掉的存货、随时可能计提的商誉与减值准备。
这就是 PB 与 PE 最本质的区别。PE 便宜,通常意味着"盈利处于低谷"—— 盈利是流量,低谷之后有周期性的回归。PB 便宜,则常常意味着"资产被怀疑"—— 怀疑一旦被证实,净资产就要往下修,那个"便宜"是假的。
所以在这场对照实验里,PB 分位的失败并不是统计上的偶然。 它同时踩了两个坑:分位基准被全市场估值下移污染, 而极端低值端又系统性聚拢了资产质量存疑的公司。
八、这套结论没有回答的问题
把话说满是不负责任的。以下几点必须交代清楚:
第一,存活偏差。底层行情用的是当前仍在交易的股票池,已经退市、被吸收合并的公司没有进入样本。 这类公司往往正是"低 PB 陷阱"的极端案例, 所以PB 的真实表现很可能比这里更差, 而 PE 的相对优势可能被高估。所有绝对收益都应视为上界。
第二,行业分类是当前快照。本文用的行业归属是当前时点的静态分类,不是历史逐期变更的行业链。 这对"行业内中性化"的结果有轻微的前视影响, 但考虑到 A 股行业分类的调整频率,量级应该有限。
第三,结论有样本边界。2010—2026 这 16 年,A 股恰好经历了估值中枢的系统性下移 (图 10)。PB 分位在这个特定窗口里失效,不等于它在估值中枢稳定或上行的市场里也失效。 因子有效性是路径依赖的。
第四,窗口与持股数是自由度。3/5/10/20 年窗口、10/20/50/100 只持股,一共 16 组参数。 本文报告了全部组合而非只挑最好的,但参数空间本身仍然存在选择性。
第五,估值因子不是纯 alpha。低估值组合天然向金融、地产、公用事业倾斜, 它的收益里有相当一部分是风格暴露的beta, 而不是选股能力。本文用"同池等权"剥离了股票池差异, 但没有做严格的风格中性化。这也是为什么不能因为 PB 跑输就断言"PB 没有信息"—— 更准确的说法是:它不适合以月度调仓、极端端选股的方式来使用。
结语
这次对照实验,我想留下的不是"PB 不行"这个结论,而是三个更耐用的判断:
一、覆盖度不等于有效性。PB 的可用池比 PE 大 17%,样本多了, 但多出来的这部分恰恰是"当期亏损"和"资产存疑"的公司。样本更大,不代表信息更多—— 被剔除的那部分,可能本来就该被剔除。
二、IC 显著和组合赚钱之间隔着一条鸿沟。PB 的 IC 0.0460、t 值 5.50, 统计上无可挑剔,组合超额却是 -2.92%。做因子研究时,一定要回到分层和极端端去看, 只看 IC 会被平均掉最关键的信息。
三、信号的时间尺度必须和调仓频率匹配。PB 的 IC 在 12 个月尺度上最强(0.0846), PE 的 IC 在 3 个月就见顶(0.0663)。一个月换一次仓,注定只能吃短周期信号。如果非要用 PB,正确的问题不是"PB 好不好", 而是"我该多久换一次仓"。
最后一个提醒。这类回测最容易犯的错误, 是拿一个因子的绝对收益和指数比,然后宣布它有效或无效。只有在同一批股票上等权买入、扣掉同样的成本, 差距才真正属于因子本身。本文所有"超额"都按这个口径计算—— 也正是这个口径,让 PB 的问题无处藏身。
风险提示:本文为量化方法的实证记录,所有数据来自历史行情的事后统计, 不构成任何投资建议。历史表现不代表未来收益,因子有效性存在失效风险。