-
[6강] 데이터 상관관계 분석기초지식/Quantopian(강의노트) 2025. 2. 1. 10:47반응형
상관계수(Correlation coefficient)
공분산의 의미
상관계수는 두 변수의 관계가 얼마나 선형적인지를 측정한다. 상관계수를 구하기 위해서는 먼저 공분산을 알아야 한다. 공분산(Cov(X, Y))은 두 변수 X와 Y가 어떻게 함께 변동하는지 측정하는 지표로 아래 식으로 측정한다.
식1: 공분산의 계산식 상관계수의 의미
공분산을 활용하여 아래와 같이 상관계수를 구할 수 있다.
식2: 공분산을 활용한 상관계수 계산식 상관계수는 결국 공분산을 각각의 표준편차로 정규화 한 값이다. 정규화가 되지 않은 공분산의 크기만으로는 다른 데이터와의 비교가 불가능하기 때문에 표준편차로 정규화한 상관계수를 데이터 분석에 주로 사용한다. 정규화 과정을 거쳐서 구한 상관계수는 항상 -1에서 1 사이의 값을 가지고, 1에 가까울수록 완전히 우상향 선형 관계를, -1에 가까울수록 완전히 우하향 선형 관계를 나타낸다.
공분산과 상관계수 구하기
공분산과 상관계수가 행렬(matrix)로 표현되는 이유
집단의 개수가 하나일 때 공분산행렬은 1 x 1행렬로 표현된다. 같은 집단끼리의 공분산은 그 집단의 분산과 같기 때문이다.
그림1: 집단의 개수가 하나일 때 공분산의 의미 집단의 개수가 두 개 이상일 경우를 생각해보자. 두 개의 집단인 집단 X와 집단 Y로 만들 수 있는 조합은 (X, X), (X, Y), (Y, X), (Y, Y) 4 가지이다. 따라서 공분산 행렬은 아래 그림 2와 같이 만들 수 있다.
그림2: 집단의 개수가 두 개일때 공분산행렬 공분산과 상관계수 값 python으로 구하기
python numpy 의 cov 함수를 통해서 공분산을, corrcoef 함수를 통해서 상관계수를 구할 수 있다. 아래는 간단한 구현 예시이다.
# numpy 라이브러리 사용 import numpy as np # X, Y, Z 집단 정의 X = [1,2,3,4,5,6,7,8,9,10] Y = [2,2,2,2,2,8,8,8,8,8] Z = [1,1,1,2,2,2,3,3,3,10] # X, Y의 분산, 상관계수 계산 print(np.cov([X, Y])) print(np.corrcoef([X, Y])) # X, Y의 분산, 상관계수 계산 print(np.cov([X, Y, Z])) print(np.corrcoef([X, Y, Z]))
위 코드를 실행하면, 집단 X, Y만 넣었을 때는 2 x 2 행렬로 결과가 나오고, 집단 X, Y, Z를 모두 넣었을 때는 3 x 3 행렬로 결과가 나오는 것을 확인할 수 있다.
그림3: 파이썬 공분산, 상관계수 계산 예시 금융데이터 상관계수 분석: S&P500 지수, 애플, JPMORGAN 주식 상관관계 비교
python의 yahoo finance 라이브러리를 이용하면 손쉽게 S&P500 지수, 애플, JPMORGAN 주식의 기간별 종가를 받을 수 있다.(미국 ETF 대표 종목 뽑아내기: python yahoo finance 활용) 아래와 같이 yfinance의 download 함수를 사용하여 2024년 1년 동안의 수정 종가를 다운받아서 spdr, apple, jpmorgan이라는 변수에 저장한 뒤에 numpy corrcoef 함수를 통해서 상관계수를 구할 수 있다.
# 라이브러리 참조 import numpy as np import yfinance as yf # 데이터 시작일과 종료일 설정 start = "2024-01-01" end = "2024-12-31" # S&P500지수(Ticker="SPY"), 애플주식(Ticker="APPL"), JPMORGAN주식(Ticker="JPM") # 종가를 yfinance 라이브러리 download 함수를 이용해서 가져오기 prices = yf.download(["SPY", "AAPL", "JPM"], start=start, end=end) # 각각의 수정 종가 데이터를 변수에 저장 spdr = prices["Adj Close"]["SPY"] apple = prices["Adj Close"]["AAPL"] jpmorgan = prices["Adj Close"]["JPM"] # 상관계수 분석 np.corrcoef([spdr, apple, jpmorgan])
실제 상관계수를 값을 구해보면 아래 그림 4의 왼쪽과 같은 결과를 얻을 수 있다. 결과를 보면, S&P500 지수와 애플주가의 상관계수보다(0.8829) S&P500 지수와 JPMORGAN 주가의 상관계수(0.9586)가 더 높은 것을 확인할 수 있다. 실제로 각각의 산포도 그래프를 그려보면 그림 4의 오른쪽 처럼 S&P500 지수와 JPMORGAN 주가의 산포도 그래프가 더 우상향하는 직선에 가까운 것을 확인할 수 있다.
그림4: S&P500 지수와 애플주가, S&P500 지수와 JPMORGAN주가의 상관계수 상관계수는 두 변수의 관계가 얼마나 선형적인지를 측정하는 지표로 비선형 관계를 포착하지 못하는 한계가 있다. 또한 분석 대상 기간의 상관관계가 미래에도 지속될 것을 보장하지 못하며, 극단적인 몇 개의 값에 왜곡된다는 문제점도 발생할 수 있다. 하지만 간단하게 데이터 간의 관계를 확인할 수 있다는 점에서 여전히 유용한 분석 수단이다.
반응형'기초지식 > Quantopian(강의노트)' 카테고리의 다른 글
[5강] 왜도와 첨도를 활용한 자크베라 검정(정규성 검정) (0) 2024.12.07 [5강] 통계적 지표(왜도와 첨도) (0) 2024.12.03 [4강] 데이터의 산포도 측정(분산, 표준편차, 범위 등) (0) 2024.11.27 [3강] 데이터의 중심 측정(scipy, numpy 사용) (0) 2024.11.07 [2강] 데이터 시각화(Matplotlib을 활용) (2) 2024.11.02