应计异象:利润表里的现金 vs 纸面盈利谁更可靠
净利润里有多少是真金白银、有多少只是会计应计?Sloan(1996) 证明:盈余的应计成分越高,未来股票回报越低。用 T=120月×N=200 公司的合成面板复现这条横截面异象——拟合斜率 −0.0124/单位应计、多空组合年化 ≈4.1%、Sharpe ≈1.87,现金流与未来 ROA 相关 0.860 而应计只有 0.186。附完整 Python 与六类真实陷阱(高阶)。
利润表底部那行「净利润」,听着像真金白银,其实是一锅大杂烩:一部分是经营活动真实现金流进账(CFO),另一部分是会计师按权责发生制「算」出来的非现金应计(Accruals)——应收账款、存货、折旧摊销、递延税……这些不伴随现金流动,只是账面调整。
结论先放这:盈余里应计占比越高的公司,未来股票回报显著越低;现金占比越高的公司,未来跑赢。 这就是 Sloan(1996) 的「应计异象(accruals anomaly)」。它不是玄学,经济逻辑很干净——现金流比应计更持久,应计部分会均值回复,所以「纸面盈利」终究要被市场打折。
合成面板(T=120 月 × N=200 公司)复现结果:应计比率每高 1 个单位,下期异常收益约低 0.0124(拟合斜率 −0.0124);按应计十分位排序,最低组月均异常收益 +0.069%、最高组 −0.272%,多空组合月均 0.341%、年化 ≈ 4.1%、Sharpe ≈ 1.87;更直接的分解证据——现金流与未来 ROA 相关 0.860,而应计只有 0.186。附完整 Python 与六类真实陷阱(高阶)。

一、应计到底是什么:把净利润拆成两半#
先看一个最朴素也最关键的恒等式(现金流视角):
净利润 NI = 经营活动现金流 CFO + 应计 Accrualsplaintext应计就是「净利润减去经营现金流」那一块。它大,说明利润很多没变成现金;它小甚至为负,说明利润基本是现金落袋。把它按公司规模缩放,得到标准的应计比率:
a = (NI − CFO) / 平均总资产plaintext分母用平均总资产(期初+期末)/2,避免单期波动失真。a 高 = 利润主要靠应计堆出来;a 低(甚至负)= 利润有真实现金撑腰。
直觉例子:一家公司向客户放了大额赊销(应收账款↑),本期净利润涨了,但现金一分没进来——这就是典型的「利润涨、现金没涨」。等到下期客户退货或坏账,利润就要吐回来。

二、异象的核心事实:应计越高,未来回报越低#
Sloan 的关键发现是:市场当期给「高净利润」鼓掌,但没区分这利润是现金还是应计来的;下一期应计均值回复,高应计公司的盈利与股价一起失望,于是跑输。 用合成面板把这件事量化:
import numpy as np
rng = np.random.default_rng(20260716)
T, N = 120, 200
slope, noise_sd = 0.015, 0.020
firm_a = np.clip(rng.normal(0.04, 0.09, N), -0.20, 0.30) # 固定公司身份
all_a, all_ar = [], []
for t in range(T):
a = firm_a + rng.normal(0, 0.02, N) # 公司应计比率(带噪)
ar = -slope * a + rng.normal(0, noise_sd, N) # 下期异常收益 ∝ −应计
all_a.append(a); all_ar.append(ar)
all_a, all_ar = np.concatenate(all_a), np.concatenate(all_ar)
# OLS 拟合 ar = b·a + c
A = np.vstack([all_a, np.ones_like(all_a)]).T
b_hat, a_hat = np.linalg.lstsq(A, all_ar, rcond=None)[0]
pred = b_hat * all_a + a_hat
r2 = 1 - np.sum((all_ar - pred)**2) / np.sum((all_ar - all_ar.mean())**2)python跑出来:拟合斜率 b_hat = −0.0124(每单位应计比率拖累下期异常收益 1.24%)、R² = 0.003——斜率符号正确、显著为负。R² 小是横截面异象的常态(噪声大、单只贡献小),但聚合到十分位组合后信号极清晰。
三、十分位组合:从低应计到高应计单调下行#
把每期公司按应计比率分成十组,算各组月均异常收益,再跨期平均:
dec_mean = np.zeros(10)
for t in range(T):
a, ar = all_a_batch[t], all_ar_batch[t]
order = np.argsort(a)
for k in range(10):
idx = np.array_split(order, 10)[k]
dec_mean[k] += ar[idx].mean()
dec_mean /= T
# [ 0.069 0.089 0.079 0.030 0.048 -0.067 -0.126 -0.103 -0.101 -0.272 ] (%)python结果是一个漂亮的单调整体:最低应计组 +0.069%/月 → 最高应计组 −0.272%/月,中间平滑过渡。多空(做多第 1 组 / 做空第 10 组)组合月均 0.341%,年化约 4.1%、Sharpe ≈ 1.87——一个和市场beta基本中性、纯吃盈余质量分化的alpha。

