房贷利率有没有套路?这是我见过最透彻的Python版解读!

论坛 期权论坛 期权     
Python数据科学   2019-7-13 18:00   3077   0
点击上方“Python数据科学”,选择“星标”公众号
重磅干货,第一时间送达


作者:xiaoyu,半路转行数据




上一篇揭秘消费分期利率的文章得到了很多朋友的好评,我只是把真实情况向读者反映一下,至于值与不值每个人心里都有一把秤。
长点心吧年轻人,利率不是这么算的!我用Python告诉你亏了多少!

很多朋友留言说不知道房贷是不是也有一样的套路,表示很疑惑。我的第一反应时因为房贷很高,大家看到消费分期的套路自然而然就想到了房贷,很正常的事。毕竟消费分期只是小部分支付,而房贷是一个持久的,甚至一辈子的支出,多一点都可能就要人命。因此本篇给大家解读一下房贷利率的故事,希望能够帮助正在或者即将买房的朋友们。

可能很多买过房、贷过款的朋友大概都知道怎么回事,但是我相信大部分人也没细研究过,而绝大部分人买房时更是任由房屋中介摆布,因为给了中介费相信他们可以算的明明白白,自己也就不过多深究了。但我觉得买房不是小事,真的有必要花些时间弄明白,尤其是贷款利率。

要说算利率,很简单。网上有很多现成的计算工具可以直接用,不过就像学机器学习一样,我不甘心只做个调包侠,所以对于利率的底层算法我还是想和大家分享一下,最后通过手撸Python完成计算,让大家彻底明白房贷到底是怎么回事。

房贷利率

我们买房贷款时银行通常会提供两种还款方式:等额本息等额本金。我们就以在商业贷款的背景下,分别介绍这两种还款方式,然后再进行对比和验证。

等额本金

等额本金指每个月还的本金都是一样的,但是利息是动态变化的,随着我们每期归还本金而不断递减。

比如我要在北京买一套房,商业贷款200万不过分吧!假设贷款年利率为6%,期限30年,那么等额本金情况下每个月需还款200万/360月,即约0.55万/月。刚才说了,利息是动态变化的,也就是说银行每月会在剩余应还本金的基础上去计算利率,是一个动态的过程。公式如下:


有的朋友说了觉得这样说也不是很直观,那我直接来撸一段代码以表我的respect。
  1. import numpy as np
  2. import pandas as pd
  3. import matplotlib.pyplot as plt
  4. import seaborn as sns
  5. plt.style.use("fivethirtyeight")
  6. sns.set_style({'font.sans-serif':['simhei','Arial']})
  7. %matplotlib inline
  8. loan = 2000000 # 贷款金额
  9. annualRate = 0.06 # 贷款年利率
  10. monthRate = annualRate/12 # 贷款月利率
  11. period = 30 # 贷款期限30年
  12. # 每月应还本金
  13. monthPrincipalPayment = [loan/(period*12)]*period*12
  14. # 每月应还利息
  15. monthInterestPayment = [(loan - loan*n/(period*12))*monthRate+loan/(period*12) for n in range(1,period*12+1)]
  16. # 还款期数
  17. month = [n for n in range(1,period*12+1)]
  18. f,ax=plt.subplots(figsize=(20,8))
  19. l1 = plt.bar(month,monthInterestPayment,color='b',width=0.4)
  20. l2 = plt.bar(month,monthPrincipalPayment,color='r',width=0.4)
  21. plt.xlabel(u'还款期数(月)', size=20)
  22. # 设置y轴标签
  23. plt.ylabel('还款金额(元)', size=20)
  24. # 设置标题
  25. plt.title(u'等额本金', size=20)
  26. #刻度字体大小20
  27. plt.tick_params(labelsize=20)
  28. # 设置注解狂
  29. plt.legend(handles = [l1, l2,], labels = ['利息', '本金'], loc = 'best',fontsize=20)
  30. plt.show()
