近日,再次接到了广发银行的电话,一开口就是:先生,您是我们广发银行的优质客户,现在有XX万的现金可以直接打到储蓄卡上,贷款利率为0,分多少期每期的手续费是百分之XX。诸如此类的电话几乎每2-3个月会接到一次,不仅是电话,相应的推销短信每月也会不停地发。
广发银行财智金的套路-编程知识网
  如此这样多次后,终究忍受不了,写点东西来吐吐槽,聊聊财智金的套路。乍看起来,手续费好像不高,但是细细核算,其实不然,如果转化成年化利率则非常之高,只能说套路太深,那么我们来看看分期手续费与年化利率如何转换?

案例初算

  以短信中所说贷款5万,月费率0.5%,分12期为例。如果你认为年化利率是简单的乘法0.5%×12=6%0.5\%\times12 =6\%0.5%×12=6%的话,那么就大错特错了。
根据以上数据可以轻松计算出每月的还款金额为50000÷12+50000×0.5%50000\div12+50000\times0.5\%50000÷12+50000×0.5%=4416.667元
那么如果是像房贷一样的按揭,5万贷1年,利率是多少才能得出每月还款4416.667元呢?
答案是10.896383%,是不是比6%超出了一大截?

在知道结果的情况下,我们来演练一下本金及利息变化的过程。

  • 第1个月本金是50000,产生的利息是50000×10.896383%÷12=454.015958350000\times10.896383\%\div12=454.015958350000×10.896383%÷12=454.0159583元。
  • 第2个月的本金就是50000+454.0159583(利息)−4416.667(已还金额)=46037.34950000+454.0159583(利息)-4416.667(已还金额)= 46037.34950000+454.01595834416.667()=46037.349元,产生的利息是46037.349×10.896383%÷12=418.033822146037.349\times10.896383\%\div12=418.033822146037.349×10.896383%÷12=418.0338221元。
  • 依次类推可以计算出每期的本金和利息,直到最后第12期还完本息4376.9191+39.74382251=4416.6634376.9191+39.74382251=4416.6634376.9191+39.74382251=4416.663元,之后剩余的-0.004064286是由于精度问题导致的,不足1分钱。

可见我们得出的10.896383%的利率是准确的,具体每期的本金利息变化情况可以参看下表:

期数 期初本金 利息 期末本金(还款后)
1 50000 454.0159583 46037.34896
2 46037.34896 418.0338221 42038.71578
3 42038.71578 381.7249566 38003.77374
4 38003.77374 345.0863951 33932.19313
5 33932.19313 308.1151437 29823.64128
6 29823.64128 270.8081815 25677.78246
7 25677.78246 233.1624602 21494.27792
8 21494.27792 195.1749037 17272.78582
9 17272.78582 156.8424082 13012.96123
10 13012.96123 118.1618413 8714.456071
11 8714.456071 79.13004249 4376.919113
12 4376.919113 39.74382251 -0.004064286

期末本金=期初本金+利息−当月还款金额期末本金=期初本金+利息-当月还款金额=+,同时期末本金也是下一期的期初本金。如果只想了解到这个差异,那么了解到这里就可以结束。

深入探究

如果想深入了解利率怎么计算,下面会进行详细说明,先从住房贷款与按揭的关系说起。

假设贷款总额为Z,每月按揭为A(等额本息,每月还款金额相同),年化利率为L,还款期数为Q。那么他们的等式关系是怎样的呢?

由于每期加利息减本金递推的方式计算起来比较麻烦,换一种思路来理解,采用2种方式进行投资,第一种是一次性投资Z元,按照年化利率L进行复利计算,投资Q期返还本息。第二种是每月定投(追加,第1期不投,从第2期开始定投)A元,按照年化利率L,投资到Q期之后返还本息。这里可以理解为银行一次性贷出很多钱的最终回报是与用户按揭还款的回报是相同的。

  • 对于第一种长期投资方式,最终的本息总额为:

本息总和S=Z(1+L12)QS=Z(1+\frac{L}{12})^QS=Z(1+12L)Q

  • 对于第二种定投投资方式,最终的本息总额如何计算呢?

对于第1期投入的A元,相当于持续产生了Q-1期的复利。为什么不是Q期,而是Q-1期呢,因为第1期还款是在放款后一个月才发生的,所以到最终到期时,它只产生了Q-1期的复利,本息为A(1+L12)Q−1A(1+\frac{L}{12})^{Q-1}A(1+12L)Q1
对于第2期投入的A元,相当于持续产生了Q-2期的复利,本息为A(1+L12)Q−2A(1+\frac{L}{12})^{Q-2}A(1+12L)Q2
… …
最后一期投入A元就结束了,没有产生利息。
本息总和S=A+A(1+L12)+A(1+L12)2+…+A(1+L12)Q−1S=A+A(1+\frac{L}{12})+A(1+\frac{L}{12})^2+…+A(1+\frac{L}{12})^{Q-1}S=A+A(1+12L)+A(1+12L)2++A(1+12L)Q1
根据高中学过的等比数列求和:

1+a+a2+…+an=an+1−1a−11+a+a^2+…+a^n=\frac{a^{n+1}-1}{a-1}1+a+a2++an=a1an+11

