brunch

You can make anything
by writing

C.S.Lewis

by 데이터쟁이 Nov 12. 2020

상관관계분석 1분컷

Correlation analysis






상관관계 - Correlation 


두 숫자 간 얽힌 관계를 의미한다. 단 비교한 숫자는 연속인 배열의 형태이어야 하며 배열의 길이가 길어질수록 더 높은 상관관계 도출이 가능해진다. (2와 4의 상관관계는 뽑을 수 없지만, 10명의 키와 몸무게의 상관관계는 뽑을 수 있다는 말) 기본적으로 상관계수(Correlation coefficient, r)는 -1에서 1까지의 값을 가지게 되며,  r이 -1 일 때는 두 배열이 정반대의 상관관계를 r이 1일 때는 그 반대의 관계를 갖게 된다.





예시를 들어보자면, 보유하고 있는 자산 (A)과 보유 자산에 대한 세금 (B)의 경우 A가 상승할 경우 B가 필시 상승하게 된다. 다만 'Co(상호)' Relation인 관계이기 때문에 A와 B를 역치(易置) 해서, 세금이 증가할 경우 자산도 증가하느냐라고 했을 때는 자산의 종류나 보유기간에 따라 늘 같이 오르지는 않을 수도 있다. 하지만 대부분의 경우에 두 숫자 배열은 한쪽이 상승 시 나머지 한쪽이 동반 상승하고 하락 시 동반 하락하는 형태를 띠고 있는 관계를 보이기 때문에 양의 상관관계를 갖는다고 말할 수 있다. 모든 상황에서 등락의 방향이 같았다면 1의 r값을 갖게 되겠지만, 몇몇 케이스에서는 반대의 경우도 보였기 때문에 양수지만 1은 조금 못 미치는 뭐 그 정도의 값을 갖게 된다. 


 대략적인 설명은 이걸로 됐고, 그래서 이걸 어떻게 추출해야 하는지 알아보자.



1. 간단한 방법




위 파일 다운로드



환율과 한국 코스닥지수 간의 상관계수를 추출하는 방법을 엑셀을 통하면 정말 간단하다.


바로 CORREL 함수를 이용하는 것인데, 간단하게 두 숫자 배 열간의 상관계수를 알려준다. -0.31의 r값을 갖고 있는 두 지표 간의 관계는 음의 상관관계이며, 하나가 올라가면 나머지 하나는 하락하는 관계로 해석된다. 다만 0.3의 수치가 그렇게 명확한 수치는 아니긴 하다. 조금 그 관계를 명확하게 시각화하기 위해서 Scatter chart를 이용하면 아래와 같다. 


뭔가 일관성 있게 점들이 붙어 있어 보이니, 상관관계가 있는 거 아닌가 생각할 수 있지만, 환율과 코스닥지수가 하루 만에 급등이나 급락을 반복하지 않기 때문에 연속성을 갖기 때문이다. 읽는 방법은 차트 내 점들이 우측으로 갈수록 (=x값이 상승할수록), 1180원선까지는 동반 상승하는 형태를 보이다, 그 이후 역행하며 많은 점들이 포진되어 있는 것을 보았을 때 도출된 r값의 의미와 일맥상통한다고 판단된다. 


2. 조금은 더 복잡한 방법

상관관계라는 것이 기본적으로 두 지표 간의 관계를 의미하지만, 어디 서비스를 운영하는데 지표가 두 개뿐이랴. 지표들은 어쩔 수 없이 대단히 많을 수밖에 없고, 기온 - 불쾌지수와 같이 뻔한 것도 있지만, 뜬금없는 두 지표과 관계를 갖는 경우도 있다. 그럼 다중 상관관계를 해봐야 하는데, 물론 위 엑셀을 이용하는 방법으로 여러 칼럼을 여러 번 계산하면 되긴 하다. 그보다 조금은 복잡하지만, 익혀두면 너무 쉬운 방법은 파이선을 이용하는 것이다. 파이선은 설치 과정이 간편한 편이지만, 라이브러리 인스톨 등 번거로운 제반 작업이 있기 때문에 최초 구축 시 손이 많이 가는 편이다. 그런 부분을 간소화시켜줄 수 있는 것이 웹 IDE인데, 보편적으로 Jupyter Notebook을 많이들 이용한다. 


Jupyter Notebook 설치 

https://jupyter.org/install


설치 후 실행하게 되면, 이런저런 창들이 뜨고 나서 주 브라우저에 아래와 같은 탭이 추가된다.

 


우상단의 New를 눌러 새 파일을 만들고, 


import pandas as pd

import numpy as np

import seaborn as sns

import matplotlib.pyplot as plt

% matplotlib inline

dd = pd.read_clipboard()

dd = dd.corr()

dd.to_clipboard()

sns.heatmap(dd, annot =True)


위 코드를 넣고, 실행 (Ctrl + Enter) 하면 바로 결과물이 나오게 되는데, 파이선을 이용하기 전 우려되었던 사항은 데이터를 어떻게 불러들이고 어떻게 읽히지? 였는데, 그 부분을 해결한 코드이다. 엑셀 같은 곳에서 데이터를 칼럼명을 포함해 복사한 상태에서 저 코드를 실행하기만 하면 클립보드에 있는 데이터를 가져와서 상관계수를 출력해 준다. 1번의 케이스를 적용해보면,


동일한 -0.31의 값을 보여준다. 조금 복잡한 테이블을 적용시킨다면


위와 같은 여러 지표들을 동시에 볼 수 있다. 특이한 점은 좌상단에서 우하단까지 1의 값을 갖는 선이 있고, 그 선을 축으로 양쪽이 대칭되는 형태이다. 모든 지표들끼리의 관계를 전부 구하는 것이기 때문에 가운데 있는 선은 지표 스스로의 관계이기 때문에 절대적으로 값이 똑같아서 1의 값을 갖는 것이고, 양 쪽의 값이 대칭인 것도 X, Y축을 보면 순서만 바뀌었을 뿐 결국 같다. 정리하면 그냥 아무 데나 봐도 된다.


 위 열지도(Heatmap)을 보면, cylinders - weight까지의 값은 서로에게 모두 강력한 양의 상관관계를 갖고, Acceleration - origin의 값들과는 반대의 관계를 갖는다. 지표 두 개만 놓고 보았을 때 확인하지 못했던 지표'군'들 간의 비교도 가능해지고 관계의 경중을 색으로 표기해 잘 읽힌다. 


Jupyter Notebook에서 사용된 파일






분석 과정 간, 간단하게 여러 지표들 간의 관계를 훑어보기 위해 여러 탭 중 하나에 노트북을 띄워놓고 확인하곤 한다. 해당 라이브러리를 활용하면 더 예쁜 차트들도 그릴 수 있고 그렇지만, 일단은 저 정도만으로도 충분했다. 


숫자를 잘 읽을 수 있게끔 정리해서 글로 바꾸는 일이 분석가의 일이고, 그리고 결과적으로 그 분석은 사람이 하는 것이라지만, 모든 부분을 사람이 하기엔 어려움이 뒤따른다. 

 처음에는 툴에 의존하다가, 조금 익숙해지니 직접 데이터를 만져보고 싶고 거기서 더 나아가니 결국 다시 툴로 돌아오게 되더라. 새로운 기술들도 지속적으로 많이 나오고 해서, 쉴 새 없이 공부해야 하는 업계인 것 같다.





 

작가의 이전글 데이터의 미래
브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari