본문 바로가기
퀀트 분석/퀀트 활용(통계, 머신러닝)

[Python] 버핏 지수(Buffett Indicator) 파이썬으로 계산하기

by 쿼카퀀트 2021. 8. 28.
728x90

작년 이맘때쯤에 버핏 지수에 대해 간략히 설명해본 적이 있습니다(바로 아래에 해당 글 링크를 남겨뒀습니다). 그 이후 잊어버리고 있었는데, 최근 버핏 지수가 200%가 넘었다~ 증시가 버블이 끝내준다~ 뭐 이런 소식을 들어 생각난김에 한번 버핏지수를 직접 계산해봤습니다.

 

2020.08.18 - [금융/금융 용어 및 개념] - 버핏지수(Buffett Indicator)

 

버핏지수(Buffett Indicator)

버핏지수란 버핏지수는 단순히 기업 시가총액의 합을 분기별 GDP로 나눈 값으로, 분기별 GDP에 비해 기업의 시가총액이 어느 정도 수준인지를 살펴볼 수 있는 지표이다. 이 지표가 버핏지수로 불

junyoru.tistory.com

 

결론부터 보여드리면, 정말 200%가 넘어, 8월 28일 현재 203.4%를 기록하고 있습니다.

2021.08.28 버핏지수(Buffett Indicator)

정말 역대급으로 높은 수치인데요, 버핏지수가 203.4%라는 것을 간단하게 설명드리자면, 미국 전체 기업의 기업 가치가 미국 GDP의 2.034배라는 것입니다. 보통 이 지수가 100%가 넘으면 증시가 과열 추세에 접어들었다 라고 해석하곤 하는데요,(다만 각 시점별 금리 등 여러 요인을 고려해야 하기에 무조건 100%가 기준점이라 보기는 어렵습니다) 현재처럼 200%가 넘는 수치는 버핏 지수의 관점에선 언제 폭락해도 이상하지 않다~ 라는 느낌으로 바라볼 수 있을 것 같습니다.

 

자, 그럼 한번 직접 이 버핏지수를 계산해봅시다!!!

버핏 지수 계산

FRED API 준비

버핏지수에 대한 설명은 포스트 맨 위 링크에 들어가서 읽어주시면 되고, 여기선 파이썬으로 버핏지수를 계산하는 방법에 대해서만 알려드리겠습니다.

 

데이터는 FRED에서 구할 수 있습니다. FRED에 대한 설명과, 여기서 데이터를 불러오는 방법은 아래 링크에서 확인할 수 있습니다.

 

2020.07.22 - [퀀트 분석/퀀트 기초] - [Python] FRED에서 API로 경제 데이터 불러오기

 

[Python] FRED에서 API로 경제 데이터 불러오기

FRED 소개 FRED는 실업률, 금리, PMI 같은 경제 데이터를 모아 볼 수 있는 사이트입니다. 링크 위 FRED사이트에서 데이터를 엑셀파일로 다운받을 수도 있지만, 그때그때 데이터를 엑셀로 받아 코드에

junyoru.tistory.com

 

그럼 버핏 지수와 FRED API 모두 이해했다고 생각하고, 바로 다음 단계로 넘어가보겠습니다.

 

데이터 추출

버핏 지수를 구하기 위해선 Wilshire 5000 지수와 분기별 GDP 데이터가 필요합니다. GDP는 뭔지 알지만, Wilshire 5000 지수는 뭔지 잘 모르시겠다구요?

간단하게 설명드리자면, Wilshire5000이란 S&P500, Russell2000처럼 미국의 상위 5000개 종목의 주가를 바탕으로 지수로 만든겁니다. 8/28 기준 Wilshire 5000 지수 값은 46821.56인데요, 이를 해석하면 다음과 같습니다.

Wilshire5000 지수 :  46821.56      ▶     미국 주식 시장 가치 :  $46.821 Trillion

