这一讲要回答六个问题:

  1. 钱为什么有时间价值?复利和贴现是什么?
  2. 房贷的月供怎么算?债券的价格,为什么随利率反着动?
  3. 一个项目该不该做?净现值和内部收益率怎么用?
  4. 很远的未来,今天该折成多少?(有争议)
  5. 人,是按这个公式折现的吗?
  6. 折现率,是技术问题,还是价值判断?

这是 Unit 9(金融与不确定性)的开篇。前面,我们多次碰到"今天和明天":第 10 讲说,我们只看了"此时此刻",没有时间;第 13 讲和第 31 讲说,利率是资本的价格,“时间的价格"留到这一讲;第 19 讲的折现因子 δ,第 28 讲的"当代人和后代人之间的取舍”,第 29 讲读书的"现在花钱,将来收益",第 34 讲的债务和代际:它们都在等这一讲。

一、你中了奖

你中奖了。两个选择:今天拿 100 万元,或者一年后拿 110 万元。

先停一下:你选哪个?你要多少,才愿意等?

想一想:如果你今天拿到 100 万元,把它存起来,一年后,你有多少?这取决于利率。如果存款一年能赚 3%,今天的 100 万,一年后是 103 万,比 110 万少,那你应该等;如果你有一个投资,一年能赚 12%,今天的 100 万,一年后是 112 万,比 110 万多,那你应该拿今天的。一年后的 110 万,对应的是 10% 的年利率:你的"另一个选择",比它高,就拿今天的;比它低,就等。

这就是时间价值:钱有时间价值,因为今天的钱,可以用来做点什么(存起来、投资、花掉)。这一讲,我们把"不同时间的钱",放到同一个尺子上。

二、复利和贴现

2.1 终值和现值

  • 终值:今天的 PV,按年利率 r,存 n 年,会变成:FV = PV × (1 + r)^n。每年的利息,也会再生利息,这叫复利。
  • 现值:反过来,n 年后的 FV,今天值多少:PV = FV ÷ (1 + r)^n。这个"折成今天的价值"的过程,叫贴现(或折现),这里的 r,叫折现率。

2.2 钱为什么有时间价值

常见的三个理由(不互相排斥):

  1. 耐心:人们更看重今天(时间偏好)。晚拿钱,要多给一点补偿。
  2. 机会成本:今天的钱,可以投资,赚回报(第 1 讲的机会成本)。
  3. 通胀和风险:明天的钱,会因为通胀而变薄(第 31 讲);承诺的钱,可能收不回来(第 37 讲会讲风险)。

2.3 代码验证

import math

# 一、复利和贴现:钱有"时间价值"
def fv(pv, r, n): return pv * (1 + r) ** n            # 终值:今天的 pv,按年利率 r,存 n 年
def pv_of(fv_, r, n): return fv_ / (1 + r) ** n       # 现值:n 年后的 fv_,按年利率 r,折成今天

print("一、今天的 100 元,存 10 年、30 年、50 年(年利率 3%、5%、7%):")
for r in (0.03, 0.05, 0.07):
    print(f"  r = {r:.0%}:10 年 {fv(100, r, 10):7.2f},30 年 {fv(100, r, 30):8.2f},50 年 {fv(100, r, 50):9.2f}(30 年是本金的 {fv(1, r, 30):.2f} 倍)")

print("\n二、反过来:10 年后的 1000 元,今天值多少?")
for r in (0.02, 0.05, 0.08):
    print(f"  折现率 r = {r:.0%}:现值 {pv_of(1000, r, 10):7.2f}")

print("\n三、'72 法则':翻一番,大约要 72 ÷ (利率的百分数) 年。核对:")
for r in (0.02, 0.03, 0.06, 0.09, 0.12):
    exact = math.log(2) / math.log(1 + r)
    print(f"  r = {r:.0%}:精确 {exact:5.2f} 年,72 法则 {72 / (r * 100):5.2f} 年")

print("\n四、名义和实际:折现,要'配套'(第 31 讲:名义 ≈ 实际 + 通胀)")
r_real, infl = 0.02, 0.03
r_nom = (1 + r_real) * (1 + infl) - 1
real_flow = 100.0                                         # 每年 100 元的购买力(按今天的价格算)
pv_real = sum(real_flow / (1 + r_real) ** t for t in range(1, 11))
pv_nom = sum(real_flow * (1 + infl) ** t / (1 + r_nom) ** t for t in range(1, 11))   # 名义现金流:每年按通胀涨,用名义利率折现
bad = sum(real_flow / (1 + r_nom) ** t for t in range(1, 11))                         # 错误:用实际现金流,配了名义利率
print(f"  实际利率 {r_real:.0%},通胀 {infl:.0%},名义利率 {r_nom:.2%}")
print(f"  10 年,每年 100 元购买力:实际现金流 ÷ 实际利率 = {pv_real:.2f};名义现金流 ÷ 名义利率 = {pv_nom:.2f}(一样);配错了(实际现金流 ÷ 名义利率)= {bad:.2f}(低估了 {pv_real - bad:.1f})")

print("\n五、你中了奖:今天 100 万,还是一年后 110 万?隐含的利率是 10%:")
for alt in (0.03, 0.08, 0.12):
    print(f"  如果你把钱放到别处,一年能赚 {alt:.0%}:今天 100 万放一年 = {100 * (1 + alt):.0f} 万,{'小于' if 100 * (1 + alt) < 110 else '大于'} 110 万,{'等一年更好' if 100 * (1 + alt) < 110 else '拿今天的更好'}")

输出:

一、今天的 100 元,存 10 年、30 年、50 年(年利率 3%、5%、7%):
  r = 3%:10 年  134.39,30 年   242.73,50 年    438.39(30 年是本金的 2.43 倍)
  r = 5%:10 年  162.89,30 年   432.19,50 年   1146.74(30 年是本金的 4.32 倍)
  r = 7%:10 年  196.72,30 年   761.23,50 年   2945.70(30 年是本金的 7.61 倍)

二、反过来:10 年后的 1000 元,今天值多少?
  折现率 r = 2%:现值  820.35
  折现率 r = 5%:现值  613.91
  折现率 r = 8%:现值  463.19

