*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%}")

'데이터 분석 > ADP 자격증 공부' 카테고리의 다른 글
| [ADP 실기] 1. 분류분석 총정리 (0) | 2026.04.06 |
|---|---|
| [ADP 실기] 확률분포 계산 문제 (0) | 2026.04.06 |
| (파이썬 한권으로 끝내기) 모의고사 제3회 소스코드, 샘플 데이터 (0) | 2026.04.06 |
| (파이썬 한권으로 끝내기) 모의고사 제2회 소스코드, 샘플 데이터 (0) | 2026.04.06 |
| [ADP 실기] (테스트 완료, 학습 데이터) 파이썬 비정형 텍스트마이닝 1편 – 영문 전처리, 워드클라우드(nltk) (0) | 2026.04.06 |