halo 的技术博客

返回

「买好公司」是价值投资最朴素的一句话,但「好」怎么定义、怎么变成可回测的收益?2014 年 Asness、Frazzini、Pedersen 在 Quality Minus Junk(AQR)里干了一件关键的事:把「质量」拆成五个可量化维度,合成出一个叫 QMJ(Quality Minus Junk) 的因子,证明「高质量 − 低质量」的组合在美股、全球、新兴市场全都稳定跑赢。本文用一份自洽的合成面板数据,从零复现这套逻辑,重点讲清盈利稳定性这一最容易被人忽略、却最能区分真假质量的维度。

结论先放这:在 200 家×120 月的合成面板上,按质量打分分十档,平均月度收益从垃圾档的 0.47% 单调升到优质档的 1.05%;多空 QMJ 组合年化 9.2%、Sharpe 1.86、最大回撤仅 −6.3%,CAPM α 高达 9.75%/年且 β 为负(典型的防御属性),rank-IC 均值 0.045(t=6.61)。 也就是说,「好公司溢价」在横截面上清晰、稳定、且不是市场 beta 的伪装。附完整 Python 与六类真实陷阱(高阶)。

质量十分位组合的平均月度收益,从垃圾档到优质档单调上升(含线性拟合)

一、质量的五个维度:QMJ 怎么打分#

QMJ 的核心思想:质量 = profitability(能赚钱)+ growth(在成长)+ stability(盈利稳定)− leverage(不靠杠杆)− aggressiveness(不激进扩张)。这五个维度都做标准化(横截面 z-score),再等权相加,得到每只股票当月的质量分。

为什么是这五个?直觉上:

  • 盈利能力(Profitability):高 ROE、高毛利率、高资产周转率的公司,每一块钱资产生出更多利润。
  • 成长性(Growth):营收、利润在增长,而非靠一次性收益撑场面。
  • 盈利稳定性(Stability):盈利的波动越小,说明商业模式越扎实——这是本文的重点,下面单独拆。
  • 低杠杆(Low Leverage):负债率低,抗风险、不靠借来的钱撑报表。
  • 低激进扩张(Low Aggressiveness):不靠疯狂增发/并购堆规模,内生增长更健康。

二、盈利稳定性:最容易漏掉的真质量#

大部分人谈质量只看 ROE 高低,但两个 ROE 都是 20% 的公司,一个十年稳定、一个去年刚从 −10% 翻上来,质量天差地别。稳定性维度用「盈利能力的滚动波动」捕捉这一点——它衡量的是商业模式的抗打击能力,也是质量因子真正区别于「纯高估值成长股」的地方。

我们用合成数据演示:挑一只高质量股和一只垃圾股,看它们盈利能力(这里用合成 ROE 代理)的 12 个月滚动波动:

qmid = quality[:, 60]
hi, lo = np.argmax(qmid), np.argmin(qmid)
# profit_std[hi] 与 profit_std[lo] 分别是优质股/垃圾股的盈利波动序列
python

结果在图上非常直观:优质股的盈利曲线平稳、波动带窄;垃圾股的盈利大起大落。这背后的经济学是——稳定盈利意味着定价权、客户黏性、成本可控,这些才是「好公司」穿越周期的底气。

优质股与垃圾股的盈利能力滚动波动:优质股波动明显更小

三、收益生成:质量溢价从哪来#

合成面板里,每只股票的次月收益 = 市场因子 + 质量 alpha + 个股噪声:

mkt = rng.standard_normal(T) * 0.04 + 0.004          # 市场月度收益
beta = rng.uniform(0.6, 1.4, N)[:, None]             # 个股 beta
alpha = 0.0022 * quality                             # 质量溢价:高质量赚更多
idio = rng.standard_normal((N, T)) * 0.045           # 个股特异波动
ret = (alpha + beta * mkt + idio)
python

注意 alpha = 0.0022 * quality 这一行——它就是我们注入的「质量溢价」:质量分每高 1 个标准差,次月多赚 0.22%。这是横截面的信号(同一时间不同股票之间比),不是时间序列的 beta。

四、怎么检验:十分位 + 多空组合 + rank-IC#

三步走,每一层都该成立:

qmean = np.nanmean(quality, axis=1)    # 用全期平均质量分排序最干净
ls_ret, top_ret, bot_ret, ic_list = [], [], [], []
for t in range(T - 1):
    q = quality[:, t]
    order = np.argsort(q)
    bottom, top = order[:20], order[-20:]          # 十分位 1 (垃圾) vs 10 (优质)
    ic_list.append(np.corrcoef(q, ret[:, t+1])[0, 1])   # 质量分 vs 次月收益
    ls_ret.append(ret[top, t+1].mean() - ret[bottom, t+1].mean())
    top_ret.append(ret[top, t+1].mean())
    bot_ret.append(ret[bottom, t+1].mean())

