公积金贷买房能省多少钱

 

我给自己定了一个将近 700 天的计划,这就是在上海买房定居。于是开启了研究购房政策、研究小区和板块、研究购房注意事项等一系列的调研和研究。我将这些笔记归档成文章,发表在公众号与大家分享。

今天距离购房还有 675 天。

这篇文章来讨论使用公积金贷款买房的最大化省钱空间。以下讨论均针对于上海市。因为公积金贷款比商业贷款利率低了近两个点,所以公积金贷款也是购房者的首选。下面我来较为全面的记录一下公积金贷款的所有细节问题。

使用公积金贷款的条件

  1. 购买上海市具有所有权的自住住房;
  2. 申请贷款前 6 个月连续正常缴存住房公积金;
  3. 借款人家庭没有尚未还清的公积金债务;

利率数据

首先先给出公积金贷款的贷款利率(以下表内加粗为一般大家所需要关注的数据):

贷款年限 首套房、二套房普通住宅(基准利率 - 2015.4.8 起开始执行) 二套房非普通住宅(1.1 倍利率)
五年以下(包含五年) 2.75% 3.025%
五年以上 3.25% 3.575%

最高贷款额度

这里不讨论非普通住宅。

  • 普通住宅:按所在地一般民用住宅建筑标准来建造的作为居住用途的房屋,目前多为多层住宅与高层住宅。
  • 非普通住宅:非普通住宅一般指宅建筑面积较大或用作商业用途的房子。
所购住房 首套房 首套房 二套房普通 二套房普通
贷款家庭 1 人贷款 ≥ 2 人贷款 1 人贷款 ≥ 2 人贷款
缴纳住房公积金最高可贷金额 50 万 100 万 50 万 100 万
缴纳补充公积金最高可贷金额 10 万 20 万 10 万 20 万
可贷金额总计 60 万 120 万 60 万 120 万
首付比列 ≤ 90 平米,不低于 20%; > 90 平米不低于 30% 同左 不低于 30\% 同左

这里面我们可以发现住房公积金和补充公积金是有个上限值,但是如何出自己的可贷公积金的数值呢?其实是有如下计算公式:假如我们另当前住房公积金账户余额是,补充公积金账户余额是,则最高可贷金额有如下关系:

\[\begin{cases} f(x, y)=40x+20y \\ 40x \leq 50 \times 10^{4} \\ 20y \leq 10 \times 10^{4} \end{cases}\]

通俗的翻译过来就是,公积金最高可贷金额 = 住房公积金余额 × 40 + 补充公积金余额 × 20。所以通过不等式反解我们可得,如果我们想最大的利用公积金,那么我们住房公积金最少需要有 12500 元的余额、补充公积金需要有 5000 块钱的余额,就满足了最高可贷金额的条件。

贷款年限和贷款人年龄限制

首先,如果是新建商品房,也就是房龄为 0 年的房子,最长贷款年限是 30 年。然后我们说二手房,它有以下规则:

房龄 最长贷款年限
≤ 5 年 30 年
6 - 19 年 35 年 - 房龄(假如是 10 年房龄,则最高可贷 25 年)
≥ 20 年 15 年

贷款算法

同商业贷款的算法相同,公积金贷款也分成等额本金和等额本息两种算法。考虑到更多的人愿意均摊风险以及银行希望获取到更高的利息收入,所以这里我均采用等额本息来计算还款总额

每月月供

\[月供额 = \frac{月利率 \times (1+月利率)^{还款月数}}{(1+月利率)^{还款月数} - 1} \times 贷款本金\]

其中月利率的计算方法:

\[月利率 = \frac{年利率}{12}\]

其他约束

除了我们上文提到的公积金余额对于贷款的约束,我们还要考虑房龄所带来的影响:

\[还款月数 = (35 - 房龄) \times 12\]

举例计算

以上就是我们要考虑的所有月数条件,那么我们来举一个例子来进行计算。假如我们现在要买一个 2010 年(房龄 10 年的二手房),总价是 400 万。使用了 35\% 的首付比例之后,我们需要贷款 260 万,最长贷款时间 25 年,也就是还款月数 300 个月

情况一:全部使用商业贷款

先要确定一下商业贷款的利息,我这里查阅了一下资料,由于上海的商贷金额往往较高,银行会对利息进行 95 折的优惠,从 4.9\% 的基准利率下调到 4.655\%。但今年国家出了 LPR 的利息策略,我们用当前 8 月份的 LPR 利息 4.65\% 来计算。首先来算月利率:

\[月利率 = \frac{4.65\%}{12} = 0.003875\]

然后我们来带入计算月供:

\[\begin{split} 月供额 &= \frac {0.003875 \times (1 + 0.003875)^{300}}{(1 + 0.003875)^{300} - 1} \times 2.6 \times 10^6 \\ &\approx 14673.899\ 元 \end{split}\] \[\begin{equation} \begin{split} 月供额 &= \frac {0.003875 \times (1 + 0.003875)^{300}}{(1 + 0.003875)^{300} - 1} \times 2.6 \times 10^6 \\ &\approx 14673.899\ 元 \end{split} \end{equation}\]