上式可以化简为A+A(1+L12)+A(1+L12)2+…+A(1+L12)Q−1=A(1+L12)Q−1L12A+A(1+\frac{L}{12})+A(1+\frac{L}{12})^2+…+A(1+\frac{L}{12})^{Q-1}= A\frac{(1+\frac{L}{12})^Q-1}{\frac{L}{12}}A+A(1+12L)+A(1+12L)2++A(1+12L)Q1=A12L(1+12L)Q1
那么存在的等式关系就是:
Z(1+L12)Q=A(1+L12)Q−1L12Z(1+\frac{L}{12})^Q=A\frac{(1+\frac{L}{12})^Q-1}{\frac{L}{12}}Z(1+12L)Q=A12L(1+12L)Q1
研究上面的方程,在已知Z(贷款金额)、L(利率)和Q(还款期数)的情况下,求解A(按揭金额)很容易。
根据案例数据来试算一下。Z=50000,L=10.896383%,Q=12Z=50000,L=10.896383\%,Q=12Z=50000L=10.896383%Q=12
S=Z(1+L12)Q=50000×(1+10.896383%12)12=55728.69009S=Z(1+\frac{L}{12})^Q=50000\times(1+\frac{10.896383\%}{12})^{12}=55728.69009S=Z(1+12L)Q=50000×(1+1210.896383%)12=55728.69009
S=A(1+L12)Q−1L12=A×12.61781659S=A\frac{(1+\frac{L}{12})^Q-1}{\frac{L}{12}}=A\times12.61781659S=A12L(1+12L)Q1=A×12.61781659
可以解得A=55728.69009÷12.61781659=4416.666678A=55728.69009\div12.61781659=4416.666678A=55728.69009÷12.61781659=4416.666678

而如果已知Z(贷款金额)、Q(还款期数)和A(按揭金额)时,计算L时并不容易,因为这个一个关于L的一元高次方程。以案例数据得到的方程就是
50000×(1+L12)12=4416.666678×(1+L12)12−1))L1250000\times(1+\frac{L}{12})^{12}=4416.666678\times\frac{(1+\frac{L}{12})^{12}-1))}{\frac{L}{12}}50000×(1+12L)12=4416.666678×12L(1+12L)121))
分期还款的方式就是一个等额本息还款的方式,所以这里求解的利率也就是分期手续费每期0.5%对应的年化利率。这个一元12次方程如果采用纯数学的方式并不好解,为了方便计算,我们采用程序来求解。

Python程序求解方程

这个方程虽然不好解,但是我们可以利用计算机程序来求近似解,只要误差足够小就满足了。这里介绍两种算法来实现,第一种是二分法,第二种是牛顿迭代法。第一种效率低一点,容易理解,第二种效率高,但要预先求好一阶导函数。两种方式求结果都是毫秒级的,效率差异可以忽略,下面代码均采用python3.5环境下运行。

第一种的Python代码如下:

N = int(input('请输入您的分期期数(例如12):'))
R = float(input('请输入您的分期手续费率(不含百分号,例如100万,每期8千,输入0.8):'))
cnt=0
# 最小可能的月利率值
min_r=0.001
# 最大可能的月利率值
max_r=1
s=float()
mid=float()
while abs(min_r-max_r)>0.0000000001 :mid=(min_r+max_r)/2s=pow(1+mid,N)*mid/(pow(1+mid,N)-1)if s<(1+N/100*R)/N :min_r=midelif s>(1+N/100*R)/N :max_r=midcnt+=1yr=mid*12*100
print('年化利率是:%f%%' % yr)
print(cnt)

这里二分法的思想就是从0.001-1中寻找解,根据常识利率一般是在0.1%-100%之间的某个数,算法思想就是如果给定的解偏大,则将其调小,如果给定的解偏小,则将其跳大,不断往结果靠拢的过程。这种方法针对单调函数求解是有效的。循环了34次。
广发银行财智金的套路-编程知识网

第二种的Python代码如下:

N = int(input('请输入您的分期期数(例如12):'))
R = float(input('请输入您的分期手续费率(不含百分号,例如100万,每期8千,输入0.8):'))
cnt=0
i=0.05
# y=0.1
s=float()
mid=float()
R=R/100
fxn=(1+N*R)*(pow(1+i,N)-1)-N*i*pow(1+i,N)
fxn_=N*(1+N*R)*pow(1+i,N-1)-N*N*i*pow(1+i,N-1)-N*pow(1+i,N)
while abs(fxn)>0.0000000001 :i=i-fxn/fxn_fxn=(1+N*R)*(pow(1+i,N)-1)-N*i*pow(1+i,N)fxn_=N*(1+N*R)*pow(1+i,N-1)-N*N*i*pow(1+i,N-1)-N*pow(1+i,N)cnt+=1yr=i*12*100
print('年化利率是:%f%%' % yr)
print(cnt)

这里牛顿迭代法的效率就很高,只做了7次循环就得到了同样的效果,牛顿迭代法的思想是不断地做切线与X轴相交进行迭代,这里不做过多介绍,感兴趣的朋友可以再去深入了解。
广发银行财智金的套路-编程知识网

分期越长,对应的利率越高。以上的案例将12期修改为24期,那么对应的年化利率则计算为11.126664%,所以要做分期,尽量做短期分期。
广发银行财智金的套路-编程知识网
广发银行的营销人员请不要再来骚扰我了,你们的套路我懂。