- 상관계수
pandas의 corr를 이용하여 두 변수간의 상관계수를 구할 수 있다.
공분산을 이용하여 상관계수를 구할 수 있는데 해당 내용은 아래 링크를 참조하면 된다.
import pandas as pd
import matplotlib.pyplot as plt
def readData(name):
return pd.read_csv(name+".csv")
def madeData(name):
value=readData(name)
temp = pd.DataFrame({'Date':KS['date'],name:value['close'],'KOSPI':KS['close']})
#inplace를 통해 기존의 인덱스(숫자)를 대체
temp.set_index('Date',inplace=True)
temp = temp.dropna()
return temp
KS=readData("KS")
KSP = madeData("SP")
KDW = madeData("DW")
KNS = madeData("NS")
print(KSP.corr())
print(KDW.corr())
print(KNS.corr())
readData함수는 csv 파일을 가져오는 역할을 한다.
madeData함수는 csv 파일을 데이터프레임 형태로 만들고, 결측치를 제거하는 등의 역할을 한다.
최종적으로 KSP, KDW, KNS를 madeData함수를 이용하여
코스피와 각각의 미국증시와의 선형관계를 얻으려고 한다.
그렇기 위해 상관계수를 구하기 위해 corr()을 사용하여 출력해준다.
추가로 상관계수는 선형관계를 측정하는 것이지 비선형관계까지 측정하는 것은 아니다.
두 변수가 높은 상관관계를 갖는다고 해도, 인과관계를 의미하지는 않는다.
해석해보자면 상관계수는 -1~+1까지의 값을 가진다.
+1에 가까울수록 높은 선형관계를 가진다.
즉 3개의 미국증시 모두 코스피와 약 0.8정도의 상관계수를 가지낟.
투자에서의 상관계수는 각각 이런 의미를 가진다.
참고하는 정도로 활용하면 좋을 듯 하다.
예시로 주식과 채권이 리스크를 줄이는 전략으로 자주 쓰이곤 한다.
위의 관계를 살펴보았을 때 코스피와 미국증시는
리스크 완화 효과가 많지 않다는 것을 알 수 있다.
추가로 결정계수는 r^2을 말한다.
이 값은 0~1사이의 값을 나타내며
1이면 선형 회귀 모델이 완벽하게 데이터를 설명한다는 의미이다.
- 선형회귀
단순선형회귀의 내용은 위의 링크를 참고하면 된다.
단순선형회귀는 하나의 종속변수와 하나의 독립변수가 관련될 때 사용한다.
추가로 다중회귀분석은 여러 독립변수를 가진다.
여기서 종속변수(y)는 코스피, 독립변수는 미국증시(x)를 의미한다.
import pandas as pd
import matplotlib.pyplot as plt
import scipy
def readData(name):
return pd.read_csv(name+".csv")
def madeData(name):
value=readData(name)
temp = pd.DataFrame({'Date':KS['date'],name:value['close'],'KS':KS['close']})
#inplace를 통해 기존의 인덱스(숫자)를 대체
temp.set_index('Date',inplace=True)
temp = temp.dropna()
return temp
def LinearReg(Data,code):
if code=="SP":
x=Data.SP
elif code=="DW":
x=Data.DW
else:
x=Data.NS
y=Data.KS
#단순 선형회귀분석
model = scipy.stats.linregress(x,y)
print(model)
KS=readData("KS")
KSP = madeData("SP")
LinearReg(KSP,"SP")
해당 결과는 위 사진과 같이 나온다.
slope = 기울기
intercept = y절편
rvalue = 설명력
pvalue = p값(신뢰)
stderr = x표준편차
intercept_stderr = y표준편차를 의미하는 듯 하다.
import pandas as pd
import matplotlib.pyplot as plt
import scipy
def readData(name):
return pd.read_csv(name+".csv")
def madeData(name):
value=readData(name)
temp = pd.DataFrame({'Date':KS['date'],name:value['close'],'KS':KS['close']})
#inplace를 통해 기존의 인덱스(숫자)를 대체
temp.set_index('Date',inplace=True)
temp = temp.dropna()
return temp
def LinearReg(Data,code):
if code=="SP":
x=Data.SP
elif code=="DW":
x=Data.DW
else:
x=Data.NS
y=Data.KS
#단순 선형회귀분석 및 시각화
model = scipy.stats.linregress(x,y)
#단순선형회귀식
regr_line = f'Y = {model.slope:.2f}*x+{model.intercept:.2f}'
#시각화 단계
plt.figure(figsize=(7,7))
plt.plot(Data[code],Data['KS'],'.')
plt.plot(Data[code],model.slope*Data[code]+model.intercept,'r')
plt.legend([code +"& KS", regr_line])
plt.xlabel(code)
plt.ylabel('KS')
plt.show()
KS=readData("KS")
KSP = madeData("SP")
KDW = madeData("DW")
KNS = madeData("NS")
LinearReg(KSP,"SP")
LinearReg(KDW,"DW")
LinearReg(KNS,"NS")
위 코드를 통해서 코스피와 미국증시와의 단순선형회귀 분석을 할 수 있다.
scipy의 stats.linregress를 통해서 간단하게 값을 얻을 수 있다.
결과는 아래 사진과 같이 나온다.
'IT지식 > 빅데이터' 카테고리의 다른 글
토이프로젝트 - (6) 논문 분석 (3) | 2023.06.20 |
---|---|
토이프로젝트 - (5) 선형회귀의 조건 (2) | 2023.06.16 |
토이프로젝트 - (3) 결측치 확인 및 처리 (1) | 2023.05.20 |
토이프로젝트 - (2) 데이터 수집 (with pandas) (1) | 2023.05.06 |
토이프로젝트 - (1) 데이터 수집 (코스피 크롤링) (2) | 2023.05.03 |