ls, top, bot = map(np.array, (ls_ret, top_ret, bot_ret))
python

跑出来的核心数字:

优质十分位: 年化=12.9%  Sharpe=1.02  回撤=-17.6%
垃圾十分位: 年化= 3.2%  Sharpe=0.30  回撤=-27.6%
QMJ 多空  : 年化= 9.2%  Sharpe=1.86  回撤= -6.3%
rank-IC 均值=0.045 (t=6.61)
plaintext

三个结论都成立:① 十分位收益单调(0.47%→1.05%/月),不是两头翘;② 多空 Sharpe 接近 1.9,且回撤极小(β 对冲掉大半市场风险);③ rank-IC t=6.61,说明质量分对次月收益有稳定横截面预测力。

五、它是 alpha 还是 beta 伪装?#

因子研究最该问的一句:「这收益是不是只是搭了某个已知因子的顺风车?」我们对 QMJ 多空组合做 CAPM 回归:

mkt_r = mkt[1:]
X = np.column_stack([np.ones_like(mkt_r), mkt_r])
beta_capm, *_ = np.linalg.lstsq(X, ls, rcond=None)
alpha_capm = beta_capm[0] * 12          # 年化截距
print(f"CAPM α={alpha_capm:.4f}/年  β={beta_capm[1]:.2f}")
python

结果:CAPM α = 9.75%/年、β = −0.08。α 显著为正、β 接近零甚至略负——这说明 QMJ 不是市场 beta 的伪装,它的收益在市场下跌时反而相对抗跌(防御属性)。这点和价值、动量等因子形成互补:质量因子在组合里主要起「降波动、扛回撤」的作用。

左:QMJ 多空净值曲线;右:QMJ 对市场收益的 CAPM 回归(β 接近 0、α 显著为正)

六、六类真实陷阱(高阶)#

把质量做成因子,以下坑一踩一个准:

  1. 会计口径漂移:ROE 用期末还是平均净资产?不同公司财年不同,不做对齐会污染盈利能力维度。真实回测要用统一口径的 TTM(滚动十二个月)数据。
  2. 幸存者偏差:用「现在还活着」的公司算质量分,等于自动删掉了「质量塌陷→退市」的样本,会高估质量溢价的稳定性。
  3. 前视偏差(look-ahead):用 t 月的年报数据去交易 t 月的收益,但年报往往在 t+1 月才披露。正确做法是用可得性滞后的财务数据(如 t−3 月的财报交易 t 月)。
  4. 规模偏差混淆:高质量公司往往也是大市值,质量溢价可能只是规模溢价的替身,需控制市值后再看残差 alpha。
  5. z-score 标准化时点:横截面标准化必须用「同一期所有股票」的均值/标准差,不能用全样本——否则会把未来信息混进早期打分。
  6. 质量与价值的关系:QMJ 与价值(HML)低相关甚至负相关,单独持有质量会错过价值回归行情,实务里常做质量×价值的复合因子。

七、结论:质量是一种「防御型 alpha」#

质量因子不性感——它没有动量那种凌厉的爆发,也没有价值那种极端的均值回复。但它的价值恰恰在组合层面:年化 9% 的 alpha、Sharpe 接近 1.9、β 为负、回撤极小。这意味着把它加进组合,主要作用是「在不牺牲太多收益的前提下,把波动和回撤摁住」。

而「盈利稳定性」这个维度提醒我们:质量的本质不是某一年的高 ROE,而是高 ROE 能不能持续。 能把「好公司」写成可交易因子的人,赚的不是情怀,是商业模式的抗周期性——这才是质量溢价最硬的经济学内核。


本文数据由自洽合成生成(200 家×120 月面板,含 GARCH 式波动与横截面质量信号),用于机制演示,非真实行情,不构成投资建议。所有 alpha/IC 均基于合成注入的质量溢价计算,真实市场的质量溢价幅度通常低于本演示。

质量因子质量溢价:用盈利稳定性把『好公司』写成可交易 alpha
https://blog.halo26812.eu.org/blog/quality-factor-premium
Author halo
Published at 2026年7月16日
版权声明 CC BY-NC-SA 4.0
Comment seems to stuck. Try to refresh?✨