09 杜邦分析法:洞察企业价值创造的核心

欢迎来到新章节:杜邦分析法

各位同学,欢迎来到《商业大数据分析与应用》的新章节。

今天,我们将一同探讨一个财务分析领域的经典工具——杜邦分析法 (DuPont Analysis)

杜邦分析法:一个历久弥新的经典工具

杜邦分析法由美国杜邦公司在20世纪初首创并成功应用。

它的强大之处在于,它没有发明任何新的财务指标,而是巧妙地将企业最核心的财务比率进行层层分解。

核心思想:解构净资产收益率(ROE)

杜邦分析法的核心,是将净资产收益率 (Return on Equity, ROE) 分解为三个核心驱动引擎。

这三个引擎共同揭示了企业价值创造的源泉。

驱动企业价值创造的三大引擎

盈利能力 运营效率 财务杠杆 净资产收益率 (ROE)

本章学习目标:理论与实践相结合

掌握杜邦分析法,不仅仅是学习一项财务技能。

更重要的是,培养一种系统性的商业思维方式,帮助我们超越单一财务数据的局限,理解商业模式的本质。

本章内容路线图

  1. 核心指标:深入理解净资产收益率 (ROE) 及其各种计算口径。
  2. 经典分解:学习杜邦三因素分解的原理和内在逻辑。
  3. 实践应用 (一):利用Python和ROE指标筛选A股优质公司。
  4. 实践应用 (二):利用杜邦三因素识别不同公司的业绩驱动模式。
  5. 理论延伸:引入投入资本回报率 (ROIC) 作为补充。

核心指标:净资产收益率 (ROE)

在深入杜邦分析的体系之前,我们必须首先牢固掌握其核心——净资产收益率 (Return on Equity, ROE)。

关键问题:如何衡量为股东赚钱的效率?

这是所有投资者最关心的问题。

’股神’沃伦·巴菲特最为推崇的财务指标之一,就是净资产收益率(ROE)。

它衡量的是公司利用自有资本赚钱的效率。

ROE的基本计算公式

ROE的计算公式直观地表达了其核心思想:

\[ \large{ \text{ROE} = \frac{\text{净利润}}{\text{净资产}} } \qquad(1)\]

这个比率告诉我们,股东每投入一单位的资本,公司能为他们带来多少净利润。

对ROE的直观理解:一个简单的例子

假设你和朋友合伙开了一家咖啡店。

  • 你们总共投入了 100万元 作为启动资金。这笔钱就是你们的净资产
  • 经过一年的经营,扣除所有成本和税收后,咖啡店赚了 15万元。这就是净利润

计算咖啡店的ROE

根据ROE的公式:

\[ \large{ \text{ROE} = \frac{\text{净利润}}{\text{净资产}} = \frac{15 \text{万}}{100 \text{万}} = 15\% } \]

这个15%的ROE意味着,你们投入的每一块钱本金,在这一年里为你们创造了0.15元的净利润。

高ROE意味着什么?

一个持续保持高ROE的公司,通常意味着它具备以下一个或多个特征:

  • 拥有强大的护城河(例如品牌、专利)。
  • 拥有卓越的管理能力
  • 拥有可持续的盈利模式

专业术语:‘归母净利润’与’归母净资产’

在分析真实的上市公司财报时,我们会遇到’归母’这个词。

  • 归属于母公司股东的净利润
  • 归属于母公司股东的净资产

理解这个概念对于精确计算ROE至关重要。

’归母’的由来:少数股东权益

当一家母公司(集团总部)持有其子公司(业务分部)的股份不足100%时,就会产生‘少数股东’

这些少数股东拥有子公司的一部分权益,因此,子公司的净利润和净资产也有一部分是属于他们的。

生活化案例:华小智包子铺与华小美奶茶店

假设’华小智包子铺’发展壮大,投资并控股了’华小美奶茶店’ 80% 的股份。

今年,’华小美奶茶店’实现了 100万元 的净利润。

利润如何分配?

