Hoe een basis Python-cashflowmodel voor een lening te bouwen?

Veel financiële experts zijn bedreven in het gebruik van Excel om financiële modellen te bouwen. Vanwege problemen met peer review, versiebeheer en het onvermogen om recursieve functies te vormen, is Excel misschien niet de beste keuze voor meer geavanceerde modellen. Ondanks deze nadelen gebruiken veel financiële professionals nog steeds Excel omdat ze minder vertrouwd zijn met programmeertalen zoals Python.

Python is een van de gemakkelijkste programmeertalen om te leren. Omdat het is ontworpen met het oog op leesbaarheid en gebruiksgemak, is de code beknopt en bijna Engels. In dit artikel laat ik zien hoe eenvoudig het is om een ​​Python-cashflowmodel voor leningbetalingen te bouwen door gebruik te maken van de meest elementaire functies, pakketten en datastructuren.

Om dit te volgen, moet u Colaboratory (kortweg "Colab") gebruiken, de gratis webgebaseerde notebooktoepassing van Google waarmee u code kunt schrijven en uitvoeren. Colab is een Python-interpreter die cellen gebruikt die code, Markdown (voor gemakkelijk opgemaakte tekst), afbeeldingen of andere gegevens kunnen bevatten. Colab slaat continu de waarden van je code op terwijl je schrijft, waardoor het snel en eenvoudig is om fouten of bugs op te sporen zodra ze verschijnen. (Als je er nog niet meteen in wilt springen, volg dan dit voorbeeld van Colab-notebook.)

Zorg er eerst voor dat u over het benodigde gereedschap beschikt

We zullen een model bouwen voor een afgeschreven lening waarbij een geplande, periodieke betaling wordt toegepast op zowel de hoofdsom als de rente. Het heeft een vaste termijn voor elke periode en het rentegedeelte van de betalingen neemt in de loop van de tijd af. Voor dit model heb je drie Python-bibliotheken nodig, verzamelingen van softwareroutines die voorkomen dat ontwikkelaars code helemaal opnieuw moeten schrijven:NumPy, Pandas en Matplotlib:

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

In Colab zijn de Pandas- en Matplotlib-pakketten standaard geïnstalleerd, dus je hoeft alleen de numpy-financiële bibliotheek te installeren, wat je rechtstreeks vanuit Colab kunt doen. Om numpy-financial te installeren en alle drie de bibliotheken te importeren die u later nodig hebt, opent u een nieuw Colab-notitieblok vanuit het menu Bestand en plakt u het volgende in de eerste codecel:

# 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

Voordat we verder gaan met de volgende stap, wil ik de vorige code uitleggen en waarom deze is geschreven zoals deze is geschreven. Hoewel de naam van numpy-financial een koppelteken bevat, moet u een onderstrepingsteken in de naam gebruiken wanneer u deze installeert en importeert. (Raadpleeg de documentatie voor meer informatie en uitleg over het installeren van numpy_financial.) Mogelijk ziet u ook afkortingen. Vooraf gedefinieerde aliassen worden vaak gebruikt voor pakketten:NumPy wordt geschreven als np, Pandas als pd. Deze aliassen worden gebruikt om u te behoeden voor het schrijven van de volledige naam van het pakket elke keer dat u het wilt gebruiken en ook om uw code leesbaarder te maken.

Gebruik NumPy nu om de leningkenmerken in te stellen

NumPy is een van de meest populaire Python-bibliotheken die ondersteuning biedt voor grote, multidimensionale arrays, samen met een aanzienlijke verzameling wiskundige functies op hoog niveau om op die arrays te werken. De numpy-financiële bibliotheek is een relatief nieuw pakket dat bestaat uit een verzameling veelgebruikte financiële functies die zijn gescheiden van de hoofdbibliotheek van NumPy en een eigen plek hebben gekregen.

