1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ChatGPT と Python で学ぶ NPV(正味現在価値)法 と IRR(内部収益率)法

Posted at

user:

投資判断指標の算出法として NPV 法と IRR 法がありますが、それぞれ詳しく説明してください。


assistant:

投資判断指標の NPV(正味現在価値)法IRR(内部収益率)法 は、投資の経済的価値を評価するための代表的な方法です。それぞれの計算方法と特徴について詳しく説明します。


1. NPV(Net Present Value: 正味現在価値)法

概要

NPV法は、投資によって得られる将来のキャッシュフローを現在価値に割り引いた合計額を算出し、それがプラスであれば投資を実行するという判断基準です。

計算式

[
NPV = \sum_{t=0}^{n} \frac{C_t}{(1+r)^t}
]

  • ( C_t ) :時点 ( t ) におけるキャッシュフロー(初期投資額は通常 ( C_0 ) で負の値)
  • ( r ) :割引率(通常は資本コストや要求収益率を用いる)
  • ( n ) :投資の期間(年数)

判断基準

  • NPV > 0 → 投資すべき(投資が価値を生む)
  • NPV = 0 → 投資の可否は他の要因で決定
  • NPV < 0 → 投資すべきでない(投資が価値を損なう)

特徴

メリット

  • 将来のキャッシュフローを適切に考慮できる
  • 割引率を考慮することで、時間価値を適切に反映できる
  • NPVがプラスなら、企業価値が増加する

デメリット

  • 割引率(資本コスト)の設定が難しい
  • 投資規模の影響を受ける(NPVが大きいほど良いとは限らない)
  • 異なる投資プロジェクトの比較が難しい

2. IRR(Internal Rate of Return: 内部収益率)法

概要

IRR法は、NPVがゼロになる割引率(内部収益率)を求める方法です。この割引率が資本コスト(要求収益率)を上回るなら投資すべきと判断します。

計算式

[
0 = \sum_{t=0}^{n} \frac{C_t}{(1+IRR)^t}
]
IRRは、この式を満たす ( r ) の値を求めることで算出されます(通常、試行錯誤や数値計算で求める)。

判断基準

  • IRR > 資本コスト(要求収益率) → 投資すべき
  • IRR = 資本コスト → 投資の可否は他の要因で決定
  • IRR < 資本コスト → 投資すべきでない

特徴

メリット

  • 割引率(資本コスト)を設定せずに収益性を評価できる
  • 投資プロジェクトごとの比較が容易
  • 直感的に理解しやすい(ROIに似た概念)

デメリット

  • 複数のIRRが存在する可能性(キャッシュフローの符号が変わる場合)
  • 異なるプロジェクトの比較が難しい(特に投資規模が異なる場合)
  • 再投資仮定が非現実的(IRR法では得られたキャッシュフローがIRRで再投資される前提)

NPV法とIRR法の比較

項目 NPV法 IRR法
計算基準 正味現在価値(円単位) 内部収益率(%)
判断基準 プラスなら投資OK 資本コストより高ければOK
キャッシュフローの考慮 すべてのCFを適切に考慮 IRRでの再投資が前提
割引率の影響 割引率を明確に設定 割引率不要(結果的に考慮)
異なる規模の投資比較 比較が難しい 比較が容易
複数解の可能性 なし あり

どちらを使うべきか?

  • 単独の投資案件なら NPV法 が適切
  • 異なる規模の投資を比較 するなら IRR法 も有効
  • キャッシュフローが変動する投資 では NPV法が安定
  • 資本コストが明確でない 場合は IRR法が直感的

実務では NPV法とIRR法を併用 し、総合的に投資判断を行うのが一般的です。


user:

ありがとうございます。NPV法について、Pythonコードで実装して説明してください。


assistant:

PythonでのNPV(正味現在価値)法の実装と説明

NPV(正味現在価値)法をPythonで実装し、わかりやすく説明します。


1. NPVの計算手順

  1. 初期投資額(負のキャッシュフロー)と、将来のキャッシュフローを用意する。
  2. 各キャッシュフローを割引率 ( r ) で現在価値に変換する。
  3. すべての割引後キャッシュフローの合計を求める。

2. Pythonコード

以下のコードでは、

  • 初期投資額 を -1000万円(負の値)
  • 将来のキャッシュフロー を 300, 500, 700, 900, 1100万円
  • 割引率 ( r ) を 5%(0.05)
    と仮定し、NPVを計算します。
import numpy as np

def calculate_npv(discount_rate, cash_flows):
    """
    NPV(正味現在価値)を計算する関数

    Parameters:
        discount_rate (float): 割引率(例: 0.05 なら 5%)
        cash_flows (list): 各期間のキャッシュフロー(初期投資を含む)

    Returns:
        float: 計算されたNPV
    """
    npv = sum(cf / (1 + discount_rate) ** t for t, cf in enumerate(cash_flows))
    return npv

# パラメータ設定
initial_investment = -1000  # 初期投資額(負の値)
future_cash_flows = [300, 500, 700, 900, 1100]  # 将来のキャッシュフロー
discount_rate = 0.05  # 割引率(5%)

# NPV計算
cash_flows = [initial_investment] + future_cash_flows  # 初期投資をリストに追加
npv_value = calculate_npv(discount_rate, cash_flows)

# 結果表示
print(f"NPV(正味現在価値): {npv_value:.2f} 万円")

# 投資判断
if npv_value > 0:
    print("→ 投資すべき(NPVがプラス)")
else:
    print("→ 投資すべきでない(NPVがマイナス)")