虽然在合并报表上会体现这100万的利润,但:

  • 只有 80% (即80万元) 是真正归属于’华小智包子铺’的股东的。
  • 剩下的 20% (20万元) 则属于持有奶茶店另外20%股份的少数股东。

’归母’对ROE计算的影响

因此,在计算’华小智包子铺’的ROE时:

  • 分子必须使用 80万元归母净利润
  • 分母也应使用与之对应的归母净资产(即总净资产中扣除少数股东权益的部分)。

严谨的ROE计算公式

所以,我们在进行严谨的财务分析时,使用的ROE公式应为:

\[ \large{ \text{ROE} = \frac{\text{归母净利润}}{\text{归母净资产}} } \qquad(2)\]

其中,归母净资产即股东权益中扣除了少数股东权益的部分。

ROE的不同计算口径

问题:净利润是期间(流量)指标,而净资产是时点(存量)指标。

用哪个时点的净资产做分母更合理?这催生了多种计算口径。

计算口径一:摊薄ROE

这是最简单直接的计算方式。

\[ \large{ \text{摊薄ROE} = \frac{\text{报告期归母净利润}}{\text{期末归母净资产}} } \qquad(3)\]

特点:简单快捷,适合快速估算,尤其是在计算季度ROE时。

计算口径二:平均ROE

为了更好地匹配,平均ROE使用了期初和期末净资产的平均值。

\[ \large{ \text{平均ROE} = \frac{\text{报告期归母净利润}}{(\text{期初} + \text{期末}) / 2} } \qquad(4)\]

特点:平滑了资产波动影响,更公允,在数据分析中非常常用。

计算口径三:加权平均ROE

这是最为公允和复杂的一种计算方式。

它考虑了报告期内因增发、回购、分红等行为导致的净资产变动,并根据时间给予不同权重。

\[ \large{ \text{加权ROE} = \frac{P}{E_0 + NP/2 + \sum E_i \frac{M_i}{M_0} - \sum E_j \frac{M_j}{M_0}} } \qquad(5)\]

特点:最公允,通常由会计师审计后在年报中披露。

利润的’质量’问题:非经常性损益

我们还需要警惕’非经常性损益’对净利润的干扰。

非经常性损益:指企业偶然发生的、与主营业务关系不大的收益或损失。

例如:变卖固定资产、政府补贴、股票投资收益等。

为什么’非经常性损益’是陷阱?

这些收益不具备可持续性,可能会’美化’当年的利润数据,掩盖主营业务的真实情况。

一个真正优秀的公司,应该依靠其核心业务持续创造价值。

核心分析指标:扣非平均ROE

因此,一个更具洞察力的指标是扣非ROE,即从净利润中扣除非经常性损益后再计算ROE。

\[ \large{ \text{扣非归母净利润} = \text{归母净利润} - \text{非经常性损益} } \qquad(6)\]

\[ \large{ \text{扣非平均ROE} = \frac{\text{扣非归母净利润}}{(\text{期初} + \text{期末}) / 2} } \qquad(7)\]

案例警示:苏宁易购的’利润魔术’

我们来看一个真实案例:苏宁易购。

观察下表中,其加权平均ROE与扣非平均ROE的巨大差异。

苏宁易购ROE与扣非ROE对比

年份 加权平均ROE 扣非平均ROE 差异说明
2016 2.06% -3.23% 主业亏损,非经常性收益为正
2017 10.19% -0.20% 主业亏损,非经常性收益巨大
2018 16.83% -0.42% 主业亏损,非经常性收益巨大
2019 10.97% -6.28% 主业亏损,非经常性收益巨大

’利润魔术’背后的真相

在2016至2019年间,苏宁易购的主营业务实际上是持续亏损的。

其正的净利润主要来源于:

  • 出售线下门店
  • 卖掉持有的阿里巴巴股票
  • 剥离苏宁金服股权

这些都是不可持续的非经常性损益。

苏宁案例的教训

当资产’卖无可卖’时,公司的真实经营状况便暴露无遗。

这个案例深刻地提醒我们,在分析ROE时,必须关注’扣非’指标,以探究企业盈利的真实质量。

经典的杜邦三因素分解

