按揭贷款计算器 抵押房子贷款怎么贷

本文分享自华为云社区《房贷计算器——从原理、计算到提前还款及可视化——云社区——华为云》。作者:蜉蝣与海。

摘要:近期各地楼市波动不断,多家银行相继降息,随后引发提前还款潮。人们可以通过楼市小程序中的贷款计算器等工具,轻松了解每期的还款本金,不同还款方式的利息差异,提前还款的利息节省。了解这些工具的计算原理,可以让你心中有数,在遇到危险的时候不会慌张。本文已发布至华为云生态社区AI Gallery。本文涉及的所有代码都可以通过页面直接在云代码实验室运行,欢迎开发者体验。

前言

最近当地楼市波动不断。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]

按揭贷款计算器 抵押房子贷款怎么贷a,b,c,d,e = extraPaidWithFixedPaid(12 * 20,875000,0.049,False,[(13,100000)])drawdiagramextrapayd(12 * 20,a,b,d,e)drawtableextrapayd(12 * 20,a,b,c,d,e)[10:20]

【/br/】如图,40个月(3年4个月)的账期缩短,次月还款额和利息节省与小程序计算一致。

如何计算利息背景:等额本金和等额本息的共同点

了解过贷款的小伙伴都知道,贷款有两种方式:等额本金和等额本息。前者每月还款本金不变,利息逐月递减;后者每月支付相同的金额。刚开始还款,利息还多,后面本金逐渐增加。参考网上很多讨论利息计算的文章,从理论上来说,两种模型都有以下共同特点:

利息按月利率计算,一月一期按期还款情况下当月应还利息只由未还完的本金决定每月还款额除了未还本金产生的全部利息外,剩下的金额应该全部用于偿还本金

比如最近有银行提出先还利息,再一次性还本金。

还款额的计算

知乎文章住房贷款为什么选择平均资本最好?中提到了一个例子:

前阵子院长的一个朋友在惠州买了一套120平米的房子,总价125万左右,贷款87.5万左右。
他在办理房贷时,听从了卖家的建议,选择了[等额本息]的还款方式。每月固定还款5726.39元。这个还款额在他的承受范围内,所以他选择了。
平均资本呢?第一个月要还的金额是7218.75元,之后每个月不到14.89元,直到20年后还清。

从描述中可以看出,借款87.5万,借款20年。等额本息每月还款5726.39元,首月还款平均本金7218.75元。假设本文的贷款不使用公积金,计算时利率是固定的。根据网贷计算器,此时的贷款年利率为4.9%。

以此为例简单解释一下平均资本和等额本息的计算方法:

首先,贷款期限为20年,每月分期付款。贷款是

2012 = 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元。

将这种逻辑抽象成代码包括:

导入matplotlib . py plot as pltimport numpy as NP def erage capital(月数,本金,利率):month _ rate = rate/12 monthly _ capital =本金/月数利息=[0]* months capital =[0]* months left _ principal =[0]* months left _ principal[0]= principal total _ payment =[0]* months for I in range(0,months):利息[I]= left _ principal[I]* months _ rate capital[I]= monthly _ capital _ payment[I]= monthly _ capital _ capital+利息月:left _ principal[I+1]= left _ principal[I]-monthly _ capital return capital,interests,total _ payment为了方便查看,重新打包一个打印的函数:

