Cách xây dựng mô hình dòng tiền Python cơ bản cho khoản vay

Nhiều chuyên gia tài chính rất thành thạo trong việc sử dụng Excel để xây dựng các mô hình tài chính. Tuy nhiên, vì những khó khăn với việc xem xét ngang hàng, kiểm soát phiên bản và không có khả năng tạo các hàm đệ quy, Excel có thể không phải là lựa chọn tốt nhất cho các mô hình phức tạp hơn. Bất chấp những hạn chế này, nhiều chuyên gia tài chính vẫn sử dụng Excel vì họ kém tự tin với các ngôn ngữ lập trình như Python.

Python là một trong những ngôn ngữ lập trình dễ học nhất. Bởi vì nó được thiết kế với tính dễ đọc và dễ sử dụng, mã của nó ngắn gọn và gần với tiếng Anh thuần túy. Trong bài viết này, tôi chỉ ra cách dễ dàng xây dựng mô hình dòng tiền Python cho các khoản thanh toán khoản vay bằng cách sử dụng các hàm, gói và cấu trúc dữ liệu cơ bản nhất.

Để làm theo, bạn sẽ cần sử dụng Colaboratory (viết tắt là “Colab”), ứng dụng sổ ghi chép dựa trên web miễn phí của Google cho phép bạn viết và thực thi mã. Colab là một trình thông dịch Python sử dụng các ô có thể chứa mã, Markdown (cho văn bản dễ tạo kiểu), hình ảnh hoặc dữ liệu khác. Colab liên tục lưu trữ các giá trị mã của bạn khi bạn viết, giúp việc phát hiện lỗi hoặc lỗi khi chúng xuất hiện nhanh chóng và đơn giản. (Nếu bạn chưa muốn tham gia, hãy làm theo sổ tay Colab mẫu này.)

Đầu tiên, Đảm bảo rằng bạn có Công cụ mình cần

Chúng tôi sẽ xây dựng một mô hình cho khoản vay trả dần có khoản thanh toán theo lịch trình, định kỳ được áp dụng cho cả gốc và lãi của khoản vay. Nó có một khoản trả góp cố định cho mỗi kỳ và phần lãi suất của các khoản thanh toán giảm dần theo thời gian. Bạn sẽ cần ba thư viện Python, bộ sưu tập các quy trình phần mềm ngăn các nhà phát triển phải viết mã từ đầu, cho mô hình này — NumPy, Pandas và Matplotlib:

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

Trong Colab, các gói Pandas và Matplotlib được cài đặt theo mặc định, vì vậy bạn chỉ cần cài đặt thư viện tài chính-numpy mà bạn có thể thực hiện trực tiếp từ Colab. Để cài đặt numpy-financial và nhập cả ba thư viện bạn sẽ cần sau này, hãy mở sổ ghi chép Colab mới từ menu Tệp và dán thông tin sau vào ô mã đầu tiên:

# 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

Trước khi chúng ta chuyển sang bước tiếp theo, hãy để tôi giải thích mã trước đó và lý do tại sao mã được viết theo cách viết. Mặc dù tên của numpy-Financial có dấu gạch ngang, bạn phải sử dụng dấu gạch dưới trong tên khi cài đặt và nhập tên đó. (Để biết thêm thông tin và giải thích về cách cài đặt numpy_financial, hãy xem tài liệu.) Bạn cũng có thể nhận thấy các chữ viết tắt. Các bí danh được xác định trước thường được sử dụng cho các gói — NumPy được viết là np, Pandas là pd. Những bí danh này được sử dụng để giúp bạn không phải viết tên đầy đủ của gói mỗi khi bạn muốn sử dụng nó và cũng giúp làm cho mã của bạn dễ đọc hơn.

Bây giờ, Sử dụng NumPy để Thiết lập Đặc điểm Khoản vay

NumPy là một trong những thư viện Python phổ biến nhất bổ sung hỗ trợ cho các mảng lớn, nhiều chiều, cùng với một bộ sưu tập đáng kể các hàm toán học cấp cao để hoạt động trên các mảng đó. Thư viện tài chính-numpy là một gói tương đối mới được tạo thành từ một bộ sưu tập các chức năng tài chính thường được sử dụng đã được tách ra khỏi thư viện NumPy chính và có vị trí tự hào riêng.

