☰
戈登增长模型(GGM)全解析:公式、假设与Python估值实战
2026/10/22 16:28:07 网站建设 项目流程

估值是投资里最容易被拿来“打架”的话题:有人说看市盈率,有人说看现金流,还有人搬出整套贴现模型。而在股利贴现模型(DDM)的家族里,戈登增长模型(Gordon Growth Model,GGM)大概是最经典也最常被拿出来讨论的一个。它用一条极其简洁的公式,把“公司未来所有股利的现值”压缩成一个静态的估值结果。正因为简洁,它的假设条件严苛得像是存在于一个“理想国”里;也正因为简洁,它反而特别适合用来训练估值思维,理解折现率、增长率和价格之间那种近乎敏感的博弈关系。这篇文章我会从数学直觉、假设体系、参数实操到 Python 代码实现,逐步把 GGM 的来龙去脉拆开。适合刚开始接触估值建模、或者已经会用 Excel 但想用代码批量做敏感性分析的朋友参考。

1. 先从一道小学数学题说起:GGM 到底在算什么

1.1 永续年金直觉

GGM 的核心,其实是小学奥数里就出现过的“等比数列求和”。

假设某公司每年给你发一次红利,第一年发 1 元,第二年发 1 元,第三年还是 1 元,一直发到永远。那你愿意为这一串现金付出多少钱?显然不能直接用“无限个 1 元等于无穷大”回答,因为未来的钱要打折到今天。假设你要求的年化回报率是 10%,那么这笔永续年金的现值就是:

PV = 1 / 1.10 + 1 / 1.10² + 1 / 1.10³ + …

这是一个公比为 1/1.10 的等比数列,和等于 1 / 0.10 = 10 元。

这个结果很容易理解:如果你花 10 元买入一项资产,每年稳稳拿回 1 元,年回报正好是 10%。这就是“永续年金”公式:PV = D / r。

GGM 只做了一件事:把“每年发固定的 1 元”升级成“每年股利按固定比例 g 增长”。第一年股利是 D1,第二年变成 D1×(1+g),第三年变成 D1×(1+g)²……于是现值公式变成:

PV = D1 / (1+r) + D1×(1+g) / (1+r)² + D1×(1+g)² / (1+r)³ + …

这是一个公比为 (1+g)/(1+r) 的等比数列。当增长率和折现率满足 g < r 时,公比小于 1,级数收敛,求和结果就是:

PV = D1 / (r - g)

注意,公式里的 D1 是“下一期”的预期股利,不是当前已经发放的股利 D0。用 D0 表达的话是:

PV = D0 × (1+g) / (r - g)

1.2 为什么分母是 r - g

很多人背下了公式,却没想明白分母里那个减号代表什么。用生活的类比来理解:假设你有一片果园,每年产出的水果数量固定,周围人要求的年回报率是 r,那么果园价值就是“每年产量 / r”。现在果树每年自己会长大一点,产量每年自动增加 g,那就相当于你的实际回报率从 r 下降到了 r - g。

这里有个更直观的解释:你买果园花了 PV 元,每年从果园拿到 D1 元现金,同时又看着果园里的果树增值了 g。你的总回报来源是“现金收益 D1 / PV”加上“资本增值 g”。现在你要求总回报等于 r,那么:

D1 / PV + g = r

移项就是 PV = D1 / (r - g)。

这一步推导特别重要,因为它揭示了 GGM 本质上是“把投资回报拆成股息率和资本增值两部分”。很多实战派分析师会反过来用这个公式:从当前股价反推 r 或者 g,这才是 GGM 在真实世界里最有生命力的用法。

1.3 收敛条件的数学意义

GGM 要求 g 必须小于 r,否则分母为负或为零,估值不是负数就是无穷大。这不只是数学上的约束,背后有经济学含义:一家公司不可能以高于经济长期增速的速度永远增长,更不可能永远超过投资者的要求回报率。竞争会让超额增长率逐步回落。所以当你看到某个人用 GGM 给一只科技成长股估值时,先别急着看结果,直接检查他输入的 g 是否小于 r,小于多少——这个细节往往决定了模型究竟是“估值”还是“变魔术”。

2. 理想国里的三根支柱:GGM 的假设体系

2.1 假设一:股利是股东唯一的、完全可预期的回报

GGM 假设公司把盈利的一部分以股利形式稳定发放,且股利政策长期不变。股东不会从资本利得里获得额外价值,也不考虑股票回购,因为这相当于一次性变相分红,会把稳定的派息格局打破。

这条假设在现实中几乎不存在,除了少数稳定分红的公用事业公司或消费类巨头外,大多数公司的股利政策会随盈利周期和战略需要调整。尤其不能忽视股票回购:一家公司如果长期回购股票,每股股利可能不增,但每股盈利和内在价值在增长,这会严重低估 GGM 结果。