三、'72 法则':翻一番,大约要 72 ÷ (利率的百分数) 年。核对:
  r = 2%:精确 35.00 年,72 法则 36.00 年
  r = 3%:精确 23.45 年,72 法则 24.00 年
  r = 6%:精确 11.90 年,72 法则 12.00 年
  r = 9%:精确  8.04 年,72 法则  8.00 年
  r = 12%:精确  6.12 年,72 法则  6.00 年

四、名义和实际:折现,要'配套'(第 31 讲:名义 ≈ 实际 + 通胀)
  实际利率 2%,通胀 3%,名义利率 5.06%
  10 年,每年 100 元购买力:实际现金流 ÷ 实际利率 = 898.26;名义现金流 ÷ 名义利率 = 898.26(一样);配错了(实际现金流 ÷ 名义利率)= 769.93(低估了 128.3)

五、你中了奖:今天 100 万,还是一年后 110 万?隐含的利率是 10%:
  如果你把钱放到别处,一年能赚 3%:今天 100 万放一年 = 103 万,小于 110 万,等一年更好
  如果你把钱放到别处,一年能赚 8%:今天 100 万放一年 = 108 万,小于 110 万,等一年更好
  如果你把钱放到别处,一年能赚 12%:今天 100 万放一年 = 112 万,大于 110 万,拿今天的更好

复利:利率差一点,时间一长,差得很多

逐段看:

  • 复利的威力:100 元,存 30 年:3%:242.73;5%:432.19;7%:761.23(7.6 倍)。利率只差 4 个百分点,30 年后,差了三倍多;50 年,7% 的 2945.70,是 3% 的 438.39 的 6.7 倍。
  • 反过来:10 年后的 1000 元,折现率 2%,今天值 820.35;5%,613.91;8%,463.19。
  • 72 法则:想知道钱翻一番要多久,用 72 除以利率的百分数。r = 6%:精确 11.90 年,72 法则 12.00 年;r = 2%:35.00 对 36.00。在 2% 到 12% 之间,误差很小。
  • 名义和实际,要配套(第 31 讲):实际利率 2%、通胀 3%,名义利率是 (1.02)(1.03) − 1 = 5.06%。10 年,每年 100 元的购买力:实际现金流 ÷ 实际利率,和名义现金流 ÷ 名义利率,现值一样,都是 898.26;配错了(实际现金流 ÷ 名义利率),是 769.93,低估了 128.3。
  • 你中奖的题:别处能赚 3% 或 8%,等一年更好;能赚 12%,拿今天的更好。

小结: 终值 = 现值 × (1 + r)^n。现值 = 终值 ÷ (1 + r)^n。折现率不是随便选的:名义现金流用名义利率,实际现金流用实际利率。

三、年金、房贷和债券

3.1 年金和房贷

每期固定的付款,叫年金。每期 c,共 n 期,每期的利率 r,现值是:

PV = c × [1 − (1 + r)^(−n)] ÷ r

房贷的等额本息:你借了 P,每月还一样的钱,共 n 个月:月供,就是让"所有月供的现值,等于借的钱 P"的那个 c。

3.2 永续年金

如果每期都付 c,永远付下去,现值就是 c ÷ r(把 n 趋于无穷)。比如,一套房子,每年的租金 5 万元,永远:折现率 2%,值 250 万;4%,125 万;8%,62.5 万。(所以,“房价和租金的比”,和利率密切相关:利率越低,同样的租金,对应的价格越高。)

3.3 债券

债券,是借钱的凭证:每年付利息(息票),到期还本(面值)。它的价格,是未来所有现金流的现值:

价格 = Σ 息票 ÷ (1 + y)^t + 面值 ÷ (1 + y)^n

y 是市场的收益率(折现率)。

# 二、年金、房贷、债券。先写三个函数。
def annuity_pv(c, r, n): return c * (1 - (1 + r) ** -n) / r        # 每期 c,共 n 期,每期利率 r:现值
def payment(P, r_annual, years):                                   # 等额本息:借 P,月利率 = 年利率 ÷ 12,共 12 × years 个月,每月还多少
    i = r_annual / 12; n = 12 * years
    return P * i / (1 - (1 + i) ** -n)
def bond_price(face, coupon, y, n):                                # 年付息一次的债券:面值 face,息票率 coupon,收益率 y,剩 n 年
    return sum(coupon * face / (1 + y) ** t for t in range(1, n + 1)) + face / (1 + y) ** n

print("一、借 100 万元买房,30 年,等额本息:年利率不同,月供和总利息不同")
for r in (0.03, 0.04, 0.0485, 0.06):
    p = payment(1_000_000, r, 30)
    print(f"  年利率 {r:.2%}:月供 {p:9.2f} 元,30 年共还 {p * 360:11,.0f} 元,其中利息 {p * 360 - 1_000_000:10,.0f} 元")
print("  (4.85%:第 31 讲里,2019 年 8 月首次公布的 5 年期以上 LPR;这里只是一个例子,不是现在的房贷利率)")
p4 = payment(1_000_000, 0.04, 30)
print(f"  验证:月供 {p4:.2f} 元,按月利率 4%÷12 折现 360 个月的现值,应当等于借款:{annuity_pv(p4, 0.04 / 12, 360):,.2f}")

print("\n二、永续年金:每年 c,永远。现值 = c ÷ r。每年 5 万元的租金,永远:")
for r in (0.02, 0.04, 0.08):
    print(f"  r = {r:.0%}:现值 {5 / r:6.1f} 万元")

print("\n三、债券:10 年期,息票 3%,面值 100:收益率变了,价格怎么变?")
for y in (0.02, 0.03, 0.04, 0.05, 0.06):
    print(f"  收益率 {y:.0%}:价格 {bond_price(100, 0.03, y, 10):6.2f}")
print("  利率上升,债券价格下降:收益率在 3% 附近,每涨 1 个百分点,价格约跌 8%(这和债券的'久期'有关:越长,越敏感)")

print("\n四、期限越长,对利率越敏感:同样是息票 3%,收益率从 3% 涨到 5%,价格跌多少?")
for n in (2, 5, 10, 30):
    p0, p1 = bond_price(100, 0.03, 0.03, n), bond_price(100, 0.03, 0.05, n)
    print(f"  剩 {n:>2} 年:{p0:6.2f} → {p1:6.2f}({(p1 / p0 - 1) * 100:+6.1f}%)")

