从三张报表到DCF估值:财务模型与估值实操指南
发布时间:2026/9/19 6:50:23 作者:尧图编辑部 阅读量:1,286

简介由中金公司出品的《估值与财务模型》PDF文档是一份面向金融从业者、投资分析人员、高校金融专业学生及估值初学者的实用资料旨在帮助读者系统掌握企业价值评估与财务建模的核心方法解决估值中模型选择、数据分析与实务操作中的常见困惑。文档从估值目的切入分述资产基础法、收益基础法与市场法的适用逻辑并进一步解析DCF模型、相对估值模型、资产定价模型等主流财务模型的特点、参数与应用场景同时它还专门讨论了数据质量、通货膨胀、利率与风险等关键因素对估值结论的影响以及中金公司在这一领域提供专业财务顾问服务的角色。对于想快速建立估值与财务模型知识框架的读者而言这份资料信息密度高兼具理论性与实务参考价值。资源包内共1个PDF文件总大小2.21MB已有406人浏览学习是值得收藏的轻量级入门与参考材料。1. 估值与财务模型是一套思想不只是 Excel 文件打开一份以中金公司为代表的头部券商研究报告翻到估值页你会看到满页的表格盈利预测、财务比率、DCF 折现表、目标价区间。这个页面看起来像数学但读出来的是思维过程把公司的生意翻译成可验证的财务数据再把数据转化成估值。核心问题只有一个——这家公司凭什么值这个价。要回答它你得先把收入怎么增长、利润怎么变厚、现金怎么流转拆开形成财务模型然后把模型结果换算成目标定价。下面要讲的就是这套从模型到估值的完整工具链三张报表怎么联动DCF 和相对估值的参数怎么拿Excel 和 Python 实操的常见陷阱以及最后怎么验证数字的可靠性。适合买方卖方研究员、投融资岗位和独立做财务分析的从业者。2. 财务模型的地基三张报表怎么勾稽任何估值都从财务模型开始。财务模型的任务不是把历史财报抄一遍而是基于业务假设生成未来三年的利润表、资产负债表和现金流量表。这三张表必须互相咬合否则估值数据就是无根之木。券商研究所的模型通常以年为单位滚动更新三到五年预测期。2.1 利润表预测收入拆解是起点毛利率看生意属性利润表是预测的起点其中最重要的是收入。我一般把收入拆开看既有客户存量、新客户增量、价格变动、汇率影响按业务线逐条列。收入做完之后毛利率和费用率是两个关键假设。特别是毛利率它决定生意属性原材料成本占比高的制造业和毛利率常年超 90% 的软件公司模型结构完全不同。在做预测时建议把收入拆到量价层面而不是直接给一个增长率。量价拆分的好处是可以单独考虑产能投放对量的影响、竞争加剧对价的压制。比如一家设备制造商产能从 100 万台扩到 150 万台量的增长就有上限可查。这样每个假设都有出处汇报时不会被一句话问倒。费用端销售费用率和管理费用率通常随规模增大而趋平缓但研发费用率要看公司是否处在投入期。给成长期公司固定一个偏低的费用率很可能低估未来费用压力。下面给出一个简化的利润表预测示例。假设一家制造企业收入增速三年从 12% 降到 8%毛利率维持在 28% 左右期间费用率稳定在 16%科目2024A2025E2026E2027E营业收入100.0112.0123.2133.1营业成本72.080.688.795.9毛利28.031.434.537.3毛利率28.0%28.0%28.0%28.0%期间费用16.017.919.721.3营业利润12.013.414.816.0所得税(25%)3.03.43.74.0净利润9.010.111.112.0这张表的逻辑收入按比例增长毛利率固定后毛利自动出来费用率按 16% 计算扣除所得税后得到净利润。注意利润表只是起点它还没有回答“公司产生了多少现金”这个问题因为收入里含赊销部分成本里含没有付现金的折旧。2.2 资产负债表驱动项营运资本与资本开支的隐含假设利润表预测完之后要做资产负债表的变动预测。这里最容易出错的是营运资本NWC应收账款、存货、应付账款。很多新手在现金流预测里漏掉这一项或者只作模糊的“营运资本增加 X”。实际分析中我会计算周转天数应收账款周转天数 平均应收余额 / 收入 × 365存货周转天数 平均存货余额 / 营业成本 × 365应付账款周转天数 平均应付余额 / 营业成本 × 365三个周转天数如果保持稳定说明生意结构没有剧烈变化。一旦周转天数上升就要问清楚是账期延长导致还是回款质量恶化成长型公司里应收增速长期快于收入往往是收入确认激进加上渠道压货的信号这种情况必须在模型里暴露出来。资本开支的预测逻辑同样简单产能利用率已接近上限时Capex 必须对应扩张计划否则远期收入假设站不住脚。我习惯盯 Capex/DA 这个比率1.5 以上说明在加大投入低于 1 说明在消耗存量产能。2.3 现金流量表把利润转成自由现金流三张表的最后一环是现金流量表。净利润是权责发生制的产物要还原成真金白银得加回折旧摊销、减去营运资本增加和资本开支加总后得到自由现金流FCFF EBIT × (1 - 税率) 折旧摊销 - 资本开支 - 营运资本增加这里要强调折旧和资本开支的不同折旧是账面摊销没有现金流出资本开支是实际现金支出。如果一家公司折旧 5 亿、资本开支 8 亿自由现金流会被持续占用利润好但现金紧。反之资本开支长期小于折旧说明公司在吃老本远期产能会出问题。下面是用 Python 做 FCFF 计算的示例片段ebit [13.4, 14.8, 16.0] # 对应2025E-2027E tax 0.25 da [5.0, 5.4, 5.8] # 折旧摊销预测 capex [6.5, 6.8, 7.0] # 资本开支预测 nwc [1.2, 1.0, 0.8] # 营运资本增加额 fcff [e*(1-tax) d - c - n for e, d, c, n in zip(ebit, da, capex, nwc)] print(fcff) # [7.35, 8.7, 10.0]代码逻辑是对每一年从 EBIT 乘以1-税率得到税后营业利润再加回折旧摊销这个非现金项目减去资本开支和营运资本占用得到 FCFF 序列。这笔序列就是后续 DCF 估值阶段的输入。第三年营运资本增加额变小资金回笼加速FCFF 变大对应着周转改善。注意若 FCFF 连续多年为负模型很可能缺了融资循环。虽然 FCFF 里不直接体现融资需求但扩张期的负 FCFF 必然对应外部融资这个补充假设必须落在资产负债表的借款科目上否则现金流会凭空消失。利润表管假设资产负债表管结构现金流量表管质量。三张表联动是研报估值页所有数字的底层骨架。3. 用 DCF 把财务模型翻译成估值DCF 是研报估值页里的锚。不同券商对 DCF 的权重不一但多数会把最终估值与 DCF 结果对比把差异作为讨论基础。DCF 有两条路径股权自由现金流折现得到股权估值公司自由现金流折现得到企业价值再减净债务。研究实践中 FCFF 使用更广因为它不受资本结构短期变化干扰。3.1 WACC 参数怎么定贝塔、无风险利率与股权风险溢价WACC 的计算公式是WACC E/(ED) × Re D/(ED) × Rd × (1 - t)股权成本 Re 用资本资产定价模型CAPMRe Rf β × ERP。参数选择是 DCF 中最容易产生分歧的地方。国内头部券商研究所在无风险利率上通常以 10 年期国债到期收益率为基准取近三个月均值股权风险溢价取 6% 到 8% 区间贝塔取过去两年周频收益回归剔除财务杠杆后按目标资本结构再杠杆化。这些口径没有一个绝对标准但必须满足两个要求参数有明确窗口口径可追溯。债务成本 Rd 用公司存续债券的到期收益率或银行借款利率乘以1-税率得到税后债务成本。目标资本结构可参考当前市值和债务的比例但更合理的是参考可比公司的中位数结构因为目标结构反映长期趋势而不是当期临时状态。提示做敏感性分析时不要只调 Y 轴的 ERP把贝塔、无风险利率、债务成本都放进表里才能真正看出模型对哪个参数最敏感。3.2 预测期与终值永续增长不能超过 GDP 增速预测期通常取 5 年或直到公司进入稳态增长。之后的价值统称终值两种主流算法永续增长法TV FCFF_n × (1g) / (WACC - g)退出倍数法TV 预测期末 EBITDA × 可比 EV/EBITDA永续增长率 g 的取值实践中会参考长期名义 GDP 增速一般以 3% 左右为上限。超过名义 GDP 增速等于假设这个公司在永续期里市场份额无限扩张模型数字会非常夸张。比如 WACC 为 10%、g 取 5%终值会比 g 取 2.5% 高出近一倍估值敏感度极高。所以最终报告里通常同时展示两种算法再取一个区间wacc 0.10 g 0.025 fcff_5 10.0 # 2027E 自由现金流 tv_growth fcff_5 * (1 g) / (wacc - g) tv_exit 15.0 / 0.105 # 假设预测期末EBITDA15, WACC风险溢价后退出倍数约9.5x print(round(tv_growth, 1), round(tv_exit, 1)) # 输出: 102.5 142.9同一家公司、两种终值法相差约四成。这个差距就是分析师讨论目标价时的核心分歧点。收敛两法差异的方法是复查可比公司当前的 EV/EBITDA 倍数如果行业估值处于周期高位退出倍数应当打折。3.3 敏感性网格把不确定性摊开看DCF 输出的通常是一个区间而不是单一数字。研报里常见的形式是行为 WACC列为永续增长率格子里是企业价值或每股价值。一张敏感性表同时变动两个最关键的变量就能看到估值分布WACC \ g2.0%2.5%3.0%9.0%1651812009.5%15016518110.0%136150165观察表里的规律WACC 每上升 0.5 个百分点估值约下降 8%g 每上升 0.5 个百分点估值约上升 8%。如果某个标的的估值对 WACC 特别敏感说明它的现金流集中远期终值贡献过大。这个时候要么拉长显式预测期要么对终值增长假设做更保守处理。DCF 的价值在于把不确定性显式化而不是消灭不确定性。它让决策者清楚自己买在哪个参数假设上。但企业价值的判断不能只靠 DCF还需要相对估值做第二个锚点。4. 相对估值可比公司与倍数选择相对估值不追求算出来而追求比出来。隐含逻辑是同行业里类似的公司应该享受类似的估值水平。优点是快、直观、可验证缺点是容易忽略可比公司间的盈利质量差异。4.1 PE、EV/EBITDA、P/B 的适用边界倍数工具的选择要匹配公司特征我习惯按下表快速选择公司特征首选倍数理由盈利稳定、轻资产PE简单直观市场使用率高重资产、折旧差异大EV/EBITDA不受折旧政策和资本结构干扰银行与保险P/B 或 P/EV资产和准备金驱动利润倍数容易失真亏损期成长公司EV/Revenue盈利尚未覆盖成本先看收入规模多业务综合体SOTP 分部估值单一倍数无法反映不同板块成长差异EV/EBITDA 特别适合制造业和基础设施。分子是包含债权的企业价值不受资本结构影响分母是扣除折旧摊销前的盈利不受折旧政策影响因而可比性更强。PE 则对利润表端的会计选择很敏感一旦可比公司存在不同折旧年限或商誉摊销政策PE 对比就会失真。4.2 可比公司筛选与估值区间确定可比公司的筛选不是同行就行还要看业务结构和增长阶段。我的筛选框架是行业相同业务占比接近收入规模在一个量级利润增速相差在 5 个百分点以内。同时排除有明显特殊因素的标的比如过度负债、重大诉讼、治理问题。选定可比公司后取各自前瞻 PE、PEG、EV/EBITDA计算均值和中位数再乘以目标公司的预测每股收益得到相对估值区间pe_multiples [28.5, 25.2, 30.1, 27.8] # 4家可比公司前瞻PE target_eps_2026 1.35 # 目标公司2026E EPS mean_pe sum(pe_multiples) / len(pe_multiples) lo, hi min(pe_multiples), max(pe_multiples) print(round(mean_pe * target_eps_2026, 2), round(lo * target_eps_2026, 2), round(hi * target_eps_2026, 2)) # 输出: 37.66 34.02 40.64用可比公司均值 27.9 倍 PE 乘目标公司 2026 年预测 EPS 1.35 元得到参考价 37.66 元区间 34 到 40.6 元。但要做两个修正一是目标公司与可比公司中位数的增长差如果目标公司所在的细分赛道增速更高PE 应给予溢价二是非经常性损益如果可比公司盈利含一次性收益PE 分母应换成正常化盈利。修正完成后这个区间与 DCF 敏感性表放在同一页互相对照。如果 DCF 给出的区间明显高于相对估值说明模型隐含了超额增速长期存在需要回查销售费用率、毛利率等假设是不是过于乐观。5. 建模实操从 Excel 到 Python 落地模型最终要落到文件上。Excel 是券商研报的主流载体灵活、可视化、协同成本低Python 适合批量更新模型、跑情景分析、对接数据接口。两种工具的核心流程一致假设输入三表联动估值输出。5.1 Excel 模型的公式与版本管理Excel 模型的第一个纪律是假设与计算分离。所有关键假设增长率、毛利率、WACC、永续增长率集中在专门假设页计算页只做单元格引用。不要把假设散落在各表否则三个月后回看根本不知道哪个数字是硬编码的。我见过的坏模型几乎都因为硬编码假设太多。建立检查清单至少扫以下五项检查项检查方法常见错误勾稽平衡总资产 负债 所有者权益漏掉本期净利润转入留存收益折旧流转利润表折旧 资产端折旧只在一处计入折旧营运资本方向现金流方向与实际业务一致应收增加却增加现金流终值约束WACC 与 g 的差大于 3 个百分点g5%、WACC9% 仍偏离合理值硬编码扫描假设区统一标底色计算区混入手填数字另一个纪律是版本控制。文件名带日期和作者大改前另存版本。条件格式可以给硬编码单元格标黄公式标白。更严格一点对区域做命名约定假设区加前缀A_计算区加C_公式就能自解释后期检查效率提高不少。5.2 用 Python 搭一个五期三表模型骨架Python 可以用函数封装预测逻辑输入一套假设输出整套报表。下面是一个精简的五期骨架def project(years, assumptions): 简化版五期财务模型 assumptions: revenue_base, growth, gross_margin, expense_ratio, tax, da_ratio, capex_ratio, nwc_ratio records [] revenue assumptions[revenue_base] for y in range(years): revenue * 1 assumptions[growth] gross_profit revenue * assumptions[gross_margin] opex revenue * assumptions[expense_ratio] ebit gross_profit - opex da revenue * assumptions[da_ratio] capex revenue * assumptions[capex_ratio] nwc_change revenue * assumptions[nwc_ratio] fcff ebit * (1 - assumptions[tax]) da - capex - nwc_change records.append((round(revenue, 1), round(ebit, 1), round(fcff, 1))) return records assumptions { revenue_base: 100.0, growth: 0.10, gross_margin: 0.30, expense_ratio: 0.18, # 销售、管理、研发费用合计占收入18% tax: 0.25, da_ratio: 0.05, # 折旧摊销占收入5% capex_ratio: 0.06, # 资本开支占收入6% nwc_ratio: 0.01 # 营运资本增量占收入1% } result project(5, assumptions) print(result) # 输出前三年: [(110.0, 13.2, 7.7), (121.0, 14.5, 8.5), (133.1, 16.0, 9.3)]代码用收入比率近似折旧摊销、资本开支和营运资本增量在初步建模里是常见做法。但如果正式使用建议把 Capex 和 DA 分开DA 依赖存量资产Capex 依赖增量投入两者时间节奏不同收入比例法只能做方向性估算。5.3 情景开关悲观、基准、乐观一次算清模型不能只出一个数字。头部券商研报里的目标价几乎不会给单一点位而是给一个区间本质就是不同情景假设的结果。实际操作中我给模型做三个情景悲观假设增长率为基准的一半毛利率低 2 个百分点乐观假设增长率为基准的 1.3 倍毛利率高 1.5 个百分点。每个情景跑一次得到价格区间。Python 里实现情景切换很方便把 assumptions 改成三层嵌套字典切换一层即可。Excel 里用数据验证下拉框配合CHOOSE或INDEX函数把不同情景参数放在辅助区域切换下拉框整表自动更新。更复杂的做法是用OFFSET定义动态区域但维护成本高一般不推荐。模型的关键是把不同情景变成参数层面的切换而不是复制三张表。复制三张表是新手最容易犯的错改一条假设要同步改三处漏一处数字就打架。6. 用三个维度验证模型合理性6.1 逻辑验证勾稽关系与极值测试模型完成后第一步不是看估值结果而是做逻辑验证。每次建模我都要过这几关资产负债表的勾稽平不平现金流量表的期末现金与资产负债表现金一致收入增长率和营运资本变化方向是否矛盾。比如收入增速为正的同时应收账款周转天数大幅下降这种组合几乎没有可信度。极值测试也很有用把增长假设全部设为 0看模型是否仍输出正数把营收增长设到 30%看资产负债表是否出现荒谬的融资缺口。极值测试反映模型本身的结构稳定性如果从基准到极值的跳跃不合理说明参数之间存在隐藏联动没有理清。6.2 与市场隐含预期做反向推演另一种验证是反向 DCF市场当前股价隐含了什么假设。例如公司股价 60 元把当前市值代入 DCF 反推看隐含的永续增长率或自由现金流增速是多少。如果反推出的数明显高于行业天花板就有充分理由认为股价高估反之可能存在预期差。这个角度的价值是它不评判模型对错而是把市场预期变成可讨论的参数。研报分析师经常写“当前股价对应 2026 年多少倍 PE已反映什么预期”本质上就是在做这件事。6.3 多方法交叉验证最后把 DCF、相对估值、历史估值分位三个结果放在同一张表上交叉审视。如果 DCF 给出每股 50 元相对估值给出 35 元历史分位给出 40 元就要排查DCF 的高估值来自哪个假设是 WACC 取低了还是永续增长取高了。排查过程通常能找到模型里最脆弱的一个参数。建议把这几张验证表直接附在模型工作簿里任何同事打开文件十分钟内就能判断数字是否可信。本文还有配套的精品资源点击获取