网站首页 企业新闻 > 正文
本文分享自华为云社区《房贷计算器-从原理、计算到提前还款和可视化-云社区-华为云》,作者: 蜉蝣与海 。
摘要:最近各地楼市震荡不断,不少银行纷纷降息,随后更是引发了一波提前还款的大潮。通过楼市小程序上贷款计算器等工具人们可以很容易的了解每期还款本金、不同还款方式的利息差异、提前还款节省利息等问题。了解这些工具的计算原理,可以做到心中有数,临危不慌。本文已发布至华为云生态社区AI Gallery,文中涉及所有代码可以直接通过页面进入云上Code Lab运行,欢迎开发者前往体验。
前言
最近各地楼市震荡不断,2022年12月份以来不少银行纷纷降息,随后更是引发了一波提前还款的大潮。不少地区楼市相关的微信小程序也自带了贷款计算器、提前还款计算器等工具,通过这些工具人们可以很容易的了解每期还款本金、等额本金/本息的利息差异、提前还款节省利息的问题。
了解这些计算工具的相关原理,可以做到心中有数,临危不慌。
注
:
本文对应代码和脚本发布至华为云生态社区AI Gallery:贷款计算器-从原理、公式到提前还款和可视化→AI Gallery_Notebook详情_开发者_华为云,欢迎开发者前往体验,文中涉及所有代码可以直接通过页面进入Model Arts Code Lab运行。使用该脚本稍加修改后即可尝试开发一个适合自身地区政策的贷款计算&提前还款小程序。
本文只是研究贷款生成、提前还贷方面的相关计算原理,不构成任何投资理财方面的建议。
先来看个使用工具计算提前还款的效果
先来看个使用工具计算提前还款的效果,再来探讨相关原理。
贷款87.5万,利率4.9%还20年,使用等额本息的方式,在第13个月提前还10万,使用月供不变年限缩短方式,在CodeLab中运行下述程序后可以计算提前还款节省利息,和微信上提前还款小程序计算结果一致:
a, b, c, d, e = extraPaidWithFixedPaid(12 * 20, 875000, 0.049, False, [(13, 100000)])drawDiagramExtraPaid(12 * 20, a, b, d, e)drawTableExtraPaid(12 * 20, a, b, c, d, e)[10:20]
如图,缩短了40个月(3年4个月)账期,次月还款额以及节省利息等都与小程序计算一致。
如何计算利息
背景:等额本金和等额本息的共同点
了解过贷款的小伙伴都知道,贷款有等额本金和等额本息这两种方式,前者每月还款的本金相同,利息逐月递减;后者每月还款额相同,刚开始还款时利息还的多,后面本金还的逐渐增多。参考网上讨论利息计算的诸多文章,两个模型理论上,都有下列共同特点:
利息按月利率计算,一月一期
按期还款情况下当月应还利息只由未还完的本金决定
每月还款额除了未还本金产生的全部利息外,剩下的金额应该全部用于偿还本金
像最近部分银行提出的先息后本(先还利息若干年,最后一次性偿还本金)则不符合这个条件。
还款额的计算
知乎文章为什么买房贷款,最好选择等额本金?中提到了一个例子:
前阵子,院长有位朋友在惠州买了套120平米的房,总价125万左右,大约贷了87.5万。
办房贷的时候,他听从销售的建议,选了【等额本息】的还款方式。每个月固定还5726.39元。这个还款额度在他的承受范围之内,因此就选了。
那假如选择等额本金呢?第一个月要还的金额为7218.75元,此后每个月少还14.89元,直至20年后还完。
通过描述可知,贷款87.5万,贷20年,等额本息每月还款5726.39元,等额本金首月还款7218.75元。假设文中的贷款未使用公积金,计算时利率为固定利率,根据网上的贷款计算器可知此时的贷款年利率为4.9%。
以这个例子为例,简单说明等额本金和等额本息的计算方法:
首先贷20年,按月分期,贷款为
20?12=240期。
年利率4.9%,月利率为
0.049÷12=0.004983 即0.4083%。
等额本金
情况下:
每月应还本金=总本金÷期数
每月应还利息=剩余本金×月利率
每月还款额=每月应还本金+每月应还利息
在这个例子中:
每月应还本金为
875000÷240=3645.83元
首月应还利息为
875000×0.4083元
首月应还:
3645.83+3572.92=7218.75元。
第2月剩余本金为
875000?3645.83=871354.17元。
第2月应还利息为
871354.17×0.4083元。
第2月应还:
3645.83+3558.03=7203.86元。
将这段逻辑抽象为代码有:
import matplotlib.pyplot as pltimport numpy as npdef averageCapital(months, principal, rate): month_rate = rate / 12 monthly_capital = principal / months interests = [0] * months capitals = [0] * months left_principal = [0] * months left_principal[0] = principal total_payment = [0] * months for i in range(0, months): interests[i] = left_principal[i] * month_rate capitals[i] = monthly_capital total_payment[i] = monthly_capital + interests[i] if i + 1 < months: left_principal[i + 1] = left_principal[i] - monthly_capital return capitals, interests, total_payment
为了便于查看再封装一个打印成表格的函数:
import pandas as pddef drawTable(months, fn, *args, **kwargs): capitals, interests, total_payment = fn(months, *args, **kwargs) paid_capital = [0] * months paid_interests = [0] * months paid_capital[0] = capitals[0] paid_interests[0] = interests[0] for x in range(1, months): paid_capital[x] = paid_capital[x - 1] + capitals[x] paid_interests[x] = paid_interests[x - 1] + interests[x] origin = pd.DataFrame([total_payment, capitals, interests, paid_capital, paid_interests]) return pd.DataFrame(origin.values.T, columns=['还款额','还款本金','还款利息','已还本金','已还利息'], index=np.arange(1, months + 1))
我们运行一下知乎上的例子,看看头几年还款的本金、利息等:
pd.options.display.float_format = '{:.2f}'.formatdrawTable(12 * 20, averageCapital, 875000, 0.049)[0:10]
可以看到和文中描述一致,使用微信房小团小程序,也可以打印出一致的结果。
等额本息
的计算方法有些复杂,参考用Python深度解读房贷利率文中的解法,设A为本金,第i个月月末所欠银行本金为Ai,每月所还贷款总额为X,月利率为β, 则有:
由于最后一期时剩余本金为0,可反解得:
这里m为总期数(在刚刚的例子中,m=240)。而后就可以使用与等额本金计算中类似的逻辑,从第一期所还利息开始,反推每期的利息与本金。具体代码如下:
def averageCapitalPlusInterest(months, principal, rate): month_rate = rate / 12 monthly_payment = principal * month_rate * (1 + month_rate) ** months / ((1 + month_rate) ** months - 1) interests = [0] * months capitals = [0] * months left_principal = [0] * months left_principal[0] = principal total_payment = [0] * months for i in range(0, months): total_payment[i] = monthly_payment interests[i] = left_principal[i] * month_rate capitals[i] = total_payment[i] - interests[i] if i + 1 < months: left_principal[i + 1] = left_principal[i] - capitals[i] return capitals, interests, total_payment
我们运行一下知乎上的例子,看看等额本息模式下第8年附近,到底还了多少利息和本金:
drawTable(12 * 20, averageCapitalPlusInterest, 875000, 0.049)[90:100]
可以看到第96期(第8年年终)时,本金还了25万,但利息已经还了近30万了,和之前文中例子的数据是可以对得上的。
还款可视化
刚刚我们已经将还款的各项数据以表格的形式打印。此外我们还可以借助python的能力,打印还款的柱状图。
import numpy as npdef printStatistics(capitals, interests, total_payment, months): print("总本金:" + str(np.sum(capitals))) print("总利息:" + str(np.sum(interests))) print("总利息/总本金" + str(np.sum(interests)/np.sum(capitals))) print("首月还款 %.2f 末月还款: %.2f" % (total_payment[0], total_payment[months - 1]))def drawDiagram(months, fn, *args, **kwargs): capitals, interests, total_payment = fn(months, *args, **kwargs) printStatistics(capitals, interests, total_payment, months) month_array = np.arange(1, months + 1, 1) height = interests plt.bar(month_array, capitals, width=0.2, align='center', color='red') plt.bar(month_array, interests, width=0.2, align='center', color='blue', bottom=capitals) plt.show()
再跑一下知乎的例子,绘制等额本金和等额本息的还款柱状图:
drawDiagram(12 * 20, averageCapital, 875000, 0.049)
如图,蓝色是所还利息,红色是所还本金。可以看出本金每月不变,利息逐月递减的特征。
等额本息情况下:
drawDiagram(12 * 20, averageCapitalPlusInterest, 875000, 0.049)
也能看出所绘图形和等额本息的含义基本一致。
另外部分城市可以公积金贷款,以杭州为例,目前杭州公积金充足情况下可贷50w-60w,这里考虑一下公积金的情况:
def averageCapitalWithPublicFund(months, principal1, rate1, principal2, rate2): a, b, c = averageCapital(months, principal1, rate1) a1, b1, c1 = averageCapital(months, principal2, rate2) return np.sum([a,a1],axis=0).tolist(), np.sum([b,b1],axis=0).tolist(), np.sum([c,c1],axis=0).tolist()
drawTable(12 * 20, averageCapitalWithPublicFund, 700000, 0.041, 300000, 0.031)[0:10]
这里算了下商贷70w(利率4.1%),公积金贷30w(利率3.1%)下组合贷款的情况,和微信小程序房小团的计算是一致的。
提前还款相关原理
再来讨论下提前还款。如果知乎文中买房的那位,在贷款1年后提前还款10w会怎样呢?了解一点背景知识的朋友,
版权说明: 本文由用户上传,如有侵权请联系删除!
猜你喜欢:
- 2023-11-02 人才招聘网最新招聘信息(宝鸡第一人才招聘网最新招聘信
- 2023-11-02 梅村二手房房价(无锡梅村二手房最新房价)
- 2023-11-02 出租(出租房屋信息免费网站)
- 2023-11-02 建阳二手房出售最新消息(南平市建阳区二手房出售)
- 2023-11-02 苏州工业园区(苏州工业园区职业技术学校招生)
- 2023-11-02 观澜200元单间租房(观澜200元单间租房电话)
- 2023-11-02 新乡平原新区二手房出售信息(平原新区莫奈花园二手房)
- 2023-11-02 公寓房(公寓房能买吗)
最新文章:
- 2023-11-02 房产网(房产网做直播吗)
- 2023-11-02 宏辉果蔬(宏辉果蔬最新消息)
- 2023-11-02 百姓网个人二手车交易市场(百姓网二手车货车)
- 2023-11-02 租房纠纷找哪个部门解决(租房纠纷找哪个部门解决)
- 2023-11-02 58同城招工人(58同城招工人怎么找)
- 2023-11-02 人才招聘网最新招聘信息(宝鸡第一人才招聘网最新招聘信
- 2023-11-02 全国各城市疫情高峰感染进度(全国各城市疫情高峰感染进
- 2023-11-02 国际科技创新中心指数(国际科技创新指数2022)
- 2023-11-02 深圳华侨城一日游攻略(深圳世界之窗一日游攻略)
- 2023-11-02 梅村二手房房价(无锡梅村二手房最新房价)
- 2023-11-02 附近房子出租300元以下(附近房子出租300元以下茶
- 2023-11-02 全南二手房出售信息最新(江西全南二手房出售)
- 2023-11-02 租商铺(租商铺哪个平台最好用)
- 2023-11-02 湖州房产网二手房出售(濮阳房产网二手房出售)
- 2023-11-02 出租厂房(出租厂房信息怎么写)
- 2023-11-02 农村建房十八种样式(一般农村建房样式一层)