复制代码
等额本金方式下的利息总和为 1795000元。以下是运行出来的结果,蓝色代表利息,红色代表本金。每月应还本金不变,应还利息逐渐较少。




等额本息

等额本息是指还款总额(本金+利息)均等地分摊到每个月,即每个月的本息还款额都是一样的。

那么分摊的每月还款额是怎么计算的呢?计算稍微有点复杂,但也不难,就是把均摊还款额作为一个未知参数,然后通过公式推导法推导出它的表达式,如下:




这种方式下,每个月的剩余还款额都是在上个月剩余应还本息和的基础上计算当月产生的本息和,再减掉每月应还等额款X而完成的。用Python计算结果如下:
  1. # 首月应还利息
  2. firstMonthInterest = loan*monthRate
  3. # 每月应还本息
  4. monthPayment = (loan*monthRate*(1+monthRate)**360)/((1+monthRate)**360-1)
  5. print("等额本息每月应还{}".format(round(monthPayment,2)))
复制代码
根据上面公式可以计算出等额本息下每月应还本息金额(X):11991.01元
这11991.01元当中包括了本金和利息,那么我想知道利息到底是怎么收的,每月都是多少?该怎么算?
很简单,迭代肯定是有一个初始值的,因此我们就以第一个月的应付利率为基准计算并往后迭代就可以了,这样之后每月的本金和利息都可以迎刃而解。
第一个月应还利息为:2000000 x 0.06 / 12 = 10000元,因此第一个月应还本金为11991.01-10000 = 1991.01元。

第二个月应还利息为:(2000000-11991.01)x0.06/12=9940.04元,因此第二个月应还本金为11991.01-9940.04=2050.97元。后面循环迭代即可。
找到了这个规律,我们同样用Python计算,代码如下:
  1. loanPI = [loan*(1+monthRate)-monthPayment]
  2. # 每期应还利息
  3. loanInterest = [loan*monthRate]
  4. for n in range(1, period*12):
  5.     loanPI.append((loanPI[n-1]*(1+monthRate)-monthPayment))
  6.     loanInterest.append(round(loanPI[n-1]*monthRate,2))
  7. # 每期应还本金
  8. loanPrincipal = [monthPayment-loanInterest[n] for n in range(0,len(loanInterest))]
  9. f,ax=plt.subplots(figsize=(20,8))
  10. l1 = plt.bar(month,monthPaymentList,color='b',width=0.4)
  11. l2 = plt.bar(month,loanPrincipal,color='r',width=0.4)
  12. plt.xlabel(u'还款期数(月)', size=20)
  13. # 设置y轴标签
  14. plt.ylabel('还款金额(元)', size=20)
  15. # 设置标题
  16. plt.title(u'等额本息', size=20)
  17. #刻度字体大小20
  18. plt.tick_params(labelsize=20)
  19. # 设置注解狂
  20. plt.legend(handles = [l1, l2,], labels = ['利息', '本金'], loc = 'best',fontsize=20)
  21. plt.show()
复制代码
等额本息方式下的利息总和为 2316763.73元。以下是运行出来的结果,蓝色代表利息,红色代表本金。每月应还本息和是不变的,应还利息逐渐较少,应还本金逐渐增多。




两种还款方式对比和验证

以下是两种计算方式的还款金额对比,可以看到在我们选择的参数条件下等额本金比等额本息少了52万。


为啥差这么多?

因为等额本金就好比急着给银行还款,前期还的较多,利息就相对少了很多。下面是通过计算器得出的结果,和我们用Python计算的一致。

      
      





哪种贷款方式更优呢?

看到上面的结果,大家肯定想我肯定选择等额本金,少了52万!52万!52万!

然而现实情况是大多数人还是选择等额本息,为什么呢?我们对比看一下每月还款的趋势图,蓝色为等额本金,红色为等额本息。




看完以后知道了吧,等额本金总还款虽少,但开始每月还款很多,大概要到第130个月,也就是10年后的时候两种方式才会达到相等。

