公司估值:DCF、倍数与内在价值
如何判断一家公司的真实价值?DCF和倍数是估计内在价值的两个主要框架——它们是一切股权投资的基石。
在购买股票之前,你想确认价格是否合理。估值是估计公司真实价值的一门学问。
核心思想:一家公司的价值等于其未来现金流的现值。
两种估值框架
1. 折现现金流(DCF): 预测未来现金流,折现到今天,然后加总。
2. 相对估值(倍数): 将公司的估值指标与类似公司或其自身历史均值进行比较。
两者各有优缺点。成熟的分析师会同时使用两者。
DCF:基础
一家公司价值等于其未来现金流的现值:
其中:
- = 第年的自由现金流
- = 折现率(WACC)
- = 第年的终值
自由现金流(FCF): 企业在支付所有运营费用及维持/增长所需投资后产生的现金。
折现率:WACC
折现率应反映现金流的风险。对于上市公司,这通常是WACC(加权平均资本成本):
其中:
- = 资本结构中股权的比例
- = 债务的比例
- = 股权成本(股东要求的回报率)
- = 债务成本
- = 企业税率
股权成本通常用资本资产定价模型(CAPM)估计:
其中衡量股票对市场变动的敏感性。
终值
DCF最难的部分是估计终值——超出你明确预测期的价值。两种常用方法:
1. 戈登增长模型(永续):
假设自由现金流以固定速率永远增长。
2. 退出倍数:
假设公司以行业典型EV/EBITDA倍数出售(如15倍EBITDA),由此得到企业终值,再折现回今天。不要把FCF与EV/EBITDA倍数相乘——这会把扣除资本支出后的股权现金流数字与企业价值倍数混合,从而给出错误的结果。
估值倍数
倍数比DCF更快、更直观——但它们是捷径,不是全貌。
市盈率(P/E):
低市盈率可能意味着股票便宜——也可能是市场预期盈利将下降。
企业价值/EBITDA(EV/EBITDA):
在比较不同资本结构(负债水平)的公司时优于市盈率。
市净率(P/B):
通常用于银行、保险和重资产企业。
Python实现DCF
import numpy as np
import pandas as pd
def dcf_valuation(fcf_forecast, terminal_growth, discount_rate, terminal_multiple=None,
forecast_years=5, ebitda_forecast=None):
"""
Discounted Cash Flow valuation.
Parameters
----------
fcf_forecast : list of floats
Free cash flow for each forecast year
terminal_growth : float
Terminal growth rate (g) used by the Gordon Growth branch
discount_rate : float
WACC (r)
terminal_multiple : float, optional
Exit EV/EBITDA multiple (only used if `ebitda_forecast` is supplied)
forecast_years : int
Number of explicit forecast years
ebitda_forecast : list of floats, optional
EBITDA for each forecast year; required when `terminal_multiple` is given.
Terminal value is then `terminal_ebitda * terminal_multiple`.
Returns
-------
pv_total : float
Enterprise value
"""
# PV of explicit forecast period
pv_explicit = 0
for t, fcf in enumerate(fcf_forecast, 1):
pv_explicit += fcf / (1 + discount_rate) ** t
# Terminal value
if terminal_multiple is not None:
if ebitda_forecast is None or len(ebitda_forecast) != len(fcf_forecast):
raise ValueError(
"An EBITDA forecast of the same length as `fcf_forecast` is "
"required when using an EV/EBITDA exit multiple."
)
terminal_ebitda = ebitda_forecast[-1] * (1 + terminal_growth)
terminal_value = terminal_ebitda * terminal_multiple
else:
# Gordon Growth Model: TV = FCF_{n+1} / (r - g)
terminal_fcf = fcf_forecast[-1] * (1 + terminal_growth)
terminal_value = terminal_fcf / (discount_rate - terminal_growth)
# PV of terminal value
pv_terminal = terminal_value / (1 + discount_rate) ** forecast_years
return pv_explicit + pv_terminal
def pe_comparable(peer_pe_ratios, earnings):
"""
Estimate stock value using P/E of comparable companies.
"""
median_pe = np.median(peer_pe_ratios)
return earnings * median_pe
def ev_ebitda_comparable(peer_ev_ebitda, ebitda):
"""
Estimate enterprise value using EV/EBITDA of comparables.
"""
median_multiple = np.median(peer_ev_ebitda)
return ebitda * median_multiple
提示词
用 numpy 写一组公司估值工具函数:DCF(显式期折现 + 终值,支持 Gordon 增长和 EV/EBITDA 退出倍数两种终值),以及用 np.median 取中位数的 P/E 和 EV/EBITDA 可比公司估值。
关键假设决定价值
DCF对假设极其敏感:
- 折现率: WACC变化1%可以将估值改变20-30%
- 终值增长率: 即使0.5%也影响巨大(这就是永续公式对如此敏感的原因)
- 预测期长度: 5年vs 10年会使结果显著不同
这就是为什么两位分析师用相同的公开信息可能得出截然不同的结论——他们做出了不同的假设。
核心要点
- DCF:公司价值等于其未来现金流的现值
- 自由现金流是衡量价值创造的黄金标准
- 终值通常是DCF价值的最大组成部分
- 倍数是依赖于可比公司选择的快速估计
- 估值是艺术与科学的结合——所有模型都需要判断力
参考文献
- Penman, Financial Statement Analysis and Security Valuation. McGraw-Hill, 2019. ISBN: 978-0-07-337966-3.
- Damodaran, Investment Valuation. Wiley, 2012. ISBN: 978-1-118-13074-1.
- Koller, Goedhart, Wessels, Valuation: Measuring and Managing the Value of Companies. Wiley, 2020. ISBN: 978-1-119-66845-5.