颜力刚Ligang Yan

量化选股学习笔记(六):在月度数据上重做单因子研究

用自己搭的月度数据(2021–2026),把阶段一的单因子研究完整重做一遍:18 个因子的 IC、Newey-West t 值、分五组收益、交易成本和信号衰减。阶段一的结论基本成立,但收益分布是“悬崖”而不是“阶梯”,快信号被交易成本吃光,我对 t 值的预测也错了。

quantfactor-investingpython

这是我学习量化选股的第六篇笔记。上一篇用 Ken French 的因子“对答案”,证明了自己搭的月度数据可信。这一篇回到研究本身:在新数据上,把阶段一的单因子研究完整重做一遍。代码仍然由 Claude Code 编写,我负责提问、读代码和决定方向。

本文是学习记录,不构成任何投资建议。

2026-10-23 更新:做到第九篇时发现市值数据有一个错误(见第四篇第七课的最后),修正后重跑了全部结果,本文的数字和图已经更新。变化最大的是第四课:原来的例子(账面市值比)大部分是这个错误造成的,换成了资产增长。

为什么不直接做多因子

原计划是这一步直接做多因子合成和机器学习。但我想了一下:阶段一是先研究单因子(第一篇),再做行业中性化(第二篇),最后才合成多因子(第三篇)。现在数据从“Kaggle 年度数据”换成了“月度数据、包含退市公司、财报公布之后才能用”,单因子的结论还成不成立,应该先检查一遍。

之前其实只做过一次“体检”(算了每个因子的 IC),没有分组收益、交易成本、信号衰减这些。于是把路线拆成了两步:这一步单因子,下一步再做多因子和机器学习。

研究对象是 18 个因子:阶段一的 16 个,加上第五篇用日线算的低波动、单日最大涨幅。时间是 2021 年 1 月到 2026 年 8 月,共 68 个月,平均每月约 4,000 家公司。

第一课:阶段一的排序基本成立

先看最基础的指标:行业内 Rank IC,也就是在每个行业内部,因子排名和下个月收益排名的相关系数。

阶段一 vs 阶段二的 IC

浅蓝色(预测下个月)和灰色(阶段一,预测下一年)的排序几乎一样:

  • 盈利五兄弟(投入资本回报率、ROA、盈利收益率、自由现金流率、是否盈利)仍然是最前面的一组,IC 在 +0.079 到 +0.086 之间,6 年每年都为正。
  • 少增发、股息率紧随其后。
  • 账面市值比、资产增长仍然 ≈ 0。
  • 规模和杠杆仍然是“反方向”:大公司、高杠杆的公司表现更好,和教科书相反。规模在 6 年里每一年都是大公司赢。

换了数据源、换了频率、换了时间段,结论基本不变,这是最好的样本外验证。

新的第一名是低波动(+0.101),第二名是单日最大涨幅(+0.086),都是阶段一没有日线数据、算不出来的信号。

变化最大的是 Altman Z:阶段一它是最稳的因子之一(+0.121),这次只有 +0.032,2021 年是负的,去掉微型股后也是负的(−0.009)。它现在只能说明“哪些小公司快不行了”。

第二课:我对 t 值的预测错了

月度数据有个常见的担心:基本面数据一个季度才更新一次,这个月和下个月的因子几乎一样,所以相邻月份的 IC 应该是相关的。如果把 68 个月当成 68 个独立样本,t 值就会被高估。

学术界的标准修正方法是 Newey-West(1987):算标准误时,把“这个月和前几个月的相关性”也加进去。相邻月份正相关时,t 值会变小。我原本预测修正后 t 值会明显下降。

结果,大部分因子的 t 值几乎没变,有的反而更大:

因子 IC 的自相关 普通 t 值 Newey-West t 值
ROA −0.02 7.2 9.2
低波动 −0.01 5.6 6.4
Altman Z +0.21 3.3 2.9
规模 −0.23 −6.8 −10.0

原因是我把两件事混在了一起。因子的值确实变化很慢,但 IC 衡量的是因子和下个月收益的关系,而每个月的收益都是新的。所以这个月 IC 高,并不意味着下个月 IC 也高:18 个因子平均的自相关只有 +0.03。只有少数因子(Altman Z、资产增长、杠杆)的 IC 有黏性,修正后 t 值确实变小了。

