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

多くの財務専門家は、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を使用してグラフを作成します

ベクトルを出力として持つのは良いことですが、出力をチャートの形で、特にスタックプロットとして視覚化するのが最善かもしれません。グラフを設定するには、pltを使用します 、matplotlibライブラリからの関数のpyplotコレクションのエイリアス。この例では、左上隅に凡例を追加し、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文字を超えることはできないため、円記号は改行として機能します。

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

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


コーポレートファイナンス
  1. 会計
  2. 事業戦略
  3. 仕事
  4. 顧客関係管理
  5. ファイナンス
  6. 在庫管理
  7. 個人融資
  8. 投資
  9. コーポレートファイナンス
  10. バジェット
  11. 貯蓄
  12. 保険
  13. 借金
  14. 引退