python实现货币贷款分期计算(等额本⾦等额本息
背景
最近要开始投⾝研究(互联⽹)⾦融了,加上最近借了⼀个朋友3万块钱,因为他之前是在互联⽹平台(某吱)上借,⼤概万三(10k⼀天3元的费⽤)的⽇息(年化差不多有11%了,速算0.0003*360=0.108),于是便⼀拍即合我便按照7%的年化借了30k给他,后⼜商定按期限半年六次⽉分期来还。
借款发⽣在6⽉5⽇,鉴于朋友他的公司是10号发薪,考虑服务要周到,要等⽤户有⼯资了才有钱还,那么还款⽇定在7⽉10⽇开始⾄12⽉10⽇还满6次。最终结果则是:每⽉还款5107.52,最终⼀共还款30645。
钱串子花这⾥有些⾃⼰总结的相关速算:
1.⼀共多还约为本⾦的
2.15%(645/30000=0.0215);
2.和这样算是接近的:年化(7%)的半年要除2即为
3.5%,然后因为是近线性还款所以款在⼿中的积分⼤概是全款在⼿的0.5(实际⽐⼀半的时间要多),则是3.5%/2=1.75%(2.15%⽐1.75%会多⼀点)
介绍
关于等额本⾦/等额本息,⾃⾏百度/wiki了解,读读代码和注释其实也理解不难。此类⼀般复利的计算周期是⽉,也就是每⽉刷新本⾦池计算⼀遍利息。
上代码正⽂
阅读以下代码时,需要了解基本的python⾯向对象编程,以及等额本⾦/等额本息的⼤致概念。
这段代码还有⼀个⾮常好的功能,就是可以考虑第⼀个还款周期不是⼀个标准定义周期(⼀般是⽉)的情况,⽐如背景那个例⼦的"考虑服务要周到"特性,关键参数为first_period_rate。按照经验银⾏贷款会经常有这样的情形(银⾏⼀般考虑结算管理,⽽实际的放款⽇可以是⼀个⽉中的任意时间)。当不考虑该情况或借款⽣效⽇到第⼀个还款⽇⼀定⼀个标准周期时,该参数默认为1.0。很有服务意识也⾮常之实⽤:
# ===========================================
# @Time    : 2019/7/2 15:37
# @project : MLprocess
# @Author  : antony
# @Email  : 502202879@qq
# @File    : Installment
# @Software: PyCharm
# ===========================================
from sympy import solve
from sympy import abc
class MonthInstallment:
"""
按⽉的分期付款计算,按⽉息为计息周期,⼀般常⽤的⽅式有等额本⾦和等额本息
"""
def __init__(self, corpus, periods, y_rate, first_period_rate=1.0):
"""
.  @param corpus 本⾦.
.  @param periods 期数即还款⼀共分期⼏个⽉.
.  @param y_rate 年化利率我们⼀般以年化来讨论.
.  @param first_period_rate 第⼀个周期⽉的倍率,恰好为整⽉时是1.
"""
self.m_rate = y_rate/12                          # ⽉利率
self.periods = periods                          # 期数
self.first_period_rate = first_period_rate      # 第⼀周期⽉的倍率
self.m_corpus_return = corpus/periods            # 每期应还本⾦
def equal_corpus(self):
"""
等额本⾦
"""
return_interest_li, left_ = [], pus
for i in range(self.periods):
return_interest_li += [left_ * self.m_rate]  # 每期对应的利息,注意等额本⾦是每期都把利息还完了
left_ -= self.m_corpus_return                # 剩余应还本息,相当于只考虑本⾦部分每期应还的部分
return_interest_li[0] *= self.first_period_rate  # 对第⼀个⽉的应还利息做first_period_rate的修正
urn_li
def equal_corpus_interest(self):
"""同人漫画是什么意思
等额本息,⽐较常⽤,似乎是贷款的默认计算⽅式,⽆论银⾏还是⽹贷主要应⽤等额本息
"""
余文乐杨丞琳left_ = pus * (1 + self.m_rate) ** self.first_period_rate - abc.x  # 剩余应还本息,这⾥先计算第⼀个⽉        for i in range(1, self.periods):
left_ = left_ * (1 + self.m_rate) - abc.x  # abc.x为未知数:每⽉应还⾦额,注意到等额本息每期⾦额是⼀样的        return_x = solve(left_, [abc.x])  # 解⽅程剩余应还⾦额为0,求得未知数abc.x
urn_li
虹桥一
if __name__ == '__main__':
print(__name__)
# from mark_finance.loanp2p.Installment import *
mo = MonthInstallment(30000,6,0.07,1.13)
mo.equal_corpus()
欢迎关注我的,后⾯有关互⾦的好⽤的东西还会补充到其中。因为主要实现计算,所以以下是⼀些不那么好看的结果和应⽤,还没有做相应可读性更强的格式化输出。
结果1,以背景为例:
由于⾸⽉到还款⽇是经历了35天,所以first_period_rate应该传⼊35/30,年化0.07(函数内会转化成⽉息),分期6次,那么两种⽅式分别的还款为:
可以看出都是半年多还了640多块钱,⼏乎没什么区别,虽然等额本⾦趋向于“更早地去还了更多的钱”,不过时间太短⼏乎没区别。
此处有个⾦融概念:。
结果2,⼀个买房贷款案例:
假设帅君贷款250w=2500k买房(那么我们下⾯输⼊时2500的单位即为千元),我们分别假定他贷款20年(240期),30年(360⽉),贷款利率分别3.5%和5%:
以上是年化3.5%来计算的,这相当于⼤概公积⾦贷款的利率,最终都⼀共还了3479k和3378k,可以⼼算下是原始本⾦的多少倍,此时也可以直接把本⾦都变成1来分别看倍数。
等额本息每个⽉都是相同的14.5k左右,等额本⾦就是越还越少,最后俩⽉(取输出数组的最后两个元素)可以看到只有10.4k左右啦:
事实上此数值会⼗分接近⼀期份⼉的本⾦(很好理解,每期把截⽌到那时的利息部分都还了,到了最后⼏乎没剩什么利息,只剩约对应⼀期的本⾦)。
这⾥可以看出年限长了之后,看起来等额本⾦还的是少了⼀些,但其实不然,借⽤朋友的⼀句话“这个其实利息固定,其它怎么算都⼀样,只是看起来少了,但是钱的使⽤期限也少了”,道理应该都懂。
那么同样利率的30年呢:
这⾥可以⽤⼀种⼤概的速算看到⼀个事实,来对⽐等额本息,年化3.5%的30年是共105%的息;但由于钱和时间算积分只有略⼤于⼀半的全额30年的样⼦,那么息即为略⼤于52.5%(但如果考虑⼀定程度的通货膨胀,那就不是略⼤了,虽然等额本息的余额是线性的但越早的膨胀率越⼩,即越值钱),
⽽我们最后看到等额本息约是61.64%(4041/2500=1.6164),好像也确实⼤了⼀点,但⽐略微感觉应该还是多了⼀点的,这⼤概就是复利的影响了,毕竟复利周期是⽉,⽽上⾯的速算基本是只计算⼀次利息来看。
这⾥的⽐较其实都是没有考虑通货膨胀的(上⽂括号⾥的部分),参考过去⼏⼗年的通货膨胀,考虑进去的话其实这样的贷款应该还是挺划算的,公积⾦贷款简直可以看做是种福利,即便是5%左右年化的商业贷款应该也还是很划算。景甜 叶选廉
那么如果是5%的年化是怎样呢:
可以看到第三个参数年化利率是0.05了;同样可以进⾏上⼀节类似的速算,结论应该差不多。
速算:30年的5%的⼀半略多=>150%*略多于0.5=>略多于75%;
实际:93.25%(4831.39/2500=1.932556); ⽐上例3.5%同样30年的落差还是稍微⼤些的。
不过能依稀感受到的是利息越⾼对复利的影响就稍稍更⼤⼀些,这估计也构成了此状况““”⾼利率的借钱容易让⼈陷⼊其中,甚⾄很多⼈后⾯连利息都还不上“””的原因之⼀吧。
另外:对⽐最后两种情形的等额本⾦还款列表的最后两个⽉,可以看出,等额本⾦到最后⼏乎是剩不下多少利息了,事实上每次还款都是还⼲净利息了的,所以只要期数⼀样,那么它们的最后⼀个⽉⾦额都是接近于⼀份本⾦的数值,即6.9k多⼀点点的样⼦
(2500/360=6.9444444)。
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
写在最后
年轻⼈,还是少去⽹贷,即便真要贷也不能随意就⽹贷,常常就会有在你的预期之外的情况出现,like:
这⾥不针对平台,这⾥⾯的内容还是挺杂的(⽐如除了利息之外还有各类其他费⽤),空⼦还是挺多的,⽔还是挺深的,以及不明确的费⽤/复利计算⽅式,以及逾期计算。然后了解下⾏内⽐较厉害和夸张的⽐如什么714⾼炮这些的操作,⽐如贷款得到的钱直接砍去头息,操作贼多,所以真的⾮要⽹贷,也还是得去些⼤点的靠谱点的平台,并且还是得仔细研究协议,成本还是⾮常之⾼的。当然,当你踏⾜进来遇到的很多情况即便是⽉分期的账单,可能也不太适⽤于上述类MonthInstallment的两个计算⽅法了;所谓预期之外。想想曾经还在读书的我以为:"⾼出银⾏存款利息5倍的为⾼利贷",简直是太简单了啊,现在看来即便按照存款利息能到年化4%(基本完全碾压国债和货币基⾦),以上论断还都是显得太简单了;实际不规范的放贷更是能超过100%。
现在的这块市场总的来说还是给⼈⼀些信任缺乏的感觉,“借款⼈怕不平等条约,放款⼈怕⽼赖”。⾦融(相关)⾏业利益很多,也是基于这个原因,即便不信任,其中的各位⾓⾊依然有利可图,那么⾃然会有不少的受害⼈。越是不规范,这块的空间其实也就越⼤。虽然,相关治理也总是慢慢在路上的。周迅身高
但是,刚了解到实际有借钱这种需求并且到这样相关渠道的⼈,和能读到我的⽂章的⼈,画像其实是差别简直不要太⼤,反正是⾮常之⼤的,所以"写在最后"其实写了跟没写⼀样,多的还是得靠其他渠道的意识普及。
或许,也是在了解了这些之后才觉得,房贷真的算是贷款中很趋近于“简直是福利了”的,尤其是你是公积⾦做的房贷。
补充在后⾯的经历,后来没过多久(⼤概⼀个⽉),我便离开了那⾥,⼤概是因为做的事情多少有些不太喜欢,提离职的那天,正好遭到了公安抽查,虽然场⾯很⼤,但其实打⼼底觉得应该不会有什么,如今⼜正在做⼀件稍微更喜欢的事情,中⼆台词:“算法可能能真正发挥它保护这个世界的公正的,没有的,更和谐的事情”。⼜是⼀个多⽉过去了,听到那边裁员70%的消息,估计产品是要下线的节奏吧,我不知道该说些什么,“这事与我⽆⽠”?不对,本来就没关系我为什么要撇清关系,但喜闻乐见的话肯定不在其中。毕竟此事⼀出我还觉得⾃⼰亏了不少呢。
last of the last
看到这篇⽂章发布之后下⾯的相关推荐,看懂过之后其实应该知道,其实等额本息和等额本⾦⽆所谓谁更划算,其真相是"⼀旦利率和复利计算周期定了,那么便没有本质差别了"。⼤家要做的只是根据⾃⼰的能⼒选择适合⾃⼰的还款⽅式。
当然,⽬前的资⾦⽅⼀般只给出了这两种还款⽅式,可谓能选择的余地并不多,在以上代码的基础上其实可以继续推⼴,实现周期内还款任意⾦额的后续计算,那么⽤户每⼀期就可在⼀定范围内想还多少还多少,也不存在“现在什么提前还款还要申请”之类的。当然这种定制化不怎么存在的原因并太不
是技术原因,⽽是预算管理,除了⽅便计算之外,资⾦⽅需要对资⾦进⾏预期,并依据此管理⼀些资⾦策略。