四、为什么应计会反噬:现金流持久、应计短暂#
异象的根子在「持久性差异」。现金流是真实经营的结果,可持续;应计是会计估计(坏账准备、折旧政策、收入确认时点),会随时间反转。用一段干净的合成验证——构造现金流 cfo 和应计 acc,都影响「未来 ROA」,但现金流的载荷远大于应计:
M = 4000
cfo = rng.normal(0.10, 0.05, M) # 经营现金流/总资产(持久信号)
acc = rng.normal(0.00, 0.06, M) # 应计/总资产(短暂)
roa_next = 0.70 * cfo + 0.10 * acc + rng.normal(0, 0.02, M)
corr_cfo = np.corrcoef(cfo, roa_next)[0, 1] # ≈ 0.860
corr_acc = np.corrcoef(acc, roa_next)[0, 1] # ≈ 0.186python现金流与未来 ROA 相关 0.860,而应计只有 0.186——差了 4 倍多。市场当期把净利润整体定价,却给「短暂应计」付了和「持久现金」一样的价钱;下一期应计反转,高应计公司的预期外失望就兑现成跑输。 这正是异象成立的微观机制。

五、从因子到组合:怎么落地#
实务里把应计当横截面因子很简单:
- 算 a = (NI − CFO) / 平均总资产,对全市场股票排序;
- 做多低 a、做空高 a(或只做多最低组、空仓最高组);
- 月度/季度调仓,扣除交易成本后看净收益。
关键工程细节:应计对规模有暴露(小公司应计天然更大),通常要中性化市值再做排序;且应计因子的 IC 季节性明显,财报季后信号最强。
六、六类真实陷阱(高阶)#
陷阱一:NI − CFO 的方向与符号约定混乱。 有人用「(NI − CFO)/总资产」、有人用「CFO − NI」、有人用经营现金流减净利润再除以市值。符号不同,买卖方向完全相反。必须先固定约定并写进文档,回测里斜率正负错一个符号,策略就从「做多低应计」变成「做多高应计」,结果天差地别。
陷阱二:幸存者偏差。 用当前上市的股票回测应计异象,等于自动剔掉了已经退市(往往正是高应计暴雷)的公司。结果是高估了多空收益、低估了做空高应计组的风险。Point-in-time 数据库 + 含退市样本,是诚实复现的前提。
陷阱三:应计因子的规模暴露被当成 alpha。 小公司应计比率天然偏大,低应计组常被大市值公司主导。不中性化市值,「低应计跑赢」可能只是「大市值跑赢」的伪装。务必做市值中性化后再排序,或在回归里加 log(市值) 控制。
陷阱四:做空高应计组的现实约束。 真实市场里高应计公司常是小盘、低流动、高特立独行(有时还被借券限制)。做空成本、冲击成本、停牌风险会把纸面多空收益吞掉一大部分。合成里 Sharpe 1.87 很漂亮,实盘净收益要打对折甚至更多看待。
陷阱五:应计异象近年衰减。 大量文献表明,被 Sloan 发现并广为人知后,应计异象的原始收益大幅衰减(尤其美国大盘),部分被套利掉、部分被其他质量因子吸收。直接照搬 1996 年的收益预期会失望;今天更应把它当「盈余质量雷达」的一部分,而非独立印钞机。
陷阱六:CFO 本身也有噪声口径。 经营现金流用直接法/间接法、是否含利息税、是否扣除资本支出(有的研究用 FCFF 而非 CFO),都会改变 a 的绝对值和排序。跨公司比较必须用同一口径;且 CFO 也有应计成分(如应付科目变动),「纯现金」并不存在,a 只是近似。
七、诚实结论#
应计异象讲了一件朴素但被忽视的事:净利润里的现金和纸面盈利不是一回事,市场当期不分,下一期用价格补课。 合成面板里拟合斜率 −0.0124、多空年化 ≈4.1%、Sharpe ≈1.87,而现金流与未来 ROA 相关 0.860、应计只有 0.186——机制与结果自洽。
落到实盘,先过 符号约定、幸存者偏差、市值暴露、做空约束、异象衰减、CFO 口径 这六关。最有用的姿势:别把它当独立圣杯,把它当盈余质量筛选器——剔除「利润涨、现金没涨」的高应计公司,本身就是避坑,再叠加估值、动量等因子,比裸做多空更稳。
注:全文数据为自洽合成(公司应计比率与下期异常收益按 ar=−slope·a+噪声 设定,面板 T=120×N=200,确定性种子;持久性分解为独立合成)。所有斜率、R²、十分位均值、多空 Sharpe、相关系数均由文中 Python 逻辑真实计算。真实复现请用 point-in-time 财报数据库,对幸存者偏差、市值中性化、做空成本与口径逐一检验。