公司财务模型全景:从戈登模型到Z-score的估值与风险分析 简介招商证券投行培训出品的《构建财务模型》演示文稿聚焦投行与财务分析中的定量估值场景系统讲解戈登增长模型、公司增长率模型、资产组合理论、CAPM、MM理论及奥特曼财务危机预测等内容并配有A~E公司案例推演适合投资银行从业者、财务分析师及备考金融类证书的学员参考学习。包内为1个PPT文件约477KB内容以图表公式与实例推导为主便于直接阅读和二次整理。目前已有90人浏览学习。该课件从股利折现到加权平均资本成本层层展开既有模型公式的推导思路也提示了实际应用中需要关注的假设前提与局限性使用户不仅掌握公式更理解不同模型的适用边界为后续独立搭建估值模型提供扎实框架。1. 为什么投行新人先学财务模型而不是估值软件一次项目例会上分析师把DCF模型里的WACC从9.2%改成了8.7%被问到“这个β是哪个数据源的”时答不上来。这种场景在投行、PE和企业财务部门里很常见——工具越来越顺手但模型背后的假设一碰就碎。招商证券这套投行培训材料讲的是从戈登模型到奥特曼Z-score的一整套公司财务模型推导每个模型都配了数值案例和适用边界。它解决的不是“怎么用Excel算数”而是“这个式子为什么长这样、参数从哪里来、哪些条件一放松结论就失效”。适合刚入行的投行分析员、做尽调和估值的企业财务人员也适合那些已经会用估值软件但想回头补基本功的投资从业者。把这套逻辑理清之后再去看各种估值模板你会知道哪些单元格能改、哪些不能乱动。2. 戈登模型与可持续增长率从股利固定增长到留存收益内生增长2.1 戈登模型的适用边界与推导路径戈登增长模型GORDON Model解决的是稳定增长公司的股票定价问题。它假设股利永远按固定比例g增长必要报酬率为K那么股票现价P0等于下一期股利D1除以K与g的差P0 D0(1g) / (K-g)。A公司基期股利D01元g10%K12%代入得到55元。这里必须注意分母中K必须大于g否则价格会变成负值或无穷大模型失效。模型的三条推导值得好好看。推导一说明股价的增长率也等于gPt1 Dt1(1g)/(K-g) Dt(1g)(1g)/(K-g) Pt(1g)所以股价和股利同步增长。推导二把总收益率拆成两部分由P0 D1/(K-g)可得K g D1/P0其中g是资本利得率D1/P0是股利回报率。推导三把D0换成hE0h为股利发放率得到市盈率公式P0/E0 h(1g)/(K-g)这一形式直接解释了为什么高增长、高发放率的公司市盈率可以更高。这个模型的边界很窄它要求股利发放政策稳定且增长率恒定。现实中很少有公司能长期维持固定增长率所以戈登模型更常被用来做成熟稳定行业的快速定价或者作为其他估值模型的终值计算工具。前几年关于股市是否有泡沫的争论实质上就是在争论公式里的g和K是否被投资者高估或低估了。2.2 可持续增长率g的求解逻辑B公司的例子引入了更实际的增长率求解。假设净资产收益率r不变、股利发放率h不变且净资产的增加完全由留存收益带来则公司增长率g r(1-h)。推导过程通过每股股利Dt hEt而每股盈利Et NAt × rNAt为每股净资产于是gt (Dt1 - Dt)/Dt r(1-h)。这个式子告诉我们公司内生增长率只由两个变量决定——投资回报率和留存比例与分红绝对值无关。如果B公司基期每股盈利为2元净资产收益率r20%股利发放率h40%那么留存率1-h60%g20%×60%12%。若市场资本报酬率K14%下期股利D1 h × E0 × (1g) 0.4 × 2 × 1.12 0.896元股价P 0.896 / (14% - 12%) 44.8元。注意这里K必须大于g否则模型无意义。再往前走一步股票价值可以拆成“现有状态下未来盈利的现值”加上“未来投资机会的净现值”。因为K g hEt1/Pt且g r(1-h)所以当Kr时P Et1/K公司没有增长价值当K≠r时第二项代表未来投资机会创造的增量价值。这就是为什么选择项目时必须要求净资产收益率r大于资本成本K——只有当投资回报率超过股东要求回报率留存收益才真正创造价值。2.3 用Python实现模型计算与参数敏感性分析纸上推完公式用代码验证是最快的。下面这段Python实现了戈登定价和可持续增长率计算。def gordon_price(D0, g, K): 戈登模型定价D0基期股利g增长率K必要报酬率 if K g: return float(inf) # 分母非正模型失效 return D0 * (1 g) / (K - g) # A公司D01, g10%, K12% print(fA公司价格: {gordon_price(1, 0.10, 0.12):.2f} 元) # 55.00 def sustainable_growth(roe, dividend_payout): 可持续增长率 ROE * 留存率 return roe * (1 - dividend_payout) # B公司演示ROE20%股利发放率h40% g sustainable_growth(0.20, 0.40) print(f可持续增长率: {g:.2%}) # 12.00%代码逻辑很直白gordon_price先判断分母是否为正避免出现负价格的荒谬结果。sustainable_growth用roe乘以留存率注意这里传入的是股利发放率h所以用1 - h。很多新手会把留存率直接当成增长率忽略了还要乘ROE。K \ g8%10%12%11%55.00无效无效12%27.0055.00无效13%18.0027.0055.00上表展示了不同K与g组合下的价格。K11%、g12%时分母为负返回无穷大表示模型不适用。实际使用时如果算出来的敏感性表出现大量无穷值说明你对g的估计可能超过了资本成本需要重新检视假设。3. 资产组合理论与CAPM资本成本的确定逻辑3.1 资产组合理论中的收益与风险关系马科维茨在1952年提出的资产组合理论第一次把投资组合的收益和风险量化成数学关系。核心结论是对于有效组合预期收益率与标准差成正比表达式为 rP rf [(rM - rf) / σM] × σP。这里rf是无风险利率rM是市场组合预期收益率σM是市场组合标准差σP是组合标准差。培训中的例子市场组合收益率15%标准差21%无风险报酬率7%现有组合标准差30%代入公式得到组合收益率 7% (15%-7%)/21% × 30% 18.43%。这个式子的含义是在有效前沿上每承担一个单位标准差市场给予的额外回报是恒定的也就是夏普比率。反过来如果你知道一个组合的收益率和标准差也能判断它是否落在有效前沿上。这个理论是后面CAPM的基础。CAPM假设市场组合本身就是一个有效组合任何资产的预期收益只与其系统性风险相关而标准差中的非系统性风险可以被分散掉。3.2 CAPM模型中的β、无风险利率与市场风险溢价CAPM公式写作 rE rf β × (rM - rf)其中(rM - rf)是市场风险溢价。这里最容易混淆的是市场风险溢价和市场收益率必须用“期望市场收益率减去无风险利率”。C公司例子中国库券利率代表rf期望市场风险溢价是已经扣除rf后的值所以权益资本成本直接是rf β×溢价不需要再加一遍rf。β的取值通常来自回归分析或者用可比公司去杠杆后的β再按目标资本结构重新杠杆化。无风险利率一般取十年期国债到期收益率市场风险溢价则用历史几何平均或隐含溢价不同来源差异很大——这也是为什么同一个项目两个人算出不同WACC的根本原因。3.3 用Python批量计算权益资本成本资本成本的估算不是单一值而是需要考虑不同β和风险溢价的情景。下面代码演示了如何批量计算。def capm_equity_cost(rf, beta, market_risk_premium): CAPMrf无风险利率beta系统性风险market_risk_premium市场风险溢价 return rf beta * market_risk_premium scenarios [ {rf: 0.03, beta: 0.8, mrp: 0.05, label: 保守}, {rf: 0.03, beta: 1.0, mrp: 0.06, label: 中性}, {rf: 0.035, beta: 1.2, mrp: 0.07, label: 激进}, ] for s in scenarios: cost capm_equity_cost(s[rf], s[beta], s[mrp]) print(f{s[label]}: rE {cost:.2%})输出结果分别是保守7.00%、中性9.00%、激进11.90%。参数说明rf可以用三年期国债均值替代beta从数据终端取或自己回归市场风险溢价用长历史周期数据计算。实际工作中不要只报一个点估计而是把这三个情景摆出来让决策者看到估值对参数变动的敏感程度。4. WACC、MM理论与多元化投资的资本成本重构4.1 从CAPM到WACC的加权逻辑企业价值的评估用到的是加权平均资本成本WACC公式为 rWACC rE × (E/V) rD × (1-t) × (D/V)其中E是权益市值D是债务账面价值VEDt是所得税率。C公司的例子就是先通过CAPM算出权益成本再结合债务成本和税率得到折现率然后对未来现金流折现。项目数值或变量数据来源无风险利率 rf3%十年期国债β0.9回归/可比公司市场风险溢价5%历史均值债务成本 rD5%公司债发行利率所得税率 t25%法定税率权益权重E/V目标资本结构注意债务成本一定要用税后的因为利息有税盾效应。如果直接用税前债务成本加权会高估折现率、低估企业价值。实务中还有一种常见错误是把账面权益价值当作权重导致加权结果失真应当使用市场价格或目标资本结构。4.2 MM理论II杠杆公司的权益成本与资产的转换MM理论II1963年含税版本给出了杠杆公司与无杠杆公司权益成本的关系rE rA (1-t)(rA - rD) × D/E。其中rA是公司整体资产的必要报酬率即无杠杆权益成本。这个式子的价值在于当你看到行业里有负债公司时可以反向推出该行业资产的真实风险水平。C公司例子中如果已知权益beta、无风险利率和市场溢价先算rE再结合债务利率、D/E比就能算出rA。这一步骤在可比公司分析中极其常见因为不同公司的资本结构不同不能直接拿有杠杆的beta或权益成本做横向比较。4.3 跨行业投资时如何重构资本成本D公司属于家电行业要投资医药行业实现多元化。如果直接沿用本公司WACC就是拿家电行业的资本成本去折现医药行业的现金流结果必然失真。正确做法是从医药行业的β出发先求医药行业的无杠杆权益成本rA再放到本公司资本结构下重新加杠杆。过程分三步。第一步计算医药行业权益成本rE医药行业β2假设rf4%、市场风险溢价5%则rE4%2×5%14%。第二步根据医药行业D/E1:1、债务利率rD6%、所得税率t25%用MM公式反推rArA (rE - (1-t)rD×D/E) / (1 (1-t)×D/E) (14% - 0.75×6%×1) / (10.75×1) ≈ 7.14%。第三步用本公司的目标D/E1:2即D/E0.5和债务利率7%重新计算本公司的权益成本。def asset_cost_from_equity(rE, t, rD, D_E): 从杠杆权益成本推导无杠杆资产成本rA return (rE - (1 - t) * rD * D_E) / (1 (1 - t) * D_E) def equity_cost_from_asset(rA, t, rD, D_E): 从资产成本推导新资本结构下的权益成本 return rA (1 - t) * (rA - rD) * D_E rE_industry 0.14 t 0.25 rD_industry 0.06 D_E_ind 1.0 rA asset_cost_from_equity(rE_industry, t, rD_industry, D_E_ind) rD_company 0.07 D_E_comp 0.5 rE_company equity_cost_from_asset(rA, t, rD_company, D_E_comp) rWACC_equal rE_company * (2/3) rD_company * (1-t) * (1/3) print(f行业资产成本: {rA:.2%}) print(f公司新权益成本: {rE_company:.2%}) print(f用于医药投资的WACC: {rWACC_equal:.2%})逻辑说明asset_cost_from_equity是从有杠杆的行业数据倒推纯业务风险equity_cost_from_asset再把该风险加载到本公司资本结构上。参数说明D_E是债务与权益之比注意D公司债权与股权比例为1:2所以D/E0.5。最后的rWACC用在企业价值评估中要换成目标公司的权重。5. 奥特曼Z-score模型财务比率的组合报警器5.1 识别Z-score的五个输入变量奥特曼Z-score模型1968年是一个多元判别模型用于预测企业一年内是否会发生财务危机。它把五个财务比率线性组合成一个Z值每个比率都有明确的经济含义。变量计算公式含义X1净营运资本 / 资产总额资产流动性X2保留盈余 / 资产总额累积盈利X3息税前收益 / 资产总额经营效率X4权益资本市场价值 / 全部负债账面价值资本结构X5销售收入 / 资产总额资产周转率在E公司例子中五个自变量数值分别为0.15、0.1、0.2、2.0、0.8代入后面的公式可以算出Z值。这些数据都来自资产负债表和利润表用期末数计算分子分母必须同口径——比如权益市场价值要用年末股价乘以总股本而不是净资产。5.2 Z值的计算与阈值判定Z值的公式是Z 1.2×X1 1.4×X2 3.3×X3 0.6×X4 1.0×X5。各系数的量级不同说明对应比率的贡献不同。X3的系数最大3.3意味着经营效率对危机预测的权重最高X1的系数最小1.2但流动性差会在危机早期暴露。阈值分三档Z 2.99公司一年内不会失败1.81 ≤ Z ≤ 2.99灰色区域需要结合其他指标判断Z 1.81一年内很可能失败。注意这个模型是基于1960年代美国制造业样本得出的对非制造业需要调整系数或改用其他版本但作为初筛工具仍然有效。5.3 用Python做批量Z值评分与阈值标记实际工作中经常要一次评估多家公司的财务风险。写一个函数批量计算并自动打标def z_score(x1, x2, x3, x4, x5): 奥特曼Z-score输入五个财务比率返回Z值 return 1.2*x1 1.4*x2 3.3*x3 0.6*x4 1.0*x5 def z_judge(z): if z 2.99: return 安全 if z 1.81: return 灰色 return 危机 E z_score(0.15, 0.10, 0.20, 2.0, 0.8) print(fE公司Z值: {E:.2f}判定: {z_judge(E)})假设E公司的X10.15, X20.10, X30.20, X42.0, X50.8则Z1.2×0.151.4×0.103.3×0.200.6×2.01.0×0.82.92落在灰色区域。这个结果说明公司经营数据并不理想需要进一步看现金流和行业周期。批量处理时把各公司指标放进DataFrame用向量化运算一次出结果import pandas as pd data { 公司: [E公司, F公司, G公司], X1: [0.15, 0.10, -0.05], X2: [0.10, 0.05, 0.01], X3: [0.20, 0.12, -0.10], X4: [2.0, 1.2, 0.6], X5: [0.8, 0.9, 0.4], } df pd.DataFrame(data) df[Z] 1.2*df[X1] 1.4*df[X2] 3.3*df[X3] 0.6*df[X4] 1.0*df[X5] df[判定] df[Z].apply(z_judge) print(df)这段代码会把每行数据代入公式apply(z_judge)自动把数值转成定性结论。用这种批量打分方式可以快速从几十家候选公司里筛掉有破产风险的标的。需要提醒的是Z-score模型适合制造业和稳定经营的企业对金融、科技类公司要谨慎因为它们资产结构和盈利模式不同最好先用财务比率做一致性检查再决定是否套用。本文还有配套的精品资源点击获取