不过,理想国之所以是理想国,就是因为它提供一个“参照系”:如果一家公司股利长期稳定且增长可预期,GGM 就是最合适的估值锚;如果公司不分红,那就说明 GGM 不适配,该换用自由现金流贴现模型。

2.2 假设二:增长率 g 永续恒定且远低于折现率

“永续增长”四个字是 GGM 最浪漫也最危险的地方。一家公司经营十年不难,但永续存在且增长率恒定,背后隐含的是行业永续存在、竞争格局锁定、管理层永续理性等一系列苛刻条件。

实操中,分析师通常把 g 设定在 2% 到 6% 之间,大约等于长期名义 GDP 增速取一个偏低值。超过 6% 的永续增长率需要极强的证据,否则模型会输出一个让人兴奋但实际上脆弱的数字。

另一个隐含限制是:g 不仅要小于 r,还要小于长期经济增长率。从宏观角度看,除非这家公司能永远跑赢整个经济大盘,否则永续增长率接近甚至超过 GDP 增速都是站不住脚的。这也是为什么很多估值教材把“长期名义 GDP 增速”作为 g 的天然上限。

2.3 假设三:折现率 r 恒定且已知

GGM 里的 r 通常取投资者要求的权益回报率,最常用的估计方法是资本资产定价模型(CAPM):

r = 无风险利率 + β × 市场风险溢价

无风险利率一般参考长期国债收益率,β 反映个股相对大盘的波动弹性,市场风险溢价通常在 4% 到 6% 之间。问题来了:无风险利率会随宏观环境波动,β 在不同时间段估计结果差异很大,市场上对风险溢价根本没有一致意见。于是同一个盈利、同一个股利政策,不同分析师算出的 r 可以差 2% 以上,估值结果轻轻松松差出 30%。

真正的从业者不会纠结于“谁的 r 更精确”,而是主动分析 r 的敏感区间:如果 r 在 8% 到 10% 之间变化,估值范围是什么?只要估值的下沿仍然高于当前股价,那结论就是稳健的;如果估值随 r 剧烈摆动,说明这只股票本身就不适合用 GGM 来定价。

3. 参数选不好,模型就变成数字游戏

3.1 增长率 g 的三种估法

估计 g 常见有三条路,各有各的适用场景。

第一种:历史股利增长率。取过去 5 到 10 年的每股股利复合增速,做线性回归或几何平均。优点是客观,缺点是“历史会重演”这个假设本身就值得怀疑。新上市没几年分红的公司根本没法用这个方法,周期性行业的股利历史也容易误导。

第二种:分析师盈利预测换算。先找分析师的长期盈利增长率预测,再假定股利支付率稳定,那么 g ≈ 盈利增长率。这条路信息更新快,但依赖外部预测质量,而且“盈利增长预测”往往带有乐观偏差,用的时候要人为打折。

第三种:可持续增长率公式。g = ROE × (1 - 股利支付率),其中 (1 - 股利支付率) 是留存收益率。这是我最推荐也最符合逻辑的方法,因为它的底层逻辑很直接:公司不把盈利全分掉,而是留下来再投资,只要再投资回报率 ROE 高于资本成本,留存的钱就能产生正增长。可持续增长率把“增长”和“盈利质量”绑在一起,避免了只看历史数据的机械性。

用一个例子说明三者差异:假设某消费公司最近一年的股利 D0 = 2 元,历史股利增速 7%,分析师盈利增速 9%,但 ROE 只有 12%,股利支付率 60%,那么可持续增长率 = 12% × 40% = 4.8%。三个 g 居然从 4.8% 到 9% 不等,代入模型后的估值天差地别。实际估值时,建议把三个 g 摆在一起做场景对比,不要急着选一个“看起来最顺眼”的。

3.2 折现率 r 的取值警惕

r 的选值错误比 g 的错误更隐蔽,因为 g 用大了容易一眼看出估值离谱,r 用小了只会让估值“温和地”虚高。

计算 r 时有一个容易忽略的细节:CAPM 里的无风险利率和风险溢价必须匹配同一个期限口径。用 10 年期国债收益率作无风险利率,风险溢价也该匹配 10 年左右的权益风险溢价;如果用短端利率,整个公式就失去了时间基准。

另一个坑是 β 的估计窗口。取周频数据 60 个月和取日频数据 1 年,算出来的 β 差异经常在 0.2 到 0.4 之间。对一只高 β 股票来说,这足以让 r 变动 1% 左右。我的一般做法是取 2 到 3 年周频数据,同时剔除极端市场行情区间的数据点,再和日频结果做对照,用两者中位数作为最终输入。

3.3 敏感性分析表格:把参数爆雷区间标出来

GGM 对参数极度敏感,尤其是 g。我用一个模拟案例说明。