print("\n五、一个真实的例子:美国 10 年期国债收益率(FRED:GS10):2020 年 8 月 0.65%,2023 年 10 月 4.80%")
p_buy = bond_price(100, 0.0065, 0.0065, 10)                         # 2020 年 8 月,息票 = 收益率,按面值买入
p_now = bond_price(100, 0.0065, 0.0480, 7)                          # 2023 年 10 月,约剩 7 年,收益率涨到 4.80%
print(f"  2020 年 8 月,按面值 {p_buy:.1f} 买入一只 10 年期、息票 0.65% 的债券;到 2023 年 10 月(剩约 7 年,收益率 4.80%),它的市场价格约 {p_now:.1f},账面损失约 {(1 - p_now / p_buy):.0%}")
print("  (简化:年付息一次,剩余期限取整数;真实国债半年付息;只为说明数量级。第 35 讲的硅谷银行:持有大量长期债券,利率升了,账面上就是这样亏的。)")

print("\n六、提前还房贷划算吗?(只是算术,不是建议)剩余本金 50 万元,20 年,年利率 4.5%;你手里有 10 万元闲钱")
rem = 500_000; r_loan = 0.045
m0 = payment(rem, r_loan, 20)
m1 = payment(rem - 100_000, r_loan, 20)                              # 提前还 10 万,期限不变,月供下降
saving = m0 - m1
print(f"  不提前还:月供 {m0:.2f} 元;提前还 10 万(期限不变):月供 {m1:.2f} 元,每月少付 {saving:.2f} 元,共 240 个月")
for alt in (0.01, 0.02, 0.03, 0.045, 0.06):
    pv = annuity_pv(saving, alt / 12, 240)
    print(f"  如果你的闲钱,放在别处,年收益 {alt:.1%}:每月少付的 {saving:.0f} 元,240 个月的现值 {pv:9,.0f} 元,{'刚好等于' if abs(pv - 100_000) < 1 else ('大于' if pv > 100_000 else '小于')} 10 万:{'两者一样' if abs(pv - 100_000) < 1 else ('提前还更划算' if pv > 100_000 else '留着钱更划算')}")
print("  临界点,正好是房贷利率(4.5%):提前还贷,等价于买了一个'收益率 = 房贷利率'的、几乎没有风险的债券。要比的,是你的闲钱,在别处,能稳稳地赚多少;还要看:钱以后,会不会有更急的用处(流动性)")

输出:

一、借 100 万元买房,30 年,等额本息:年利率不同,月供和总利息不同
  年利率 3.00%:月供   4216.04 元,30 年共还   1,517,775 元,其中利息    517,775 元
  年利率 4.00%:月供   4774.15 元,30 年共还   1,718,695 元,其中利息    718,695 元
  年利率 4.85%:月供   5276.92 元,30 年共还   1,899,691 元,其中利息    899,691 元
  年利率 6.00%:月供   5995.51 元,30 年共还   2,158,382 元,其中利息  1,158,382 元
  (4.85%:第 31 讲里,2019 年 8 月首次公布的 5 年期以上 LPR;这里只是一个例子,不是现在的房贷利率)
  验证:月供 4774.15 元,按月利率 4%÷12 折现 360 个月的现值,应当等于借款:1,000,000.00

二、永续年金:每年 c,永远。现值 = c ÷ r。每年 5 万元的租金,永远:
  r = 2%:现值  250.0 万元
  r = 4%:现值  125.0 万元
  r = 8%:现值   62.5 万元

三、债券:10 年期,息票 3%,面值 100:收益率变了,价格怎么变?
  收益率 2%:价格 108.98
  收益率 3%:价格 100.00
  收益率 4%:价格  91.89
  收益率 5%:价格  84.56
  收益率 6%:价格  77.92
  利率上升,债券价格下降:收益率在 3% 附近,每涨 1 个百分点,价格约跌 8%(这和债券的'久期'有关:越长,越敏感)

四、期限越长,对利率越敏感:同样是息票 3%,收益率从 3% 涨到 5%,价格跌多少?
  剩  2 年:100.00 →  96.28(  -3.7%)
  剩  5 年:100.00 →  91.34(  -8.7%)
  剩 10 年:100.00 →  84.56( -15.4%)
  剩 30 年:100.00 →  69.26( -30.7%)

五、一个真实的例子:美国 10 年期国债收益率(FRED:GS10):2020 年 8 月 0.65%,2023 年 10 月 4.80%
  2020 年 8 月,按面值 100.0 买入一只 10 年期、息票 0.65% 的债券;到 2023 年 10 月(剩约 7 年,收益率 4.80%),它的市场价格约 75.8,账面损失约 24%
  (简化:年付息一次,剩余期限取整数;真实国债半年付息;只为说明数量级。第 35 讲的硅谷银行:持有大量长期债券,利率升了,账面上就是这样亏的。)

六、提前还房贷划算吗?(只是算术,不是建议)剩余本金 50 万元,20 年,年利率 4.5%;你手里有 10 万元闲钱
  不提前还:月供 3163.25 元;提前还 10 万(期限不变):月供 2530.60 元,每月少付 632.65 元,共 240 个月
  如果你的闲钱,放在别处,年收益 1.0%:每月少付的 633 元,240 个月的现值   137,564 元,大于 10 万:提前还更划算
  如果你的闲钱,放在别处,年收益 2.0%:每月少付的 633 元,240 个月的现值   125,058 元,大于 10 万:提前还更划算
  如果你的闲钱,放在别处,年收益 3.0%:每月少付的 633 元,240 个月的现值   114,074 元,大于 10 万:提前还更划算
  如果你的闲钱,放在别处,年收益 4.5%:每月少付的 633 元,240 个月的现值   100,000 元,刚好等于 10 万:两者一样
  如果你的闲钱,放在别处,年收益 6.0%:每月少付的 633 元,240 个月的现值    88,306 元,小于 10 万:留着钱更划算
  临界点,正好是房贷利率(4.5%):提前还贷,等价于买了一个'收益率 = 房贷利率'的、几乎没有风险的债券。要比的,是你的闲钱,在别处,能稳稳地赚多少;还要看:钱以后,会不会有更急的用处(流动性)

利率上升,债券价格下跌;期限越长,跌得越多

