欢迎来到新章节:杜邦分析法
各位同学,欢迎来到《商业大数据分析与应用》的新章节。
今天,我们将一同探讨一个财务分析领域的经典工具——杜邦分析法 (DuPont Analysis)。
杜邦分析法:一个历久弥新的经典工具
杜邦分析法由美国杜邦公司在20世纪初首创并成功应用。
它的强大之处在于,它没有发明任何新的财务指标,而是巧妙地将企业最核心的财务比率进行层层分解。
核心思想:解构净资产收益率(ROE)
杜邦分析法的核心,是将净资产收益率 (Return on Equity, ROE) 分解为三个核心驱动引擎。
这三个引擎共同揭示了企业价值创造的源泉。
驱动企业价值创造的三大引擎
本章学习目标:理论与实践相结合
掌握杜邦分析法,不仅仅是学习一项财务技能。
更重要的是,培养一种系统性的商业思维方式,帮助我们超越单一财务数据的局限,理解商业模式的本质。
核心指标:净资产收益率 (ROE)
在深入杜邦分析的体系之前,我们必须首先牢固掌握其核心——净资产收益率 (Return on Equity, ROE)。
关键问题:如何衡量为股东赚钱的效率?
这是所有投资者最关心的问题。
’股神’沃伦·巴菲特最为推崇的财务指标之一,就是净资产收益率(ROE)。
它衡量的是公司利用自有资本赚钱的效率。
对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(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对比
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} = \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{股东权益}} } \]
- 衡量:企业的财务杠杆。
- 回答:‘公司的资产中有多少是‘借来的’?’
- 来源:主要概括了资产负债表的信息。
实践应用(一):利用杜邦分析筛选优质公司
理论学习的最终目的是为了应用。
接下来,我们将运用Python,基于ROE,从A股市场中筛选出具有持续盈利能力的优质上市公司。
我们的筛选标准
为了排除那些依靠偶然因素的公司,我们设定了严格的连续性标准:
- 标准一:连续3年 (2020-2022年) 的ROE都高于20%。
- 标准二:连续5年 (2018-2022年) 的ROE都高于15%。
能同时满足这些标准的公司,通常都具备非常稳定的经营实力。
代码实战:环境准备与数据加载
首先,我们导入必要的库,并从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
我们可以用同样的方法来完成筛选。
完整筛选代码与结果展示
下面是包含两个筛选标准并打印结果的完整代码。
实践应用(二):识别企业的三种业绩驱动模式
找到了这些’绩优股’之后,一个更深层次的问题是:它们为什么优秀?
它们的成功是由高利润率、高运营效率还是高财务杠杆驱动的?这就是杜邦分析大显身手的地方。
代码实战:计算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的分母:投入资本 (IC)
IC: 所有投资者(股东和债权人)真正投入企业期望获得回报的资金。
投入资本 (IC) = 股东权益 + 所有有息债务
核心思想:只计算那些需要支付利息的债务。像’应付账款’这种无息占用供应商的钱,不属于投入资本。
ROIC的价值:衡量真正的价值创造
一家公司的ROIC如果远高于其资本成本 (WACC),才是在真正地为所有投资者创造价值。
它剔除了财务杠杆的’美颜’效果,直指企业核心竞争力。
案例分析:贵州茅台 vs. 苏宁易购
接下来,我们将以’贵州茅台’和’苏宁易购’为例,计算并比较它们的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是检验这种能力的’试金石’。
本章小结
本章我们系统学习了杜邦分析法,这是一个将财务分析与商业战略相结合的强大框架。
核心带走的信息 (Takeaway)
杜邦分析法不仅是一套公式,更是一种思维框架。
它教会我们透过复杂的财务数据,去探寻驱动企业价值创造的本质原因:是盈利能力、运营效率,还是财务杠杆?
希望大家能将这个框架应用于未来的商业分析和投资决策中。