Comment créer un modèle de flux de trésorerie Python de base pour un prêt

Publié: 2022-03-11

De nombreux experts financiers savent utiliser Excel pour créer des modèles financiers. Cependant, en raison des difficultés liées à l'examen par les pairs, au contrôle de version et à l'incapacité de former des fonctions récursives, Excel n'est peut-être pas le meilleur choix pour les modèles plus sophistiqués. Malgré ces inconvénients, de nombreux professionnels de la finance utilisent encore Excel car ils sont moins à l'aise avec les langages de programmation tels que Python.

Python est l'un des langages de programmation les plus faciles à apprendre. Parce qu'il a été conçu dans un souci de lisibilité et de facilité d'utilisation, son code est concis et proche de l'anglais simple. Dans cet article, je montre à quel point il est facile de créer un modèle de flux de trésorerie Python pour les remboursements de prêts en utilisant les fonctions, packages et structures de données les plus élémentaires.

Pour suivre, vous devrez utiliser Colaboratory ("Colab" en abrégé), l'application Web gratuite de bloc-notes de Google qui vous permet d'écrire et d'exécuter du code. Colab est un interpréteur Python qui utilise des cellules pouvant contenir du code, Markdown (pour un texte facile à styliser), des images ou d'autres données. Colab stocke en permanence les valeurs de votre code au fur et à mesure que vous écrivez, ce qui permet de détecter rapidement et simplement les erreurs ou les bugs au fur et à mesure qu'ils apparaissent. (Si vous ne voulez pas vous lancer tout de suite, suivez cet exemple de bloc-notes Colab.)

Tout d'abord, assurez-vous d'avoir les outils dont vous avez besoin

Nous allons construire un modèle pour un prêt amorti qui a un paiement périodique programmé appliqué à la fois au principal du prêt et aux intérêts. Il a un versement fixe pour chaque période et la partie des intérêts des paiements diminue avec le temps. Vous aurez besoin de trois bibliothèques Python, des collections de routines logicielles qui empêchent les développeurs d'avoir à écrire du code à partir de zéro, pour ce modèle : NumPy, Pandas et Matplotlib :

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

Dans Colab, les packages Pandas et Matplotlib sont installés par défaut, il vous suffit donc d'installer la bibliothèque numpy-financial, ce que vous pouvez faire directement depuis Colab. Pour installer numpy-financial et importer les trois bibliothèques dont vous aurez besoin plus tard, ouvrez un nouveau bloc-notes Colab à partir du menu Fichier et collez ce qui suit dans la première cellule de code :

 # 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

Avant de passer à l'étape suivante, laissez-moi vous expliquer le code précédent et pourquoi il est écrit comme il est écrit. Même si le nom de numpy-financial contient un trait d'union, vous devez utiliser un trait de soulignement dans le nom lorsque vous l'installez et l'importez. (Pour plus d'informations et d'explications sur l'installation de numpy_financial, consultez la documentation.) Vous pouvez également remarquer des abréviations. Les alias prédéfinis sont couramment utilisés pour les packages - NumPy est écrit comme np, Pandas comme pd. Ces alias sont utilisés pour vous éviter d'écrire le nom complet du package chaque fois que vous souhaitez l'utiliser et contribuent également à rendre votre code plus lisible.

Maintenant, utilisez NumPy pour configurer les caractéristiques du prêt

NumPy est l'une des bibliothèques Python les plus populaires, ajoutant la prise en charge de grands tableaux multidimensionnels, ainsi qu'une collection importante de fonctions mathématiques de haut niveau pour opérer sur ces tableaux. La bibliothèque numpy-financial est un package relativement nouveau composé d'une collection de fonctions financières couramment utilisées qui ont été séparées de la bibliothèque NumPy principale et ont reçu leur propre place de choix.

Le moyen le plus simple de calculer les vecteurs d'intérêt et de principal prévus pour la durée de vie de notre prêt amorti consiste à utiliser les fonctions PMT, IPMT et PPMT du package numpy-financial. La fonction PMT fournit la tranche de prêt fixe pour rembourser le prêt en totalité sur un nombre de périodes donné. Les fonctions IPMT et PPMT fournissent respectivement les paiements d'intérêts et de principal. Selon l'entrée de la période, les fonctions IPMT et PPMT peuvent renvoyer des valeurs pour une seule période ou plusieurs périodes.

Pour cet exemple, nous fournirons une plage avec la durée de vie complète du prêt comme entrée de période. Ainsi, nous obtiendrons des tableaux vectoriels avec les intérêts sur les remboursements de principal pour chaque période de la durée du prêt :

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

Vous ne « verrez » rien se produire dans votre fichier Colab après avoir saisi le code. Il s'agit des informations de prêt de base nécessaires pour effectuer le reste de cet exercice. (Une liste de toutes les fonctions numpy-financial que j'ai utilisées, leurs définitions et leurs entrées peuvent être trouvées dans la documentation officielle.)

Ensuite, utilisez Matplotlib pour créer un graphique

Bien qu'il soit bon d'avoir les vecteurs en sortie, il peut être préférable de visualiser la sortie sous la forme d'un graphique, en particulier sous la forme d'un tracé de pile. Pour configurer le graphique, nous utiliserons plt , l'alias de la collection pyplot de fonctions de la bibliothèque matplotlib. Dans notre exemple, nous allons ajouter une légende dans le coin supérieur gauche et ajouter des titres sur l'axe des x et l'axe des y. Comme nous ne voulons pas de frontière intérieure, nous fixons les marges à 0.

Ajoutez une autre cellule de code et insérez le code suivant :

 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) 

Comme on peut le voir, l'intérêt diminue avec le temps. Le solde du prêt diminue également en raison des remboursements du principal à chaque période. Pour maintenir l'acompte fixe, la part principale doit augmenter.

Enfin, utilisez des pandas pour créer un tableau

Le package Pandas est le package Python le plus couramment utilisé pour manipuler des tables numériques et des séries chronologiques. Il fournit des structures de données rapides, flexibles et expressives conçues pour rendre le travail avec des données relationnelles ou étiquetées à la fois simple et intuitif. Nous allons créer un tableau qui comprend les paiements de principal et d'intérêts, ainsi que les soldes de début et de fin de prêt pour chaque période :

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

La première ligne de code applique des règles de formatage d'affichage pour rendre le tableau plus lisible en ajoutant des séparateurs de milliers et en affichant les nombres à seulement deux décimales.

Le deuxième morceau de code demande à Colab d'inclure le paiement des intérêts, le paiement du principal, le solde final et le solde initial pour chaque période de prêt. Les barres obliques inverses agissent comme des sauts de ligne car nous ne pouvons pas avoir plus de 79 caractères sur une seule ligne.

Les montants apparaissant dans le tableau ont été raccourcis à deux décimales.

Si vous avez suivi dans votre propre carnet Colab, félicitations ! Vous avez maintenant codé un simple profil de portefeuille de prêts à amortissement programmé à l'aide de Python.

Vous pouvez faire beaucoup plus avec Python pour la finance, y compris la modélisation de prêts avec des coupons à intérêt variable liés à un taux de référence et à d'autres structures de prêt. J'espère que ce modèle de prêt vous a donné un avant-goût de la simplicité du codage financier en Python.