逐段看:

  • 房贷:借 100 万,30 年:年利率 3%:月供 4216.04 元,共还 1,517,775 元,利息 517,775 元;4%:4774.15 元,利息 718,695 元;4.85%(2019 年 8 月,第 31 讲里,首次公布的 5 年期以上 LPR):月供 5276.92 元,利息 899,691 元;6%:月供 5995.51 元,利息 1,158,382 元。利率从 3% 升到 6%,月供多了 1779 元,总利息,多了一倍多。(验证:4% 的月供,按月利率折现 360 个月,现值恰好是 1,000,000。)
  • 债券,利率和价格反着动:10 年期、息票 3%:收益率 3%:价格 100;收益率升到 4%:91.89;5%:84.56;6%:77.92;降到 2%:108.98。收益率每涨 1 个百分点,价格约跌 8%。
  • 期限越长,越敏感:收益率从 3% 涨到 5%:剩 2 年的债券,跌 3.7%;5 年,8.7%;10 年,15.4%;30 年,30.7%。
  • 一个真实的例子:美国 10 年期国债收益率(FRED):2020 年 8 月 0.65%,2023 年 10 月 4.80%。如果,你在 2020 年 8 月,按面值买了一只 10 年期、息票 0.65% 的债券,到 2023 年 10 月(剩约 7 年),它的市场价格,约 75.8,账面损失约 24%。(我做了简化:年付息一次、剩余期限取整数;真实国债半年付息;只说明数量级。)第 35 讲的硅谷银行,持有大量长期债券,利率升了,账面上就是这样亏的。

3.4 提前还房贷划算吗

房贷,是中国很多家庭最大的一笔现金流。一个常见的问题:手里有一笔闲钱,该不该提前还一部分?这只是一个现值的算术(不是建议):每少还 1 元本金,未来每个月,少付的钱,折现后,是多少?这在代码最后一部分里算了:剩余本金 50 万元,20 年,年利率 4.5%,提前还 10 万元(期限不变),月供从 3163.25 元降到 2530.60 元,每月少付 632.65 元。这 240 个月少付的钱,折成现值:如果你的闲钱,放在别处,年收益 2%,是 125,058 元,比 10 万多;年收益 4.5%,刚好 10 万;年收益 6%,只有 88,306 元,比 10 万少。 临界点,正好是房贷利率:提前还贷,等价于买了一个收益率等于房贷利率的、几乎没有风险的债券。要比较的,是你的闲钱,在别处,能稳稳地赚多少;还要考虑,以后会不会有更急的用处(钱一旦还了,就拿不回来了,这是流动性的价值)。

3.5 利率是什么

现在,你可以回答第 13 讲和第 31 讲留下的问题了:利率,是"时间的价格":它让你把不同时间的钱,放在同一把尺子上。第 31 讲,说了它由什么决定(长期,储蓄和投资;短期,央行);这一讲,说了你怎么用它。

小结: 年金现值:c × [1 − (1 + r)^(−n)] ÷ r;永续年金:c ÷ r;债券价格:现金流的现值。利率上升,债券价格下降,期限越长,跌得越多。

四、净现值:该不该做这个项目

4.1 规则

一个项目:现在花成本,将来有收益。净现值(NPV):把所有的现金流,用折现率折成今天的价值,加起来:

NPV = Σ 第 t 年的现金流 ÷ (1 + r)^t

规则:NPV > 0,就值得做;NPV < 0,就不值得。 这和第 12、13 讲企业的投资决策,是同一个逻辑:多一台机器,带来的收入的现值,是不是大于它的价格。

内部收益率(IRR):使 NPV 刚好等于零的折现率。它的意思是:这个项目,“每年的回报率”,是多少。IRR 高于你的折现率,值得做。

4.2 读大学

第 29 讲说,教育的回报,全球平均,约每年 9%。读大学是一个项目:前几年,付学费,放弃工资(第 1 讲的机会成本);毕业后,很多年,多挣钱。下面的数字,是虚构的,量级参考第 29 讲:

# 三、净现值(NPV)和内部收益率(IRR):该不该做这个项目?
def npv(rate, flows):                                  # flows[t]:第 t 年的现金流(成本为负)
    return sum(cf / (1 + rate) ** t for t, cf in enumerate(flows))

def irr(flows, lo=-0.5, hi=1.0):                       # 使 NPV = 0 的折现率(二分法)
    for _ in range(200):
        mid = (lo + hi) / 2
        if npv(mid, flows) > 0: lo = mid
        else: hi = mid
    return (lo + hi) / 2

# 读大学(数字是虚构的,量级参考第 29 讲:每年 9% 左右的回报):
#   前 4 年,每年成本 8 万(学费 2 万 + 放弃的工资 6 万),第 0 到第 3 年;毕业后 40 年(第 4 到第 43 年),每年多挣 3.7 万。
college = [-8.0] * 4 + [3.7] * 40
print("一、读大学:每年成本 8 万,共 4 年;毕业后 40 年,每年多挣 3.7 万(都是虚构的数字)")
for r in (0.03, 0.05, 0.08, 0.10, 0.12):
    print(f"  折现率 {r:.0%}:净现值 {npv(r, college):7.2f} 万元")
print(f"  内部收益率 IRR = {irr(college):.2%}:折现率低于它,值得读;高于它,不值得")

print("\n二、两个项目,各投 100,只能选一个(互斥):")
A = [-100, 120]                                         # 1 年后 120:IRR 20%
B = [-100, 0, 0, 150]                                   # 3 年后 150:IRR 约 14.5%
for r in (0.03, 0.05, 0.10, 0.15):
    print(f"  折现率 {r:.0%}:NPV(A) = {npv(r, A):6.2f},NPV(B) = {npv(r, B):6.2f},{'选 A' if npv(r, A) > npv(r, B) else '选 B'}")
print(f"  IRR(A) = {irr(A):.1%},IRR(B) = {irr(B):.1%}:A 的 IRR 更高,但折现率低的时候,B 的 NPV 更大;要比的是 NPV,不是 IRR")

print("\n三、折现率的小变化,对'远期收益大'的项目影响更大:同一个读大学的项目,折现率 4%、6%、8% 的净现值")
for r in (0.04, 0.06, 0.08):
    print(f"  {r:.0%}:{npv(r, college):7.2f} 万元")

输出:

一、读大学:每年成本 8 万,共 4 年;毕业后 40 年,每年多挣 3.7 万(都是虚构的数字)
  折现率 3%:净现值   47.64 万元
  折现率 5%:净现值   25.06 万元
  折现率 8%:净现值    6.41 万元
  折现率 10%:净现值   -0.71 万元
  折现率 12%:净现值   -5.50 万元
  内部收益率 IRR = 9.76%:折现率低于它,值得读;高于它,不值得

