Jak zbudować podstawowy model przepływów pieniężnych w Pythonie dla pożyczki?

Opublikowany: 2022-03-11

Wielu ekspertów finansowych jest biegłych w używaniu programu Excel do tworzenia modeli finansowych. Jednak ze względu na trudności z recenzją, kontrolą wersji i brakiem możliwości tworzenia funkcji rekurencyjnych, Excel może nie być najlepszym wyborem dla bardziej zaawansowanych modeli. Pomimo tych wad, wielu specjalistów finansowych nadal używa programu Excel, ponieważ są mniej pewni języków programowania, takich jak Python.

Python to jeden z najłatwiejszych języków programowania. Ponieważ został zaprojektowany z myślą o czytelności i łatwości użytkowania, jego kod jest zwięzły i zbliżony do zwykłego języka angielskiego. W tym artykule pokazuję, jak łatwo jest zbudować model przepływów pieniężnych w Pythonie dla spłat pożyczek przy użyciu najbardziej podstawowych funkcji, pakietów i struktur danych.

Aby kontynuować, musisz użyć Colaboratory (w skrócie „Colab”), bezpłatnej internetowej aplikacji do notatek Google, która umożliwia pisanie i wykonywanie kodu. Colab to interpreter Pythona, który używa komórek, które mogą zawierać kod, Markdown (dla łatwego stylizowania tekstu), obrazy lub inne dane. Colab stale przechowuje wartości Twojego kodu podczas pisania, dzięki czemu można szybko i łatwo wykryć pojawiające się błędy lub błędy. (Jeśli nie chcesz jeszcze wskoczyć, postępuj zgodnie z tym przykładowym notatnikiem Colab.)

Najpierw upewnij się, że masz potrzebne narzędzia

Będziemy budować model amortyzowanej pożyczki, w której zaplanowana, okresowa spłata dotyczy zarówno kwoty głównej pożyczki, jak i odsetek. Ma stałą ratę dla każdego okresu, a część odsetkowa płatności maleje z biegiem czasu. Do tego modelu potrzebne będą trzy biblioteki Pythona, kolekcje procedur programowych, które uniemożliwiają programistom pisanie kodu od zera — NumPy, Pandas i Matplotlib:

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

W Colab pakiety Pandas i Matplotlib są instalowane domyślnie, więc wystarczy zainstalować bibliotekę numpy-financial, którą możesz zrobić bezpośrednio z Colab. Aby zainstalować numpy-finansowe i zaimportować wszystkie trzy biblioteki, które będą potrzebne później, otwórz nowy notatnik Colab z menu Plik i wklej następujące elementy do pierwszej komórki kodu:

 # 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

Zanim przejdziemy do następnego kroku, wyjaśnię poprzedni kod i dlaczego jest napisany tak, jak jest napisany. Mimo że nazwa numpy-financial zawiera myślnik, podczas instalowania i importowania w nazwie należy użyć podkreślenia. (Aby uzyskać więcej informacji i wyjaśnień na temat instalacji numpy_financial, zapoznaj się z dokumentacją.) Możesz również zauważyć skróty. Predefiniowane aliasy są powszechnie używane w przypadku pakietów — NumPy jest napisane jako np, Pandas jako pd. Te aliasy są używane, aby uchronić Cię przed pisaniem pełnej nazwy pakietu za każdym razem, gdy chcesz jej użyć, a także pomagają uczynić Twój kod bardziej czytelnym.

Teraz użyj NumPy, aby skonfigurować charakterystykę pożyczki

NumPy to jedna z najpopularniejszych bibliotek Pythona, która dodaje obsługę dużych, wielowymiarowych tablic, wraz ze znaczną kolekcją wysokopoziomowych funkcji matematycznych do działania na tych tablicach. Biblioteka numpy-finansowa jest stosunkowo nowym pakietem składającym się ze zbioru powszechnie używanych funkcji finansowych, które zostały oddzielone od głównej biblioteki NumPy i mają swoje własne miejsce.

