How to Build a Basic Python Cash Flow Model for a Loan!

Many finance experts are skilled at using Stand out to construct financial models. However, due to problems with peer review, version control, and also the lack of ability to create recursive functions, Stand out might not be the best option for additional sophisticated models. Despite these drawbacks, many financial professionals still use Stand out since they’re less at ease with programming languages for example Python.

Python is among the easiest programming languages to understand. Since it was created with readability and simplicity of use in your mind, its code is concise and shut to plain British. In the following paragraphs, I show how easy it’s to construct a Python income model for loan repayments using the most fundamental functions, packages, and knowledge structures.

To follow along with along, you will have to use Colaboratory (“Colab” for brief), Google’s free web-based notebook application that allows you to write and execute code. Colab is really a Python interpreter that utilizes cells that may contain code, Markdown (for easily styled text), images, or any other data. Colab continuously stores the of the code while you write, which makes it simple and quick to trap mistakes or bugs because they appear. (Should you not want enter into at this time, follow in addition to this example Colab notebook.)

First, Make Certain You will find the Tools You’ll Need

We are creating a model to have an amortized loan which has a scheduled, periodic payment put on both loan’s principal and also the interest. It features a fixed installment for every period and also the interest area of the payments decreases with time. You’ll need three Python libraries, collections of software routines that prevent developers from getting to create code on your own, with this model-NumPy, Pandas, and Matplotlib:




In Colab, the Pandas and Matplotlib packages are set up automatically, so you simply need to install the numpy-financial library, which you’ll do from Colab. To set up numpy-financial, and import the 3 libraries you’ll need later, open a brand new Colab notebook in the File menu, and paste the next in to the first code cell:

# initial set-up

!personal injury protection install numpy_financial

import pandas as pd

import numpy_financial as npf

import matplotlib.pyplot as plt

from collections import namedtuple

Before we proceed to the next phase, allow me to explain the prior code and why it’s written the way in which it’s written. Despite the fact that numpy-financial’s name includes a hyphen, you have to make use of an underscore within the name whenever you install and import it. (To learn more and explanation on installing numpy_financial, browse the documentation.) If you notice abbreviations, too. Pre-defined aliases are generally employed for packages-NumPy is presented as np, Pandas as pd. These aliases are utilized to protect you from writing the entire name from the package each time you want to utilize it as well as help make your code more readable.

Now, Use NumPy to setup the borrowed funds Characteristics

NumPy is among the most widely used Python libraries adding support for big, multidimensional arrays, plus a significant assortment of high-level mathematical functions to function on individuals arrays. The numpy-financial library is really a relatively recent package comprised of an accumulation of generally used financial functions which have been separated in the primary NumPy library and given their very own pride of place.

The easiest method to calculate the scheduled interest and principal vectors for that existence in our amortized loan is by using the PMT, IPMT, and PPMT functions in the numpy-financial package. The PMT function offers the fixed loan installment to pay for the borrowed funds entirely more than a given quantity of periods. The IPMT and PPMT functions supply the interest and principal payments, correspondingly. With respect to the input towards the period, the IPMT and PPMT functions can return values for any single period or numerous periods.

Let’s imagine, we’ll give a range using the full existence from the loan because the period input. As a result, we’ll get vector arrays using the curiosity about principal payments for every loan period existence:

# loan characteristics

original_balance = 500_000

coupon = .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)

You will not “see” anything take place in your Colab file after entering the code-it’s the fundamental loan information required to take it from there of the exercise. (A summary of all of the numpy-financial functions I’ve used, their definitions, as well as their inputs, are available in the state documentation.)

Next, Use Matplotlib to produce a Chart

Even though it is good to achieve the vectors being an output, it may be ideal to visualise the output by means of a chart, particularly like a stack plot. To setup the chart, we’ll use plt, the alias for that pyplot assortment of functions in the matplotlib library. Within our example, we’ll give a legend within the top left corner and add titles towards the x-axis and also the y-axis. As we don’t want an interior border, we set the margins to .

Add another code cell, and insert the next code:

plt.stackplot(periods, interest_payment, principal_payment,

labels=[‘Interest’, ‘Principal’])

plt.legend(loc=’upper left’)



plt.margins(, )

As possible see, the eye decreases with time. The borrowed funds balance also decreases because of the principal payments in every period. To keep the fixed installment, the main portion needs to increase.

Finally, Use Pandas to produce a Table

The Pandas package is easily the most generally used Python package for manipulating statistical tables and time series. It offers fast, flexible, and significant data structures made to make dealing with relational or labeled data both simple and easy , intuitive. We’ll produce a table which includes principal and charges, in addition to beginning and ending loan balances for every period:

_# pandas float formatting_

pd.options.display.float_format = ”.format

_# income table_

cf_data =

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[‘Beginning Balance’] = [original_balance]

list(cf_table[‘Ending Balance’])[:-1]

cf_table = cf_table[[‘Beginning Balance’, ‘Payment’, ‘Interest’,

‘Principal’, ‘Ending Balance’]]


The very first type of code applies display formatting rules to help make the table more readable with the addition of 1000 separators and displaying the figures to simply two decimal places.

The 2nd slice of code instructs Colab to incorporate interest payment, principal payment, ending balance, and original balance for every loan period. The backslashes behave as line breaks because we can’t convey more than 79 figures in one line.

Amounts surfaced within the chart happen to be shortened to 2 decimal places.

If you’ve been following along in your Colab notebook, congratulations! You have already coded an easy scheduled amortization loan portfolio profile using Python.

There’s a lot more that you can do with Python for finance, including modeling for loans with variable interest coupons associated with a benchmark rate along with other loan structures. Hopefully this loan model has provided a taste of methods simple financial coding in Python could be.

Leave a Reply

Your email address will not be published. Required fields are marked *