이 지수가 왜 필요할까요? 바로 버핏 지수의 계산식에 사용되기 때문입니다(세상에나!)

버핏 지수 :    미국 주식 시장 가치 / GDP

Wilshire5000 지수가 버핏 지수 구할때 굉장히 유용하겠네요 하하

 

그럼 데이터를 구해봅시다! 아래처럼 코드를 입력하면 Wilshire5000과 분기별 GDP 데이터를 받아옵니다.

from fredapi import Fred
fred = Fred(api_key='YOUR_API_KEY_HERE')

start_date = '2000-01-01'

GDP_quarterly = pd.DataFrame(fred.get_series('GDP',observation_start=start_date),columns=['GDP'])
wilshire5000 = pd.DataFrame(fred.get_series('WILL5000PR',observation_start=start_date),columns=['Wilshire'])

data = pd.merge(GDP_quarterly,wilshire5000,how='outer',left_index=True,right_index=True)
data = data.fillna(method='ffill').dropna()

제 경우 데이터 다운로드 시작 시점을 2000년으로 했지만, 시점을 이보다 더 과거로 설정할 수도 있습니다. 취향껏!

 

다음으로 pd.merge를 통해 GDP와 Wilshire5000를 하나로 합칩니다.

이 경우 GDP는 분기마다 한번씩만 추출되는 반면 Wilshire5000은 매일 계산되기 때문에, 아래 표 왼쪽처럼 GDP는 대부분이 빈 칸인 것을 확인할 수 있습니다. 이를 채워주기 위해 fillna를 통해 빈칸을 채워줍니다. method='ffill' 옵션은 빈 칸에게 각자 자신의 위 칸에 있는 값을 복사해오라고 지시하는 옵션입니다.

 

최종적으로, 아래 표 오른쪽처럼 데이터를 만들 수 있습니다.

fillna(method='ffill').dropna()



 

버핏 지수 계산

이제 데이터를 구했으니 버핏 지수를 계산해봅시다. 아래 코드를 입력해보세요.

print('Buffett Indicator')
buffett_indicator = data['Wilshire']/data['GDP']*100

plt.figure(figsize=(15,8))
plt.grid()
plt.plot(buffett_indicator,'r',label = 'Current Buffett Indicator : {:.4}%'.format(buffett_indicator[-1]))
plt.legend()

 

Wilshire를 GDP로 나누고, 이를 퍼센트로 나타내기 위해 100을 곱한 값을 버핏 지수로 계산합니다.

 

결론적으로, 포스팅 첫 단락에 보여드렸던 그래프가 나오게됩니다.(저처럼 왼쪽 위에 쪼그마하게 버핏 지수 값을 보여주면 보기 더 편하겠죠?ㅎㅎ)

 

전체 코드

from fredapi import Fred
fred = Fred(api_key='YOUR_API_KEY_HERE')

start_date = '2000-01-01'

GDP_quarterly = pd.DataFrame(fred.get_series('GDP',observation_start=start_date),columns=['GDP'])
wilshire5000 = pd.DataFrame(fred.get_series('WILL5000PR',observation_start=start_date),columns=['Wilshire'])

data = pd.merge(GDP_quarterly,wilshire5000,how='outer',left_index=True,right_index=True)
data = data.fillna(method='ffill').dropna()


print('Buffett Indicator')
buffett_indicator = data['Wilshire']/data['GDP']*100

plt.figure(figsize=(15,8))
plt.grid()
plt.plot(buffett_indicator,'r',label = 'Current Buffett Indicator : {:.4}%'.format(buffett_indicator[-1]))
plt.legend()

정말 짧죠? plt을 빼면 사실상 버핏 지수를 구하는데에 파이썬 코드 한 6~7줄 정도면 됩니다.

이제 버핏지수 보는 사이트 찾아다니지 마시고, 파이썬 실력도 갈고닦을 겸 직접 버핏지수를 구해보세요!

 

긴 글 읽어주셔서 감사합니다!

728x90

댓글