So erstellen Sie ein grundlegendes Python-Cashflow-Modell für einen Kredit

Veröffentlicht: 2022-03-11

Viele Finanzexperten sind geschickt in der Verwendung von Excel zum Erstellen von Finanzmodellen. Aufgrund von Schwierigkeiten mit Peer-Review, Versionskontrolle und der Unfähigkeit, rekursive Funktionen zu bilden, ist Excel jedoch möglicherweise nicht die beste Wahl für anspruchsvollere Modelle. Trotz dieser Nachteile verwenden viele Finanzfachleute immer noch Excel, weil sie mit Programmiersprachen wie Python weniger vertraut sind.

Python ist eine der am einfachsten zu erlernenden Programmiersprachen. Da es im Hinblick auf Lesbarkeit und Benutzerfreundlichkeit entwickelt wurde, ist sein Code prägnant und nahe an einfachem Englisch. In diesem Artikel zeige ich, wie einfach es ist, ein Python-Cashflow-Modell für Kreditzahlungen zu erstellen, indem ich die grundlegendsten Funktionen, Pakete und Datenstrukturen verwende.

Um mitzumachen, müssen Sie Colaboratory (kurz „Colab“) verwenden, die kostenlose webbasierte Notebook-Anwendung von Google, mit der Sie Code schreiben und ausführen können. Colab ist ein Python-Interpreter, der Zellen verwendet, die Code, Markdown (für einfach gestalteten Text), Bilder oder andere Daten enthalten können. Colab speichert kontinuierlich die Werte Ihres Codes, während Sie schreiben, sodass Fehler oder Bugs schnell und einfach erkannt werden können, sobald sie auftreten. (Wenn Sie noch nicht einsteigen möchten, folgen Sie diesem Beispiel für ein Colab-Notizbuch.)

Stellen Sie zunächst sicher, dass Sie über die erforderlichen Werkzeuge verfügen

Wir werden ein Modell für ein amortisiertes Darlehen erstellen, bei dem eine planmäßige, regelmäßige Zahlung sowohl auf den Kreditbetrag als auch auf die Zinsen angewendet wird. Es hat eine feste Rate für jede Periode und der Zinsanteil der Zahlungen nimmt mit der Zeit ab. Für dieses Modell benötigen Sie drei Python-Bibliotheken, Sammlungen von Softwareroutinen, die verhindern, dass Entwickler Code von Grund auf neu schreiben müssen – NumPy, Pandas und Matplotlib:

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

In Colab werden die Pandas- und Matplotlib-Pakete standardmäßig installiert, sodass Sie nur die numpy-financial-Bibliothek installieren müssen, was Sie direkt von Colab aus tun können. Um numpy-financial zu installieren und alle drei Bibliotheken zu importieren, die Sie später benötigen, öffnen Sie ein neues Colab-Notebook aus dem Menü Datei und fügen Sie Folgendes in die erste Codezelle ein:

 # 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

Bevor wir zum nächsten Schritt übergehen, möchte ich den vorherigen Code erklären und warum er so geschrieben ist, wie er geschrieben ist. Obwohl der Name von numpy-financial einen Bindestrich enthält, müssen Sie beim Installieren und Importieren einen Unterstrich im Namen verwenden. (Weitere Informationen und Erläuterungen zur Installation von numpy_financial finden Sie in der Dokumentation.) Möglicherweise bemerken Sie auch Abkürzungen. Vordefinierte Aliase werden häufig für Pakete verwendet – NumPy wird als np geschrieben, Pandas als pd. Diese Aliase werden verwendet, um Ihnen zu ersparen, jedes Mal den vollständigen Namen des Pakets zu schreiben, wenn Sie es verwenden möchten, und tragen auch dazu bei, Ihren Code besser lesbar zu machen.

Verwenden Sie jetzt NumPy, um die Kreditmerkmale einzurichten

NumPy ist eine der beliebtesten Python-Bibliotheken, die Unterstützung für große, mehrdimensionale Arrays bietet, zusammen mit einer bedeutenden Sammlung von mathematischen Funktionen auf hoher Ebene, um mit diesen Arrays zu arbeiten. Die numpy-financial-Bibliothek ist ein relativ neues Paket, das aus einer Sammlung häufig verwendeter Finanzfunktionen besteht, die von der NumPy-Hauptbibliothek getrennt wurden und ihren eigenen Ehrenplatz erhalten haben.

