대출을 위한 기본 Python 현금 흐름 모델을 구축하는 방법

많은 재무 전문가는 Excel을 사용하여 재무 모델을 구축하는 데 능숙합니다. 그러나 피어 리뷰, 버전 제어의 어려움 및 재귀 함수를 구성할 수 없기 때문에 Excel은 보다 정교한 모델에 가장 적합한 선택이 아닐 수 있습니다. 이러한 단점에도 불구하고 많은 재무 전문가들은 Python과 같은 프로그래밍 언어에 대한 자신감이 떨어지기 때문에 여전히 Excel을 사용합니다.

파이썬은 배우기 가장 쉬운 프로그래밍 언어 중 하나입니다. 가독성과 사용 편의성을 염두에 두고 설계되었기 때문에 코드가 간결하고 일반 영어에 가깝습니다. 이 기사에서는 가장 기본적인 함수, 패키지 및 데이터 구조를 사용하여 대출 지불을 위한 Python 현금 흐름 모델을 구축하는 것이 얼마나 쉬운지 보여줍니다.

계속하려면 코드를 작성하고 실행할 수 있는 Google의 무료 웹 기반 노트북 애플리케이션인 Colaboratory(줄여서 "Colab")를 사용해야 합니다. Colab은 코드, Markdown(쉽게 스타일이 지정된 텍스트용), 이미지 또는 기타 데이터를 포함할 수 있는 셀을 사용하는 Python 인터프리터입니다. Colab은 작성하는 동안 코드 값을 지속적으로 저장하므로 오류나 버그가 나타날 때 빠르고 간단하게 잡아낼 수 있습니다. (아직 바로 뛰어들고 싶지 않다면 이 Colab 노트북 예시를 따르세요.)

먼저, 필요한 도구가 있는지 확인하십시오.

우리는 대출의 원금과 이자 모두에 적용되는 정기 상환이 예정된 상각 대출에 대한 모델을 구축할 것입니다. 기간별로 고정할부가 있으며, 시간이 지날수록 지급액의 이자 부분이 감소합니다. 이 모델에는 NumPy, Pandas 및 Matplotlib의 세 가지 Python 라이브러리, 개발자가 처음부터 코드를 작성할 필요가 없도록 하는 소프트웨어 루틴 모음이 필요합니다.

  • numpy-financial==1.0.0
  • pandas==1.2.3
  • matplotlib==3.2.2

Colab에서는 Pandas 및 Matplotlib 패키지가 기본적으로 설치되므로 Colab에서 직접 수행할 수 있는 numpy-financial 라이브러리만 설치하면 됩니다. numpy-financial을 설치하고 나중에 필요한 세 개의 라이브러리를 모두 가져오려면 파일 메뉴에서 새 Colab 노트북을 열고 다음을 첫 번째 코드 셀에 붙여넣습니다.

# initial set-up
!pip install numpy_financial
import pandas as pd
import numpy_financial as npf
import matplotlib.pyplot as plt
from collections import namedtuple

다음 단계로 넘어가기 전에 이전 코드와 작성된 방식으로 작성된 이유를 설명하겠습니다. numpy-financial의 이름에 하이픈이 포함되어 있어도 설치 및 가져올 때 이름에 밑줄을 사용해야 합니다. (numpy_financial 설치에 대한 자세한 내용과 설명은 설명서를 확인하세요.) 약어도 볼 수 있습니다. 미리 정의된 별칭은 일반적으로 패키지에 사용됩니다. NumPy는 np로, Pandas는 pd로 작성됩니다. 이러한 별칭은 패키지를 사용할 때마다 패키지의 전체 이름을 작성하지 않아도 되며 코드를 더 읽기 쉽게 만드는 데 사용됩니다.

이제 NumPy를 사용하여 대출 특성 설정

NumPy는 큰 다차원 배열에 대한 지원을 추가하는 가장 인기 있는 Python 라이브러리 중 하나이며 이러한 배열에서 작동하는 고급 수학 함수의 중요한 컬렉션입니다. numpy-financial 라이브러리는 일반적으로 사용되는 금융 기능 모음으로 구성된 비교적 새로운 패키지로, 기본 NumPy 라이브러리와 분리되어 고유한 위치를 자랑합니다.

상환된 대출 기간 동안 예정된 이자와 원금 벡터를 계산하는 가장 간단한 방법은 numpy-financial 패키지의 PMT, IPMT 및 PPMT 함수를 사용하는 것입니다. PMT 기능은 정해진 기간 동안 대출금을 전액 상환할 수 있도록 고정 대출 할부를 제공합니다. IPMT 및 PPMT 기능은 각각 이자와 원금 지급을 제공합니다. 기간에 대한 입력에 따라 IPMT 및 PPMT 함수는 단일 기간 또는 여러 기간에 대한 값을 반환할 수 있습니다.