为什么很多人明知道等额本金利息少还要选择等额本息呢?

因为等额本金需要忍受前10年的高额月供啊!当然不缺钱的除外,不过不缺钱也就用不着贷款了,说明资金还是不够的。我仔细想了想,假如一个月税后工资15000,算上公积金3000的话,一个月什么都不干,工资净流出12000,就只剩3000了。加上另一半的工资一共还能有多少,在一线城市真的很难受,所以大家宁愿想过得舒服点,哪怕多还点钱也忍了。

有人说了自己会挣得越来越多,不是我悲观,前段时间的cy大家都知道的,未来的风险我们还是有必须要考虑一下的,拖家带口的不能孤注一掷。可别小看了高出的这几千元,那可是净流出啊,压死骆驼的最后一根稻草,当你工资不足以支撑的时候,估计500元你都得想半天。

哪种更优还是要结合自己的实际情况来看的,也不能一概而论,不过一般资金不是很充裕的情况下还是建议选择等额本息。

房贷利率有没有套路?

通过上面分析就显而易见了,房贷利率没有什么套路,无论是等额本息还是等额本金都是一样的,它们会每月动态计算利息,而不像分期一样每月所还利息按照初期本金计算不随本金较少而变化。下面是两种方式的每月应还利息变化。




两种方式每月利息都是随着本金变化而动态减少,所以说房贷的年化利率是多少就是多少,没什么套路一说,只不过是贷款时间长,利息高,给人一种不安全的感觉罢了。


/ 今日赠送书籍 /



本书特色
1. 内容实用实在、详略得当,讲授符合初学者的认知规律
本书内容涵盖了有监督学习、无监督学习、模型优化、自然语言处理等机器学习领域所必须掌握的知识,从内容结构上非常注重知识的实用性和可操作性。必须掌握的细节处绝不吝惜笔墨、手把手细致到每一次的鼠标点击;仅需要大致了解处绝不铺张浪费纸张、整体结构的描述提纲挈领。这样的安排注重了对初学阶段必备知识的深入了解,大致了解的知识也能够有所认识,这种由浅入深、循序渐进的讲授完全是遵循和尊重了初学者对机器学习知识的认知规律。

2. 行文幽默诙谐,以实例引导全程,特别适合初学者阅读
本书介绍的基本理论知识、用于分类的机器学习算法、用于回归的机器学习算法、数据预处理、数据表达与特征工程等,都是使用非常贴近生活场景的实例来引导的,这样就避免了知识讲述过于抽象,非常易于理解。同时,作者以幽默诙谐,贴近时代的语言对这些知识进行生动、通俗的一一讲解,犹如一位你的老朋友,帮助你缩短入门机器学习的时间。纵观全书,作者将大学生小 C 追求女神以及帮助他的朋友处理日常问题同机器学习的理论与操作进行对比介绍,这就使得整个学习过程变得简单、生动起来。

3. 配套的人才培养与引入计划,帮助读者将学习成果转化为真正的生产力
在笔者过去的工作当中,累积了数量可观的各大互联网公司招聘通道资源,以及诸多猎头资源,可以帮助学有所长的读者快速进入一个实际操作的场景中进一步提高自己的实操能力。除此之外,笔者和国内大部分相关的产业发展部门有着密切的联系,对于有志于在人工智能领域创业的创业者来说,也能够帮助其对接政策资源,帮助大家在创业过程中得到有关部门的支持,从而使得创业之路变得不那么坎坷。
扫描上方二维码购买


恭喜上期留言读者成功混脸熟,赠送书籍一本。
请Memo腹肌撕裂者同学联系小编:homenlove



/ 今日留言主题 /
你对买房有什么看法?

推荐阅读
充气娃娃什么感觉?Python告诉你
薅羊毛 | 让Python每天帮你薅一个早餐钱
这个库厉害了,自动补全Python代码,节省50%敲码时间
长点心吧年轻人,利率不是这么算的!我用Python告诉你亏了多少!


分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:30
帖子:6
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP