데이터분석/분석-지도학습

그래인저 인과관계 모형 #삼성전자 주식과 삼성전자우 주식의 인과관계 를 통한 실습

씩씩한 IT블로그 2021. 1. 4. 15:29
반응형

 

그래인저 인과관계 모형(granger cauality model)

(1) 의미

X라는 사건과 Y라는 사건이 서로 인과관계가 있는지 확인하는 모형.

어떤 현상의 예측에 있어서 다른 정보를 이용하는 것이 얼마나 유의미한지 나타내는 척도.

 

(2) 수행 순서

1. 사건 X와 Y를 설정한다.

2. X->Y일때의 가설검정을 수행한다.

3. Y->X일때의 가설검정을 수행한다.

*가설검정 

P-value가 유의수준보다 낮으면 유의미

 

4. 결과해석

X->Y가 유의미하고 Y->X가 유의미하지 않으면 인과관계 (X->Y) 성립

Y->X가 유의미하고 X->Y가 유의미하지 않으면 인과관계 (Y->X) 성립

 

 

실습

삼성전자 우선주와, 삼성전자 간의 인과관계를 그래인저 모형을 통해 알아본다.

 

(1) 데이터로딩

# 데이터 로딩
import pandas_datareader.data as web
import datetime

start = datetime.datetime(2014, 1, 1)
end = datetime.datetime(2018, 12, 31)
raw1 = web.DataReader("005930.KS", 'yahoo', start, end)
raw2 = web.DataReader("005935.KS", 'yahoo', start, end)
# raw2 = web.DataReader("009150.KS", 'yahoo', start, end)

 

(2) 데이터 시각화를 통해 확인

# 데이터 시각화
raw = pd.concat([raw1.Close, raw2.Close], axis=1).dropna()
raw.columns = ["SE", "SE_PS"]
raw.plot(figsize=(10,5))
plt.show()

 

 

(3) ADF를 통해 비정상성 여부를 판단하고, 비정상이면 1차 차분

# 비정상성 차수 추론
# adf테스트로 추세확인 후 1차 차분
target = raw.SE.copy()
integ_result = pd.Series(sm.tsa.stattools.adfuller(target)[0:4], 
                         index=['Test Statistics', 'p-value', 'Used Lag', 'Used Observations'])
Y1_integ_order = 0
if integ_result[1] > 0.1:
    Y1_integ_order = Y1_integ_order + 1
target = raw.SE_PS.copy()
integ_result = pd.Series(sm.tsa.stattools.adfuller(target)[0:4], 
                         index=['Test Statistics', 'p-value', 'Used Lag', 'Used Observations'])
Y2_integ_order = 0
if integ_result[1] > 0.1:
    Y2_integ_order = Y2_integ_order + 1
print('Y1_order: ', Y1_integ_order, 'Y2_order: ', Y2_integ_order)

 

(4) 분석수행

입력하는 데이터는 2차원이여야 하고 0번째 컬럼이 X, 1번째 칼럼이 Y일때, X->Y가 유의미한지를 확인해준다.

maxlag : 최대 lag수

verbose : 계산과정 확인 여부

# Granger Causality 테스트
print('\n[삼성전자우 -> 삼성전자]') 
granger_result1 = sm.tsa.stattools.grangercausalitytests(raw.diff(1).dropna().values, maxlag=4, verbose=True)
print('\n[삼성전자 -> 삼성전자우]') 
granger_result2 = sm.tsa.stattools.grangercausalitytests(raw.diff(1).dropna().iloc[:,[1,0]].values, maxlag=4, verbose=True)

 

 

(5) 결과해석

삼성전자우 -> 삼성전자는 p-value의 값이 유의수준을 0.05라고 했을 때 4일까지 영향을 미친다.

즉 삼성전자우 주식은 삼성전자의 주식에 4일동안 영향을 미친다.

 

삼성전자 -> 삼성전자우는 p-value의 값이 유의수준을 0.05라고 했을 때 하루도 영향을 미치지 않는다.

즉 삼성전자 주식은 삼성전자우의 주식에 영향을 미치지 않는다.

 

 

따라서 삼성전자우 주식이 원인, 삼성전자 주식이 결과라는 결론을 낼 수 있다.

 

*출처 : 패스트캠퍼스 "파이썬을 활용한 시계열 데이터분석 A-Z"

반응형