盈余管理实践 · 第 4

Modified Jones (Dechow 1995):剔除收入操纵

Jones 模型留下的一个漏洞

第 3 章 Jones 模型的核心是用销售变化解释流动应计的正常波动。但销售变化本身有两个组成部分:现金销售变化与信用销售变化。前者经营驱动,后者管理层有可操纵空间。Dechow, Sloan, Sweeney 指出,研究人员在使用 Jones 模型时遇到一个反复出现的问题:当公司通过提前确认收入或放宽信用政策推高销售时,应收账款同步增加,Jones 模型把这种增长当作合理销售相关应计吸收,残差变小,DA 反而看不到操纵痕迹。第 3 章 Computer Associates 2001 年的分位 0.011 就是这种现象的典型案例。

Dechow, Sloan, Sweeney 提出的修正很直接:把销售变化中的应收变化部分扣掉,假设这部分都是可操纵的。修正后的解释变量是 ΔSaleΔRec\Delta\text{Sale} - \Delta\text{Rec},含义是真正落到现金口袋里的销售扩张。

Modified Jones 的定义

定义Modified Jones 模型,Dechow, Sloan, Sweeney 1995

对每个行业 ×\times 年份组合 gg,跑横截面 OLS:

TAitlag_atit=α1g1lag_atit+α2gΔSaleitΔRecitlag_atit+α3gPPEitlag_atit+εit\frac{\text{TA}_{it}}{\text{lag\_at}_{it}} = \alpha_{1g} \cdot \frac{1}{\text{lag\_at}_{it}} + \alpha_{2g} \cdot \frac{\Delta\text{Sale}_{it} - \Delta\text{Rec}_{it}}{\text{lag\_at}_{it}} + \alpha_{3g} \cdot \frac{\text{PPE}_{it}}{\text{lag\_at}_{it}} + \varepsilon_{it}

DA 为残差:DAitMJ=ε^itDA^{MJ}_{it} = \widehat{\varepsilon}_{it}

公式与第 3 章 Jones 只有一处不同:第二项的解释变量从 ΔSaleit\Delta\text{Sale}_{it} 变成 ΔSaleitΔRecit\Delta\text{Sale}_{it} - \Delta\text{Rec}_{it}。其中 ΔRecit\Delta\text{Rec}_{it} 是公司 iitt 年的应收账款变化、ΔSaleit\Delta\text{Sale}_{it} 是销售变化、PPEit\text{PPE}_{it} 是固定资产毛额、lag_atit\text{lag\_at}_{it} 是滞后总资产。其他变量定义与第 3 章相同。

Dechow 等的原文做法略有差别:他们先在估计期跑标准 Jones(销售变化作为解释变量),得到系数;然后在事件年(怀疑发生操纵的年)把 ΔSaleΔRec\Delta\text{Sale} - \Delta\text{Rec} 代入预测,差值作为 DA。这种做法只在事件年扣应收,估计期不扣。本书采用更常见的 "全样本同时扣" 变体,原因是 Bao 数据没有估计期与事件期的天然分割,全样本同步处理与文献后续使用更接近。

在 Bao 数据上的实现

R 实现只需把 Jones 脚本里的 dSale_s 替换为 dSale_s - dRect_s。完整脚本在 code/ch04_modified_jones.R

p <- p |> mutate(dSaleRect_s = dSale_s - dRect_s)
mj_by_year <- p |>
  filter(!is.na(TA), !is.na(dSaleRect_s), !is.na(PPE_s)) |>
  group_by(fyear) |>
  nest() |>
  mutate(
    fit = map(data, ~ lm(TA ~ 0 + inv_lag_at + dSaleRect_s + PPE_s,
                         data = .x)),
    r2  = map_dbl(fit, ~ summary(.x)$r.squared)
  )
mj_with_da <- mj_by_year |>
  mutate(data2 = map2(data, fit, ~ mutate(.x, DA_mj = resid(.y)))) |>
  select(fyear, data2) |> unnest(data2) |> ungroup()

