张春成

V2

2022/09/20阅读:17主题:默认主题

科学还贷

科学还贷

本文是对提前还贷是否合算的科学计算。

我首先假设了绝对公平的比较方法,比较了提前还贷与否,在 25 年后造成的盈亏。如果你选择按月还款,你需要向银行支付 88 或 76 万元;如果你选择提前还款,你需要向银行支付 33 或 29 万元。

之后,对有些不尽人情的假设进行修正,因为没有人会为了不存在的月供利息压力,而把钱按月放在银行里存着。这样算下来,如果按当期来说,提前还款只能省下 5 到 6 万元,因为明天的钱没有今天值钱。


基本设定

房贷嘛,无非两种玩法,欠钱跑路或老实还钱,老实还钱还有两种玩法,那就是“等额本息”和“等额本息”,比如你找银行借 100 万元,利息是 4.9%,贷款周期是 25 年(300 个月),那么根据还款方式约定的不同,本息总合和还款情况如下表所示

房贷还款表
房贷还款表

房贷还款表

既然银行借给你钱,本着九出十三归的原则,他一定会找你要利息。如果你看着利息比较多,那么会不会有那么一种冲动,那就是提前把钱还了,就可以节省不少利息。

接下来的问题,就是提前还贷到底能省多少钱?这个问题其实很难有标签答案,但我们可以开始一个思想实验,比较“提前还钱”和“按月还钱”之间的异同。

既然是实验,就要规定实验条件,我们做如下规定:

  • 不考虑人是否能活得下去,所有和房贷有关的钱,要么存起来,要么还掉;
  • 存起来的钱要从存的时间算起,到贷款终止的时候才能取出(不管贷款是否已经提前还清);
  • 存钱的利息按年利率 2.5% 计算。

在这样的条件下,我们无非有两种选择,一是直接还清贷款,每个月的月供用于储蓄;二是直接将本金数量的钱进行储蓄,按月还款。

由于有了利息的存在,我们虽然向银行借了 100 万元,但实际支付的数额会小于这个数字。如果嫌下面太长不想看的话,我分析的结果是:如果你选择按月还款,你需要向银行支付 88 或 76 万元;如果你选择提前还款,你需要向银行支付 33 或 29 万元。

按月还款

如果选择按月还款,那么这个系统的输入和输出其实很简单

  • 输出:即从你的口袋进入银行的钱,包括你存入银行的 100 万元,以及贷款的全部本息
  • 输入:即 25 年后,你从银行取出的 100 万元及其利息

因此,输入值取决于你选择的还款方式,为 273 万元或 261 万元,输出值为固定的 185 万元(100 万元存 25 年的本息)。那么,我们把系统当作黑箱来看,它需要你付出 88 万元 或 76 万元。

按月还款
按月还款

按月还款

提前还款

如果选择提前还款,那么在 25 年中的每个月,你需要将月供存入银行,等 25 年期限到了再一次性取出,分两种情况讨论:

  • 在“等额本息”的条件下,每个月 5787 元的月供存入银行,它在 25 年后能产生的本息为 240 万元,这是你的输入。直接还款的 100 万元,再加上按月存入银行的 173 万元是你的输出。因此,它需要你付出 33 万元
  • 在“等额本金”的条件下,每个月的月供存入银行,它从 7416 元逐步降低到 3347 元,它在 25 年后能产生的本息为 232 万元,这是你的输入。直接还款的 100 万元,再加上按月存入银行的 161 万元是你的输出。因此,它需要你付出 29 万元
提前还款
提前还款

提前还款

当期折算

事实上,刚才的假设有些不尽人情,因为没有人会为了不存在的月供利息压力,而把钱按月放在银行里存着。

因此,我们不再考虑 25 年后的事情,而是通过 LPR 指标,将远期要还的钱,折算到当期,采用目前的 五年期 LPR = 4.30%,可得

  • 采用”等额本息“方案,月供折算到当期的金额是 106.66 万元;
  • 采用”等额本金“方案,月供折算到当期的金额是 105.79 万元。

也就是说,如果按当期来说,提前还款只能省下 5 到 6 万元,因为明天的钱没有今天值钱。

计算代码

# %%
import numpy as np
import pandas as pd

# %%
words = []
words.append(('等额本息'1.003001.73'730,000.00'5787.790.00))
words.append(('等额本金'1.003001.61'610,000.00'7416.67-13.61))
df = pd.DataFrame(words)
df.columns = [[''] + ['total (million)'] * 3 + ['payback(yuan)'] * 3,
              [
                  'mode',
                  'borrow''peroid(month)''total',
                  'interest''permonth''decay'
              ]]
df

# %%
# Save 100 million in the bank,
# Payback monthly.

output = 1.61e6 + 1e6
rate = 0.025
income = 1e6 * (1+rate) ** 25
print(output, income, income-output)

# %%
# Payback 100 million at once,
# Save monthly.

# Compute balance of 等额本息

rate = 0.025 / 12
rp = 5787.79
rps = np.zeros(300) + rp
output = 1e6 + np.sum(rps)
times = np.array(range(300))
lst = rps * (1+rate) ** np.array(times)
income = np.sum(lst)
print(output, income, income - output)

# Compute balance of 等额本金

rate = 0.025 / 12
rp = 7416.67
decay = 13.61
times = np.array(range(300))
rps = np.array(np.linspace(rp-decay*299, rp, 300, endpoint=True))
output = 1e6 + np.sum(rps)
lst = rps * (1+rate) ** np.array(times)
income = np.sum(lst)
print(output, income, income - output, np.min(lst))

# %%
# How much does it worth today, the money in tomorrow?
# Compute balance of 等额本息

lpr = 0.043
rate = lpr / 1
rp = 5787.79
rps = np.zeros(300) + rp
times = np.array(range(300))
lst = rps * (1+rate) ** (-np.array(times))
print(np.sum(lst))

# %%
# Compute balance of 等额本金

lpr = 0.043
rate = lpr / 12
rp = 7416.67
times = np.array(range(300))[::-1]
rps = np.array(np.linspace(rp-decay*299, rp, 300, endpoint=True))
lst = rps * (1+rate) ** (-np.array(times))
print(np.sum(lst))

分类:

后端

标签:

后端

作者介绍

张春成
V2