Cách đơn giản nhất để tính toán các vectơ lãi và gốc theo lịch trình cho thời hạn của khoản vay trả dần của chúng tôi là sử dụng các hàm PMT, IPMT và PPMT từ gói tài chính-numpy. Chức năng PMT cung cấp khoản trả góp khoản vay cố định để trả khoản vay đầy đủ trong một số khoảng thời gian nhất định. Các chức năng IPMT và PPMT cung cấp các khoản thanh toán lãi và gốc tương ứng. Tùy thuộc vào đầu vào cho khoảng thời gian, các hàm IPMT và PPMT có thể trả về giá trị cho một khoảng thời gian hoặc một số khoảng thời gian.

Đối với ví dụ này, chúng tôi sẽ cung cấp một phạm vi với thời hạn đầy đủ của khoản vay làm đầu vào cho kỳ. Như vậy, chúng ta sẽ nhận được mảng vectơ với lãi suất thanh toán gốc cho mỗi thời kỳ của vòng đời khoản vay:

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

Bạn sẽ không “thấy” bất kỳ điều gì xảy ra trong tệp Colab của mình sau khi nhập mã — đó là thông tin cơ bản về khoản vay cần thiết để thực hiện phần còn lại của bài tập này. (Bạn có thể tìm thấy danh sách tất cả các hàm tài chính-thô mà tôi đã sử dụng, định nghĩa của chúng và đầu vào của chúng trong tài liệu chính thức.)

Tiếp theo, Sử dụng Matplotlib để tạo biểu đồ

Mặc dù việc có các vectơ làm đầu ra là tốt, nhưng tốt nhất có thể hình dung đầu ra dưới dạng biểu đồ, cụ thể là dưới dạng biểu đồ ngăn xếp. Để thiết lập biểu đồ, chúng tôi sẽ sử dụng plt , bí danh cho bộ sưu tập hàm pyplot từ thư viện matplotlib. Trong ví dụ của chúng tôi, chúng tôi sẽ thêm chú giải ở góc trên cùng bên trái và thêm tiêu đề vào trục x và trục y. Vì chúng tôi không muốn có đường viền bên trong, chúng tôi đặt các lề thành 0.

Thêm một ô mã khác và chèn mã sau:

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)

Như chúng ta thấy, tiền lãi giảm dần theo thời gian. Dư nợ cho vay cũng giảm dần do các khoản nợ gốc phải trả theo từng kỳ. Để duy trì khoản trả góp cố định, phần gốc phải tăng lên.

Cuối cùng, Sử dụng gấu trúc để tạo bảng

Gói Pandas là gói Python được sử dụng phổ biến nhất để thao tác với các bảng số và chuỗi thời gian. Nó cung cấp cấu trúc dữ liệu nhanh chóng, linh hoạt và biểu cảm được thiết kế để làm cho việc làm việc với dữ liệu quan hệ hoặc được gắn nhãn trở nên dễ dàng và trực quan. Chúng tôi sẽ tạo một bảng bao gồm các khoản thanh toán gốc và lãi, cũng như số dư khoản vay bắt đầu và kết thúc cho mỗi kỳ:

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

Dòng đầu tiên của mã áp dụng các quy tắc định dạng hiển thị để làm cho bảng dễ đọc hơn bằng cách thêm hàng nghìn dấu phân cách và hiển thị các số chỉ đến hai chữ số thập phân.

Đoạn mã thứ hai hướng dẫn Colab bao gồm thanh toán lãi, thanh toán gốc, số dư cuối kỳ và số dư gốc cho mỗi kỳ khoản vay. Dấu gạch chéo ngược đóng vai trò như ngắt dòng vì chúng ta không thể có nhiều hơn 79 ký tự trong một dòng.

Nếu bạn đã theo dõi trong sổ tay Colab của riêng mình, xin chúc mừng! Bây giờ bạn đã mã hóa một hồ sơ danh mục khoản vay khấu hao theo lịch trình đơn giản bằng Python.

Bạn có thể làm được nhiều hơn thế với Python cho tài chính, bao gồm lập mô hình cho các khoản vay với phiếu lãi suất thay đổi được gắn với tỷ lệ chuẩn và các cấu trúc khoản vay khác. Hy vọng rằng mô hình cho vay này đã giúp bạn hiểu được mức độ đơn giản của mã hóa tài chính bằng Python.


Tài chính doanh nghiệp
  1. Kế toán
  2. Chiến lược kinh doanh
  3. Việc kinh doanh
  4. Quản trị quan hệ khách hàng
  5. tài chính
  6. Quản lý chứng khoán
  7. Tài chính cá nhân
  8. đầu tư
  9. Tài chính doanh nghiệp
  10. ngân sách
  11. Tiết kiệm
  12. bảo hiểm
  13. món nợ
  14. về hưu