跑完得到 24 个年度回归,平均样本量 4,966,平均 R2=0.1108R^2 = 0.1108,比 Jones 的 0.1306 略低。

结果解读

R2R^2 下降的原因是 ΔSaleΔRec\Delta\text{Sale} - \Delta\text{Rec} 比纯 ΔSale\Delta\text{Sale} 与 TA 的相关性略弱:原 Jones 模型里销售变化能直接拟合应收增长这部分应计,扣掉后这部分系统成分被赶到残差里,回归解释能力下降。但残差里被赶进去的恰恰是研究者关心的 "可操纵成分",所以 R2R^2 略低反而是 Modified Jones 设计意图的体现。DA_mj 全样本统计:n 119,187、均值 0.0104-0.0104、中位 0.00133-0.00133、标准差 0.187、绝对值均值 0.101,几乎与 Jones 一致。两种方法 Pearson 相关 0.998 表明它们在绝大多数 firm-year 上给出相同结果,差异主要在应收变化幅度大的公司年。

下面这张流程图把 Modified Jones 相对 Jones 的关键改动画出来。

图 4·1 Modified Jones 相对 Jones 的改动:把 ΔRecs\Delta\text{Rec}_sΔSales\Delta\text{Sale}_s 中扣除,再与 1/lag_at1/\text{lag\_at}PPEs\text{PPE}_s 一起按 fyear 做 OLS,残差即 DAMJDA^{MJ}。完整 TikZ 图详见 PDF 全文。

下面把 DA_mj 与 DA_jones 的 firm-year 配对散点画出来。绝大多数点紧贴 45 度线,少数偏离 45 度线的点就是应收变化幅度大、Modified Jones 修正生效的公司年。

DA_mj 与 DA_jones 配对散点,Pearson 0.998
DA_mj 与 DA_jones 配对散点,Pearson 0.998

案例公司:CA 2001 年的判别是否被纠正

第 3 章 Computer Associates 2001 年在 Jones 下分位 0.011 极其偏左,本章关心的核心问题是 Modified Jones 是否纠正这个错判。

表 4·1 案例公司舞弊年份在 Jones 与 Modified Jones 下的对比

公司fyearAAERrank_Jonesrank_MJ变化
Sunbeam19960.0240.037几乎不变
Sunbeam19970.4340.433几乎不变
Computer Associates20010.0110.089小幅向右
Enron19980.6760.618略向左
Enron19990.4170.443略向右
Enron20000.5080.259大幅向左

数据告诉我们 Modified Jones 对 CA 2001 年的纠正方向正确但幅度有限:分位从 0.011 升到 0.089,仍然偏左。继续在 Sunbeam 与 Enron 上看,Modified Jones 与 Jones 的差距整体不大,符合两种方法 Pearson 相关 0.998 的全样本结论。Enron 2000 年的分位从 0.508 大幅降到 0.259 是一个反向变化:Enron 2000 年应收账款相对销售的扩张幅度极大(销售从 1999 年 401 亿增到 2000 年 1008 亿,应收同步翻倍),Modified Jones 把这部分应收增长当作可操纵部分剥掉之后,TA 中可解释成分增加,DA 反而缩小。

雷区Modified Jones 在收入提前确认与赊销扩张之间区分不出来

Modified Jones 的假设是应收变化都是可操纵的,但现实中应收变化的两个驱动机制无法区分:一个是合法的赊销政策放松,比如行业竞争加剧、新产品上市铺货;另一个是非法的提前确认收入。两种机制都让 ΔRec\Delta\text{Rec} 扩大,模型把它们都从解释变量里扣掉、放进 DA 残差。这种处理方法对真正提前确认收入的公司有效,但对单纯赊销扩张的公司也会给出大 DA,造成假阳性。诊断方法:把 DA_mj 大的公司按行业、销售增长率、宏观信贷环境分层观察,如果右尾里有大量同时期普遍出现的赊销扩张公司,说明模型在该样本期把行业现象当成操纵。Kothari, Leone, Wasley 提出的 Performance-Matched 方法(下一章)就是针对这一类问题设计的补丁。

