ローンの基本的なPythonキャッシュフローモデルを構築する方法

公開: 2022-03-11

多くの財務専門家は、Excelを使用して財務モデルを構築することに長けています。 ただし、ピアレビュー、バージョン管理の問題、および再帰関数を形成できないため、Excelはより高度なモデルに最適な選択肢ではない場合があります。 これらの欠点にもかかわらず、Pythonなどのプログラミング言語に自信がないため、多くの金融専門家は依然としてExcelを使用しています。

Pythonは、学ぶのが最も簡単なプログラミング言語の1つです。 読みやすさと使いやすさを念頭に置いて設計されているため、コードは簡潔でわかりやすい英語に近いものになっています。 この記事では、最も基本的な関数、パッケージ、およびデータ構造を使用して、ローン支払い用のPythonキャッシュフローモデルを簡単に構築できることを示します。

従うには、コードを記述して実行できるGoogleの無料のWebベースのノートブックアプリケーションであるColaboratory(略して「Colab」)を使用する必要があります。 Colabは、コード、Markdown(簡単にスタイル設定されたテキスト用)、画像、またはその他のデータを含むことができるセルを使用するPythonインタープリターです。 Colabは、記述時にコードの値を継続的に保存するため、間違いやバグが発生したときにそれをすばやく簡単に見つけることができます。 (まだ参加したくない場合は、このColabノートブックの例に従ってください。)

まず、必要なツールがあることを確認します

ローンの元本と利息の両方に定期的な定期支払いが適用される償却ローンのモデルを構築します。 期間ごとに分割払いがあり、支払いの利息部分は時間の経過とともに減少します。 このモデルでは、開発者がコードを最初から作成する必要がないようにするソフトウェアルーチンのコレクションである3つのPythonライブラリ(NumPy、Pandas、Matplotlib)が必要になります。

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

Colabでは、PandasパッケージとMatplotlibパッケージがデフォルトでインストールされるため、Colabから直接実行できるnumpy-financialライブラリをインストールするだけで済みます。 numpy-financialをインストールし、後で必要になる3つのライブラリをすべてインポートするには、[ファイル]メニューから新しい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ライブラリの1つであり、それらの配列を操作するための高レベルの数学関数の重要なコレクションもあります。 numpy-financialライブラリは、メインのNumPyライブラリから分離され、独自の場所を与えられた、一般的に使用される財務機能のコレクションで構成された比較的新しいパッケージです。

償却済みローンの存続期間中の予定利息および元本ベクトルを計算する最も簡単な方法は、numpy-financialパッケージのPMT、IPMT、およびPPMT関数を使用することです。 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ファイルで何も起こらないことを「確認」することはありません。これは、この演習の残りの部分を実行するために必要な基本的なローン情報です。 (私が使用したすべてのnumpy-financial関数、それらの定義、およびそれらの入力のリストは、公式ドキュメントにあります。)

次に、Matplotlibを使用してグラフを作成します

ベクトルを出力として持つのは良いことですが、出力をチャートの形で、特にスタックプロットとして視覚化するのが最善かもしれません。 チャートを設定するには、matplotlibライブラリの関数のpyplotコレクションのエイリアスであるpltを使用します。 この例では、左上隅に凡例を追加し、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パッケージは、数値テーブルと時系列を操作するために最も一般的に使用される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)

コードの最初の行は、表示フォーマット規則を適用して、千の区切り記号を追加し、小数点以下2桁までの数値を表示することにより、テーブルを読みやすくします。

コードの2番目のチャンクは、各ローン期間の利息の支払い、元本の支払い、終了残高、および元の残高を含めるようにColabに指示します。 1行に79文字を超えることはできないため、円記号は改行として機能します。

チャートに表示される金額は、小数点以下第2位まで短縮されています。

自分のColabノートブックをフォローしている場合は、おめでとうございます。 これで、Pythonを使用して単純なスケジュールされた償却ローンポートフォリオプロファイルをコーディングしました。

ベンチマークレートやその他のローン構造に関連付けられた変動金利クーポンを使用したローンのモデリングなど、PythonforFinanceでできることは他にもたくさんあります。 うまくいけば、このローンモデルによって、Pythonでの財務コーディングがいかに簡単であるかを味わうことができます。