二、两个项目,各投 100,只能选一个(互斥):
  折现率 3%:NPV(A) =  16.50,NPV(B) =  37.27,选 B
  折现率 5%:NPV(A) =  14.29,NPV(B) =  29.58,选 B
  折现率 10%:NPV(A) =   9.09,NPV(B) =  12.70,选 B
  折现率 15%:NPV(A) =   4.35,NPV(B) =  -1.37,选 A
  IRR(A) = 20.0%,IRR(B) = 14.5%:A 的 IRR 更高,但折现率低的时候,B 的 NPV 更大;要比的是 NPV,不是 IRR

三、折现率的小变化,对'远期收益大'的项目影响更大:同一个读大学的项目,折现率 4%、6%、8% 的净现值
  4%:  34.90 万元
  6%:  17.36 万元
  8%:   6.41 万元

读大学的净现值:折现率越高,越不值得

逐段看:

  • 读大学:每年成本 8 万(学费 2 万加放弃的工资 6 万),共 4 年;毕业后 40 年,每年多挣 3.7 万。折现率 3%:净现值 47.64 万元;5%:25.06;8%:6.41;10%:−0.71;12%:−5.50。IRR = 9.76%:折现率低于它,值得读;高于它,不值得。
  • 折现率的一点小变化,对"收益在遥远未来"的项目,影响更大:4%:34.90 万元;6%:17.36;8%:6.41。折现率翻一番,净现值,不到五分之一。
  • IRR 的局限:项目 A(花 100,1 年后得 120,IRR 20%),项目 B(花 100,3 年后得 150,IRR 14.5%),只能选一个。折现率 3% 或 5% 或 10% 时,B 的 NPV 更大;到了 15%,才轮到 A。IRR 更高的,不一定更好;要比的是 NPV。

小结: NPV:把现金流折现后加起来,大于零,就值得做。IRR:NPV 为零的折现率。折现率越高,越不看重遥远的未来。

五、一个有争议的问题:100 年后的损害,今天该折成多少

第 23 讲,我们说过:估计一吨碳的社会成本,最大的争议,是折现率。这一讲,我们来算一算。按"理论预测 → 证据与局限 → 分歧在哪 → 价值判断留给读者"来写。

理论预测什么:拉姆齐公式(Frank Ramsey 1928):社会折现率

r = ρ + η × g

  • ρ:纯时间偏好:仅仅因为"晚",就少算一点,这是一个伦理参数;
  • η:消费的边际效用的弹性:再多一块钱,对富人,没有对穷人那么重要;
  • g:人均消费的增长率:如果未来的人更富,他们多一块钱的价值,就比我们低。
import math

# 四、很远的未来,今天该折成多少?
# 拉姆齐公式(Frank Ramsey 1928):社会折现率 r = ρ + η × g
#   ρ:纯时间偏好(仅仅因为"晚",就少算一点:一个伦理参数);η:消费的边际效用的弹性(再多一块钱,对富人没有对穷人那么重要);g:人均消费的增长率。
print("一、不同的设定,折现率 r = ρ + η × g(g = 2%):数字是示意的")
sets = [("设定 1:ρ = 0.1%,η = 1(斯特恩报告用的 ρ 和 η)", 0.001, 1.0), ("设定 2:ρ = 0,η = 1", 0.0, 1.0),
        ("设定 3:ρ = 1%,η = 1.5", 0.01, 1.5), ("设定 4:ρ = 1.5%,η = 2(一组更高的设定,示意)", 0.015, 2.0)]
rates = []
for label, rho, eta in sets:
    r = rho + eta * 0.02
    rates.append(r)
    print(f"  {label}:r = {r:.2%}")

print("\n二、100 年后的 1 亿元损害,今天值多少?(现值,单位:万元)")
for T in (50, 100, 200):
    print(f"  {T:>3} 年后:" + ";".join(f"r={r:.1%}:{10000 / (1 + r) ** T:8.1f}" for r in rates))
print("  差别巨大:r = 2.1%,100 年后的 1 亿元,今天值约 1250 万;r = 5.5%,只值约 47 万,差 27 倍")

print("\n三、折现率不确定时,远期的'确定性等价折现率'会下降(Weitzman 的想法):一半的可能性 r = 1%,一半的可能性 r = 5%")
for T in (1, 10, 50, 100, 300):
    expected_pv = 0.5 / 1.01 ** T + 0.5 / 1.05 ** T
    ce = expected_pv ** (-1 / T) - 1
    print(f"  T = {T:>3} 年:现值的平均 {expected_pv:8.5f};对应的等价折现率 {ce:6.2%}(折现率的平均是 3.00%)")
print("  远期的现值,主要被那个'低的折现率'决定:因为 5% 的那种情形,100 年后几乎什么都不剩了,1% 的情形,还剩 37%")

print("\n四、从市场上,能'看到'很长期的折现率吗?英国和新加坡的房子,有 99 到 999 年的租赁产权,也有永久产权。")
print("  最简化的想法:如果租金不变,永久产权比 T 年租约,多出的价值,是 T 年之后的永续租金的现值,占比 = 1 ÷ (1 + r)^T:")
for r in (0.01, 0.02, 0.03, 0.05):
    print(f"  r = {r:.0%}:100 年租约,比永久产权便宜 {1 / (1 + r) ** 100:6.1%}")
print("  论文用更细的办法,得到:100 年租约比永久产权便宜 10% 以上,隐含 100 年以上的折现率,低于约 2.6%(是一个上限,不是点估计);上面的简化版,只用来看方向")

输出:

一、不同的设定,折现率 r = ρ + η × g(g = 2%):数字是示意的
  设定 1:ρ = 0.1%,η = 1(斯特恩报告用的 ρ 和 η):r = 2.10%
  设定 2:ρ = 0,η = 1:r = 2.00%
  设定 3:ρ = 1%,η = 1.5:r = 4.00%
  设定 4:ρ = 1.5%,η = 2(一组更高的设定,示意):r = 5.50%

