杜邦分析扩展的 ROE 变动归因模块:顺序替代法原理与使用前提。

如何在Tableau中进行杜邦分析(二):ROE 变动归因的原理与使用

详解杜邦分析扩展的 ROE 变动归因模块:使用前提、顺序替代法算例与原理,以及为何未选对数分解法。

第一篇《如何在Tableau中进行杜邦分析》讲的是怎么填数据、怎么看那棵杜邦树。那篇把扩展当成一个结构查看器在用:拖一年的数进去,树上标出 ROE、销售净利率、资产周转率、权益乘数,你顺着父子关系往下点,能看到管理费用吃掉了几个点的净利率。

但 ROE 是一个会变的数。今年 15%,去年 12%,中间差 3 个百分点。静态的树只能告诉你今年 ROE 是 15%,说不出这 3 个点是净利率涨出来的、还是权益乘数(杠杆)加上去的。

ROE 变动归因就是我们后来单独加进扩展的一个模块,专门回答这个问题。它没写进第一篇,因为它和怎么填数、怎么看树不是一回事,它有一套独立的财务分析依据,是杜邦树之上的一层分析。这篇文章把它单独拆开讲:怎么用、背后的原理、以及我们为什么选了现在这套做法。

一、它回答的问题

ROE = 销售净利率 × 资产周转率 × 权益乘数。三个因子任意一个动了,ROE 都动。归因要做的是把 ROE 的变动拆回去,告诉你每个因子各贡献了多少个百分点(pp)。

一个实际的读法:ROE 从 12% 涨到 15%,归因说"净利率贡献 +2.0pp、周转率贡献 +0.8pp、权益乘数(杠杆)贡献 +0.2pp"。你马上知道这次 ROE 的提升主要靠盈利改善,不是靠加权益乘数(杠杆)。反过来,如果三个里权益乘数(杠杆)占了大头,那 ROE 涨得虚,钱是借出来的。

这就是归因存在的意义:把"ROE 涨了"翻译成"谁让它涨的"。

二、怎么用

归因不是默认就显示的,它有两个硬前提。

前提一:得有两个期间。 归因比的是两个期间之间的差异(ΔROE = 报告期 ROE − 基期 ROE),所以数据里至少得有两个不同的期间,而且"期间"字段必须拖进扩展的「期间」编码槽。只拖一年、或者把期间字段拖到详细信息架(不进期间槽),归因都不会出现。扩展默认拿最新一期当报告期、次新一期当基期,两个下拉各自独立,你可以手动改成任意两期;如果把基准期和显示期选成同一期,对比自然消失。

前提二:三个比率得有意义。 净资产 ≤ 0、营业收入 = 0、或者 总资产 = 0 时,权益乘数 / 净利率 / 周转率里至少有一个算出来没有财务含义,归因会直接停用并提示原因,不会静默给你一个 0。这是有意的:这种数据下硬算归因会误导人。

满足这两点,归因自动出现,由两部分组成:

抽屉。 图表右侧有个抽屉把手。收起时是一行摘要,告诉你 ROE 比基期变了多少 pp;点开是瀑布图加明细表。瀑布图首尾两根是 ROE 的总量(从基期到报告期),必须从 0 画起,中间三根各因子的增量用虚线串起累积高度,一眼能看出是谁拉着 ROE 走。截断的纵轴会夸大变动,所以我们坚持从 0 起。

ROE 变动归因抽屉(示例数据)

贡献胶囊。 树上每个节点右侧有个小胶囊,直接标这个节点对 ROE 变动的贡献(pp)。配置页里你可以选胶囊显示什么:只显示 pp、只显示占比、或者两者都显示。

占比的口径要单独说一句。单个因子的贡献额除以 ΔROE 得到一个占比,但 ΔROE 接近 0 时这个占比会失真,分母太小,正负被放大,一个 +0.1pp 的因子可能算出 +500% 的占比。所以我们做了三档:

  • 占比含正负:正贡献为正、负贡献为负,正常情况用它;
  • 占比取绝对值:所有因子按绝对值算占比,适合某因子贡献极小、正负占比失去意义时;
  • 自动:默认占比含正负,只有 |ΔROE| < 0.01pp 时才自动降级成绝对值。

配置页里归因这一组共五项:归因总开关、显示贡献胶囊、胶囊内容(pp / 占比 / 两者)、占比口径(自动 / 含正负 / 绝对值)、抽屉默认展开。前四项控制归因的呈现,最后一项控制打开工作簿时抽屉是开着还是收着。