이 예에서는 대출의 전체 수명을 기간 입력으로 포함하는 범위를 제공합니다. 따라서 대출 기간의 각 기간에 대한 원금 지불에 대한 이자가 포함된 벡터 배열을 얻습니다.

# loan characteristics
original_balance = 500_000
coupon = 0.08
term = 120

# payments
periods = range(1, term+1)
interest_payment = npf.ipmt(
    rate=coupon / 12, per=periods, nper=term, pv=-original_balance)
principal_payment = npf.ppmt(
    rate=coupon / 12, per=periods, nper=term, pv=-original_balance)

코드를 입력한 후에는 Colab 파일에서 아무 일도 "보이지" 않습니다. 이는 이 연습의 나머지 부분을 수행하는 데 필요한 기본 대출 정보입니다. (내가 사용한 모든 numpy-financial 함수 목록, 해당 정의 및 입력은 공식 문서에서 찾을 수 있습니다.)

다음으로 Matplotlib를 사용하여 차트 만들기

벡터를 출력으로 사용하는 것이 좋지만 차트 형식, 특히 스택 플롯으로 출력을 시각화하는 것이 가장 좋습니다. 차트를 설정하려면 plt를 사용합니다. , matplotlib 라이브러리의 pyplot 함수 모음에 대한 별칭입니다. 이 예에서는 왼쪽 상단 모서리에 범례를 추가하고 x축과 y축에 제목을 추가합니다. 내부 테두리를 원하지 않으므로 여백을 0으로 설정합니다.

다른 코드 셀을 추가하고 다음 코드를 삽입하십시오.

plt.stackplot(periods, interest_payment, principal_payment, 
              labels=['Interest', 'Principal'])
plt.legend(loc='upper left')
plt.xlabel("Period")
plt.ylabel("Payment")
plt.margins(0, 0)

우리가 볼 수 있듯이, 관심은 시간이 지남에 따라 감소합니다. 대출 잔액도 각 기간의 원금 상환으로 인해 감소합니다. 고정할부를 유지하려면 원금을 늘려야 합니다.

마지막으로 Pandas를 사용하여 테이블 만들기

Pandas 패키지는 숫자 테이블과 시계열을 조작하기 위해 가장 일반적으로 사용되는 Python 패키지입니다. 관계형 또는 레이블이 지정된 데이터로 쉽고 직관적으로 작업할 수 있도록 설계된 빠르고 유연하며 표현력이 풍부한 데이터 구조를 제공합니다. 원금 및 이자 지불, 각 기간의 시작 및 종료 대출 잔액을 포함하는 테이블을 생성합니다.

_# pandas float formatting_
pd.options.display.float_format = '{:,.2f}'.format

_# cash flow table_
cf_data = {'Interest': interest_payment, 'Principal': principal_payment}
cf_table = pd.DataFrame(data=cf_data, index=periods)
cf_table['Payment'] = cf_table['Interest'] + cf_table['Principal']
cf_table['Ending Balance'] = original_balance - \
                             cf_table['Principal'].cumsum()
cf_table['Beginning Balance'] = [original_balance] + \
                                list(cf_table['Ending Balance'])[:-1]
cf_table = cf_table[['Beginning Balance', 'Payment', 'Interest', 
                     'Principal', 'Ending Balance']]
cf_table.head(8)

코드의 첫 번째 줄은 표시 형식 규칙을 적용하여 천 단위 구분 기호를 추가하고 숫자를 소수점 이하 두 자리까지 표시하여 표를 더 읽기 쉽게 만듭니다.

두 번째 코드 덩어리는 Colab에 각 대출 기간에 대한 이자 지불, 원금 지불, 기말 잔액 및 원래 잔액을 포함하도록 지시합니다. 한 줄에 79자를 초과할 수 없기 때문에 백슬래시는 줄 바꿈 역할을 합니다.

자신의 Colab 노트북에서 팔로우하고 있었다면 축하합니다! 이제 Python을 사용하여 간단한 예약 상환 대출 포트폴리오 프로필을 코딩했습니다.

벤치마크 이자율 및 기타 대출 구조에 연결된 변동 이자 쿠폰이 있는 대출에 대한 모델링을 포함하여 금융을 위해 Python으로 할 수 있는 일이 훨씬 더 많습니다. 이 대출 모델을 통해 Python에서 재무 코딩이 얼마나 간단한지 맛보실 수 있기를 바랍니다.


기업 자금 조달
  1. 회계
  2. 사업 전략
  3. 사업
  4. 고객 관계 관리
  5. 재원
  6. 주식 관리
  7. 개인 금융
  8. 투자하다
  9. 기업 자금 조달
  10. 예산
  11. 저금
  12. 보험
  13. 은퇴하다