Der einfachste Weg, die planmäßigen Zins- und Kapitalvektoren für die Laufzeit unseres amortisierten Darlehens zu berechnen, ist die Verwendung der PMT-, IPMT- und PPMT-Funktionen aus dem numpy-financial-Paket. Die PMT-Funktion stellt die feste Kreditrate bereit, um das Darlehen über eine bestimmte Anzahl von Perioden vollständig zu bezahlen. Die Funktionen IPMT und PPMT stellen die Zins- bzw. Tilgungszahlungen bereit. Abhängig von der Eingabe für den Zeitraum können die IPMT- und PPMT-Funktionen Werte für einen einzelnen Zeitraum oder mehrere Zeiträume zurückgeben.

Für dieses Beispiel geben wir einen Bereich mit der gesamten Laufzeit des Darlehens als Periodeneingabe an. Als solche erhalten wir Vektorarrays mit den Zinsen für die Tilgungszahlungen für jeden Zeitraum der Kreditlaufzeit:

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

Sie werden nichts in Ihrer Colab-Datei „sehen“, nachdem Sie den Code eingegeben haben – es sind die grundlegenden Ausleihinformationen, die für den Rest dieser Übung benötigt werden. (Eine Liste aller von mir verwendeten numpy-financial-Funktionen, ihrer Definitionen und ihrer Eingaben finden Sie in der offiziellen Dokumentation.)

Als nächstes verwenden Sie Matplotlib, um ein Diagramm zu erstellen

Obwohl es gut ist, die Vektoren als Ausgabe zu haben, kann es am besten sein, die Ausgabe in Form eines Diagramms zu visualisieren, insbesondere als Stapeldiagramm. Um das Diagramm einzurichten, verwenden wir plt , den Alias ​​für die pyplot-Sammlung von Funktionen aus der Matplotlib-Bibliothek. In unserem Beispiel fügen wir eine Legende in der oberen linken Ecke hinzu und fügen Titel auf der x-Achse und der y-Achse hinzu. Da wir keine interne Grenze wollen, setzen wir die Ränder auf 0.

Fügen Sie eine weitere Codezelle hinzu und fügen Sie den folgenden Code ein:

 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) 

Wie wir sehen können, nimmt das Interesse mit der Zeit ab. Der Darlehenssaldo verringert sich auch aufgrund der Tilgungszahlungen in jeder Periode. Um die Festrate aufrechtzuerhalten, muss der Hauptanteil erhöht werden.

Verwenden Sie schließlich Pandas, um eine Tabelle zu erstellen

Das Pandas-Paket ist das am häufigsten verwendete Python-Paket zum Bearbeiten von numerischen Tabellen und Zeitreihen. Es bietet schnelle, flexible und ausdrucksstarke Datenstrukturen, die das Arbeiten mit relationalen oder beschrifteten Daten sowohl einfach als auch intuitiv machen. Wir erstellen eine Tabelle, die Kapital- und Zinszahlungen sowie Anfangs- und Endkreditsalden für jeden Zeitraum enthält:

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

Die erste Codezeile wendet Anzeigeformatierungsregeln an, um die Tabelle besser lesbar zu machen, indem Tausendertrennzeichen hinzugefügt und die Zahlen mit nur zwei Dezimalstellen angezeigt werden.

Der zweite Codeabschnitt weist Colab an, die Zinszahlung, die Tilgungszahlung, den Endsaldo und den ursprünglichen Saldo für jede Leihfrist einzubeziehen. Die Backslashes fungieren als Zeilenumbrüche, da wir nicht mehr als 79 Zeichen in einer einzelnen Zeile haben können.

Die in der Grafik aufgeführten Beträge wurden auf zwei Dezimalstellen gekürzt.

Wenn Sie in Ihrem eigenen Colab-Notizbuch mitverfolgt haben, herzlichen Glückwunsch! Sie haben jetzt mit Python ein einfaches Darlehensportfolioprofil mit planmäßiger Amortisation codiert.

Es gibt noch viel mehr, was Sie mit Python für Finanzen tun können, einschließlich der Modellierung von Darlehen mit variablen Zinscoupons, die an einen Referenzzinssatz und andere Darlehensstrukturen gebunden sind. Hoffentlich hat Ihnen dieses Kreditmodell einen Vorgeschmack darauf gegeben, wie einfach Finanzcodierung in Python sein kann.