파이썬으로 주식(ETF) 간 상관관계 구하기(회귀 분석)
본문 바로가기
파이썬(Python)/파이썬으로 투자실험

파이썬으로 주식(ETF) 간 상관관계 구하기(회귀 분석)

by 대충살아볼까 2021. 1. 2.

노벨경제학상을 수상한 해리 마코위츠(Harry Markowitz) 박사가 체계화한 현대 포트폴리오 이론(Modern Portfolio Theory, MPT)이 있습니다.

 

투자에 대한 수익과 위험은 평균과 분산으로 나타낼 수 있으며, 상관관계가 낮은 자산을 대상으로 분산 투자하면 위험을 감소시킬 수 있다는 이론입니다.

 

이 이론을 바탕으로 주식, ETF, 채권 간 상관관계를 분석할 수 있는 툴을 파이썬으로 만들어 보도록 하겠습니다.

 

데이터프레임을 만들기 위해 pandas를 import 하고, pandas_datareader와 yfinance 를 이용하여 주식정보(종가)를 가져오도록 하겠습니다.

 

주식(ETF) 간 상관관계를 확인하기 위해서는 scipy 모듈을 사용하며, 이를 그래프로 나타내기 위해 matplotlib을 가져왔습니다.

 

야후파이낸스에서 2000년 1월 4일을 시작으로 해서 관련 데이터를 가져오겠습니다. 

 

다우존스지수의 티커는 '^DJI"이며, 우리나라 KOSPI 지수는 '^KS11'롤 표현합니다.

 

다우존스지수와 코스피지수의 종가를 데이터프레임 형태로 가져옵니다.

 

데이터가 빈 곳은 뒤의 데이터나 앞의 데이터로 채웁니다.

 

상관관계의 1차 그래프의 직선을 만들기 위해서  'stats.linregress'를 사용했습니다.

 

matplotlib를 이용해서 그래프를 그립니다.

 

아래는 전체 코드입니다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
import pandas as pd
from pandas_datareader import data as pdr
import yfinance as yf
yf.pdr_override()
from scipy import stats
import matplotlib.pylab as plt
 
dow = pdr.get_data_yahoo('^DJI','2000-01-04')
kospi = pdr.get_data_yahoo('^KS11','2000-01-04')
 
df = pd.DataFrame({'X':dow['Close'],'Y':kospi['Close']})
df = df.fillna(method='bfill')
df = df.fillna(method='ffill')
 
regr = stats.linregress(df.X, df.Y)
regr_line = f'Y={regr.slope:.2f} * X + {regr.intercept:.2f}'
 
plt.figure(figsize=(7,7))
plt.plot(df.X, df.Y, '.')
plt.plot(df.X, regr.slope * df.X + regr.intercept,'r')
plt.legend(['DOW X KOSPI', regr_line])
plt.title(f'DOW X KOSPI (R = {regr.rvalue:.2f})')
plt.xlabel('Dow Jones Industrial Average')
plt.ylabel('KOSPI')
plt.show()
cs

 

 

 

 

728x90

댓글