住宅ローンの元利均等返済・計算式の導出とシミュレーション

住宅ローンの計算はややこしい、という先入観がありましたが、落ち着いて計算したらそうでもなかったという話です。借入金・年利・返済年数から毎月返済額・元金と利息の内訳・総返済額・繰り上げ返済による利息軽減額の計算式を導出します。

## おさらい：元利均等返済とは

$S$円を年利$100R$%で借り、$N$年かけて返済するものとします。簡単のため、年利は変動しないものとします。返済方法は幾つかありますが、元金に利息を上乗せした月毎の返済額が常に等しくなるようにするのが**元利均等返済**です。

以降の計算の簡単化のために、年利を月利$r=R/12$に、返済年数を返済回数$n=12N$に変換しておきます。これ結構重要です。

## 毎月返済額

$k$回目返済後の借入残高を$S_{k}$円とおきましょう。$0$回目の残高は借入金に相当するので$S_{0}=S$です。$k+1$回目には、前回の残高に利息分がプラスされ、そこから毎月の返済額$x$円を引くので、次の漸化式が成り立ちます。
$$S_{k+1}=(1+r)S_{k}-x$$
高校数学で習う1階漸化式の特性方程式
$$y=(1+r)y-x$$
を考えて、辺々引いたら
$$S_{k+1}-y=(1+r)(S_{k}-y)$$
となります。これは等比数列です。$y$は$y=x/r$と求まりますので、$S_{k}$の一般項は
$$S_{k}=(1+r)^{k}\left(S-\frac{x}{r}\right)+\frac{x}{r}$$
となります。$x$は$n$回目に完済となるように決めれば良いので、
$$S_{n}=0\quad\Leftrightarrow\quad x=\frac{Sr(1+r)^{n}}{(1+r)^n-1}=\frac{Sr}{1-(1+r)^{-n}}$$
と求まります。ここまでは割と多くのウェブページに記されています。

## 返済額の内訳

毎月返済額のうち、元金分と利息分の内訳が変化する（後者が段々減っていく）のが元利均等返済の特徴です。$k$回目返済額のうち利息分$a_{k}$の計算は簡単で、
$$a_{k}=rS_{k-1}$$
です。先に求めた$x$より
$$S_{k}=(1+r)^{k}\left(S-\frac{S}{1-(1+r)^{-n}}\right)+\frac{S}{1-(1+r)^{-n}}
=S\left(\frac{1-(1+r)^{k-n}}{1-(1+r)^{-n}}\right)$$
ですので、
$$a_{k}=Sr\left(\frac{1-(1+r)^{k-n-1}}{1-(1+r)^{-n}}\right)$$
を得ます。また、$k$回目返済額のうち元金分を$b_{k}$とおくと、$a_{k}+b_{k}=x$が成り立ちますから、
$$b_{k}=x-a_{k}=\frac{Sr}{1-(1+r)^{-n}}-Sr\left(\frac{1-(1+r)^{k-n-1}}{1-(1+r)^{-n}}\right)=\frac{Sr(1+r)^{k-n-1}}{1-(1+r)^{-n}}$$
と求まります。

毎月返済額のうち利息分の内訳が段々減っていく、と書きましたが、具体的にどのような内訳で減っていくのか感覚を持っておくのは重要だと思います。$S$は個々人の事情で変わりますので、割合を見るだけに留めるため$S=1$としましょう。住宅ローンの場合$R=0.005$程度、$N=35$がよくあるケースでしょうから、これらの値を用いて$b_{k}$を可視化してみると、次のグラフのようになります。
![level_payment_graph.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/706455/6c2a70c4-35c8-673b-75d7-ca76cfa6e77e.png)
このスパンで見ると、利息分の減り方はほぼ直線的です。

## 総返済額

$x$円ずつ$n$回支払い続けるので、$N$年間の総返済額は
$$nx=\frac{Snr}{1-(1+r)^{-n}}$$
と簡単に求まります。つまり返済期間全体で累積した利息の借入金に対する比率は
$$nx/S-1=\frac{nr}{1-(1+r)^{-n}}-1$$
です。$R=0.005$、$N=35$なら、これはおおよそ$0.09026$（1割弱）となります。
参考のため、**元金均等返済**とした場合は総返済額は$S+Sr(n+1)/n$であるので（導出は省略します）、期間全体で累積した利息の借入金に対する比率は$r(n+1)/2$です。これは同じく$R=0.005$、$N=35$ならおおよそ$0.08771$となりますので、元利均等返済の方が0.2%強多く支払う計算になります。

## 年利と月利の関係

最初の方で、年利を月利$r=R/12$に変換、と書きました。ここちょっと突っ込んで考えてみましょう。

$k+1$回目から$k+m$回目までの返済額合計のうち、利息分$A_{k,m}$と元金分$B_{k,m}$をそれぞれ求めると、
$$A_{k,m}=\sum_{i=k+1}^{k+m}a_{i}=\sum_{i=k+1}^{k+m}Sr\left(\frac{1-(1+r)^{i-n-1}}{1-(1+r)^{-n}}\right)=\frac{S\left(mr-(1+r)^{k-n}\left((1+r)^{m}-1\right)\right)}{1-(1+r)^{-n}}$$
$$B_{k,m}=\sum_{i=k+1}^{k+m}b_{i}=\sum_{i=k+1}^{k+m}\frac{Sr(1+r)^{i-n-1}}{1-(1+r)^{-n}}=\frac{S(1+r)^{k-n}((1+r)^{m}-1)}{1-(1+r)^{-n}}$$
となります。ただし途中で等比数列の和
$$\sum_{i=1}^{m}(1+r)^{i-1}=\frac{(1+r)^{m}-1}{r}$$
を用いました。当然ですが
$$A_{k,m}+B_{k,m}=\frac{Srm}{1-(1+r)^{-n}}=mx$$
が$k$によらず成り立ちます。

$k$回目返済後の借入残高は
$$S_{k}=S\left(\frac{1-(1+r)^{k-n}}{1-(1+r)^{-n}}\right)$$
でしたから、その後$m$回分の支払における利息の比率$R_{k,m}$は
$$R_{k,m}=\frac{A_{k,m}}{S_{k}}=\frac{S\left(mr-(1+r)^{k-n}\left((1+r)^{m}-1\right)\right)}{1-(1+r)^{-n}}\Big/ S\left(\frac{1-(1+r)^{k-n}}{1-(1+r)^{-n}}\right)$$
$$=\frac{mr-(1+r)^{k-n}\left((1+r)^{m}-1\right)}{1-(1+r)^{k-n}}$$
です。$m=1$なら$k$によらず$R_{k,1}=r$となります。これは当然ですね。そして$m=12$なら次の通り。
$$R_{k,12}=\frac{12r-(1+r)^{k-n}\left((1+r)^{12}-1\right)}{1-(1+r)^{k-n}}$$

年利の本来の意味を考えれば、$k$や$n$によらず$R_{k,12}=R$でなければならないはずです。しかし両者は上記の通り異なります。どれくらい異なるのでしょうか。
![level_payment_interest.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/706455/b6e7f537-396c-0a77-2aa0-80a2fb33993a.png)

$R_{k,12}$を、$r$を横軸にとって$n-k$を色々変えてプロットしたものが上図です。赤線が$R$です。これより次のことが言えます。

- $R$よりも、実際に年間に支払っている利息の比率$R_{k,12}$は小さい。
- 残り返済回数が100日以上ならばその差は微々たるものだが、100日を割ったくらいから小ささが顕著になってくる。

年利$R$に対し月利を$R/12$と定めるのは金融業界の慣習ですが、借主に多少有利になる決まりと分かりました。もっとも、残り返済回数が10回程度ならば借入残高もだいぶ小さくなっているでしょう。$R=0.005$なら$r\simeq 0.00042$くらいなので、いずれにしても微々たるもののようです。

## 繰り上げ返済による期間短縮

繰り上げ返済をすれば、その分利息の支払いを減らせます。毎月の返済額を減らす（**返済額軽減**）か返済回数を減らす（**期間短縮**）かを選べることが通例ですが、ここでは期間短縮の場合のみ考えます。

$k$回分の返済を済ませた段階で、$z$円繰り上げ返済するとしましょう。つまり借入残高は$S_{k}-z$です。その後、今までと変わらず毎月$x$円ずつ返済した場合、返済回数は何回になるでしょうか？新たな返済回数を$n^{\prime}$とおけば、
$$S_{n^{\prime}}=(1+r)^{n^{\prime}}\left(S_{k}-z-\frac{x}{r}\right)+\frac{x}{r}=0$$
ですから、これを$n^{\prime}$について解いて
$$n^{\prime}=\log_{1+r}\frac{x}{r(S_{k}-z)-x}$$
$$=-\log_{1+r}\left((1+r)^{k-n}-\frac{z(1-(1+r)^{-n})}{Sr}\right)$$
となります。もちろん実際の$n^{\prime}$は右辺より大きい最小の整数値となり、最終返済額は$x$に満たない端数になります。また、短縮された回数$n-n^{\prime}$分の利息
$$A_{k,n-n^{\prime}}=\frac{S\left((n-n^{\prime})r
-((1+r)^{-n^{\prime}}+(1+r)^{-n})(1+r)^{k}\right)}{1-(1+r)^{-n}}$$
は丸々軽減されます。ちょっと分かりにくい式ですが、$k$に対し単調減少である、つまり早い段階での繰り上げであるほど利息をより軽減できると分かります。

## シミュレーション

長期的に条件の変化がなければ、以上の内容でそれなりに精度の良い推算ができますが、金利変動や住宅ローン控除等の影響を考えると、やはり表計算を使ったシミュレーションが便利です。そこで、簡易なシミュレーションを行う次のようなExcelシートを作ってみました。

|   |A      |B     |C   |D      |E     |F      |G       |H  |I       |J  |
|--:|------:|-----:|---:|------:|-----:|------:|-------:|--:|-------:|--:|
|  1|契約年月|借入金|年利|返済年数|月利  |返済回数|月返済額|   |総返済額|   |
|  2|       |      |    |       |=C2/12|=D2\*12 |=ROUND(B2\*E2*0.01/(1-POWER(1+E2\*0.01,-F2)),0)|   |=SUM(E6:E425)+SUM(H6:H425)-SUM(J6:J425)|   |
|  3|
|  4|年月   |前残高 |年利|利率   |返済額 |うち元金|うち利息|繰上返済|借入残高|控除|
|  5|=A2    |=B2    |=C\$2|=C5/12*0.01|=G\$2|=E6-G6|=TRUNC(B6\*D6)|  0|=B5+G5-E5-H5|=IF(AND(YEAR(A5)-YEAR(A\$2)<=10,MONTH(A5)=1),MIN(TRUNC(B5\*0.01),400000),0)|
|  6|=EDATE(A5,1)|=IF(I5>0,I5,0)|=C5|=C6/12*0.01|=IF(B6+G6-E5>0,E5,B6+G6)|=E6-G6|=TRUNC(B6\*D6)|  0|=B6+G6-E6-H6|=IF(AND(YEAR(A6)-YEAR(A\$2)<=10,MONTH(A6)=1),MIN(TRUNC(B6\*0.01),400000),0)|
|...|...|...|...|...|...|...|...|...|...|...|

7行目以降は6行目をコピーします（420回返済ならば424行目までコピーして下さい）。
A2に契約年月、B2に借入金、C2に年利、D2に返済年数を入力すれば、その後の条件変化が無い場合のシミュレーションを行うことが出来ます。
5行目は初期値計算を行っているので編集はお勧めしません。
6行目以降はC列（年利）、E列（返済額）、H列（繰上返済額）のみ編集可能とします。それぞれ変化のあるタイミングで直接数値を書き込めば、全体の計算に反映されます。

控除まで考えたシミュレーションはウェブで探してもあまり見当たらないので、それなりに便利だと思います。ただし、次の点にご注意頂かなければなりません。

- これら以外にも保証金や借換手数料等がかかってくるので、全ての要素を反映したものではない。
- 控除は、所得税額等によっては満額受けられるとは限らない。