Come costruire un modello di flusso di cassa Python di base per un prestito

Pubblicato: 2022-03-11

Molti esperti finanziari sono abili nell'utilizzo di Excel per creare modelli finanziari. Tuttavia, a causa delle difficoltà con la revisione tra pari, il controllo della versione e l'impossibilità di formare funzioni ricorsive, Excel potrebbe non essere la scelta migliore per modelli più sofisticati. Nonostante questi inconvenienti, molti professionisti finanziari utilizzano ancora Excel perché hanno meno dimestichezza con linguaggi di programmazione come Python.

Python è uno dei linguaggi di programmazione più facili da imparare. Poiché è stato progettato pensando alla leggibilità e alla facilità d'uso, il suo codice è conciso e vicino all'inglese semplice. In questo articolo, mostro quanto sia facile costruire un modello di flusso di cassa Python per i pagamenti di prestiti utilizzando le funzioni, i pacchetti e le strutture dati più basilari.

Per seguire, dovrai utilizzare Colaboratory ("Colab" in breve), l'applicazione gratuita per notebook basata sul Web di Google che ti consente di scrivere ed eseguire codice. Colab è un interprete Python che utilizza celle che possono contenere codice, Markdown (per testo facilmente stilizzato), immagini o altri dati. Colab memorizza continuamente i valori del tuo codice mentre scrivi, rendendo semplice e veloce rilevare errori o bug man mano che appaiono. (Se non vuoi ancora entrare, segui questo quaderno Colab di esempio.)

Innanzitutto, assicurati di avere gli strumenti di cui hai bisogno

Costruiremo un modello per un prestito ammortizzato che prevede un pagamento programmato e periodico applicato sia al capitale del prestito che agli interessi. Ha una rata fissa per ogni periodo e la quota di interessi dei pagamenti diminuisce nel tempo. Avrai bisogno di tre librerie Python, raccolte di routine software che impediscono agli sviluppatori di dover scrivere codice da zero, per questo modello: NumPy, Pandas e Matplotlib:

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

In Colab, i pacchetti Pandas e Matplotlib sono installati per impostazione predefinita, quindi devi solo installare la libreria numpy-financial, che puoi fare direttamente da Colab. Per installare numpy-financial e importare tutte e tre le librerie di cui avrai bisogno in seguito, apri un nuovo notebook Colab dal menu File e incolla quanto segue nella prima cella del codice:

 # 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

Prima di passare al passaggio successivo, lascia che ti spieghi il codice precedente e perché è scritto nel modo in cui è scritto. Anche se il nome di numpy-financial contiene un trattino, devi usare un trattino basso nel nome quando lo installi e lo importi. (Per ulteriori informazioni e spiegazioni sull'installazione di numpy_financial, consulta la documentazione.) Potresti notare anche abbreviazioni. Gli alias predefiniti sono comunemente usati per i pacchetti: NumPy è scritto come np, Pandas come pd. Questi alias vengono utilizzati per evitarti di scrivere il nome completo del pacchetto ogni volta che vorresti usarlo e anche per rendere il tuo codice più leggibile.

Ora, usa NumPy per impostare le caratteristiche del prestito

NumPy è una delle librerie Python più popolari che aggiunge il supporto per array multidimensionali di grandi dimensioni, insieme a una raccolta significativa di funzioni matematiche di alto livello per operare su quegli array. La libreria numpy-financial è un pacchetto relativamente nuovo composto da una raccolta di funzioni finanziarie di uso comune che sono state separate dalla libreria principale NumPy e a cui è stato assegnato un posto d'onore.

Il modo più semplice per calcolare l'interesse programmato e i principali vettori per la vita del nostro prestito ammortizzato è utilizzare le funzioni PMT, IPMT e PPMT dal pacchetto numpy-financial. La funzione PMT prevede la rata fissa del mutuo per il pagamento integrale del mutuo in un determinato numero di periodi. Le funzioni IPMT e PPMT forniscono rispettivamente i pagamenti di interessi e capitale. A seconda dell'input del periodo, le funzioni IPMT e PPMT possono restituire valori per un singolo periodo o più periodi.

Per questo esempio, forniremo un intervallo con l'intera durata del prestito come input del periodo. Pertanto, otterremo array vettoriali con gli interessi sui pagamenti principali per ciascun periodo della vita del prestito:

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

Non "vedrai" nulla che accada nel tuo file Colab dopo aver inserito il codice: sono le informazioni di base sul prestito necessarie per svolgere il resto di questo esercizio. (Un elenco di tutte le funzioni numpy-finanziarie che ho usato, le loro definizioni e i loro input, può essere trovato nella documentazione ufficiale.)

Quindi, usa Matplotlib per creare un grafico

Sebbene sia utile avere i vettori come output, potrebbe essere meglio visualizzare l'output sotto forma di grafico, in particolare come diagramma di stack. Per impostare il grafico, useremo plt , l'alias per la raccolta di funzioni pyplot dalla libreria matplotlib. Nel nostro esempio, aggiungeremo una legenda nell'angolo in alto a sinistra e aggiungeremo titoli all'asse x e all'asse y. Poiché non vogliamo un bordo interno, impostiamo i margini su 0.

Aggiungi un'altra cella di codice e inserisci il codice seguente:

 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) 

Come possiamo vedere, l'interesse diminuisce nel tempo. Il saldo del prestito diminuisce anche a causa dei pagamenti di capitale in ogni periodo. Per mantenere la rata fissa, la quota capitale deve aumentare.

Infine, usa i panda per creare una tabella

Il pacchetto Pandas è il pacchetto Python più comunemente usato per manipolare tabelle numeriche e serie temporali. Fornisce strutture dati rapide, flessibili ed espressive progettate per rendere facile e intuitivo il lavoro con dati relazionali o etichettati. Creeremo una tabella che include i pagamenti di capitale e interessi, nonché i saldi del prestito iniziale e finale per ciascun periodo:

 _# 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 prima riga di codice applica le regole di formattazione della visualizzazione per rendere la tabella più leggibile aggiungendo migliaia di separatori e visualizzando i numeri solo con due cifre decimali.

Il secondo pezzo di codice indica a Colab di includere il pagamento degli interessi, il pagamento principale, il saldo finale e il saldo originale per ciascun periodo di prestito. Le barre inverse fungono da interruzioni di riga perché non possiamo avere più di 79 caratteri in una singola riga.

Gli importi emersi nel grafico sono stati ridotti a due cifre decimali.

Se hai seguito il tuo taccuino Colab, congratulazioni! Ora hai codificato un semplice profilo di portafoglio di prestiti ad ammortamento programmato utilizzando Python.

C'è molto di più che puoi fare con Python per la finanza, inclusa la modellazione per prestiti con cedole a interesse variabile legate a un tasso di riferimento e altre strutture di prestito. Si spera che questo modello di prestito ti abbia dato un assaggio di quanto possa essere semplice la codifica finanziaria in Python.