Cum să construiți un model de flux de numerar Python de bază pentru un împrumut

Publicat: 2022-03-11

Mulți experți financiari sunt abili în utilizarea Excel pentru a construi modele financiare. Cu toate acestea, din cauza dificultăților cu evaluarea de către colegi, controlul versiunilor și incapacitatea de a forma funcții recursive, Excel poate să nu fie cea mai bună alegere pentru modelele mai sofisticate. În ciuda acestor dezavantaje, mulți profesioniști din domeniul financiar încă folosesc Excel, deoarece sunt mai puțin încrezători în limbaje de programare precum Python.

Python este unul dintre cele mai ușor de învățat limbaje de programare. Deoarece a fost proiectat având în vedere lizibilitatea și ușurința de utilizare, codul său este concis și aproape de limba engleză simplă. În acest articol, vă arăt cât de ușor este să construiți un model de flux de numerar Python pentru plățile împrumutului utilizând cele mai de bază funcții, pachete și structuri de date.

Pentru a continua, va trebui să utilizați Colaboratory („Colab” pe scurt), aplicația de notebook gratuită de pe web a Google, care vă permite să scrieți și să executați cod. Colab este un interpret Python care utilizează celule care pot conține cod, Markdown (pentru text cu stil ușor), imagini sau alte date. Colab stochează în mod continuu valorile codului dvs. pe măsură ce scrieți, făcându-se rapid și simplu să detectați greșelile sau erorile pe măsură ce apar. (Dacă nu doriți să intrați încă, urmați acest exemplu de caiet Colab.)

În primul rând, asigurați-vă că aveți instrumentele de care aveți nevoie

Vom construi un model pentru un împrumut amortizat care are o plată periodică programată aplicată atât principalului creditului, cât și dobânzii. Are o rată fixă ​​pentru fiecare perioadă, iar partea de dobândă a plăților scade în timp. Veți avea nevoie de trei biblioteci Python, colecții de rutine software care împiedică dezvoltatorii să scrie cod de la zero, pentru acest model - NumPy, Pandas și Matplotlib:

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

În Colab, pachetele Pandas și Matplotlib sunt instalate implicit, așa că trebuie doar să instalați biblioteca numpy-financiară, lucru pe care îl puteți face direct din Colab. Pentru a instala numpy-financial și a importa toate cele trei biblioteci de care veți avea nevoie mai târziu, deschideți un nou blocnotes Colab din meniul Fișier și inserați următoarele în prima celulă de cod:

 # 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

Înainte de a trece la pasul următor, permiteți-mi să explic codul anterior și de ce este scris așa cum este scris. Chiar dacă numele numpy-financial conține o cratimă, trebuie să utilizați un caracter de subliniere în nume atunci când îl instalați și îl importați. (Pentru mai multe informații și explicații despre instalarea numpy_financial, consultați documentația.) Este posibil să observați și abrevieri. Aliasurile predefinite sunt utilizate în mod obișnuit pentru pachete — NumPy este scris ca np, Pandas ca pd. Aceste alias-uri sunt folosite pentru a vă scuti de a scrie numele complet al pachetului de fiecare dată când doriți să-l utilizați și, de asemenea, vă ajută să faceți codul mai lizibil.

Acum, utilizați NumPy pentru a configura caracteristicile împrumutului

NumPy este una dintre cele mai populare biblioteci Python care adaugă suport pentru matrice mari, multidimensionale, împreună cu o colecție semnificativă de funcții matematice de nivel înalt pentru a opera pe aceste matrice. Biblioteca financiară numpy este un pachet relativ nou alcătuit dintr-o colecție de funcții financiare utilizate în mod obișnuit, care au fost separate de biblioteca principală NumPy și cărora li sa acordat propriul loc de mândrie.

Cea mai simplă modalitate de a calcula dobânda programată și vectorii de principal pe durata împrumutului nostru amortizat este să folosiți funcțiile PMT, IPMT și PPMT din pachetul financiar numpy. Funcția PMT oferă rata fixă ​​a împrumutului pentru a plăti integral împrumutul pe un anumit număr de perioade. Funcțiile IPMT și PPMT asigură plățile de dobândă și, respectiv, principalul. În funcție de intrarea în perioadă, funcțiile IPMT și PPMT pot returna valori pentru o singură perioadă sau pentru un număr de perioade.

Pentru acest exemplu, vom furniza un interval cu durata de viață completă a împrumutului ca intrare pe perioadă. Ca atare, vom obține matrice vectoriale cu dobânda la plățile principalului pentru fiecare perioadă a împrumutului:

 # 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)

Nu veți „vedea” nimic care se întâmplă în fișierul dvs. Colab după ce ați introdus codul - sunt informațiile de bază despre împrumut necesare pentru a face restul acestui exercițiu. (O listă cu toate funcțiile numpy-financiare pe care le-am folosit, definițiile și intrările lor, pot fi găsite în documentația oficială.)

Apoi, utilizați Matplotlib pentru a crea o diagramă

Deși este bine să aveți vectorii ca ieșire, poate fi cel mai bine să vizualizați rezultatul sub forma unei diagrame, în special ca o diagramă de stivă. Pentru a configura diagrama, vom folosi plt , alias-ul pentru colecția de funcții pyplot din biblioteca matplotlib. În exemplul nostru, vom adăuga o legendă în colțul din stânga sus și vom adăuga titluri pe axa x și pe axa y. Deoarece nu dorim o frontieră internă, setăm marjele la 0.

Adăugați o altă celulă de cod și introduceți următorul cod:

 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) 

După cum vedem, dobânda scade în timp. De asemenea, soldul creditului scade din cauza plăților principalului din fiecare perioadă. Pentru a menține rata fixă, partea principală trebuie să crească.

În cele din urmă, utilizați Pandas pentru a crea un tabel

Pachetul Pandas este cel mai des folosit pachet Python pentru manipularea tabelelor numerice și a seriilor temporale. Oferă structuri de date rapide, flexibile și expresive, concepute pentru a face lucrul cu date relaționale sau etichetate atât ușor, cât și intuitiv. Vom crea un tabel care include plățile principalului și dobânzilor, precum și soldurile de început și de sfârșit ale împrumutului pentru fiecare perioadă:

 _# 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)

Prima linie de cod aplică reguli de formatare a afișajului pentru a face tabelul mai lizibil prin adăugarea de mii de separatoare și afișarea numerelor cu doar două zecimale.

A doua porțiune de cod îi indică Colab să includă plata dobânzii, plata principalului, soldul final și soldul inițial pentru fiecare perioadă de împrumut. Barele oblice inverse acționează ca întreruperi de linie deoarece nu putem avea mai mult de 79 de caractere într-o singură linie.

Sumele afișate în grafic au fost scurtate la două zecimale.

Dacă v-ați urmărit în propriul caiet Colab, felicitări! Acum ați codificat un profil simplu de portofoliu de credite cu amortizare programată folosind Python.

Puteți face mult mai multe cu Python pentru finanțare, inclusiv modelarea împrumuturilor cu cupoane variabile de dobândă legate de o rată de referință și alte structuri de împrumut. Sperăm că acest model de împrumut v-a dat o idee despre cât de simplă poate fi codificarea financiară în Python.