time-value-of-money について
time-value-of-moneyは、キャッシュフローの時間価値を計算するための、金融学習者や実務家向けスキルです。複利、年金、NPV、IRR、ローンの償却を扱い、Python実装と計算例の検証機能を備えています。
主な機能
- 01現在価値と将来価値の計算
- 02離散・連続複利
- 03年金と永久年金の評価
- 04キャッシュフローのNPVとIRR
- 05ローン償却スケジュール
- 06Pythonデモと検証
活用シーン
- 01異なる時点のキャッシュフローを比較する
- 02NPVまたはIRRでプロジェクトを評価する
- 03ローンの返済額と残高を計算する
- 04計算例を使って金融公式を検証する
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ joellewis/ finance_skills --skill time-value-of-moneyインストール後、Claude Code で/time-value-of-moneyを入力して読み込まれたか確認します。
同梱ファイルscripts/time_value_of_money.py
詳細
貨幣の時間価値
基本概念
将来価値(FV)
現在の金額が、1期間あたりの利率 r で n 期間利息を得た後の価値です。
$$FV = PV \times (1 + r)^n$$
将来価値は時間とともに指数関数的に増加し、複利の数学的な基礎となります。
現在価値(PV)
将来の金額を、利率 r で n 期間割り引いた現在の価値です。これは将来価値の逆算です。
$$PV = \frac{FV}{(1 + r)^n}$$
現在価値はあらゆる価値評価の基礎です。資本の機会費用があるため、今日の1ドルは明日の1ドルより価値があります。
複利計算の方式
利息を複利計算する頻度はさまざまです。名目年利 r_nom を年に m 回複利計算すると、実効利回りは異なります。
離散複利(年に m 回):
$$FV = PV \times \left(1 + \frac{r_{nom}}{m}\right)^{m \times t}$$
連続複利:
$$FV = PV \times e^{r \times t}$$
実効年利(EAR):
$$EAR = \left(1 + \frac{r_{nom}}{m}\right)^m - 1$$
連続複利の場合:EAR = e^(r_nom) - 1
一般的な頻度:
| 頻度 | m |
|---|---|
| 年次 | 1 |
| 半年ごと | 2 |
| 四半期ごと | 4 |
| 月次 | 12 |
| 日次 | 365 |
| 連続 | 無限 |
普通年金
n 期間にわたって、各期間の終了時に支払われる均等な支払いの系列です。
現在価値:
$$PV = PMT \times \frac{1 - (1 + r)^{-n}}{r}$$
将来価値:
$$FV = PMT \times \frac{(1 + r)^n - 1}{r}$$
期首年金
各期間の開始時に支払われる均等な支払いの系列です。各キャッシュフローは普通年金より1期間分近いため、価値は (1 + r) 倍されます。
現在価値:
$$PV = PMT \times \frac{1 - (1 + r)^{-n}}{r} \times (1 + r)$$
将来価値:
$$FV = PMT \times \frac{(1 + r)^n - 1}{r} \times (1 + r)$$
成長年金
各期間に一定率 g で増加する、有限期間の支払い系列です(g != r)。
現在価値:
$$PV = \frac{PMT}{r - g} \times \left[1 - \left(\frac{1 + g}{1 + r}\right)^n\right]$$
株式評価(例:多段階配当割引モデル)や給与・年金の予測で広く使われます。
永久年金
均等な支払いが無限に続く系列です。
$$PV = \frac{PMT}{r}$$
成長永久年金
一定率 g で増加する支払いが無限に続く系列です。収束するには g < r である必要があります。
$$PV = \frac{PMT}{r - g}$$
配当に適用すると、ゴードン成長モデルになります。
正味現在価値(NPV)
初期投資を含む、すべての割引後キャッシュフローの合計です。NPVが正であれば、価値が創出されていることを示します。
$$NPV = \sum_{t=0}^{T} \frac{CF_t}{(1 + r)^t}$$
通常、CF_0 は初期投資によるマイナスの支出で、その後の CF_t は流入です。
内部収益率(IRR)
すべてのキャッシュフローのNPVを正確にゼロにする割引率 r です。
$$0 = \sum_{t=0}^{T} \frac{CF_t}{(1 + r)^t}$$
一般的なキャッシュフロー系列には閉形式の解がないため、IRRは数値的に(ニュートン・ラフソン法または二分法で)求めます。通常のキャッシュフロー(符号の変化が1回)の場合、一意のIRRが存在します。
償却
償却ローンの各支払いは、利息部分と元本部分に分けられます。
- 利息部分:
Interest_t = Balance_{t-1} * r - 元本部分:
Principal_t = PMT - Interest_t - 残高:
Balance_t = Balance_{t-1} - Principal_t
時間の経過とともに、利息部分は減少し、元本部分は増加します。
主要な公式
| 公式 | 式 | 使用例 |
|---|---|---|
| 将来価値 | FV = PV * (1 + r)^n | 一括払いの金額を複利で将来価値に換算する |
| 現在価値 | PV = FV / (1 + r)^n | 将来の一括払いの金額を割り引く |
| 実効年利率(EAR) | (1 + r_nom/m)^m - 1 | 複利頻度の異なる利率を比較する |
| 連続複利の将来価値 | FV = PV * e^(r*t) | 連続複利計算 |
| 普通年金の現在価値 | PMT * [1 - (1+r)^(-n)] / r | ローンの支払い、リースの評価 |
| 期首年金の現在価値 | PMT * [1 - (1+r)^(-n)] / r * (1+r) | 家賃、保険料(前払い) |
| 成長年金の現在価値 | PMT/(r-g) * [1 - ((1+g)/(1+r))^n] | 給与の受け取り、増配する配当 |
| 永久年金の現在価値 | PMT / r | 優先株、永久債 |
| 成長永久年金の現在価値 | PMT / (r - g) | ゴードン成長モデル |
| NPV | sum(CF_t / (1+r)^t) | プロジェクト/投資の評価 |
| IRR | solve: sum(CF_t / (1+r)^t) = 0 | 不均等なキャッシュフローの収益率指標 |
計算例
例 1:住宅ローンの月々の返済額
条件: 年利 6.5%、返済期間 30 年、月払い(普通年金)の固定金利住宅ローンで、借入額は 300,000 ドルです。
計算: 月々の返済額を求めます。
解答:
まず、年利を月利に、年数を月数に換算します。
r_monthly = 0.065 / 12 = 0.00541667
n = 30 * 12 = 360 months
普通年金の現在価値の公式を使い、PMT を求めます。
PV = PMT * [1 - (1 + r)^(-n)] / r
300,000 = PMT * [1 - (1.00541667)^(-360)] / 0.00541667
年金係数を計算します。
(1.00541667)^360 = 6.99179
(1.00541667)^(-360) = 0.143010
1 - 0.143010 = 0.856990
0.856990 / 0.00541667 = 158.2108
PMT を求めます。
PMT = 300,000 / 158.2108 = $1,896.20
月々の住宅ローン返済額は 1,896.20 ドルです。
30 年間の総返済額は 360 * $1,896.20 = $682,632 です。つまり、支払利息の合計は $682,632 - $300,000 = $382,632 です。
例 2:不均等なキャッシュフローがあるプロジェクトの NPV
条件: プロジェクトには初期投資として 50,000 ドルが必要で、次のキャッシュフローが発生します。
- 1 年目:12,000 ドル
- 2 年目:15,000 ドル
- 3 年目:18,000 ドル
- 4 年目:22,000 ドル
- 5 年目:25,000 ドル
要求収益率(割引率)は 10%です。
計算: NPV と、プロジェクトを採択すべきかどうかを求めます。
解答:
各キャッシュフローを現在価値に割り引きます。
PV(CF_0) = -50,000 / (1.10)^0 = -50,000.00
PV(CF_1) = 12,000 / (1.10)^1 = 10,909.09
PV(CF_2) = 15,000 / (1.10)^2 = 12,396.69
PV(CF_3) = 18,000 / (1.10)^3 = 13,523.67
PV(CF_4) = 22,000 / (1.10)^4 = 15,026.30
PV(CF_5) = 25,000 / (1.10)^5 = 15,523.03
すべての現在価値を合計します。
NPV = -50,000.00 + 10,909.09 + 12,396.69 + 13,523.67 + 15,026.30 + 15,523.03
NPV = +$17,378.78
NPV は **正(17,378.78 ドル)**なので、このプロジェクトは価値を生み出し、採択すべきです。要求収益率の 10%を上回る収益が得られます。
IRR を求めるには、NPV = 0 となる利率を解きます。このキャッシュフロー系列の IRR は数値計算上、およそ 21.2%(21.18%)で、ハードルレートの 10%を大きく上回ります。
よくある落とし穴
- 利率と期間の頻度を一致させないこと:支払いが月払いの場合、割引率も月利にする必要があります。実効年利率(EAR)から換算する場合を除き、年の名目利率を 12 で割ります。
(1 + annual rate)の 12 乗根は使いません。 - IRR でキャッシュフローの符号規則を忘れること:流出(投資)は負、流入(収益)は正にするか、またはその逆にしますが、符号の規則は一貫させる必要があります。符号が正しくないと、意味のない IRR が算出されます。
- 名目利率と実効利率を混同すること:月複利の名目利率 12%から算出される EAR は 12%ではなく 12.68%です。複利の基準を必ず明確にしてください。
- 期首年金と普通年金で 1 期間ずれる誤り:期首年金では、すべての支払いが 1 期間早まります。
(1 + r)の調整係数を忘れると、期首年金の現在価値を過小評価します。 - 非定型のキャッシュフローで IRR が複数求められる場合:キャッシュフローの符号が 2 回以上変わる場合(例:初期の流出、流入、その後の大きな最終流出)、デカルトの符号法則により、符号の変化回数と同じ数までの正の実数 IRR 解が存在する可能性があります。そのような場合は、NPV プロファイルまたは修正 IRR(MIRR)を使用してください。
スクリプトの実行
scripts/time_value_of_money.py は、TimeValueOfMoney クラスの静的メソッド(present_value、future_value、npv、irr、annuity_pv、annuity_fv、growing_annuity_pv、perpetuity_pv、fisher_rate、continuous_compounding)として、上記のすべての公式を実装し、さらに AmortizationSchedule クラスも備えています。
- 実行方法:
uv run scripts/time_value_of_money.py(PEP 723 のインラインメタデータを使用。標準ライブラリのみで動作し、サードパーティー依存関係はありません)、またはpython3 scripts/time_value_of_money.pyを実行します。 - 引数なしで実行する(または
--verifyを指定する)と、すべてのメソッドのデモを表示し、さらに上記の計算例の値を検証します(例1の住宅ローン返済額 = $1,896.20、例2の NPV = $17,378.78、IRR = 21.18%)。不一致がある場合は、ゼロ以外の終了コードで終了します。 --helpでは、利用可能なメソッドとインポート方法が表示されます。- プログラムから使用する場合は、実行するのではなくインポートします:
from time_value_of_money import TimeValueOfMoney, AmortizationScheduleを記述し、TimeValueOfMoney.npv(...)のように呼び出します。
相互参照
- return-calculations(コアプラグイン):CAGR は複利成長の特殊なケースです。ポートフォリオの MWR も同じ NPV=0 の枠組みを使用し、このプラグインで扱っています。
- statistics-fundamentals(コアプラグイン):割引率の推定では、回帰分析(CAPM ベータ)や分布に関する仮定がよく用いられます。