三、原理:顺序替代法

归因用的是顺序替代法(也叫连环替代法),是杜邦分析里拆解变动的标准做法。

ROE = M × T × L(M 净利率、T 周转率、L 权益乘数)。我们有基期的一组 (M₀, T₀, L₀) 和报告期的一组 (M₁, T₁, L₁)。顺序替代法的做法是:从基期出发,按固定顺序把因子一个一个换成报告期的值,每换一个,ROE 的增量就是那个因子这一轮的"贡献"。

顺序固定为 净利率 → 周转率 → 权益乘数(M → T → L),这是教材惯例:先动盈利能力,再动营运能力,最后动资本结构。

用一组数走一遍。假设:

净利率 M周转率 T权益乘数 LROE = M×T×L
基期10%1.02.020%
报告期12%1.12.026.4%

ΔROE = 26.4% − 20% = 6.4pp。

从基期 (10%, 1.0, 2.0) 开始,ROE = 20%:

  1. 换净利率:(12%, 1.0, 2.0) → ROE = 24%。这一步增量 24% − 20% = +4.0pp,记给净利率。
  2. 换周转率:(12%, 1.1, 2.0) → ROE = 26.4%。增量 26.4% − 24% = +2.4pp,记给周转率。
  3. 换权益乘数:(12%, 1.1, 2.0) → ROE = 26.4%。增量 0,0pp,记给权益乘数(杠杆)。

三笔加总:+4.0 + 2.4 + 0 = 6.4pp,正好等于 ΔROE。这里权益乘数(杠杆)没动,所以贡献是 0;如果权益乘数(杠杆)也变了,第三步就会分出对应的 pp。

这个方法最关键的性质是链条闭合、零残差:三个因子的贡献额加起来严格等于 ROE 的变动,没有第四笔"交互项"要解释。能做到这一点,是因为我们的杜邦树里净利率的分母和周转率的分子是同一个数(营业收入),三因子相乘能严格还原 ROE = 净利润 ÷ 净资产,中间的收入项约得掉。一般公司自己搭的杜邦模型常常在这里对不拢(净利率用营业收入、周转率用主营业务收入,两个分母不一样),约不掉就会多出一个残差。我们定死口径,就是为了换来求和点。

占比那栏就是拿每笔贡献除以 ΔROE:净利率 4.0 ÷ 6.4 ≈ 62.5%,周转率 2.4 ÷ 6.4 ≈ 37.5%,权益乘数(杠杆) 0%。负号代表这个因子在拖 ROE 后腿,是预期内的,不是 bug。

四、为什么是顺序替代法,不是对数分解法

顺序替代法有个绕不开的脾气:单个因子的贡献额跟替代顺序有关。换个顺序,三步分到的 pp 不一样,但三者之和不变,变的是功劳怎么分给三个因子。

财务分析里还有另一种做法能避开这个顺序问题:对数分解法。把乘积取对数,ln(ROE) = ln M + ln T + ln L,ROE 的变动就变成三个对数项变动之和,各因子的贡献天然对称、可加总,不依赖你先换哪个因子。它也有硬伤:不直观,解释性比顺序替代法弱,这是它的模型决定的;而且对数要求每个因子严格大于 0,踩到 0 或负数就无定义。

对普通公司的财务分析,顺序替代法已经够用:结果以 pp 呈现,能直接加减验证,读图的人一眼懂。所以我们没把对数分解法加进扩展。

五、边界和已知限制

  • 归因固定三因素,顺序是 净利率 → 周转率 → 权益乘数,不可改。
  • 必须有「期间」槽且至少两个不同期间,否则不显示。
  • 净资产 ≤ 0 / 营业收入 = 0 / 总资产 = 0 时停用并提示,不显示 0。
  • 它只解释 ROE 的变动来自哪个因子,不解释"为什么净利率会涨",那是你点开树、看管理费用那一层要回答的事。
  • 不是五因素杜邦,也不是归母净利润口径。

六、小结

ROE 变动归因是杜邦分析扩展里独立加的一层:静态的树告诉你 ROE 现在是多少,归因告诉你 ROE 这段变动是谁造成的。它用顺序替代法把 ΔROE 拆成三个因子的贡献,链条闭合、零残差,以 pp 呈现;我们用固定顺序锁死替代顺序,避开"同一数据两个答案";对数分解法更对称但我们没选,因为它牺牲了财务直觉和对负值的包容。前提就两个:有两个期间、三个比率有意义,满足后抽屉和贡献胶囊自动出现。

No comments yet