假设 D0 = 2 元,r = 10%,g 从 3% 到 6% 变动:

增长率 g估值 PV相比基准变化
3%29.43 元-15.9%
4%34.67 元-1.0%
5%42.00 元+20.0%
6%53.00 元+51.4%

从表格可以直观看到,g 每提高 1%,估值抬升幅度越来越大,呈现加速状态。这是因为分母 r - g 本来就随 g 变大而变小,而分子 D1 也在随 g 变大,双重效应叠加,估值被非线性放大。

实战中我建议做一张“双因素敏感性矩阵”,横轴为 r,纵轴为 g,格子里填估值。这样能把“哪些参数组合会导致估值异常”一眼看清楚。比如你发现 r-g 小于 2% 的组合占了大半张表,那就说明当前分母太薄,任何参数风吹草动股价都会大起大落,这种场景下 GGM 不适合稳定输出结论。

4. 用 Python 把理想国盖起来

4.1 环境准备与代码结构

代码这块我习惯用最基础的三件套:numpy 做数值计算、pandas 整理数据、matplotlib 画图。这里不推荐引入重量级框架,因为 GGM 的本体就一条公式,真正花时间的是场景模拟和敏感性分析。

import numpy as np import pandas as pd import matplotlib.pyplot as plt

建议在 Jupyter Notebook 里跑这些代码,方便分块调试和画图。

4.2 基础版 GGM 计算函数

函数设计上我做了两个贴心处理:一是自动把 D0 换算成 D1,二是对 r - g 小于等于 0 的情况做保护,防止出现除零或负估值。

def ggm_valuation(d0, r, g): """ 戈登增长模型估值 :param d0: 当前每股股利 :param r: 折现率(要求回报率) :param g: 永续增长率 :return: 每股内在价值 """ if r <= g: return np.nan # 模型失效,返回空值 d1 = d0 * (1 + g) return d1 / (r - g) # 示例:某稳定分红公司 d0 = 2.0 r = 0.10 g = 0.04 value = ggm_valuation(d0, r, g) print(f"内在价值:{value:.2f} 元")

这段代码输出 34.67 元,和前面表格里的基准一致。函数本身很简单,但加上保护分支后,批量运算时代码不会突然报错,方便后续处理几百个参数组合。

4.3 敏感性矩阵可视化:一张图看清估值边界

单点估值没有意义,参数稍微一动结论就翻倍,这才是 GGM 的真实脾气。我通常把 r 和 g 各取一个合理范围,生成估值矩阵,再用热力图展示。

def sensitivity_matrix(d0, r_range, g_range): """ 生成双因素敏感性矩阵 :param d0: 当前股利 :param r_range: 折现率数组 :param g_range: 增长率数组 :return: DataFrame,行对应 r,列对应 g """ matrix = [] for r in r_range: row = [] for g in g_range: val = ggm_valuation(d0, r, g) row.append(val) matrix.append(row) df = pd.DataFrame(matrix, index=[f"r={r:.1%}" for r in r_range], columns=[f"g={g:.1%}" for g in g_range]) return df d0 = 2.0 r_range = np.linspace(0.08, 0.12, 9) g_range = np.linspace(0.02, 0.06, 9) sensitivity = sensitivity_matrix(d0, r_range, g_range) print(sensitivity.round(2))

这段代码会生成一张 9×9 的矩阵表。你会看到表格右上角(低 r 高 g 区域)估值飙到离谱,左下角(高 r 低 g 区域)估值被压得很低。真正的“合理区”其实只在对角线附近的一小撮格子。

接着画热力图:

import matplotlib.ticker as mtick plt.figure(figsize=(10, 7)) plt.imshow(sensitivity.values, cmap="YlOrRd", aspect="auto") plt.colorbar(label="内在价值(元)") plt.xticks(range(len(g_range)), [f"{g:.1%}" for g in g_range]) plt.yticks(range(len(r_range)), [f"{r:.1%}" for r in r_range]) plt.xlabel("永续增长率 g") plt.ylabel("折现率 r") plt.title("GGM 估值敏感性热力图") # 标注每个格子的数值 for i in range(len(r_range)): for j in range(len(g_range)): value = sensitivity.values[i, j] if not np.isnan(value): color = "white" if i < 3 else "black" plt.text(j, i, f"{value:.0f}", ha="center", va="center", fontsize=9, color=color) plt.tight_layout() plt.show()

这张图做完,你能当场回答“什么情况下估值从 30 元变成 60 元”——只需要 r 从 10% 降到 9%、g 从 4% 升到 5% 就够了。对一家真实公司来说,这两个参数完全在合理波动范围内,所以但凡有人说 GGM 能给出“精确”估值,你心里应该有数:它给的是“一个在合理参数区间内震荡的价格区间”。

4.4 用反推公式给市场“算命”