Najprostszym sposobem na obliczenie planowanych wektorów odsetek i kapitału przez cały okres trwania naszej amortyzowanej pożyczki jest użycie funkcji PMT, IPMT i PPMT z pakietu numpy-finanse. Funkcja PMT zapewnia stałą ratę kredytu na spłatę kredytu w całości przez określoną liczbę okresów. Funkcje IPMT i PPMT zapewniają odpowiednio spłatę odsetek i kwoty głównej. W zależności od danych wejściowych do okresu funkcje IPMT i PPMT mogą zwracać wartości dla pojedynczego okresu lub kilku okresów.

W tym przykładzie jako dane wejściowe okresu podamy zakres z pełnym okresem spłaty pożyczki. W ten sposób otrzymamy tablice wektorowe z odsetkami od rat kapitałowych za każdy okres trwania pożyczki:

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

Po wprowadzeniu kodu „nie zobaczysz” niczego w pliku Colab — są to podstawowe informacje o pożyczce potrzebne do wykonania dalszej części tego ćwiczenia. (Lista wszystkich numpy-finansowych funkcji, z których korzystałem, ich definicje i dane wejściowe, można znaleźć w oficjalnej dokumentacji.)

Następnie użyj Matplotlib, aby utworzyć wykres

Chociaż dobrze jest mieć wektory jako dane wyjściowe, najlepiej zwizualizować dane wyjściowe w postaci wykresu, w szczególności jako wykresu stosu. Aby skonfigurować wykres, użyjemy plt , aliasu kolekcji funkcji pyplot z biblioteki matplotlib. W naszym przykładzie dodamy legendę w lewym górnym rogu i dodamy tytuły na osi X i Y. Ponieważ nie chcemy granicy wewnętrznej, ustawiamy marginesy na 0.

Dodaj kolejną komórkę kodu i wstaw następujący kod:

 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) 

Jak widać, z czasem zainteresowanie maleje. Saldo pożyczki zmniejsza się również ze względu na spłatę kapitału w każdym okresie. Aby utrzymać stałą ratę, część kapitałowa musi wzrosnąć.

Na koniec użyj pand do stworzenia stołu

Pakiet Pandas jest najczęściej używanym pakietem Pythona do manipulowania tabelami liczbowymi i szeregami czasowymi. Zapewnia szybkie, elastyczne i ekspresyjne struktury danych, zaprojektowane tak, aby praca z danymi relacyjnymi lub oznaczonymi etykietami była łatwa i intuicyjna. Stworzymy tabelę zawierającą spłaty kapitału i odsetek oraz salda początkowe i końcowe kredytu dla każdego okresu:

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

Pierwszy wiersz kodu stosuje reguły formatowania wyświetlania, aby uczynić tabelę bardziej czytelną przez dodanie separatorów tysięcy i wyświetlanie liczb z dokładnością do dwóch miejsc po przecinku.

Drugi fragment kodu instruuje firmę Colab, aby uwzględniła wypłatę odsetek, spłatę kwoty głównej, saldo końcowe i saldo pierwotne dla każdego okresu pożyczki. Ukośniki odwrotne działają jak podziały wiersza, ponieważ nie możemy mieć więcej niż 79 znaków w jednym wierszu.

Kwoty na wykresie zostały skrócone do dwóch miejsc po przecinku.

Jeśli śledziłeś swój własny notatnik Colab, gratulacje! Zakodowałeś teraz prosty profil portfela pożyczek z planową amortyzacją za pomocą Pythona.

Z Pythonem można zrobić znacznie więcej dla finansów, w tym modelowanie pożyczek ze zmiennymi kuponami odsetkowymi powiązanymi ze stopą referencyjną i innymi strukturami pożyczek. Mam nadzieję, że ten model pożyczki dał ci przedsmak tego, jak proste może być kodowanie finansowe w Pythonie.