那 Newey-West 什么时候真正有用?下面第五课会看到。

第三课:不是阶梯,是悬崖

IC 只说明“排名越靠前,收益越高”的趋势有多强。更直观的做法是分组:每个月在每个行业内部,按因子把股票分成五组,Q5 是理论上最好的一组,每组等权持有一个月。

分五组:悬崖与中位数

左图是 ROA 和低波动:Q1 每月比平均差 1.1% 左右,Q2 到 Q5 之间几乎没有差别。几乎所有有效因子都是这个形状。这和阶段一的发现一致:第一篇发现信号几乎全部来自最差的那 20%,第三篇发现最差的一组像一堆彩票。因子最大的作用是告诉你该避开哪些股票。

这带来一个现实问题:ROA 的多空收益(Q5 − Q1,每月 +1.40%)里,大约 3/4 来自做空 Q1。而 Q1 里大多是微型股,正是最难借到、借券费最高的股票。去掉市值 3 亿美元以下的公司后,多空收益大约减半,ROA 只剩约 1/3。

第四课:均值和中位数,分出两类因子

右图是资产增长(越慢越好)。按均值看,资产增长最快的一组(Q1)明显最差,多空每月 +0.85%,t 值 2.8。按中位数看,Q1 和 Q5 都是负的,多空只有 +0.10%。

也就是说,大部分资产增长慢的股票并没有跑赢,平均值是被少数暴涨的股票拉上去的。这也解释了一个矛盾:为什么它的多空收益“显著”,IC 却 ≈ 0?因为 IC 看的是排名,更接近中位数。

这一课原来的例子是账面市值比:修正市值之前,它的均值多空有 +1.15%(t 3.7),中位数只有 +0.18%。修正之后,均值也只剩 +0.38%(t 1.2)。原来的价差,大部分来自市值被放大、因而看起来“很贵”的仙股,它们后来大跌,拉低了“最贵”那一组的平均。这本身就是这一课的例子:均值很容易被少数几只股票带偏,这次带偏它的是数据错误。

因子 均值多空(%/月) 中位数多空(%/月) 说明
低波动 +1.34 +4.13 典型的高波动股票都在亏,普遍现象
ROA +1.40 +3.15 同上
资产增长 +0.85 +0.10 靠少数暴涨的股票
小市值 −0.71 −2.51 典型的小公司每月比大公司差约 2.5%

中位数比均值大的因子是稳健的,因为大多数股票都符合这个规律;只有均值、没有中位数的因子,靠的是少数几只股票,很难复制。

第五课:交易成本把快信号吃光了

月度数据可以每月调仓,但每次调仓都要付成本。按第三篇的假设计算:单边成本从大公司的 0.05% 到微型股的 1.5%,另外做空每年付 2% 借券费。

扣成本前后

  • 基本面因子换手很慢:每月只换掉 5% 到 10% 的股票,一只股票平均在组合里待 1 到 2 年,成本约 0.25%/月。扣完成本,ROA 多空每月仍有 +1.04%(Sharpe 0.78),不过单独看 t 值只有 2.1,刚刚过线。
  • 单日最大涨幅:IC 排第二,但它每月要换掉一半以上的股票,成本把收益全吃光了,扣成本后每月还小亏 0.2%。
  • 短期反转:每月换 77%,扣成本后每月亏 2.2%。
  • 动量:每月换 24%,扣成本后只剩 +0.12%,完全不显著(t 0.3)。

IC 高还不够,信号得撑得过交易成本。Novy-Marx 和 Velikov(2016)系统地研究过这个问题:换手率高的异象,扣掉交易成本后大多不赚钱。

不过这些数字仍然偏乐观:做空的大多是微型股,2% 的借券费偏低,有些股票根本借不到。

第六课:信号能管多久

既然调仓有成本,下一个问题就是:能不能少调几次?如果用半年前的因子值,预测力还剩多少?