掌握了ROE的计算之后,我们便可以进入杜邦分析的核心。

它的精髓在于,将ROE分解为三个关键财务比率的乘积。

杜邦分解的数学魔法

我们从ROE的公式出发:

\[ \large{ \text{ROE} = \frac{\text{净利润}}{\text{股东权益}} } \]

现在,我们做一个简单的数学处理:同时乘以并除以’营业收入’。

\[ \large{ \text{ROE} = \frac{\text{净利润}}{\text{股东权益}} \times \left( \frac{\text{营业收入}}{\text{营业收入}} \right) } \]

杜邦分解的数学魔法 (续)

重新组合一下分子分母:

\[ \large{ \text{ROE} = \left( \frac{\text{净利润}}{\text{营业收入}} \right) \times \left( \frac{\text{营业收入}}{\text{股东权益}} \right) } \]

我们已经将ROE分解成了两个比率的乘积。

杜邦分解的数学魔法 (最终章)

我们再进行一次同样的操作,这次同时乘以并除以’总资产’。

\[ \large{ \text{ROE} = \left( \frac{\text{净利润}}{\text{营业收入}} \right) \times \left( \frac{\text{营业收入}}{\text{股东权益}} \right) \times \left( \frac{\text{总资产}}{\text{总资产}} \right) } \]

再次重新组合…

杜邦三因素分解公式

最终,我们得到了经典的杜邦三因素分解公式:

\[ \large{ \text{ROE} = \left( \frac{\text{净利润}}{\text{营业收入}} \right) \times \left( \frac{\text{营业收入}}{\text{总资产}} \right) \times \left( \frac{\text{总资产}}{\text{股东权益}} \right) } \qquad(8)\]

这个公式巧妙地将企业的财务状况与经营成果联系了起来。

杜邦三因素的经济学含义

\[ \large{ \text{ROE} = \text{营业净利率} \times \text{总资产周转率} \times \text{权益乘数} } \]

这三个因素分别代表了企业价值创造的三个维度。

因素一:营业净利率

营业净利率 (Net Profit Margin)

\[ \large{ \text{营业净利率} = \frac{\text{净利润}}{\text{营业收入}} } \]

  • 衡量:企业的盈利能力
  • 回答:‘公司每做一块钱的生意,能赚取多少净利润?’
  • 来源:主要概括了利润表的信息。

因素二:总资产周转率

总资产周转率 (Total Asset Turnover)

\[ \large{ \text{总资产周转率} = \frac{\text{营业收入}}{\text{总资产}} } \]

  • 衡量:企业的资产运营效率
  • 回答:‘公司每投入一块钱的资产,能产生多少营业收入?’
  • 来源:连接了利润表资产负债表

因素三:权益乘数

权益乘数 (Equity Multiplier)

\[ \large{ \text{权益乘数} = \frac{\text{总资产}}{\text{股东权益}} } \]

  • 衡量:企业的财务杠杆
  • 回答:‘公司的资产中有多少是‘借来的’?’
  • 来源:主要概括了资产负债表的信息。

杜邦分析的启示:提升ROE的三条路径

通过杜邦分解,我们可以清晰地看到,要提升股东的回报(ROE),一家公司可以通过三种途径努力:

  1. 提高盈利能力 (提高净利率)
  2. 加快资产周转 (提高周转率)
  3. 加大财务杠杆 (提高权益乘数)

不同的商业模式和行业,会侧重于不同的驱动因素。

实践应用(一):利用杜邦分析筛选优质公司

理论学习的最终目的是为了应用。

接下来,我们将运用Python,基于ROE,从A股市场中筛选出具有持续盈利能力的优质上市公司。

我们的筛选标准

为了排除那些依靠偶然因素的公司,我们设定了严格的连续性标准:

  • 标准一:连续3年 (2020-2022年) 的ROE都高于20%
  • 标准二:连续5年 (2018-2022年) 的ROE都高于15%

能同时满足这些标准的公司,通常都具备非常稳定的经营实力。

