Как построить базовую модель денежного потока Python для кредита

Многие финансовые эксперты умеют использовать Excel для построения финансовых моделей. Однако из-за трудностей с рецензированием, контролем версий и невозможностью формирования рекурсивных функций Excel может оказаться не лучшим выбором для более сложных моделей. Несмотря на эти недостатки, многие финансовые специалисты по-прежнему используют Excel, потому что они менее уверены в таких языках программирования, как Python.

Python — один из самых простых языков программирования для изучения. Поскольку он был разработан с учетом удобочитаемости и простоты использования, его код лаконичен и близок к простому английскому языку. В этой статье я покажу, как легко построить модель денежного потока Python для платежей по кредиту, используя самые простые функции, пакеты и структуры данных.

Чтобы продолжить, вам нужно будет использовать Colaboratory («Colab» для краткости), бесплатное веб-приложение Google для ноутбуков, которое позволяет вам писать и выполнять код. Colab — это интерпретатор Python, который использует ячейки, которые могут содержать код, Markdown (для удобного оформления текста), изображения или другие данные. Colab постоянно сохраняет значения вашего кода по мере его написания, что позволяет быстро и просто выявлять ошибки или ошибки по мере их появления. (Если вы пока не хотите начинать, воспользуйтесь этим примером записной книжки Colab.)

Во-первых, убедитесь, что у вас есть необходимые инструменты

Мы будем строить модель для амортизируемой ссуды, которая имеет запланированный, периодический платеж, применяемый как к основной сумме ссуды, так и к процентам. Он имеет фиксированный взнос для каждого периода, и процентная часть платежей уменьшается с течением времени. Для этой модели вам потребуются три библиотеки Python, наборы программных подпрограмм, которые избавят разработчиков от необходимости писать код с нуля — NumPy, Pandas и Matplotlib:

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

В Colab пакеты Pandas и Matplotlib установлены по умолчанию, поэтому вам нужно установить только библиотеку numpy-financial, которую вы можете сделать прямо из Colab. Чтобы установить numpy-financial и импортировать все три библиотеки, которые вам понадобятся позже, откройте новую записную книжку Colab из меню «Файл» и вставьте следующее в первую ячейку кода:

# 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

Прежде чем мы перейдем к следующему шагу, позвольте мне объяснить предыдущий код и почему он написан именно так. Несмотря на то, что имя numpy-financial содержит дефис, вы должны использовать подчеркивание в имени при его установке и импорте. (Для получения дополнительной информации и пояснений по установке numpy_financial ознакомьтесь с документацией.) Вы также можете заметить сокращения. Для пакетов обычно используются предопределенные псевдонимы — NumPy записывается как np, Pandas — как pd. Эти псевдонимы используются, чтобы избавить вас от необходимости писать полное имя пакета каждый раз, когда вы хотите его использовать, а также помогают сделать ваш код более читабельным.

Теперь используйте NumPy для настройки характеристик кредита

NumPy — одна из самых популярных библиотек Python, добавляющая поддержку больших многомерных массивов, а также значительный набор высокоуровневых математических функций для работы с этими массивами. Библиотека numpy-financial — это относительно новый пакет, состоящий из набора часто используемых финансовых функций, которые были отделены от основной библиотеки NumPy и заняли свое почетное место.

Самый простой способ рассчитать запланированные проценты и основные векторы на весь срок действия нашего амортизируемого кредита — использовать функции PMT, IPMT и PPMT из пакета numpy-financial. Функция PMT обеспечивает фиксированный платеж по кредиту для полной выплаты кредита в течение заданного количества периодов. Функции IPMT и PPMT обеспечивают выплату процентов и основной суммы соответственно. В зависимости от ввода периода функции IPMT и PPMT могут возвращать значения для одного периода или нескольких периодов.

Для этого примера мы предоставим диапазон с полным сроком кредита в качестве входных данных периода. Таким образом, мы получим векторные массивы с процентами платежей по основному долгу за каждый период срока кредита:

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

Вы не «увидите» что-либо в вашем файле Colab после ввода кода — это основная информация о кредите, необходимая для выполнения оставшейся части этого упражнения. (Список всех финансовых функций, которые я использовал, их определения и входные данные можно найти в официальной документации.)

Далее используйте Matplotlib для создания диаграммы

Хотя хорошо иметь векторы в качестве выходных данных, может быть лучше визуализировать выходные данные в виде диаграммы, в частности, в виде стековой диаграммы. Для настройки диаграммы мы будем использовать plt , псевдоним для набора функций pyplot из библиотеки matplotlib. В нашем примере мы добавим легенду в верхний левый угол и добавим заголовки к оси X и оси Y. Поскольку нам не нужна внутренняя граница, мы устанавливаем поля равными 0.

Добавьте еще одну ячейку кода и вставьте следующий код:

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)

Как видим, со временем интерес снижается. Остаток кредита также уменьшается за счет основных платежей в каждом периоде. Чтобы поддерживать фиксированный платеж, основная часть должна увеличиваться.

Наконец, используйте Pandas для создания таблицы

Пакет Pandas является наиболее часто используемым пакетом Python для работы с числовыми таблицами и временными рядами. Он предоставляет быстрые, гибкие и выразительные структуры данных, разработанные для того, чтобы сделать работу с реляционными или размеченными данными простой и интуитивно понятной. Мы создадим таблицу, которая будет включать выплаты основного долга и процентов, а также начальный и конечный остаток кредита за каждый период:

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

Первая строка кода применяет правила форматирования отображения, чтобы сделать таблицу более удобочитаемой, добавляя разделители тысяч и отображая числа только до двух знаков после запятой.

Второй фрагмент кода указывает Colab включать процентные платежи, основной платеж, конечный баланс и первоначальный баланс для каждого периода кредита. Обратная косая черта действует как разрыв строки, потому что в одной строке не может быть более 79 символов.

Если вы следите за своим блокнотом Colab, поздравляем! Теперь вы написали простой профиль портфеля ссуд с запланированной амортизацией с помощью Python.

С помощью Python вы можете делать гораздо больше для финансов, в том числе моделировать ссуды с плавающими процентными купонами, привязанными к контрольной ставке и другим структурам ссуды. Надеюсь, эта кредитная модель дала вам представление о том, насколько простым может быть финансовое кодирование на Python.


Корпоративное финансирование
  1. Бухгалтерский учет
  2. Бизнес стратегия
  3. Бизнес
  4. Управление взаимоотношениями с клиентами
  5. финансы
  6. Управление запасами
  7. Личные финансы
  8. вкладывать деньги
  9. Корпоративное финансирование
  10. бюджет
  11. Экономия
  12. страхование
  13. долг
  14. выходить на пенсию