サラリーマンSEがサイドFIREを目指すブログ

30歳SE&FP2級保持。新人時代から投資を続けつつ、お金や投資、時々技術の話をゆるっと発信中。

【Python】奨学金の繰上返済をシミュレーション|どれだけ得するか見える化してみた

前回に続きまたプログラミング系ですが、今回は 奨学金の繰上返済をしたらどれだけ得するのか をテーマに、Pythonを使ってシミュレーションしてみました。
こういう数字遊び、好きなんですよね。笑

シミュレーションの前提条件

  • 借入額:480万円
  • 返済期間:20年(240か月)
  • 利率:0.5%(固定方式)
  • 繰上返済額:100万円を5年後にまとめて返済

繰上返済でどれだけ得するのか見てみましょう。

事前準備

  • .venvの環境構築
  • 必要なライブラリをインストール

.venvの環境構築

環境構築はこちらの記事をご覧ください www.se30invest.com

必要なライブラリをインストール

.venvを有効化したら以下のコマンドで必要なライブラリをインストールしてください

pip install numpy
pip install matplotlib

Pythonスクリプト

import numpy as np
import matplotlib.pyplot as plt
from matplotlib import rcParams

# Windows環境の日本語フォント設定
rcParams['font.family'] = 'Yu Gothic'  # または "MS Gothic"

# パラメータ設定
principal = 4800000  # 借入額(例:480万円)
rate = 0.005  # 年利(0.5%)
years = 20  # 返済年数
months = years * 12

extra_payment = 1000000  # 繰上返済額(例:100万円)
extra_payment_month = 60  # 5年後に繰上返済(60か月目)

# 元利均等返済の毎月返済額を計算
monthly_rate = rate / 12
monthly_payment = principal * (monthly_rate * (1 + monthly_rate) ** months) / ((1 + monthly_rate) ** months - 1)

def simulate(with_extra=False):
    balance = principal
    total_payment = 0
    total_interest = 0
    payments = []
    for m in range(1, months + 1):
        if balance <= 0:
            payments.append(0)
            continue
        interest = balance * monthly_rate
        principal_payment = monthly_payment - interest
        balance -= principal_payment
        total_payment += monthly_payment
        total_interest += interest
        # 繰上返済実行
        if with_extra and m == extra_payment_month:
            balance -= extra_payment
            total_payment += extra_payment
        payments.append(balance if balance > 0 else 0)
    return payments, total_payment, total_interest

# シミュレーション実行
normal, total_payment_normal, total_interest_normal = simulate(with_extra=False)
extra, total_payment_extra, total_interest_extra = simulate(with_extra=True)

# グラフ描画
plt.figure(figsize=(10,6))
plt.plot(normal, label="通常返済")
plt.plot(extra, label="繰上返済あり")
plt.xlabel("月数")
plt.ylabel("残高(円)")
plt.title("奨学金残高シミュレーション")
plt.legend()
plt.grid(True)
plt.savefig("loan_simulation.png", dpi=300)  # 画像保存
plt.show()

# 結果を出力
print("【通常返済】")
print(f"  総支払額: {total_payment_normal:,.0f} 円")
print(f"  総利息  : {total_interest_normal:,.0f} 円\n")

print("【繰上返済あり】")
print(f"  総支払額: {total_payment_extra:,.0f} 円")
print(f"  総利息  : {total_interest_extra:,.0f} 円")

上記を例えばcalculate.pyというファイルで保存します。 以下のコマンドで実行します。

python calculate.py

以下の画像と標準出力が出れば完成です。

【通常返済】
  総支払額: 5,044,998 円
  総利息  : 244,998 円

【繰上返済あり】
  総支払額: 4,993,957 円
  総利息  : 178,263 円

金利や、繰上額、繰上タイミングなどを変更したい場合は以下の変数の数字を変えて再実行してみてください

# パラメータ設定
principal = 4800000  # 借入額(例:480万円)
rate = 0.005  # 年利(0.5%)
years = 20  # 返済年数
months = years * 12

extra_payment = 1000000  # 繰上返済額(例:100万円)
extra_payment_month = 60  # 5年後に繰上返済(60か月目)

結果の考察

通常返済では利子が約24万円だったのが、100万円繰上返済すると約18万円で、総返済額が6万円ほどお得になることがわかります。 また、繰上返済を入れると残高の減り方が大きく、約16年で完済できるため、精神的にも早くスッキリするというメリットがあります。

一方で、その100万円を投資に回した場合、オルカンなどに投資して年利5%なら20年後には約265万円になります。 → つまり、「借金返済で利息を減らす」より「投資で増やす」方が有利、というケースもあるわけです。

まとめ

奨学金の繰上返済をPythonでシミュレーションしてみました。 数字で見える化すると「どれくらい利息を減らせるのか」が一目瞭然ですね。 今回は奨学金を例にしましたが、支払金額・金利・繰上期間などを変えれば住宅ローンや車のローンにも応用できます。
ぜひご自身のケースで試してみてください。 繰上返済をして心理的な安心感を取るか、返済計画通りに進めるかは人それぞれです。
投資や返済の判断はあくまで自己責任で!

【関連記事】 www.se30invest.com

www.se30invest.com

プライバシーポリシーお問い合わせサイトマップ | 運営者情報