任务概览:数据处理与筛选流程

  1. 加载数据:从 原始数据.xlsx 文件中加载A股财务数据。
  2. 数据清洗:处理重复值,筛选需要的年份。
  3. 计算指标:利用Pandas计算杜邦三因素及ROE。
  4. 执行筛选:编写循环逻辑,根据我们的两个标准筛选出公司代码。
  5. 展示结果:打印出符合条件的公司列表。

代码实战:环境准备与数据加载

首先,我们导入必要的库,并从Tushare获取A股所有公司的列表。然后,加载我们预先准备好的财务数据。

# 导入库
import pandas as pd
import tushare as ts
pro = ts.pro_api('ba1646815a79a63470552889a69f957f5544bef01d3f082159bf8474')

# 获取上交所所有正常上市公司的股票代码
code_sheet = pro.stock_basic(exchange = 'SSE')
code_list = code_sheet['ts_code']

# 要求1:使用Pandas读取名为 '原始数据.xlsx' 的文件
# 并将'end_date'列作为字符串读取,防止Pandas自动转换格式
data = pd.read_excel('原始数据.xlsx', dtype={'end_date':str})

代码实战:数据清洗与重命名

加载数据后,需要进行清洗,只保留我们需要的年报数据,并给列重命名以方便后续调用。

# 清除重复数据
data.drop_duplicates(inplace = True)
# 只保留特定年份的年报数据
data = data[data['end_date'].isin(['20171231','20181231','20191231','20201231','20211231','20221231'])]
# 对列索引重命名,方便后续调用
data = data.rename(columns = {'ts_code':'股票代码','end_date':'报告日',
                              'revenue':'营业收入','n_income':'净利润',
                              'total_assets':'总资产',
                              'total_hldr_eqy_inc_min_int':'股东权益'})

代码实战:计算杜邦分析指标

利用Pandas的列运算功能,我们可以非常方便地计算出杜邦分析的各个指标。

# 净资产报酬率(ROE)
data['roe'] = data['净利润']/data['股东权益']

# 要求2:计算营业净利率
data['营业净利率'] = data['净利润']/data['营业收入']

# 总资产周转率
data['总资产周转率'] = data['营业收入']/data['总资产']

# 权益乘数
data['权益乘数'] = data['总资产']/data['股东权益']

代码实战:筛选逻辑 (3年>20%)

接下来是核心的筛选逻辑。我们先处理第一个标准:连续3年ROE > 20%。

我们将遍历每一个股票代码,检查其2020-2022年的数据是否都满足条件。

代码实战:筛选逻辑 (3年>20%) - 步骤1

首先,准备一个空列表用于存放结果,并从总数据中筛选出2020-2022年的数据。

code_3year = [] # 新建一个list,存放满足条件的公司代码

# 要求3:首先从总数据data中筛选出报告日为2020-2022年的数据
data_3 = data[data['报告日'].isin(['20201231','20211231','20221231'])]

代码实战:筛选逻辑 (3年>20%) - 步骤2

我们使用一个for循环来遍历所有股票。在循环内部,我们检查每家公司的数据。

for i in range(len(code_list)):
    a = data_3[data_3['股票代码']==code_list[i]]
    if len(a) == 3: # 确保公司有完整的3年数据
        # ... 后续判断逻辑 ...

代码实战:筛选逻辑 (3年>20%) - 步骤3

在确认有3年数据后,我们用一个’标志’变量b和内层循环来检查每年的ROE。

b = 1 # 设定一个标志,初始为1
for j in range(3): # 依次检查每年的ROE
    # 要求4:判断第j年的roe是否小于等于0.2
    if a.iloc[j]['roe'] <= 0.2:
        b = b - 1 # 如果不满足,则将标志b减1
        break # 并立即跳出内层循环
if b == 1: # 如果循环结束后b仍然为1,说明3年都满足条件
    code_3year.append(code_list[i])

代码实战:筛选逻辑 (5年>15%)

第二个标准的筛选逻辑与第一个完全相同,只是参数不同:

  • 数据范围是2018-2022年 (5年)
  • 判断条件是 roe <= 0.15

