원리금 균등 상환 방식에 따른 월 납입금액 산출 파이썬 함수 만들기

대출 상환 방식에는 크게 원리금 균등 상환 방식 , 원금 균등 상환 방식 , 만기 일시 상환 방식이 있습니다. 상환 방식에 대한 자세한 설명은 아래 포스팅 글을 참고하시기 바랍니다.

원리금 균등 상환 방식 알아보기
원금 균등 상환 방식 알아보기
만기 일시 상환 방식 알아보기

원리금 균등 상환 방식 에 따른 월 납입금액 산출을 위한 파이썬 함수

원리금 균등 상환 방식에 따른 월 납입금액을 산출하는 최종 생성된 파이썬 함수는 아래와 같습니다. 물론 정답은 아닙니다. 각 자의 생각을 기반으로 자유롭게 작성해 보시면 좋을 것 같습니다. 그리고 나서 제 함수와 결과값을 비교해 보시는 것도 재미있을 거 같아요.

import pandas as pd

def equal_repayment_of_principal_and_interest(loanAmt, rate, loanPeriod):
    
    # 원리금 균등 상환 방식에 따른 월 납입금액 (원금 + 이자)
    원리금균등월상환금액 = round((loanAmt * (rate / 12) * ((1 + rate/12)**loanPeriod)) / ((1 + rate/12)**loanPeriod - 1))
    
    # 대출기간 동안 지불되는 총 이자금액
    대출기간총이자납입액 = 원리금균등월상환금액 * loanPeriod - loanAmt
        
    대출경과월 = []
    월별대출원금납입금액 = []


    for i in range(loanPeriod):
    
        # 대출 경과 월
        대출경과월.append(i + 1)
    
    
        # 대출 실행 이후 경과 개월에 따른 월별 대출원금 납입금액
        월별대출원금납입금액.append(round(원리금균등월상환금액 / ((1 + rate/12)**(loanPeriod - i))))

    finalData = pd.DataFrame({'대출경과월' : 대출경과월,
                              '월별대출원금납입금액' : 월별대출원금납입금액,})

    # 대출 실행 이후 경과 개월에 따른 월별 대출이자 납입금액
    finalData['월별대출이자납입금액'] = round(원리금균등월상환금액 -  finalData['월별대출원금납입금액'])

    # 이자 납입율(%) 
    finalData["이자납입율(%)"] = round(finalData['월별대출이자납입금액'] / 원리금균등월상환금액 * 100, 2)
    
    return 원리금균등월상환금액, 대출기간총이자납입액, finalData

위의 최종 코드를 하나씩 구분하여 설명해 드리겠습니다.


함수 코드 설명

  • import pandas as pd
    • pandas 라이브러리를 사용하기 위해 해당 패키지를 메모리에 로드합니다.
  • def equal_repayment_of_principal_and_interest(loanAmt, rate, loanPeriod):
    • 3개의 매개변수(loanAmt, rate, loanPeriod)를 가지는 함수 ‘equal_repayment_of_principal_and_interest’를 정의합니다.
  • 원리금균등월상환금액 = round((loanAmt * (rate / 12) * ((1 + rate/12)loanPeriod)) / ((1 + rate/12)loanPeriod – 1))
    • 매월 균등하게 납입해야 하는 원리금을 산출 공식을 이용하여 산출합니다.
  • 대출기간총이자납입액 = 원리금균등월상환금액 * loanPeriod – loanAmt
    • 매월 균등하게 납입하는 원리금에 대출 기간을 곱하여 대출 기간 동안 납입하는 총 원리금을 계산합니다. 여기서 대출원금을 차감하여 대출 기간 동안 납입하는 총 이자금액을 산출합니다.
  • 대출경과월 = [] , 월별대출원금납입금액 = []
    • ‘대출경과월’ 과 ‘월별대출원금납입금액’ 이라는 이름을 가지는 2개의 비어 있는 리스트를 생성합니다.
  • for i in range(loanPeriod):
    • 매개변수로 입력받은 loanPeriod 인수를 활용하여 반복문을 생성합니다.
    • 대출경과월.append(i + 1)
      • 1,2, …, 대출기간을 나타내는 리스트를 생성합니다.
    • 월별대출원금납입금액.append(round(원리금균등월상환금액 / ((1 + rate/12)**(loanPeriod – i))))
      • 대출 실행 이후 경과 개월에 따른 월별 대출원금 납입금액을 계산합니다.
  • finalData = pd.DataFrame({‘대출경과월’ : 대출경과월, ‘월별대출원금납입금액’ : 월별대출원금납입금액,})
    • 2개의 열(‘대출경과월’ 과 ‘월별대출원금납입금액’)을 가지는 DataFrame을 생성합니다.
  • finalData[‘월별대출이자납입금액’] = round(원리금균등월상환금액 – finalData[‘월별대출원금납입금액’])
    • 대출 실행 이후 경과 개월에 따른 월별 대출이자 납입금액을 계산합니다.
  • finalData[“이자납입율(%)”] = round(finalData[‘월별대출이자납입금액’] / 원리금균등월상환금액 * 100, 2)
    • 이자납입율을 계산합니다.
  • return 원리금균등월상환금액, 대출기간총이자납입액, finalData
    • 최종 3개(원리금균등월상환금액, 대출기간총이자납입액, finalData)의 값을 반환합니다.
    • 원리금균등월상환금액 및 대출기간총이자납입액은 하나의 숫자이고, finalData은 DataFrame입니다.



함수 사용 예시

위에서 정의한 파이썬 함수를 사용해 보겠습니다. 1억의 대출금을 연이율 3.5% 조건으로 36개월 동안 빌린다고 가정해 보겠습니다. 이런 경우 매월납입금액, 대출기간동안 은행에 지급하는 이자 금액, 월별 납입하는 대출 원금, 대출 이자 등을 산출해 보겠습니다.

원리금균등월상환금액 , 대출기간총이자납입액 , 최종데이터 = equal_repayment_of_principal_and_interest(100000000, 0.035, 36)

원리금균등월상환금액 
---------------------------
2930208

1억의 대출금을 연이율 3.5% 조건으로 36개월 동안 빌렸다면, 36개월 동안 매월 2,930,208원을 납입해야 합니다.

대출기간총이자납입액 
---------------------------
5487488

대출 기간 총 납입해야 하는 이자는 5,487,488원 입니다.

최종데이터 

위의 자료는 대출 실행 이후 대출 경과 개월에 따른 대출 원금과 대출 이자 금액을 보여주는 테이블입니다. 대출 초반에는 이자금액이 높고, 대출 기간이 경과할수록 이자 금액이 줄어드는 것을 확인하실 수 있습니다.

위의 표에 있는 ‘월별대출원금납입금액’ 열의 값을 합하면, 대출 원금인 100,000,000원과 동일한 지 계산해 보겠습니다.

최종데이터['월별대출원금납입금액'].sum()
------------------------------------------
100000002

100,000,002원이 산출되었습니다. 함수 정의 코드를 자세히 보시면 아시겠지만, 계산 과정에서 나오는 소수점 아래 자리를 1의 자리로 반올림하였기 때문에 조금의 에러가 있는 것입니다.

이상으로 원리금 균등 상환 방식에 따른 월 납입금액을 산출하는 파이썬 함수를 생성해 보았습니다. 다음 포스팅에서는 원금균등방식에 따른 월 납입금액을 산출하는 파이썬 함수를 생성해 보겠습니다.

감사합니다!

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다