brunch

You can make anything
by writing

C.S.Lewis

by 김창현 Sep 04. 2023

파이썬으로 예비타당성 경제성 계산해보기

넘파이 파이낸셜(numpy_financial)을 이용하여

np.npv 함수가 사라졌다. 

고향사랑 기부제에 대한 포럼에 다녀왔다. 

공공사업에 대한 이야기를 하다 보면 경제성에 대한 이야기가 항상 나온다. 

이 사업이 잘 되고 있는지 아닌지를 어떻게 알 수 있는가? 

아니, 사전에 이 사업이 잘 될 것인지 아닌지를 어떻게 알 수 있는가? 

그걸 전문용어로 "타당성 조사"라고 한다. 

영어로는 feasilbility test, 혹은 feasibility study라고 한다. 혹은 preliminary 를 붙여서 preliminary feasible study라고 표현하기도 한다. 흔히 "예타"라고 부르는 예비 타당성 조사이다.

타당성 조사의 핵심은 BC 분석이다. 흔히 우리가 아는 비용편익분석이다. 

직관적으로 1보다 크면 수익성 있고, 1보다 작으면 수익성 없다. 

그런데 공공사업은 1보다 크기가 쉽지 않다. 

그래서 경제성 기법이 이미 있지만, 경제성만으로 최종판단을 하지 않고, 지역균형발전 등 다른 요소를 합쳐서 타당성을 도출한다. 그렇다고 해서 경제적 타당성이 덜 중요한 것은 아니다. 

사실 이 기법은 엄청 오래된 기법인데다가, 등비수열(?) 정도의 산수만 간략히 이해하면 누구나 충분히 해볼 수 있는 방법이다. 엑셀 함수로도 금방 구할 수 있다. 


python에서 금융 관련한 패키지는 numpy_financial로 새롭게 출범했다. 

예전에는 numpy 안에 아예 순현재가치(npv), 내부수익률(irr) 함수 등이 있었다. 그런데 어느 순간 이 함수들이 numpy_financial라는 패키지로 독립을 했다. 


내 책에서 원래 np.npv, np.irr 등의 명령어를 사용했는데, 개정판에서 명령어를 바꾸고 있는 중이다. 책을 낸 지 벌써 3년이 흘렀으니 명령어도 제법 조금씩 바뀐 부분이 있다. 이 넘파이 함수가 대표적이다. 


import numpy_financial as npv # npf로 넘파이 파이낸셜을 불러온다. 

예를 들어 1년간 공사를 하고 10년간 사업에서 돈을 꾸준히 벌 수 있는 사업이 있다고 하자. 현금 흐름은 다음과 같이 표시될 수 있다. Y0은 공사를 하고 있기 때문에 비용만 나가고, Y1년부터 10년동안 수입이 발생한다고 하자. 


단위: 억원

잘 모르겠으면 그냥 쌩으로 다음과 같이 입력해본다. 

cf = [-750, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100]

cf는 cashflow 란 뜻이다. 

순현재가치 구해보자. 순현재가치는 쉽다. 0보다 크면 시장성이 있다는 거다. 여기서 할인율이란 개념을 설명해야 하기는 하는데, 일단 시간이 지나면 돈의 가치가 떨어지기 때문에 그걸 할인율이라고 한다고 생각한다. 그리고 할인율을 구하는 것은 논쟁의 여지가 참 많지만, 우리는 공공사업할 때 쓰는 사회적 할인율(social discount rate)라는 것을 쓰기로 한다. 이것은 지금 몇 년째 4.5%로 고정값이다. 이보다 쉬울 수가! 


순현재가치(npv)

사회적 할인율에 4.5% 즉 0.045를 입력하고 cf의 현금흐름의 순현재가치를 구해보자. 

>>> npf.npv(.045,cf)   # 사회적 할인율을 4.5%라고 정하고 위 명령어 입력한다. 0.045라고 안 쓰고 .045라고 써도 된다. 
41.27181771101688