我们可以用同样的方法来完成筛选。

完整筛选代码与结果展示

下面是包含两个筛选标准并打印结果的完整代码。

Listing 1
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
import tushare as ts
pro = ts.pro_api('ba1646815a79a63470552889a69f957f5544bef01d3f082159bf8474')

# 首先获取上交所所有正常上市公司的股票代码
code_sheet = pro.stock_basic(exchange = 'SSE') # 获取上交所股票信息,存为表格
code_list = code_sheet['ts_code'] # 提取股票代码这一列存为列表code_list备用

data = pd.read_excel('原始数据.xlsx', dtype={'end_date':str})

# 清除重复数据
data.drop_duplicates(inplace = True)
# 只保留年报数据,且只保留2010年12月31日及以后的
data = data[data['end_date'].isin(['20171231','20181231','20191231','20201231','20211231','20221231'])]
# 对列索引重命名
data = data.rename(columns = {'ts_code':'股票代码','end_date':'报告日','revenue':'营业收入','n_income':'净利润','total_assets':'总资产','total_hldr_eqy_inc_min_int':'股东权益'})

# 计算杜邦分析各比率
# 净资产报酬率
data['roe'] = data['净利润']/data['股东权益']

# 营业净利率
data['营业净利率'] = data['净利润']/data['营业收入']

# 总资产周转率
data['总资产周转率'] = data['营业收入']/data['总资产']

# 权益乘数
data['权益乘数'] = data['总资产']/data['股东权益']

# 选择2020~2022年连续3年净资产收益率大于20%的公司
code_3year = [] # 新建一个list,存放连续3年roe>20%的公司
# 首先只保留2020~2022年的数据
data_3 = data[data['报告日'].isin(['20201231','20211231','20221231'])]

# 对每个上市公司分别判断三年的roe是否都大于20%,且数据不少于3年
for i in range(len(code_list)):
    a = data_3[data_3['股票代码']==code_list[i]]
    if len(a) == 3: # 判断数据是否不少于3年
        b = 1
        for j in range(3): # 依次判断每条数据的roe是否小于0.2,一旦有小于0.2的数据则b由1变为0,同时跳出循环
            if a.iloc[j]['roe'] <= 0.2:
                b = b - 1
                break
        if b == 1:
            code_3year.append(code_list[i])
# 连续3年roe高于20%的公司信息
roe_3 = code_sheet[code_sheet['ts_code'].isin(code_3year)]
print("连续3年roe高于20%的公司信息:\n",roe_3)

# 选择2018~2022年连续5年净资产收益率大于15%的公司
code_5year = [] # 新建一个list,存放连续5年roe>15%的公司
# 首先只保留2018~2022年的数据
data_5 = data[data['报告日'].isin(['20181231','20191231','20201231','20211231','20221231'])]

# 对每个上市公司分别判断三年的roe是否都大于15%,且数据不少于5年
for i in range(len(code_list)):
    a = data_5[data_5['股票代码']==code_list[i]]
    if len(a) == 5:
        b = 1
        for j in range(5):
            if a.iloc[j]['roe'] <= 0.15:
                b = b - 1
                break
        if b == 1:
            code_5year.append(code_list[i])
# 连续5年roe高于15%的公司信息
roe_5 = code_sheet[code_sheet['ts_code'].isin(code_5year)]
print("连续5年roe高于15%的公司信息:\n",roe_5)

实践应用(二):识别企业的三种业绩驱动模式

找到了这些’绩优股’之后,一个更深层次的问题是:它们为什么优秀?

它们的成功是由高利润率、高运营效率还是高财务杠杆驱动的?这就是杜邦分析大显身手的地方。

三种经典的业绩驱动模式

  1. 高净利率驱动模式 (茅台模式)
    • 核心竞争力:强大的盈利能力(品牌、技术)。
    • 典型行业:高端消费品、创新药企。
  2. 高周转率驱动模式 (沃尔玛模式)
    • 核心竞争力:‘薄利多销’,高效的供应链管理。
    • 典型行业:零售业、快消品。
  3. 高杠杆率驱动模式 (银行模式)
    • 核心竞争力:利用外部资金扩大规模。
    • 典型行业:金融、房地产、公用事业。