Python 实现

# code/ch04_modified_jones.py
import pandas as pd, numpy as np

p = pd.read_csv("data/em_panel.csv")
p["dSaleRect_s"] = p["dSale_s"] - p["dRect_s"]
p = p.dropna(subset=["TA","dSaleRect_s","PPE_s","inv_lag_at"])

def mj_resid(df):
    X = df[["inv_lag_at","dSaleRect_s","PPE_s"]].values
    y = df["TA"].values
    beta, *_ = np.linalg.lstsq(X, y, rcond=None)
    df = df.copy(); df["DA_mj"] = y - X @ beta
    return df

p2 = p.groupby("fyear", group_keys=False).apply(mj_resid)
print(p2["DA_mj"].describe().round(4))

R 与 Python 端 DA_mj 的均值 0.0104-0.0104、标准差 0.187、绝对值均值 0.101 完全一致。

本章累积对比表

表 4·2 累积对比表(第 4 章末)

方法样本量DA meanDA sd案例公司舞弊年份平均分位
基线 TA119,1870.0513-0.05130.1920——
Healy 1985119,1870.00000.00000.1910Sunbeam 0.17 / CA 0.49 / Enron 0.49
DeAngelo 1986103,7360.0038-0.00380.2480Sunbeam 0.13 / CA 0.23 / Enron 0.31
Jones 1991119,1870.0110-0.01100.1860Sunbeam 0.23 / CA 0.01 / Enron 0.53
Modified Jones 1995119,1870.0104-0.01040.1870Sunbeam 0.24 / CA 0.09 / Enron 0.44
PM-DA————————
Dechow-Dichev————————
McNichols————————
Stubben————————
Roychowdhury RM————————
F-Score / ML————————

本章知识地图

表 4·3 第 4 章核心概念与常见误解

核心概念核心内容常见误解为什么错
Modified JonesΔSaleΔRec\Delta\text{Sale} - \Delta\text{Rec} 替代 ΔSale\Delta\text{Sale},把应收变化划归 DA比 Jones 严格更优对应收扩张是合法赊销的公司会产生假阳性,需要 PM 等方法补救
设计逻辑假设应收变化全部可操纵,从解释变量中扣掉应收变化都是收入操纵行业普遍赊销扩张时也会让 DA 扩大,模型不区分动机
R2R^2 略下降0.131 → 0.111,下降的解释力赶进 DAR2R^2 下降说明模型变差把可操纵成分推到残差里恰是设计目的,R2R^2 不该作为优劣指标
与 Jones 相关 0.998绝大多数 firm-year 两种方法给出相同结果高相关意味着 Modified Jones 没用差异集中在应收变化大的少数公司,这正是研究者最关心的样本
CA 2001 修正rank 从 0.011 升到 0.089,方向正确但幅度有限Modified Jones 能完全解决 CA 这类案例完整识别需要更多机制,PM-DA 与 Stubben 后续给出
Enron 2000 反向rank 从 0.508 降到 0.259修正都是单向改善当应收扩张本身合法时,扣掉它反而让残差缩小,方法的局限

小结

本章把 Modified Jones 在 Bao 数据上跑通。与 Jones 的差别仅在第二项解释变量从 ΔSales\Delta\text{Sale}_s 改为 ΔSalesΔRecs\Delta\text{Sale}_s - \Delta\text{Rec}_s,全样本 Pearson 相关 0.998 表明绝大多数 firm-year 两种方法给出相同结果。Computer Associates 2001 年的分位从 Jones 下的 0.011 升到 Modified Jones 下的 0.089,方向上有所纠正但幅度有限;Enron 2000 年的分位反而从 0.508 降到 0.259,反映 Modified Jones 在合法赊销扩张的公司上会产生反向干扰。下一章 Performance-Matched DA 通过同业绩公司配对,把 ROA 相近公司的 DA 当作基准扣除,是对 Modified Jones 假阳性问题的直接补救。