张春成
2022/09/20阅读:30主题:默认主题
科学还贷
科学还贷
本文是对提前还贷是否合算的科学计算。
我首先假设了绝对公平的比较方法,比较了提前还贷与否,在 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.00, 300, 1.73, '730,000.00', 5787.79, 0.00))
words.append(('等额本金', 1.00, 300, 1.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))
作者介绍