답은 41억이다. 41억이 0보다 커? 작아? 크지? 그럼 사업성이 있다는 거야. 이론적으로 NPV에서 사업성이 있다고 나오면 당연히 내부수익률도 사업성이 있다고 나온다.(경제성에 대해서 조금 더 많이 아는 사람이라면 분명히 여기서 딴지를 걸 수도 있다. 예를 들면 내부수익률이 3차 4차 방정식일 때 해가 두개도 될 수 있지 않느냐는 등. 하지만 그건 정말 수학적이고 이론적인 특이점에서나 가능할 뿐이고, 현실에서는 그냥 내부수익률 결과값과 순현재가치 결과값은 동일하다고 봐도 무방하다)


내부수익률(irr)

내부 수익률은 진짜 구할 것도 말 것도 없다. 다음 명령어를 쳐 보자. 

>>> npf.irr(cf) 
0.05604463645158875

이게 끝이다. 진심이다. 5.6% 나왔네. 이거가 4.5%보다 커, 작아? 할인율보다 커, 작아? 커? 그럼 사업성 있네. 사실 이건 계산할 필요도 없었다. 왜냐하면 내부수익률의 정의가 순현재가치를 0으로 만드는 지점에 있는 수익률이기 때문이다. 4.5%로 할인했을 때 순현재가치가 0보다 크다는 것은 내부수익률이 4.5%보다 높게 나온다는 것이었다. 


예를 들어 할인율 4.5%였을 때, 순현재가치가 0이라면? 계산할 필요도 없다. 그럼 내부수익률은 4.5%가 된다. 왜냐하면 할인율이 4.5%였을 때 순현재가치를 0으로 만드는 값이 바로 내부수익률이기 때문이다. 


이 때 BC는 얼마일까? 딱 1이다. 미래편익을 미래 비용으로 나누기 때문에 사실상 NPV를 구하면 BC, IRR이 다 나왔다고 볼 수 있다. 사실 경제성 결과를 볼 때, BC, NPV, IRR 이렇게 복잡하게 표기하기는 하지만 사실상 이 중 하나의 값만 알아도(할인율이 일정하다면) 나머지 값들은 추론을 할 수도 있다. 


그럼 아무나 할 수 있게? 

물론 위 계산식으로는 경제성을 아무나 할 수 있는 것처럼 보이지만, 그게 그렇게 간단하지만은 않다. 예를 들어 지금 저 식에서는 매년 쿨하게 100억의 수익이 발생한다고 가정했는데, 750억 투자해서 1년에 갑자기 100억 벌기가 쉽나? 3년차에 코로나가 터진다면? 그리고 비용 역시 마찬가지이다. 운영비는 인건비와 관리운영비 등이 포함되는데 향후 이런 비용들이 어떻게 춤을 출지는 아무도 모르는 일이다. 그래서 경제성 분석에는 수많은 가정이 들어간다. 


임금상승률이 일정하다면? 최저임금상승률이 지금과 같다면? 이런 식으로 여러 가정이 들어가야 분석을 할 수 있다. 하지만, 그럼에도 불구하고 경제성을 구하는 공식이 변하는 것은 아니다. 어차피 경제성은 먼 미래에 벌어질 일이기 때문에 100% 맞추는 것은 가능하지도 않거니와 정확히 맞추기 어렵다. 하지만, 경험과 데이터를 통해서 추정의 정교화는 지금 이 순간도 계속 이뤄지고 있다. 


경제성 분석의 의의는?

경제성 분석의 의의는 초기 투자비용에 대한 회수를 항상 염두에 두어야 한다는 사실을 상기하는 데 있다. 현금주의로 사업을 생각하다보면 올해 흑자, 내년 흑자면 흑자인 것처럼 생각하기 쉽다. 하지만, 사업이 제대로 된다는 것은 투자비용에 대한 회수를 전제로 한다. 


파이썬으로도 경제성을 계산할 수 있지만, 엑셀로도 할 수 있다. 심심할 때 연습해두자.  



브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari