데이터 분석/ADP 자격증 공부

[ADP 실기] NPV(Net Present Value, 순현재가치), IRR 구하기

나르시스트 2026. 4. 6. 21:40

*1개년 50억, 2개년 60억, 3개년 70억의 예산을 가지고 NPV가 가장 높아지는 안을 제시하시오

가장 높은 값을 갖는 안을 찾기 위해서는 할인율(discount rate)이 필요
– 할인율이 주어지지 않았으므로, 일반적으로 사용되는 할인율을 가정
– 일반적으로 기업의 비용 기준으로 10%의 할인율을 사용할 수 있음

import numpy as np

# 현금 흐름 설정
cash_flows = np.array([
    [10, 20, 15],
    [15, 14, 19],
    [12, 11, 30],
    [13, 25, 20],
    [16, 30, 24]
])

# 할인율
discount_rate = 0.1

# NPV 계산 함수 정의
def calculate_npv(cash_flows, discount_rate):
    npv = np.sum(cash_flows / (1 + discount_rate) ** np.arange(1, len(cash_flows) + 1))
    return npv

# 각 안의 NPV 계산
npvs = [calculate_npv(cash_flow, discount_rate) for cash_flow in cash_flows]

# 결과 출력
for i, npv in enumerate(npvs):
    print(f"안 {i+1}의 NPV: {npv}")

# 가장 높은 NPV를 가진 안 찾기
max_npv_index = np.argmax(npvs)
print(f"\n가장 높은 NPV를 가진 안: 안 {max_npv_index+1}")

*numpy_financial 라이브러리 사용

import numpy_financial as npf
import numpy as np

cash_flows = np.array([
    [10, 20, 15],  # 투자안 1의 현금 흐름
    [15, 14, 19],  # 투자안 2의 현금 흐름
    [12, 11, 30],  # 투자안 3의 현금 흐름
    [13, 25, 20],  # 투자안 4의 현금 흐름
    [16, 30, 24]   # 투자안 5의 현금 흐름
])
discount_rate = 0.1

npvs = [npf.npv(discount_rate, cash_flow) for cash_flow in cash_flows]

for i, npv in enumerate(npvs):
    print(f"투자안 {i+1}의 NPV: {npv:.2f}")

max_npv_index = np.argmax(npvs)
print(f"\n가장 높은 NPV를 가진 투자안: 투자안 {max_npv_index + 1}")

*IRR 구하기

NPV가 0이 되는 할인율을 찾는 것
이는 투자 프로젝트의 수익성을 평가할 때 중요한 지표

import numpy_financial as npf

# 초기 비용은 음수 값으로, 그 후의 현금 흐름은 양수 또는 음수 값으로 표현
cash_flows = [-100, 50, 60, 70]

# 내부수익률을 계산합니다.
irr = npf.irr(cash_flows)

print("내부수익률 (IRR): {:.2%}".format(irr))
import numpy as np
from scipy.optimize import fsolve

cash_flows = [-100, 50, 60, 70]

# NPV가 0이 되는 할인율을 찾는 함수 정의 (IRR을 계산하는 함수)
def irr_npv(irr, cash_flows):
    return np.sum([cf / (1 + irr) ** t for t, cf in enumerate(cash_flows)])

# 내부수익률(IRR)을 계산하는 함수
def calculate_irr(cash_flows):
    # IRR을 추정하기 위한 초기 값으로 0.1 (10%)을 설정
    irr_guess = 0.1
    irr = fsolve(irr_npv, irr_guess, args=(cash_flows,))
    return irr[0]

irr = calculate_irr(cash_flows)
print("내부수익률 (IRR): {:.2%}".format(irr))

현금 흐름이 [-100, 50, 60, 70]인 경우, 이는 초기 비용이 100이고 그 후의 세 달의 현금 흐름이 각각 50, 60, 70임을 의미

import numpy as np
import numpy_financial as npf

cash_flows = np.array([
    [-50, 20, 30, 40],  # 투자안 1 (초기 투자 -50, 이후 현금 흐름)
    [-40, 15, 25, 35],  # 투자안 2
    [-60, 25, 35, 45],  # 투자안 3
    [-70, 30, 40, 50],  # 투자안 4
    [-80, 35, 45, 55]   # 투자안 5
])

irr_values = [npf.irr(cash_flow) for cash_flow in cash_flows]

for i, irr in enumerate(irr_values):
    print(f"투자안 {i + 1}의 IRR: {irr:.2%}")
import numpy as np
from scipy.optimize import fsolve

cash_flows = np.array([
    [-50, 20, 30, 40],  # 투자안 1 (초기 투자 -50, 이후 현금 흐름)
    [-40, 15, 25, 35],  # 투자안 2
    [-60, 25, 35, 45],  # 투자안 3
    [-70, 30, 40, 50],  # 투자안 4
    [-80, 35, 45, 55]   # 투자안 5
])

def irr_npv(irr, cash_flows):
    return np.sum([cf / (1 + irr) ** t for t, cf in enumerate(cash_flows)])

def calculate_irr(cash_flow):
    # IRR이 0이 되는 해를 찾아야 하므로 초기 추정값을 0.1로 설정
    irr = fsolve(irr_npv, 0.1, args=(cash_flow,))
    return irr[0]

irr_values = [calculate_irr(cash_flow) for cash_flow in cash_flows]

for i, irr in enumerate(irr_values):
    print(f"투자안 {i + 1}의 IRR: {irr:.2%}")