使用月供额来乘以 30 个月算出总还款:

\[总还款 = 30 * 14673.899 = 4402169.7\ 元\]

情况二:使用最大组合贷

由于公积金贷款只能贷 120 万,所以采用 120 万是公积金贷,利息是五年以上的 3.75\%。我们用当前 8 月份的 LPR 利息 4.65\% 当做商业贷款的利息,商业贷款 140 万

同上述计算法相同,带入公式。

① 公积金贷款

公积金贷款的月供:

\[公积金月供 \approx 6169.57 元\]

300 个月公积金总还款:

\[公积金总还款 = 1850871 \ 元\]

② 商业贷款

商业贷款月供:

\[商业贷款月供 \approx 7901.33\ 元\]

300 个月商贷总还款:

\[商贷总还款 = 2370399元\]

我们得到总还款数:

\[总还款 = 1850871 + 2370399 = 4221270 元\]

结果分析

从上面的计算结果来看,我们购买房龄为 10 年的二手房,加入总价为 400 万元,则选择组合贷可以节省 180900 元

数据分析

上面已经给出了等额本息的计算方法。所以接下来进行控制变量,我们让贷款年限映射到正实数区间,让其投影在 5 年与 30 年之间。保证贷款金额为 400 万。然后我们来计算纯商贷和使用组合贷的数据。蓝色线代表使用纯商贷模式,红色线代表使用组合贷模式。

由图一可以看出,还款年份数越多,其所需还款金额越多,也就意味着利息越高。而红(组合贷)与蓝(纯商贷)的差距也越来越大。并且由右图可知,当还款年份数越多,组合贷的优势愈加明显

总结

接下来我们来总结一下买房贷款的最大化利益策略:

  1. 所以贷款买房尽量可以使用公积金贷款。可贷最大公积金额度需要我们以及我们的配偶具有住房公积金余额 12500 元、补充公积金余额 5000 元。
  2. 根据最大贷款额原则(之后会讲到,结论是“首套房付最少的首付,用最大的杠杆贷最多的款,选择 30 年等额本息法,拒不提前还款”策略可达最大收益),当我们将还款时间设置为 30 年的上限阈值,在公积金贷款中也可以获得最大化的成本节约。当然,这就要求我们购买新房和房龄小的二手房。

如果你有任何问题以及更好的建议,可以在下方评论区留言

相关数据分析代码

以下代码由我个人编写,可在 Jupyter Notebook 环境下直接运行。

"""等额本息算法描述"""

import numpy as np
import math

# 等额本息算法
def averageCapitalPlusInterest(principal, anualInterestRate, month):
    """
    principal 表示贷款总额, anualInterestRate 表示年利率, month 表示房贷月份
    """
    # 计算每月应还款金额
    monthlyPayment = np.around(principal * averageCapitalPlusInterestRate(month, monthlyInterestRate(anualInterestRate)), 2)
    # 还款总额
    totalPayment = np.around(monthlyPayment * month, 2)
    return totalPayment

# 计算每月利率
def monthlyInterestRate(anualInterestRate):
    s = anualInterestRate / 12
    return s

# 计算比例系数
def averageCapitalPlusInterestRate(month, monthlyInterestRate):
    R = monthlyInterestRate
    N = month
    I = R * math.pow(1 + R, N) / (math.pow(1 + R, N) - 1)
    return I

"""贷款数据模拟"""
# 全商贷
r = 0.0465
ms = [12 * mi for mi in range(6, 31)]
t = 4000000
res = []

for m in ms:
    res.append(averageCapitalPlusInterest(t, r, m))
res = [np.around(x / 10000, 2) for x in res]

# 组合贷

r1 = 0.0465
r2 = 0.0375
t2 = 1200000
t1 = t - t2

rest = []

for m in ms:
    rest.append(averageCapitalPlusInterest(t1, r1, m) + averageCapitalPlusInterest(t2, r2, m))
rest = [np.around(x / 10000, 2) for x in rest]

"""做图"""

import matplotlib.pyplot as plt

year = [m // 12 for m in ms]

plt.subplot(221)
plt.plot(year, res)
plt.plot(year, rest, 'r')
plt.xlabel("Loan Time - Year")
plt.ylabel("Repayment Amount - RMB")

plt.subplot(222)
detal = []
for i in range(len(res)):
    detal.append(res[i] - rest[i])

rects = plt.bar(year, detal)
plt.xlabel("Loan Time - Year")
plt.ylabel("Savings - RMB")

for rect in rects:
    height = np.around(rect.get_height(), 1)
    plt.text(rect.get_x() + rect.get_width() / 2, height+1, str(height), ha="center", va="bottom")