import pandas as PD def draw table(months,fn,*args,* kwargs):capital,interest,total_payment = fn(months,*args,* kwargs)payed _ capital =[0]* months payed _ interest =[0]* months payed _ capital[0]= capital[0]payed _ interest[0]= interest[0]for x in range(1,months):payed _ capital[x]= payed _ capital[x-1]+capital[x]payed _ interest[x]= payed _ interest[xDataFrame([total_payment,capitals,interest,paid _ capital,paid _ interests)返回pd。DataFrame(origin.values.T,columns =[& # 39;还款金额& # 39;,'本金的偿还& # 39;,'还款利息& # 39;,'偿还本金& # 39;,'已付利息& # 39;],index=np.arange(1,months+1))我们来运行一下Zhihu中的例子,看看前几年支付的本息:

pd.options.display.float_format = '{:.2f}'.formatdrawTable(12 * 20, erageCapital, 875000, 0.049)[0:10]

由于最后一期剩余本金为0,可以反过来得到:

其中m是周期总数(在前面的示例中,m=240)。然后我们就可以用类似于erage capital计算中的逻辑,从第一期偿还的利息反推每期的利息和本金。具体代码如下:

def eragecapitalplusininterest(months,principal,rate):month _ rate = rate/12 monthly _ payment = principal * month _ rate *(1+month _ rate)* * months/((1+month _ rate)* * months-1)interest =[0]* months left _ capital =[0]* months left _ principal =[0]* months _ principal[0]= principal total _ payment =[0]* months for I in range(0,months):total _ payment[I]= monthly _ payment interest[I]= monthly _ principles[I]月:left _ principal[I+1]= left _ principal[I]-capitals[I]Return capital,interest,total _ payment我们来运行一下知乎里的例子,看看等额本息模式下第八年左右已经还了多少利息和本金:

drawTable(12 * 20, erageCapitalPlusInterest, 875000, 0.049)[90:100]

a, b, c, d, e = extraPaidWithFixedPeriod(12 * 20, 875000, 0.049, False, [(13,100000)])drawDiagramExtraPaid(12 * 20, a, b, d, e)drawDiagramExtraPaid(12 * 20, a, b, d, e, False)drawTableExtraPaid(12 * 20, a, b, c, d, e)[10:20]

很容易看出每月还款中利息节省的比例。

月供不变,年限缩短

这种情况下,提前还款导致每个月产生的利息少了,但月供没有变化,相当于每个月额外还了本金。但是在各种提前还款计算器的计算中,月供和以前不太一样。经过反复计算,结果与网贷计算器一致,发现各种提前还款计算器隐含以下约束条件:

提前还款相当于用剩余本金新做一个贷款。“月供”不是真的不变。而是通过缩短年限方式,使得新贷款首月月供尽可能和当前月供相当。如果是等额本金模式,新贷款首月月供中,偿还本金并未增多,需要略低于上月偿还本金,等额本息模式则无此约束。

想想这个逻辑就有道理了。如果每月还款真的一样,那么在平均资本模式下提前还款后,每月偿还的本金会多于新增贷款偿还的本金,相当于每月提前还款,每月偿还的本金不能称为“等额”。
我们写一个函数求解第一个月供,一个函数通过缩短年数来近似计算月供总额和月供本金。然后计算“月供不变,寿命缩短”模式下节省的具体利息。

def getFirstPaid(months, principal, rate, capitaleraged): month_rate = rate / 12 monthly_capital = principal / months monthly_payment = principal * month_rate * (1 + month_rate) ** months / ((1 + month_rate) ** months – 1) interests1 = principal * month_rate if capitaleraged: return monthly_capital + interests1, monthly_capital else: return monthly_payment, monthly_payment – interests1

def getLeftMonths(leftMonthax, capitalPaidMax, paidMax, leftPrincipal, rate, capitaleraged): lastPaid, lastCapitalPaid, lastMonths = 0, 0, 0 for i in range(leftMonthax, 1, -1): paid, capitalPaid = getFirstPaid(i, leftPrincipal, rate, capitaleraged) if paid > paidMax or (capitaleraged and capitalPaid > capitalPaidMax): return lastMonths, lastPaid, lastCapitalPaid else: lastPaid, lastCapitalPaid, lastMonths = paid, capitalPaid, i

def extraPaidWithFixedPaid(months, principal, rate, capitaleraged, extraPaidList: list): capitals, interests, total_payment = normalPaid( months, principal, rate, capitaleraged) extraPaidList.sort(key=lambda x: x[0]) originCapital, originInterests, originTotal = capitals.copy(), interests.copy(), total_payment.copy() left_principal = [0] * months left_principal[0] = principal for x in range(0, months): if x < months – 1: left_principal[x + 1] = left_principal[x] – capitals[x] def normalPaidOffset(left_months, principal, rate, capitaleraged, offset, left_months2): month_rate = rate / 12 monthly_capital = left_principal[offset] / left_months monthly_payment = left_principal[offset] * month_rate * (1 + month_rate) ** left_months / ((1 + month_rate) ** left_months – 1) for i in range(0, left_months): interests[offset + i] = left_principal[offset + i] * month_rate if capitaleraged: capitals[offset + i] = monthly_capital total_payment[offset + i] = monthly_capital + interests[offset + i] else: total_payment[offset + i] = monthly_payment capitals[offset + i] = total_payment[offset + i] – interests[offset + i] if i == 0: print("次月还款 %.2f" % total_payment[offset + i]) if offset + i + 1 < months: left_principal[offset + i + 1] = left_principal[offset + i] – capitals[offset + i] for i in range(left_months, left_months2): interests[offset + i] = 0 capitals[offset + i] = 0 total_payment[offset + i] = 0 return realMonth = months for x, y in extraPaidList: capitalParam = capitals[x] capitals[x] = capitals[x] + y left_principal[x + 1] = left_principal[x] – capitals[x] total_payment[x] = capitals[x] + interests[x] maxMonth, maxPaid, maxPaidCapital = getLeftMonths(months – x – 1, capitalParam, total_payment[x – 1], left_principal[x + 1], rate, capitaleraged) normalPaidOffset(maxMonth, left_principal[x + 1], rate, capitaleraged, x + 1, months – x – 1) realMonth = x + 1 + maxMonth print("当月需还 %.2f 剩余本金 %.2f 下月需还:%.2f 原本剩余账期:%d,当前剩余账期:%d, 账期缩短:%d" %(total_payment[x], left_principal[x + 1],total_payment[x + 1], months – x – 1,maxMonth, months – x – 1 – maxMonth)) printStatistics(originCapital, originInterests, originTotal, months) print("") printStatistics(capitals, interests, total_payment, realMonth) print("节省利息 %.2f" % (np.sum(originInterests) – np.sum(interests))) return capitals, interests, total_payment, originTotal, originInterests

a, b, c, d, e = extraPaidWithFixedPaid(12 * 20, 875000, 0.049, True, [(13, 100000)])drawDiagramExtraPaid(12 * 20, a, b, d, e)drawTableExtraPaid(12 * 20, a, b, c, d, e)[10:20]

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]

可见,虽然缩短年限的本质是为了新贷款,但确实能省下不少利息。

小结

本文初稿写在华为云AI——图库贷款计算器——从原理、公式到提前还款、可视化,你可以通过页面进入CodeLab直接调整界面上的参数计算房贷利息和提前还款。计算过程原理直观,易于可视化理解。欢迎开发者体验。

整篇文章带你了解不同按揭贷款方式的区别,对按揭利息计算和提前还款的原理做了详细的分析和数据可视化。后续面对贷款利息计算的问题,可以直面原则,心中有数,危机时刻不慌张。

参考资料

[1]用Python(https://mp.weixin.qq.com/s/hdRb4b7ufYd-hujV1TKHZg)深入解读房贷利率

【2】为什么贷款买房,平均资本是最佳选择?

【3】杭州房小团微信小程序-贷款计算

【4】杭州方小团微信小程序——预付款

点击下方,第一时间了解华为云的新鲜技术~

华为云博客_大数据博客_AI博客_云计算博客_开发者中心-华为云

#华为云开发者联盟#

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。

发表回复

登录后才能评论