二、100 年后的 1 亿元损害,今天值多少?(现值,单位:万元)
   50 年后:r=2.1%:  3537.6;r=2.0%:  3715.3;r=4.0%:  1407.1;r=5.5%:   687.7
  100 年后:r=2.1%:  1251.5;r=2.0%:  1380.3;r=4.0%:   198.0;r=5.5%:    47.3
  200 年后:r=2.1%:   156.6;r=2.0%:   190.5;r=4.0%:     3.9;r=5.5%:     0.2
  差别巨大:r = 2.1%,100 年后的 1 亿元,今天值约 1250 万;r = 5.5%,只值约 47 万,差 27 倍

三、折现率不确定时,远期的'确定性等价折现率'会下降(Weitzman 的想法):一半的可能性 r = 1%,一半的可能性 r = 5%
  T =   1 年:现值的平均  0.97124;对应的等价折现率  2.96%(折现率的平均是 3.00%)
  T =  10 年:现值的平均  0.75960;对应的等价折现率  2.79%(折现率的平均是 3.00%)
  T =  50 年:现值的平均  0.34762;对应的等价折现率  2.14%(折现率的平均是 3.00%)
  T = 100 年:现值的平均  0.18866;对应的等价折现率  1.68%(折现率的平均是 3.00%)
  T = 300 年:现值的平均  0.02527;对应的等价折现率  1.23%(折现率的平均是 3.00%)
  远期的现值,主要被那个'低的折现率'决定:因为 5% 的那种情形,100 年后几乎什么都不剩了,1% 的情形,还剩 37%

四、从市场上,能'看到'很长期的折现率吗?英国和新加坡的房子,有 99 到 999 年的租赁产权,也有永久产权。
  最简化的想法:如果租金不变,永久产权比 T 年租约,多出的价值,是 T 年之后的永续租金的现值,占比 = 1 ÷ (1 + r)^T:
  r = 1%:100 年租约,比永久产权便宜  37.0%
  r = 2%:100 年租约,比永久产权便宜  13.8%
  r = 3%:100 年租约,比永久产权便宜   5.2%
  r = 5%:100 年租约,比永久产权便宜   0.8%
  论文用更细的办法,得到:100 年租约比永久产权便宜 10% 以上,隐含 100 年以上的折现率,低于约 2.6%(是一个上限,不是点估计);上面的简化版,只用来看方向

折现率不确定时,越远的未来,折得越少

逐段看:

  • 第一部分:斯特恩报告(2006)用的 ρ = 0.1%、η = 1(据文献),如果 g = 2%,r = 2.1%。如果取一组更高的设定(ρ = 1.5%,η = 2,示意),r = 5.5%。
  • 第二部分:100 年后的 1 亿元损害,今天值多少?r = 2.1%:约 1251 万;r = 5.5%:约 47 万:差 27 倍。200 年后:r = 2.1%,156.6 万;r = 5.5%,只有 0.2 万。折现率,在这个问题里,几乎决定了答案。
  • 第三部分(Weitzman 的想法):如果我们不确定,该用哪个折现率(一半的可能性是 1%,一半是 5%),远期的"等价折现率",会随着期限变长而下降:T = 10 年,2.79%;50 年,2.14%;100 年,1.68%;300 年,1.23%(折现率的平均,是 3%)。原因:5% 的那种情形,100 年后,几乎什么都不剩(0.8%),而 1% 的那种情形,还剩 37%,远期的现值,几乎由低的折现率决定。
  • 第四部分(从市场上,看很长期的折现率):这里有一个很巧的"自然实验"。在英国和新加坡,有的房子,是永久产权,有的,是 99 到 999 年的租赁产权。如果租金不变,租约 T 年的房子,比永久产权便宜的比例,是 1 ÷ (1 + r)^T:r = 1% 时,100 年的租约,便宜 37.0%;r = 2%,13.8%;r = 3%,5.2%;r = 5%,0.8%。Stefano Giglio、Matteo Maggiori 和 Johannes Stroebel 2015 年(Quarterly Journal of Economics,130 卷 1 期)用真实的数据,发现:100 年的租约,比永久产权便宜 10% 以上,隐含 100 年以上的折现率,低于约 2.6%(据摘要,是上限,不是点估计)。(上面的简化版,只看方向。)

证据怎么说:

  • Stern 一方:《斯特恩报告》用 ρ = 0.1% 和 η = 1,得到较低的折现率,结论是应该尽早、大力行动。
  • William Nordhaus 2007 年(Journal of Economic Literature,45 卷 3 期)批评:报告的结论,决定性地取决于一个接近零的折现率;用和今天市场相一致的折现率,结论就不成立。
  • Martin Weitzman 2007 年(同一期 JEL,703–724 页)对报告的折现,也有质疑,但是出发点不同:我们对该用哪个利率,其实不确定,比通常承认的更不确定;而且,这个问题,也许不该主要理解为"平滑消费",更应该理解为,为灾难性的风险,买多少保险。(据对他论文的概述。)Weitzman 2001 年(American Economic Review,91 卷 1 期)的"伽马折现",是上面第三部分的思想来源:折现率的不确定,让远期的折现,更低。(这个结果,也有后来的批评,认为模型里期望现值的定义有问题,据一篇后来的论文;我没有逐项核对。)
  • 市场证据:Giglio 等人(上面第四部分):市场上,人们对很长期的收益,用的折现率,似乎不高。

局限:(1)折现率,不是一个可以"测"出来的数;市场利率,是短期的、有风险的。(2)g 是对未来的预测,本身不确定,也可能有负增长(气候损害,可能让未来的人,更穷)。(3)上面用的 ρ、η,是示意的参数。

分歧在哪:

  • 事实上的分歧:未来的人均消费会增长多少;折现率,用市场的,还是用社会的;不确定性,该怎么处理。
  • 价值上的分歧:ρ 是一个伦理的选择:Stern 一方认为,对不同世代的福利,不该仅仅因为时间不同,而区别对待(ρ 接近零);反对的一方认为,要和人们实际的选择(市场利率、储蓄)一致。

价值判断(留给你):

  1. 100 年后的一个人的福利,和今天的一个人,一样重吗? 你愿意给 ρ 取多少?
  2. 灾难性的、小概率的损害,要不要,更重地对待(保险的视角)?
  3. 债务和代际(第 34 讲):今天借钱,让后代还,这和气候,是不是一个问题的两面:你对"未来的人",有什么责任?

经济学能告诉你:每一个折现率,对应什么样的现值;ρ 该取多少,是你的价值判断。

