27 October 2018

固定支付贷款

固定支付贷款(fixed-payment loan) 也称为分期偿还贷款(fully amortized loan)。 贷款人向借款人提供一定数量的资金,在约定的若干年度内,借款人每个期限偿还固定的金额,其中包括本金,也包括利息。 例如,你借款金额为1000元,每年偿还126元,还款年限为25年。 分期贷款与抵押贷款,如车贷、房贷,通常都属于这种类型。

固定支付贷款相关的几个变量为:

  • 贷款金额LV (loan value)
  • 贷款利率i (interest rate)
  • 贷款年限n
  • 每期还款金额FP (fixed-payment)

我们把每期偿还的金额FP折算成等价的现值,折现率等于贷款利率。然后令贷款金额等于它的现值便可得出以下公式:

假设你需要购买一栋房子,需要向银行贷款 10 万元贷款,从银行贷款的利率为 7%, 你想要在 20 年还完贷款,每年需要付多少钱呢?

我们把每期还款金额折现后求和,应该等于贷款金额,得出:

其中 n = 贷款年数 = 20, LV = 贷款金额 = 10万, i = 贷款利率 = 0.07

求解上述公式得出 FP = 每年还款金额 = 9439.29 元

等比公式

我们知道等比数列求和:

两边乘以公比q得:

上述两式相减得出:

所以,当 q 不等于 1 时,可得到:

公式化简

公式的右边是一个等比数列求和公式,我们令:

  • $\displaystyle a_1 = \frac{FP}{(1+i)^n}$
  • $q = 1 + i$

把等比求和带入折现公式中,得到以下结果:

一般情况下,我们根据贷款利率、贷款金额、贷款年限,求得每期还款金额。

下面我们使用python定义一个函数计算上述公式:

%matplotlib notebook
import numpy as np

def calc_pv(lv, i, n):
    '''
    计算固定支付贷款每期还款金额
    @lv : 贷款金额
    @i  : 贷款利率
    @n  : 贷款期数
    '''
    qn = np.power(1 + i, n)
    fp = qn * lv * i
    fp = fp / (qn - 1)
    return fp

# 按年付款
print("贷款10万, 利率0.07, 20年还清,每年需还款: %f 元" % calc_pv(100000, 0.07, 20))

# 按月付款
print('若按月还款的话,每月需还款 %f 元' % calc_pv(100000, 0.07/12, 20 * 12))
贷款10万, 利率0.07, 20年还清,每年需还款: 9439.292574 元
若按月还款的话,每月需还款 775.298936 元

按月付款

按月付款与按年付款的区别仅仅在于利率和还款期数的区别。

  • 月利率等于年利率除以12
  • 还款期数n等于年数乘以12。

我们房贷一般是按月还款,我们可以自己根据上述公式或者函数计算出每月还款金额。

当然,我们也可以使用招行个人贷款计算器计算每月还款金额,其结果跟我们计算的是一样的。

利率计算

当我们知道贷款金额,每月还款金额,贷款年数时,我们还可以通过公式计算出银行的贷款利率。

如果使用 python 的话,可以使用 numpy.irr 函数。

下面我们使用代码计算利率:

import numpy as np

def calc_irr(lv, fp, n):
    values = np.full(n + 1, fp)
    values[0] = -lv
    return np.irr(values)

print('如果贷款10万,每年还 9439.29 元,贷款20年,则贷款利率为: ', calc_irr(100000, 9439.29, 20))
如果贷款10万,每年还 9439.29 元,贷款20年,则贷款利率为:  0.06999996491048943

参考