信号衰减

  • 财报信号衰减得非常慢:6 个月前的 ROA 仍然保留 94% 的 IC,12 个月前的还有 92%。每月调仓几乎没有额外好处。
  • 低波动也慢,6 个月后保留 85%。
  • 单日最大涨幅衰减得快一些,但 3 个月前的值仍有 +0.072,保留 84%。如果改成按季度调仓,成本能降到约 1/3,它也许就能撑过交易成本。这是下一步要验证的。

再换一个角度:不是用旧信号预测下个月,而是用今天的信号预测未来 3、6、12 个月的累计收益。

预测周期 IC 的平均自相关 盈利收益率:普通 t 值 Newey-West t 值
1 个月 +0.03 7.7 9.4
3 个月 +0.59 12.8 9.8
6 个月 +0.74 20.8 12.3
12 个月 +0.85 30.2 12.5

这才是 Newey-West 真正起作用的地方。预测 12 个月时,这个月的窗口和下个月的窗口有 11 个月重叠,IC 当然高度相关,普通 t 值会严重夸大。最明显的是 Altman Z:预测 12 个月时普通 t 值 5.0,看起来很显著,Newey-West 修正后只有 1.8,其实不显著。

而且即使修正了,结果也仍然偏乐观:57 个互相重叠的 12 个月窗口,加起来不到 5 个独立的年份。

还有一个发现:IC 会随预测周期变大。投入资本回报率预测 1 个月是 0.085,预测 12 个月是 0.182,比阶段一(预测下一年)的 0.153 还高。所以第一课里“月度 IC 只有阶段一的 2/3”,是因为预测周期不同,并不是信号变弱了。

成绩单

结论 因子
✅ 可靠:强、每年有效、交易便宜 盈利五兄弟、少增发、低波动(新)
🟡 有条件 单日最大涨幅(要放慢调仓)、动量(主要在小公司有效)、股息率(其实只区分“分不分红”)、毛利率(偏弱)、市销率(主要靠 2021 年)
🔄 变了 Altman Z:从阶段一最稳的因子之一,变成只在微型股里有效
❌ 两个阶段都无效 账面市值比、资产增长、短期反转
↔ 两个阶段都和教科书相反 规模、杠杆

大约 10 个因子值得带进下一步的多因子合成。

和学界的对照

  • 盈利类因子(Novy-Marx 2013;Fama 和 French 2015)和低波动异象(Ang 等 2006)在 2021–2026 年依然成立,而且按市值加权时仍有每月 +1.2% 到 +1.6%,说明在大公司里也成立。
  • 价值因子按市值加权后几乎消失。Hou、Xue 和 Zhang(2020)复现了几百个异象,发现很多异象主要来自微型股,控制住微型股的影响后就不显著了。我们的结果是同一个现象。
  • 规模效应(Banz 1981)在这几年完全反过来:大公司每年都跑赢小公司。
  • 高换手的异象扛不住交易成本(Novy-Marx 和 Velikov 2016),单日最大涨幅和短期反转就是例子。

踩过的坑

  1. 并列排名,第四次了:57% 的公司股息率是 0,“是否盈利”只有 0 和 1,分出来的“五组”大小在 5% 到 35% 之间,根本不是五等分。这两个因子只能看 IC,不能看分组。第一篇(不分红的公司被拆到不同组)、第二篇(整个行业的值都一样)、第五篇(t 值 110 的假信号)都遇到过并列排名的问题,这次在分组的代码里又出现了一次。
  2. 我的预测又错了:我以为月度 IC 的 t 值会偏高,结果没有。因子值变化慢,不代表 IC 有自相关。Newey-West 真正起作用的是收益窗口重叠的时候。
  3. 起点会影响结果:2021 年 1 月是 meme 股行情,垃圾股暴涨,ROA 多空单月亏了 5.1%。从 1 月开始算和从 2 月开始算,平均收益差了 0.10%。

下一步

单因子的成绩单出来了,下一步终于是多因子合成和机器学习:把大约 10 个有效因子合成一个分数,比较等权、IC 加权、Ridge 和 LightGBM 四种方法,用 walk-forward 和 purge/embargo 防止模型偷看未来。这一篇还给下一步留了一个新问题:调仓频率。大部分信号衰减很慢,每月调仓未必是最好的选择。