Como construir um modelo básico de fluxo de caixa Python para um empréstimo
Publicados: 2022-03-11Muitos especialistas financeiros são adeptos do uso do Excel para construir modelos financeiros. No entanto, devido às dificuldades com revisão por pares, controle de versão e incapacidade de formar funções recursivas, o Excel pode não ser a melhor escolha para modelos mais sofisticados. Apesar dessas desvantagens, muitos profissionais financeiros ainda usam o Excel porque estão menos confiantes com linguagens de programação como o Python.
Python é uma das linguagens de programação mais fáceis de aprender. Por ter sido projetado com legibilidade e facilidade de uso em mente, seu código é conciso e próximo ao inglês simples. Neste artigo, mostro como é fácil construir um modelo de fluxo de caixa Python para pagamentos de empréstimos usando as funções, pacotes e estruturas de dados mais básicos.
Para acompanhar, você precisará usar o Colaboratory (“Colab”, abreviado), o aplicativo de notebook gratuito baseado na web do Google que permite escrever e executar código. Colab é um interpretador Python que usa células que podem conter código, Markdown (para texto com estilo fácil), imagens ou outros dados. O Colab armazena continuamente os valores do seu código à medida que você escreve, tornando rápido e simples detectar erros ou bugs à medida que eles aparecem. (Se você não quiser pular ainda, siga este exemplo de notebook Colab.)
Primeiro, certifique-se de ter as ferramentas necessárias
Estaremos construindo um modelo para um empréstimo amortizado que tem um pagamento programado e periódico aplicado tanto ao principal quanto aos juros do empréstimo. Tem uma parcela fixa para cada período e a parcela de juros dos pagamentos diminui com o tempo. Você precisará de três bibliotecas Python, coleções de rotinas de software que evitam que os desenvolvedores tenham que escrever código do zero, para este modelo—NumPy, Pandas e Matplotlib:
-
numpy-financial==1.0.0 -
pandas==1.2.3 -
matplotlib==3.2.2
No Colab, os pacotes Pandas e Matplotlib são instalados por padrão, então você só precisa instalar a biblioteca numpy-financial, que você pode fazer diretamente do Colab. Para instalar o numpy-financial e importar todas as três bibliotecas necessárias posteriormente, abra um novo bloco de anotações do Colab no menu Arquivo e cole o seguinte na primeira célula de código:
# initial set-up !pip install numpy_financial import pandas as pd import numpy_financial as npf import matplotlib.pyplot as plt from collections import namedtupleAntes de passarmos para a próxima etapa, deixe-me explicar o código anterior e por que ele está escrito da maneira que está escrito. Mesmo que o nome de numpy-financial contenha um hífen, você deve usar um sublinhado no nome ao instalá-lo e importá-lo. (Para mais informações e explicações sobre como instalar numpy_financial, confira a documentação.) Você também pode notar abreviações. Aliases pré-definidos são comumente usados para pacotes—NumPy é escrito como np, Pandas como pd. Esses aliases são usados para evitar que você escreva o nome completo do pacote toda vez que quiser usá-lo e também ajudam a tornar seu código mais legível.
Agora, use o NumPy para configurar as características do empréstimo
O NumPy é uma das bibliotecas Python mais populares, adicionando suporte para arrays grandes e multidimensionais, juntamente com uma coleção significativa de funções matemáticas de alto nível para operar nesses arrays. A biblioteca numpy-financial é um pacote relativamente novo composto por uma coleção de funções financeiras comumente usadas que foram separadas da biblioteca principal do NumPy e receberam seu próprio lugar de destaque.
A maneira mais simples de calcular os vetores de juros e principal programados para a vida de nosso empréstimo amortizado é usar as funções PMT, IPMT e PPMT do pacote numpy-financial. A função PMT fornece a parcela fixa do empréstimo para pagar o empréstimo integralmente em um determinado número de períodos. As funções IPMT e PPMT fornecem os pagamentos de juros e principal, respectivamente. Dependendo da entrada para o período, as funções IPMT e PPMT podem retornar valores para um único período ou vários períodos.
Para este exemplo, forneceremos um intervalo com a vida útil completa do empréstimo como entrada do período. Como tal, obteremos matrizes de vetores com os juros nos pagamentos do principal para cada período da vida do empréstimo:

# 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)Você não vai “ver” nada acontecer em seu arquivo Colab depois de inserir o código — são as informações básicas de empréstimo necessárias para fazer o restante deste exercício. (Uma lista de todas as funções numpy-financeiras que usei, suas definições e suas entradas podem ser encontradas na documentação oficial.)
Em seguida, use o Matplotlib para criar um gráfico
Embora seja bom ter os vetores como saída, pode ser melhor visualizar a saída na forma de um gráfico, especificamente como um gráfico de pilha. Para configurar o gráfico, usaremos plt , o alias para a coleção pyplot de funções da biblioteca matplotlib. Em nosso exemplo, adicionaremos uma legenda no canto superior esquerdo e adicionaremos títulos ao eixo x e ao eixo y. Como não queremos uma borda interna, definimos as margens para 0.
Adicione outra célula de código e insira o seguinte código:
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) Como podemos ver, o interesse diminui ao longo do tempo. O saldo do empréstimo também diminui devido aos pagamentos de principal em cada período. Para manter a parcela fixa, a parcela do principal tem que aumentar.
Finalmente, use Pandas para criar uma tabela
O pacote Pandas é o pacote Python mais usado para manipular tabelas numéricas e séries temporais. Ele fornece estruturas de dados rápidas, flexíveis e expressivas projetadas para tornar o trabalho com dados relacionais ou rotulados fácil e intuitivo. Criaremos uma tabela que inclui pagamentos de principal e juros, bem como saldos de empréstimos iniciais e finais para cada período:
_# 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)A primeira linha de código aplica regras de formatação de exibição para tornar a tabela mais legível adicionando separadores de milhar e exibindo os números com apenas duas casas decimais.
A segunda parte do código instrui o Colab a incluir pagamento de juros, pagamento de principal, saldo final e saldo original para cada período de empréstimo. As barras invertidas funcionam como quebras de linha porque não podemos ter mais de 79 caracteres em uma única linha.
Se você tem acompanhado em seu próprio notebook Colab, parabéns! Agora você codificou um perfil simples de carteira de empréstimos de amortização programada usando Python.
Há muito mais que você pode fazer com o Python para finanças, incluindo modelagem para empréstimos com cupons de juros variáveis vinculados a uma taxa de referência e outras estruturas de empréstimo. Espero que este modelo de empréstimo tenha lhe dado uma amostra de como a codificação financeira em Python pode ser simples.