任务概览:识别驱动模式流程

我们将对上一节筛选出的’连续5年ROE高于15%’的公司进行深入分析。

  1. 计算均值:按公司分组,计算各项杜邦指标的5年平均值。
  2. 合并信息:将公司名称、行业等基本信息合并进来。
  3. 排序分析:分别按’营业净利率’、‘总资产周转率’、’权益乘数’进行排序。
  4. 识别模式:通过观察排序结果,找出不同模式的代表性公司。

代码实战:计算5年平均指标

我们从筛选出的5年数据 data_5year 开始,使用 groupby()mean() 方法来计算每家公司各项指标的5年平均值。

# data_5year 是上一步筛选出的5年数据
# 要求2:按“股票代码”分组,计算各指标的5年平均值
ratio_5year = data_5year.groupby('股票代码').mean().reset_index('股票代码')

代码实战:合并公司基本信息

计算出平均值后,数据里只有股票代码。我们需要把公司名称、行业等信息合并进来,方便我们解读。

# 从 Tushare 获取的公司基本信息表
a = code_sheet[['ts_code','name','industry']] 
a = a.rename(columns = {'ts_code':'股票代码','name':'公司名称','industry':'行业'})

# 要求3:将公司基本信息表 a 合并到 ratio_5year 中
ratio_5year = pd.merge(ratio_5year, a, how = 'left', on='股票代码')

分析一:ROE最高的公司是谁?

让我们先按平均ROE从高到低排序,看看综合实力最强的公司有哪些。

# 按平均roe从高到低重新排序
a = ratio_5year.sort_values(by='roe', ascending=False)
a_10 = a[['公司名称','股票代码','行业','roe','营业净利率','总资产周转率','权益乘数']].head(10)

print('ROE最高的10家公司:\n', a_10)

分析二:高净利率驱动模式的公司

现在,我们按’营业净利率’降序排序,寻找那些依靠强大盈利能力取胜的公司。

# 要求4:将ratio_5year按“营业净利率”降序排序
a = ratio_5year.sort_values(by='营业净利率', ascending=False)
# 选择平均净利率排行前5的股票
a_head_5 = a[['公司名称','股票代码','行业','roe','营业净利率','总资产周转率','权益乘数']].head(5)

print('平均营业净利率最高的5家公司:\n', a_head_5)

分析三:高周转率驱动模式的公司

接着,我们按’总资产周转率’降序排序,寻找那些’薄利多销’的运营效率大师。

a = ratio_5year.sort_values(by='总资产周转率', ascending=False)
# 选择平均周转率排行前5的股票
a_head_5 = a[['公司名称','股票代码','行业','roe','营业净利率','总资产周转率','权益乘数']].head(5)

print('平均周转率排行前5家公司:\n', a_head_5)

分析四:高杠杆率驱动模式的公司

最后,我们按’权益乘数’降序排序,寻找那些善于利用财务杠杆的公司。

a = ratio_5year.sort_values(by='权益乘数', ascending=False)
# 选择平均权益乘数排行前5的股票
a_head_5 = a[['公司名称','股票代码','行业','roe','营业净利率','总资产周转率','权益乘数']].head(5)

print('权益乘数排行前5家公司:\n', a_head_5)

实践小结

通过这几步简单的排序和观察,我们直观地验证了杜邦分析法在揭示企业商业模式上的强大能力。

它帮助我们从’是什么’(高ROE)深入到了’为什么’(三种驱动模式)。

杜邦分析的延伸:投入资本回报率 (ROIC)

杜邦分析的核心ROE是一个非常出色的指标,但它主要从股东的角度出发。

一家公司的资本来源不仅仅是股东,还有债权人(银行、债券持有人等)。

一个更全面的视角:ROIC

为了衡量企业使用所有投入资本(包括股东权益和有息债务)创造回报的能力,我们引入一个更全面的指标:

投入资本回报率 (Return on Invested Capital, ROIC)