前面提过 GGM 的反向用法,我不建议新手跳过,因为它才是很多卖方报告里的隐藏内容。

把估值公式变形:

P = D1 / (r - g)

如果 P 是当前股价,同时假设分析师给出的 r 是 9%,反解出来的 g 就是市场预期的永续增长率:

g = r - D1 / P

这个 g 就是所谓的“隐含永续增长率”。它告诉你,当前股价里已经计入了多高的长期增长预期。举个例子:某股价 40 元,D1 = 2.2 元,取 r = 9%,那么隐含 g = 9% - 2.2/40 = 3.5%。这个数字看着不高,但如果公司历史可持续增长率只有 2.5%,那就说明股价透支了增长预期,估值存在回归压力。

def implied_growth(price, d1, r): """ 反推市场隐含永续增长率 """ return r - d1 / price price = 40.0 d1 = 2.2 r = 0.09 implied = implied_growth(price, d1, r) print(f"市场隐含永续增长率:{implied:.2%}")

输出 3.50%。这种“反推”用法非常适合做同行业横向比较:把几家竞争对手的隐含 g 摆在一起,谁的市场预期更高、谁的增长叙事更“贵”,一目了然。

5. 常见问题与排查技巧实录

5.1 估值出现负数或无穷大

这是最高频的报错场景,原因几乎只有一个:r ≤ g。检查项目有两个:

  • 是否把 r 和 g 的单位搞混了?比如 r 用的是 10%,g 用的是 4,忘记转成小数。
  • 是否把 D0 当成了 D1?如果公司今年刚提高分红,下一期 D1 应该是 D0 × (1+g),直接用 D0 算会低估估值,但不至于出现负数。

我的习惯是在代码里直接对 r - g 加断言保护,一旦暴力破解的 g 大于 r,代码立刻显式报错,而不是返回一个负数让你在报表里慢慢找。

5.2 取数口径不一致

计算 D0 时要确认用的是“每股股利”,不是“每股红利”也不是“每股股息”。在 A 股语境下,三者经常混用;严格来说,每股股利应该用年报里“每 10 股派发现金股利”换算得到。例如某公司公告“每 10 股派 5 元”,那么 D0 = 0.5 元。

除了绝对水平,还要注意除权除息影响。如果某只股票刚经历过大比例送转,历史每股股利数据会出现“断崖式”下降,这不是经营恶化,只是股本变多了。如果直接拿除权后的历史数据去算增速,会得到完全失真的负增长。

5.3 增长率口径的选择坑

永续增长率到底用名义还是实际,是新手的常见纠结点。GGM 里的 r 通常包含通胀预期,所以 g 也应当用名义增长率,否则分子分母口径不匹配。如果要用实际增长率,那么 r 也必须换成实际折现率,也就是剔除通胀后的回报率。

还有个实操细节:当 g 设定为 2% 到 3% 的“保守数值”时,要确认它是每股股利的名义永续增速,而不是公司盈利的短期增速。很多人把自己对公司未来 3 年的高增长预期直接塞进 g,模型立刻变成“击鼓传花”——前三年的高增长可以靠阶段性优势解释,但永续阶段的高增长没有任何宏观基础。

5.4 什么场景下该果断放弃 GGM

我踩过几次坑之后总结出三类不适合用 GGM 的情况:

  • 公司长期不分红或股利支付率极不稳定。A 股不少科技成长公司股利支付率长期为 0,GGM 估值结果是零,但公司显然有价值,这时候该改用自由现金流贴现。
  • 周期股处于盈利和股利的高峰或低谷。周期股在大宗商品价格高位时股利暴增,代入模型会得到天价估值;价格低位时股利趋零,估值又归零。周期股的正确估值工具是“穿越周期的平均盈利能力”,而不是某一期的股利。
  • 高增长公司进入稳定期之前的阶段。GGM 只能处理“永续稳定增长”,对“前 5 年高增长、之后回归稳态”的结构无能为力。这种情况需要两阶段或多阶段模型,至少把前一段高增长单独建模。

写在最后的一点体会

我自己刚开始用 GGM 时,一度把它当成“精确计算内在价值的机器”,结果每次估值和股价差异巨大,总怀疑公式哪里抄错了。后来才明白,GGM 这类模型的真正价值不在于算出一个“对的数字”,而在于逼你把参数假设摆到桌面上:你的增长率预期是多少,风险补偿要求是多少,两者之间的差值又是什么含义。只要参数是透明的,估值结果就算不正确,也足够让你清醒地看待股价背后的市场叙事。如果你第一次上手,建议找一家分红稳定、业务不复杂的消费类公司练手,算出估值区间后和真实股价对照,再反推隐含 g,那种“原来市场已经把未来十年都定价进去了”的感觉,远比任何理论公式都来得深刻。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询