De eenvoudigste manier om de geplande rente- en hoofdsomvectoren voor de looptijd van onze afgeschreven lening te berekenen, is door de PMT-, IPMT- en PPMT-functies uit het numpy-financiële pakket te gebruiken. De PMT-functie biedt de vaste leningstermijn om de lening over een bepaald aantal perioden volledig te betalen. De IPMT- en PPMT-functies bieden respectievelijk de rente- en hoofdsombetalingen. Afhankelijk van de invoer van de periode, kunnen de IPMT- en PPMT-functies waarden voor een enkele periode of een aantal perioden retourneren.

Voor dit voorbeeld geven we een bereik met de volledige looptijd van de lening als invoerperiode. Als zodanig krijgen we vectorarrays met de rente in hoofdsombetalingen voor elke periode van de looptijd van de lening:

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

Je zult niets zien gebeuren in je Colab-bestand nadat je de code hebt ingevoerd - het is de basisinformatie over het lenen die nodig is om de rest van deze oefening uit te voeren. (Een lijst van alle numpy-financiële functies die ik heb gebruikt, hun definities en hun invoer, is te vinden in de officiële documentatie.)

Gebruik vervolgens Matplotlib om een ​​grafiek te maken

Hoewel het goed is om de vectoren als uitvoer te hebben, is het misschien het beste om de uitvoer in de vorm van een grafiek te visualiseren, met name als een stapelplot. Om de kaart in te stellen, gebruiken we plt , de alias voor de pyplot-verzameling van functies uit de matplotlib-bibliotheek. In ons voorbeeld voegen we een legenda toe in de linkerbovenhoek en voegen we titels toe aan de x-as en de y-as. Omdat we geen interne grens willen, zetten we de marges op 0.

Voeg nog een codecel toe en voeg de volgende code in:

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)

Zoals we kunnen zien, neemt de rente in de loop van de tijd af. Het leningsaldo neemt ook af als gevolg van de hoofdbetalingen in elke periode. Om de vaste termijn te behouden, moet de hoofdsom worden verhoogd.

Tot slot, gebruik panda's om een ​​tabel te maken

Het Pandas-pakket is het meest gebruikte Python-pakket voor het manipuleren van numerieke tabellen en tijdreeksen. Het biedt snelle, flexibele en expressieve gegevensstructuren die zijn ontworpen om het werken met relationele of gelabelde gegevens zowel eenvoudig als intuïtief te maken. We zullen een tabel maken met hoofdsom- en rentebetalingen, evenals begin- en eindsaldi van leningen voor elke periode:

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

De eerste regel code past weergave-opmaakregels toe om de tabel leesbaarder te maken door duizend-scheidingstekens toe te voegen en de getallen tot slechts twee decimalen weer te geven.

Het tweede stuk code geeft Colab de opdracht om de rentebetaling, de hoofdsom, het eindsaldo en het oorspronkelijke saldo voor elke leenperiode op te nemen. De backslashes fungeren als regeleinden omdat we niet meer dan 79 tekens in een enkele regel kunnen hebben.

Als je mee hebt gevolgd in je eigen Colab-notebook, gefeliciteerd! U hebt nu een eenvoudig portefeuilleprofiel voor leningen met geplande aflossing gecodeerd met Python.

Er is veel meer dat u kunt doen met Python voor financiën, inclusief modellering voor leningen met coupons met variabele rente die zijn gekoppeld aan een benchmarktarief en andere leningstructuren. Hopelijk heeft dit leenmodel je een idee gegeven van hoe eenvoudig financiële codering in Python kan zijn.


Bedrijfsfinanciering
  1. boekhouding
  2. Bedrijfsstrategie
  3. Bedrijf
  4. Klantrelatiebeheer
  5. financiën
  6. Aandelen beheer
  7. Persoonlijke financiën
  8. investeren
  9. Bedrijfsfinanciering
  10. begroting
  11. Besparingen
  12. verzekering
  13. schuld
  14. met pensioen gaan