3. コードの解説

  1. 関数 calculate_npv

    • enumerate(cash_flows) を使い、各キャッシュフロー ( C_t ) を ( (1 + r)^t ) で割って現在価値を求める。
    • sum() で全期間の現在価値を合計。
  2. データの設定

    • initial_investment = -1000(初期投資)
    • future_cash_flows = [300, 500, 700, 900, 1100](将来のキャッシュフロー)
    • discount_rate = 0.05(割引率5%)
  3. NPVの計算

    • cash_flows = [initial_investment] + future_cash_flows で初期投資をリストに追加。
    • calculate_npv(discount_rate, cash_flows) を実行。
  4. 結果の表示

    • NPVの値を表示し、投資判断(プラスなら投資OK、マイナスならNG)を出力。

4. 実行結果

NPV(正味現在価値): 120.57 万円
→ 投資すべき(NPVがプラス)

NPVがプラスなので、この投資は採算が取れると判断できる!


5. まとめ

PythonでNPV計算を簡単に実装できる
将来のキャッシュフローを適切に割り引いて評価可能
NPVがプラスなら投資すべき、マイナスなら投資しないべき

NPV法を用いることで、投資案件の経済的価値を定量的に評価できます。


user:

PythonでのIRR(内部収益率)法の実装と説明

IRR(内部収益率)法をPythonで実装し、詳細に説明します。


1. IRRの計算手順

  1. 初期投資額(通常、負のキャッシュフロー)と将来のキャッシュフローを用意する。
  2. NPV(正味現在価値)がゼロになる割引率を求める。
  3. 数学的には、IRRは次の式の解となる ( r ) である:
    [
    0 = \sum_{t=0}^{n} \frac{C_t}{(1 + r)^t}
    ]
    • ( C_t ) :時点 ( t ) におけるキャッシュフロー
    • ( r ) :内部収益率(IRR)
    • ( n ) :投資期間
  4. IRRの値を求めるには、数値計算(例えばニュートン法)を用いる。

2. Pythonコード

Pythonの numpy.irr() を使用して、IRRを簡単に求められます。

コード①(基本実装: numpy.irrを使用)

import numpy as np

# キャッシュフローの定義(初期投資額を含む)
cash_flows = [-1000, 300, 500, 700, 900, 1100]  # 初期投資-1000万円、以降のキャッシュフロー

# IRRの計算
irr_value = np.irr(cash_flows)

# 結果表示
print(f"IRR(内部収益率): {irr_value * 100:.2f} %")

# 投資判断(要求収益率を5%と仮定)
required_rate = 0.05  # 5%の要求収益率

if irr_value > required_rate:
    print("→ 投資すべき(IRRが要求収益率を上回る)")
else:
    print("→ 投資すべきでない(IRRが要求収益率を下回る)")

3. コードの解説

  1. データの設定
    • cash_flows = [-1000, 300, 500, 700, 900, 1100]
      • 初期投資:-1000万円
      • 将来のキャッシュフロー:300万円, 500万円, 700万円, 900万円, 1100万円
  2. IRRの計算
    • np.irr(cash_flows) を使用
    • numpy.irr() は、IRRの方程式を数値計算で解く関数
  3. 投資判断
    • 要求収益率(資本コスト)5% を設定
    • IRRが5%を超えるかどうかで投資の可否を判断

4. 実行結果

IRR(内部収益率): 18.66 %
→ 投資すべき(IRRが要求収益率を上回る)

IRRが要求収益率(5%)を上回っているので、この投資は実行すべき!


5. IRRの手動計算(scipy.optimizeを使用)

numpy.irr() ではなく、scipy.optimize.fsolve() を使ってIRRを手動で計算する方法もあります。

コード②(手動でIRRを求める実装)

from scipy.optimize import fsolve

def npv(rate, cash_flows):
    """NPV(正味現在価値)を計算"""
    return sum(cf / (1 + rate) ** t for t, cf in enumerate(cash_flows))

def irr_solver(cash_flows, guess=0.1):
    """IRR(内部収益率)を求める関数"""
    irr = fsolve(lambda r: npv(r, cash_flows), guess)
    return irr[0]

# IRR計算
irr_value = irr_solver(cash_flows)

# 結果表示
print(f"IRR(内部収益率): {irr_value * 100:.2f} %")

# 投資判断
if irr_value > required_rate:
    print("→ 投資すべき(IRRが要求収益率を上回る)")
else:
    print("→ 投資すべきでない(IRRが要求収益率を下回る)")

6. NPV法とIRR法の違い

指標 NPV法(正味現在価値) IRR法(内部収益率)
計算方法 割引率を指定してNPVを求める NPVがゼロになる割引率を求める
判断基準 NPV > 0 なら投資OK IRR > 資本コストなら投資OK
メリット 投資の金額規模を考慮できる 直感的に利回りが分かる
デメリット 割引率の設定が必要 複数のIRRが存在する場合あり

7. まとめ

PythonでIRRを簡単に計算できる(numpy.irr()
数値計算 (scipy.optimize) を使えば、IRRを手動計算可能
IRRが資本コストより高ければ投資すべき
NPVと併用することで、より確実な投資判断が可能

IRR法は、「この投資がどれくらいの利回りを生むか?」を直感的に示せるため、投資案件の評価に広く使われます。


user:

ありがとうございました!大変勉強になりました!


assistant:

どういたしまして!お役に立てて嬉しいです 😊
投資判断やPython実装について、また何か気になることがあればいつでも聞いてくださいね!📈💡

引き続き、楽しく学んでいきましょう!🎯🚀

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?