小结: 社会折现率 r = ρ + η × g。100 年后的 1 亿元,r = 2.1% 时,今天值 1251 万;r = 5.5% 时,值 47 万。折现率不确定,远期的等价折现率,会下降。ρ 是个伦理参数。

六、人是这样折现的吗

6.1 指数折现 vs 现在偏向

上面所有的计算,用的是指数折现:每晚一期,权重乘一个固定的 δ(δ = 1 ÷ (1 + r))。它有一个特点:选择是一致的:你今天,计划"下个月,等一个月,拿 110,而不是 100",到了下个月,你还是这么选。

可是,在日常观察和不少实验里,人们常常表现出另一种模式(证据,第 39 讲会讲;这里,先看这个模式是什么):

  • 今天,在"现在拿 100"和"一个月后拿 110"之间,很多人,选现在拿 100;
  • 可是,一年后,在"那时拿 100"和"那时再等一个月拿 110"之间,同样的人,会选等一个月。

两个选择,只差"离现在多远",答案变了。 这叫现在偏向(present bias)。经济学家用 β–δ 折现来描述:现在,权重 1;任何未来的时刻,先乘一个 β(β < 1),再乘 δ^t。David Laibson 1997 年(《金蛋与双曲折现》,Quarterly Journal of Economics,112 卷 2 期)用它,研究了,这样的人,怎样存钱:他们的偏好,是时间不一致的,所以,他们有动机,约束自己未来的选择(承诺)。

# 五、人是这样折现的吗?指数折现 vs 现在偏向(β–δ 折现,Laibson 1997 年用它来描述"现在偏向")
#   指数折现:一期之后,权重 δ;两期之后,δ²……(每一步,都是同样的比例)
#   β–δ 折现:现在,权重 1;任何未来的时刻,先乘 β(β < 1,现在偏向),再乘 δ^t。
def weight_exp(t, delta): return delta ** t
def weight_bd(t, beta, delta): return 1.0 if t == 0 else beta * delta ** t

delta, beta = 0.95, 0.7                              # 每月的 δ,和现在偏向 β(玩具参数)
small, big = 100.0, 110.0                            # 早一个月拿 100,还是晚一个月拿 110(共差一个月)

def choose(T, weight):
    """T 个月之后,可以选'早'(T 月拿 100)或'晚'(T+1 月拿 110)。返回两个选项,现在看起来的价值"""
    return small * weight(T), big * weight(T + 1)

print("现在(站在 0 月)看:几个月之后,在'那时拿 100'和'再晚一个月拿 110'之间选,你选哪个?")
print(f"  δ = {delta}(每月折现),β = {beta}(现在偏向):")
for T in (0, 1, 3, 6, 12):
    ea, el = choose(T, lambda t: weight_exp(t, delta))
    ba, bl = choose(T, lambda t: weight_bd(t, beta, delta))
    print(f"  这笔交易,离现在 {T:>2} 个月:指数折现:{'等一个月(110)' if el > ea else '拿早的(100)'};β–δ:{'等一个月(110)' if bl > ba else '拿早的(100)'}(早 {ba:6.2f},晚 {bl:6.2f})")
print("\n指数折现的人,选择是'一致'的:不管离现在多远,答案一样。β–δ 的人,现在计划'将来等一个月',等到那个时候,却会改主意'拿早的':")
print("  计划(站在 0 月,看第 6 个月的选择):早 =", f"{choose(6, lambda t: weight_bd(t, beta, delta))[0]:.2f},晚 = {choose(6, lambda t: weight_bd(t, beta, delta))[1]:.2f}(选晚的)")
print("  真到了第 6 个月(那时的'现在'),重新看:早 = 100.00 × 1 = 100.00,晚 = 110 × β × δ = ", f"{big * beta * delta:.2f}", "→ 选早的")
print("  这就是'时间不一致':计划和行动不一致,所以,人们会想要'承诺'(比如,自动扣款的储蓄计划):第 39 讲会讲证据")

输出:

现在(站在 0 月)看:几个月之后,在'那时拿 100'和'再晚一个月拿 110'之间选,你选哪个?
  δ = 0.95(每月折现),β = 0.7(现在偏向):
  这笔交易,离现在  0 个月:指数折现:等一个月(110);β–δ:拿早的(100)(早 100.00,晚  73.15)
  这笔交易,离现在  1 个月:指数折现:等一个月(110);β–δ:等一个月(110)(早  66.50,晚  69.49)
  这笔交易,离现在  3 个月:指数折现:等一个月(110);β–δ:等一个月(110)(早  60.02,晚  62.72)
  这笔交易,离现在  6 个月:指数折现:等一个月(110);β–δ:等一个月(110)(早  51.46,晚  53.77)
  这笔交易,离现在 12 个月:指数折现:等一个月(110);β–δ:等一个月(110)(早  37.83,晚  39.53)

指数折现的人,选择是'一致'的:不管离现在多远,答案一样。β–δ 的人,现在计划'将来等一个月',等到那个时候,却会改主意'拿早的':
  计划(站在 0 月,看第 6 个月的选择):早 = 51.46,晚 = 53.77(选晚的)
  真到了第 6 个月(那时的'现在'),重新看:早 = 100.00 × 1 = 100.00,晚 = 110 × β × δ =  73.15 → 选早的
  这就是'时间不一致':计划和行动不一致,所以,人们会想要'承诺'(比如,自动扣款的储蓄计划):第 39 讲会讲证据

现在偏向:远处看,“等"更好;到了跟前,“拿现在的"更好

逐段看:

  • 指数折现的人(δ = 0.95):不管这笔交易,离现在多远,都选"等一个月,拿 110”:110 × 0.95 = 104.5 > 100。选择,始终一致。
  • β–δ 的人(β = 0.7,δ = 0.95):这笔交易,离现在 1 个月、3 个月、6 个月,他都选"等一个月拿 110”(66.50 对 69.49,等等);可是,到了那个"现在"(T = 0):早的,是 100;晚的,是 110 × 0.7 × 0.95 = 73.15,他改主意,拿早的 100。
  • 计划和行动不一致:站在 0 月,看第 6 个月的选择,他的计划,是等(53.77 > 51.46);真到了第 6 个月,他拿早的。这就是为什么,人们要"承诺":比如,自动扣款的储蓄计划,提前预约,让"将来的我",没有改主意的机会。
  • 证据:这一讲,只演示机制;人们在真实的实验和数据里,是不是真的这样,证据,第 39 讲会讲。