ROIC能够更真实地反映企业核心业务的’造血’能力,因为它剔除了财务杠杆的影响。

ROIC的计算公式

\[ \large{ \text{ROIC} = \frac{\text{息前税后利润 (EBIAT)}}{\text{投入资本 (IC)}} } \qquad(9)\]

\[ \large{ = \frac{\text{息税前利润 (EBIT)} \times (1 - \text{税率})}{\text{有息债务} + \text{股东权益}} } \qquad(10)\]

这个公式看起来复杂,我们来逐一分解。

ROIC的分子:息前税后利润 (EBIAT)

EBIAT: 公司在不考虑融资结构(不扣除利息)下的核心经营利润。

  1. EBIT (息税前利润) = 净利润 + 所得税费用 + 财务费用
  2. EBIAT = EBIT × (1 - 税率)

核心思想:衡量的是业务本身能产生多少利润,与公司是借钱还是用自有资金经营无关。

ROIC的分母:投入资本 (IC)

IC: 所有投资者(股东和债权人)真正投入企业期望获得回报的资金。

投入资本 (IC) = 股东权益 + 所有有息债务

核心思想:只计算那些需要支付利息的债务。像’应付账款’这种无息占用供应商的钱,不属于投入资本。

ROIC的价值:衡量真正的价值创造

一家公司的ROIC如果远高于其资本成本 (WACC),才是在真正地为所有投资者创造价值。

它剔除了财务杠杆的’美颜’效果,直指企业核心竞争力。

案例分析:贵州茅台 vs. 苏宁易购

接下来,我们将以’贵州茅台’和’苏宁易购’为例,计算并比较它们的ROIC,看看这个指标能为我们带来哪些新的洞见。

ROIC计算代码实战:流程概览

  1. 数据准备:定义公司列表,加载预处理的资产负债表数据。
  2. 获取利润表:通过Tushare API获取近5年的利润表数据。
  3. 计算EBIT:根据利润表数据计算息税前利润EBIT。
  4. 计算ROIC:整合资产负债表和利润表数据,根据公式计算ROIC。
  5. 展示结果:打印两家公司的ROIC数据。

ROIC计算代码实战:关键步骤

计算EBIT和最终的ROIC是核心步骤。

# 要求3:计算息税前利润 (EBIT)
df_income['ebit'] = df_income['净利润(含少数股东损益)'] + \
                  df_income['所得税费用'] + df_income['减:财务费用']

# ... 数据处理 ...

# 要求4:根据 @eq-roic 公式计算 ROIC
roic = df.loc['ebit']*(1-df.loc['实际税率']) / \
       (df.loc['短期有息债务']+df.loc['长期有息债务']+df.loc['股东权益合计(含少数股东权益)'])

计算结果:茅台 vs. 苏宁

运行完整代码后,我们将得到两家公司近5年的ROIC数据。

  • 贵州茅台:ROIC常年维持在非常高的水平(例如30%以上)。
  • 苏宁易购:ROIC表现不佳,甚至可能为负。

ROIC结论

ROIC的结果进一步印证了:

真正优秀的企业,其核心业务本身就具有强大的、不依赖于高杠杆的盈利能力。

ROIC是检验这种能力的’试金石’。

本章小结

本章我们系统学习了杜邦分析法,这是一个将财务分析与商业战略相结合的强大框架。

回顾:我们的学习路径

  1. 从核心指标 ROE 出发,理解了其多种计算口径和’扣非’的重要性。
  2. 掌握了经典的杜邦三因素分解,将ROE拆解为三大驱动力。
  3. 通过Python实践,我们筛选了优质公司,并识别了它们的商业模式。
  4. 引入了杜邦分析的有力补充——ROIC,从更全面的视角衡量企业价值创造能力。

核心带走的信息 (Takeaway)

杜邦分析法不仅是一套公式,更是一种思维框架

它教会我们透过复杂的财务数据,去探寻驱动企业价值创造的本质原因:是盈利能力运营效率,还是财务杠杆

希望大家能将这个框架应用于未来的商业分析和投资决策中。

感谢聆听!

Q & A