6.2 为什么这很重要

  • 储蓄不足:如果人们是现在偏向的,会"明天再开始存钱";
  • 对政策的含义:如果人们的偏好,本身是时间不一致的,那么,哪一个"我"的福利,该算数?是今天想花钱的"我",还是明天想后悔的"我"?
  • 价值判断(留给你):政府或者雇主,该不该帮助人们"强制"储蓄,或者设"默认选项"?这是在保护人们,免受自己的伤害,还是在替人们做决定?这个问题,是一个价值判断,经济学能告诉你的,是各种安排的后果,不是该不该。

七、局限、常见误用

7.1 局限

  • 折现率的选择,是关键,也是争议:同一个项目,用 4% 还是 8%,结论可能相反。
  • 现金流,是预测出来的:NPV,只和输入一样可靠。
  • 玩具数字:读大学的现金流、债券的例子,是虚构或简化的。
  • 这一讲没有讲:风险(第 37 讲)、股票估值(第 38 讲)、人在真实世界的折现(第 39 讲)。

7.2 常见的误用

误用 正确的想法
“今天的 100 元和明天的 100 元一样” 有时间价值:折现率 r,今天的 100 元,n 年后是 100 × (1 + r)^n
“名义现金流,用实际利率折现” 要配套:名义配名义,实际配实际
“IRR 最高的项目,最好” 互斥项目,要比 NPV
“利率上升,债券的收益就更高了,是好事” 对已经持有的债券,价格下降;期限越长,跌得越多
“折现率是一个客观的数” 它是一个选择,在长期问题上,是一个伦理的选择
“房贷利率低一点,没什么差别” 30 年的月供和总利息,差别很大(3% 对 6%,总利息差一倍多)
“人是指数折现的,所以,计划都会执行” 现在偏向的人,会改主意;所以才需要承诺
“远期的损害,折现之后就可以忽略” 取决于折现率;r = 2.1% 和 5.5%,差 27 倍

八、小结

这一讲有六个想法,请带走:

  1. 时间价值:FV = PV × (1 + r)^n;PV = FV ÷ (1 + r)^n。名义现金流用名义利率,实际现金流用实际利率。
  2. 年金、房贷、债券:都是现金流的现值;利率上升,债券价格下降,期限越长,跌得越多(30 年债券,收益率从 3% 到 5%,跌 30.7%)。
  3. NPV:现金流折现后加起来,大于零,就值得做;IRR 是使 NPV 为零的折现率;互斥项目,比 NPV。
  4. 很长期的折现率:r = ρ + η × g;100 年后的 1 亿元,r = 2.1% 时值 1251 万,r = 5.5% 时值 47 万;折现率不确定时,远期的等价折现率下降;ρ 是伦理参数。
  5. 现在偏向:β–δ 折现的人,计划和行动不一致;这是需要"承诺"的原因。
  6. 折现率,是技术,也是价值判断。

下一讲,我们在"时间"之外,加上"不确定性":风险是什么?保险为什么存在?分散化为什么是"唯一的免费午餐"? 下一讲:第 37 讲:风险、保险与分散。

思考题

1. 一份保险,每年付 1 万元,共 20 年,折现率 4%。这些付款的现值是多少?

提示:年金现值:1 × [1 − 1.04^(−20)] ÷ 0.04 ≈ 13.59 万元(比简单加起来的 20 万元少,因为后面的钱,折现了)。

2. 借 80 万元,20 年,年利率 5%,等额本息。月供是多少?总利息是多少?

提示:月利率 0.05 ÷ 12,共 240 个月:月供 ≈ 5279.65 元;总还款 ≈ 1,267,115 元,利息 ≈ 467,115 元。

3. 一只息票 3%、剩 10 年的债券,收益率从 3% 涨到 4%,价格变化多少?

提示:价格从 100 降到 91.89,变化 −8.1%(代码 B 的第三部分)。

4. 一个项目:第 0 年花 100,第 1、2、3 年,分别得到 40、50、60。折现率 8%,NPV 是多少?值得做吗?IRR 大约是多少?

提示:NPV = −100 + 40 ÷ 1.08 + 50 ÷ 1.08² + 60 ÷ 1.08³ ≈ −100 + 37.04 + 42.87 + 47.63 ≈ 27.5,大于零,值得做。IRR(使 NPV = 0)约 21.6%。折现率低于 21.6%,都值得做。

5. β–δ 折现:β = 0.8,δ = 0.97(每月)。“早一个月拿 100,还是晚一个月拿 105”:(a)就是现在做选择;(b)离现在 3 个月后的那笔交易。分别怎么选?这说明什么?

提示:(a)早:100;晚:105 × 0.8 × 0.97 ≈ 81.5:拿早的。(b)早:100 × 0.8 × 0.97³ ≈ 73.0;晚:105 × 0.8 × 0.97⁴ ≈ 74.4:等一个月。同样的两个选项,只因为离现在的远近不同,选择变了:时间不一致。三个月后,真的到了那个时候,他会"改主意",拿早的。

参考与延伸

  • Ramsey, F. P. (1928). A Mathematical Theory of Saving. Economic Journal, 38.
  • Stern, N. (2006). The Economics of Climate Change: The Stern Review. Cambridge University Press.
  • Nordhaus, W. D. (2007). A Review of the Stern Review on the Economics of Climate Change. Journal of Economic Literature, 45(3), 686–.
  • Weitzman, M. L. (2007). A Review of the Stern Review on the Economics of Climate Change. Journal of Economic Literature, 45(3), 703–724.
  • Weitzman, M. L. (2001). Gamma Discounting. American Economic Review, 91(1), 260–271.
  • Giglio, S., Maggiori, M., & Stroebel, J. (2015). Very Long-Run Discount Rates. Quarterly Journal of Economics, 130(1), 1–53.
  • Laibson, D. (1997). Golden Eggs and Hyperbolic Discounting. Quarterly Journal of Economics, 112(2), 443–.
  • 美联储圣路易斯分行 FRED 数据库:GS10(美国 10 年期国债收益率,2026 年 10 月下载)。
  • 中国人民银行:2019 年 8 月 LPR 改革后首次公布的 LPR(据报道,见第 31 讲)。