상관 분석(Correlation Analysis) 또는 상관 관계 분석은 두 변수 간에 어떤 선형적 관계를 가지는지 분석하는 기법으로 상관계수를 이용하여 측정하는 것이다.
A와 B가 positive correlation이란 사실은 알 수 있지만, A의 증가가 원인이 되어 B가 증가하는지, B가 증가하는 것이 원인이 되어 A가 증가하는지는 알 수 없다. 따라서 원인과 결과에 대한 분석이 필요하다면 상관분석이 아니라 회귀 분석(Regression Analysis)을 수행하여야 한다.
상관 도표, ACF, PACF 등에서 등장하는 단어인 자기 상관이라는 단어를 다시 한번 정리해보려 한다.
ACF와 PACF에 관한 내용은 여기를 참조하면 된다.
상관 계수(Correlation Coefficient)
상관 계수(Correlation Coefficient)란 두 변수 사이의 통계적 관계를 표현하기 위한 특정 상관관계의 정도를 수치적으로 나타낸 것을 뜻한다. 상관 관계(=상관 계수)는 두 변수 간 어떤 선형적 관계를 가지는지 분석하는 상관 분석(Correlation Analysis)을 통해 도출된다. 다시 말해 상관 계수란 상관 분석의 결과물이라 볼 수 있다. 그럼 이 상관 계수를 알아내기 위한 상관 분석을 살펴보자.
상관 분석(Correlation Analysis)
상관 분석은 아래 4가지 기본 가정을 가져야 한다.
- 선형성
- 동변량성
- 두 변수의 정규 분포성
- 무선 독립 표본(=무작위 표본)
여기서 선형성은 X와 Y의 관계가 직선적인지 알아보는 것인데, 분포를 나타내는 산점도를 이용해 확인해 볼 수 있다.
동변량성은 X값과 관계없이 Y의 산포도가 같은 것을 의미한다.
두 변인의 정규분포성은 두 변수의 측정치 분포가 모집단에서 모두 정규분포를 이루는 것이다. 정규분포란 2개의 매개 변수 평균(\(mu \))과 표준편차(\( \sigma \))에 의해 모양이 결정되고 이때의 분포를 \( N(\mu, \sigma^2) \)으로 표기한다. 정규분포에선 기댓값, 최빈값, 중앙값이 모두 \( \mu \)이다.
무선 독립 표본(=무작위 표본)은 모집단에서 표본을 추출할 때 표본대상이 확률적으로 선정된다는 것이다.
이러한 기본 가정 하에 두 변수는 서로 독립적이거나 상관된 관계일 수 있고 이러한 두 관계의 상도를 상관계수로 표현한다. 이 상관관계의 수치의 단위로 모 상관계수는 \( p \), 표본 상관계수는 \( r \)로 표기한다. 다만 상관계수는 두 변수간 연관 정도를 표현한 것이지 인과관계를 설명할 수 있는 것은 아니다. 인과관계 여부는 회귀분석을 통해 해당 관계의 방향과 정도, 그리고 적용할 수학적 모델을 추정할 수 있다.
상관분석은 아래 세 가지로 나눌 수 있다.
- 단순 상관 분석(Simple Correlation Analysis)
- 다중 상관 분석(Multiple Correlation Analysis)
- 편 상관 분석(Partial Correlation Analsis)
단순 상관 분석(Simple Correlation Analysis)은 2개의 변수가 어느 정도 강한 관계를 나타내는가 측정하는 방식이다.
다중 상관 분석(Multiple Correlation Analysis)은 2개 이상의 변수간 관계 강도를 측정한다.
마지막으로 편 상관 분석(Partial Correlation Analysis)은 다중 상관 분석에서 다른 변수와의 관계를 고정하고 두 변수의 관계 강도를 나타내는 분석방법이다.
이때, 상관관계가 0<\(p\)<=+1이면 양의 상관, -1<=\(p\)<0이면 음의 상관, \(p\)=0이면 무상관이라고 한다. 무상관 상태는 상관이 없다는 뜻이 아니라 선형의 상관관계가 아니라는 뜻일 뿐이므로 주의가 필요하다.
피어슨 상관계수(Pearson Correlation Coefficient)
이런 상관 분석을 통해 도출되는 상관 계수도 여러 종류가 있다. 대표적으로 아래 4가지 상관계수가 있다.
- 피어슨 상관계수(Pearson Correlation Coefficient)
- 스피어만 상관계수(Spearman Correlation Coefficient)
- 켄달 타우(Kendalltau, Kendall Rank Correlation Coefficient)
- 크론바흐 알파 계수(Cronbach's alpha)
이 중 피어슨 상관계수(Pearson Correlation Coefficient)만 간략히 살펴본다.
피어슨 상관계수는 변수들 간 관련성을 구하는 이변량 상관분석(Bivariate Correlation Analysis)에서 주로 이용된다.
$$ r=\frac{(X와 Y가 함께 변하는 정도)}{(X와 Y가 각각 변하는 정도)} $$
위와 같은 수식으로 나타낼 수 있고, 이 결과에 대한 해석은 \(r\)값이 \(X\)와 \(Y\)가 완전하게 동일하면 1, 전혀 다르면 0, 반대방향으로 완전히 동일하다면 -1을 가진다.
결정계수(Coefficient of Determination)는 \( r^2 \)으로 계산하며 이는 \(X\)로부터 \(Y\)를 예측할 수 있는 정도를 의미한다. 결정계수는 추정한 선형 모형이 주어진 자료에 적합한 정도를 재는 척도이다.
r이 -1.0과 -0.7 사이이면, 강한 음적 선형관계,
r이 -0.7과 -0.3 사이이면, 뚜렷한 음적 선형관계,
r이 -0.3과 -0.1 사이이면, 약한 음적 선형관계,
r이 -0.1과 +0.1 사이이면, 거의 무시될 수 있는 선형관계,
r이 +0.1과 +0.3 사이이면, 약한 양적 선형관계,
r이 +0.3과 +0.7 사이이면, 뚜렷한 양적 선형관계,
r이 +0.7과 +1.0 사이이면, 강한 양적 선형관계
출처: 위키피디아
피어슨 상관계수는 일반적으로 위와 같이 해석할 수 있다.
아래는 피어슨 상관계수를 도출하는 pyhton 코드이다.
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
df = pd.DataFrame([
['A01', 2, 1, 60, 139, 'country', 0, 'fail'],
['A02', 3, 2, 80, 148, 'country', 0, 'fail'],
['A03', 3, 4, 50, 149, 'country', 0, 'fail'],
['A04', 5, 5, 40, 151, 'country', 0, 'pass'],
['A05', 7, 5, 35, 154, 'city', 0, 'pass'],
['A06', 2, 5, 45, 149, 'country', 0, 'fail'],
['A07',8, 9, 40, 155, 'city', 1, 'pass'],
['A08', 9, 10, 70, 155, 'city', 3, 'pass'],
['A09', 6, 12, 55, 154, 'city', 0, 'pass'],
['A10', 9, 2, 40, 156, 'city', 1, 'pass'],
['A11', 6, 10, 60, 153, 'city', 0, 'pass'],
['A12', 2, 4, 75, 151, 'country', 0, 'fail']
], columns=['ID', 'hour', 'attendance', 'weight', 'iq', 'region', 'library', 'pass'])
corr = df.corr()
print(corr)
sns.heatmap(corr, cmap='viridis')
plt.show()
# hour attendance weight iq library
# hour 1.000000 0.492917 -0.362082 0.791026 0.673212
# attendance 0.492917 1.000000 -0.029190 0.588915 0.341568
# weight -0.362082 -0.029190 1.000000 -0.295475 0.128588
# iq 0.791026 0.588915 -0.295475 1.000000 0.436244
# library 0.673212 0.341568 0.128588 0.436244 1.000000
출처: https://wikidocs.net/78784
위 corr 함수의 default가 피어슨 상관계수이다. 아래는 계수를 히트맵으로 표현한 것이다.
피어슨 상관계수는 선형 관계일 때만 유의미하고, 2차식에서는 의미가 없다. 따라서 아래 2차식의 피어슨 상관계수는 0이다. 하지만 r=0일 때는 상관관계가 없다고 보는 것이지 아래 2차 식이 실제로 상관관계가 없는 것을 의미하지는 않는다. 따라서 피어슨 상관계수는 선형 관계일 때만 사용할 수 있다.
피어슨 상관계수에 대한 더 자세한 사항은 여기를 참조하면 좋을 듯하다.
자기 상관 계수(Autocorrelation Coefficient)
자기상관(Autocorrelation)이란 Lagged Correlation 또는 Serial Correlation이라고 불리기도 한다. 상관계수는 두 변수의 관계를 알려주었다면 자기상관은 시계열 데이터에 적용된 상관계수로 생각하면 된다. 즉, 강우량과 습도에 대한 상관도를 알 수 있는 것이 상관계수라면, 강우량의 특정 시점 \( t \)에 데이터 값은 강우량 데이터의 \( t-1 \), \(t-2\)등과 얼마나 관계가 있는가에 대한 판단을 도울 수 있는 것이 자기상관계수(Autocorrelation Coefficient)이다. 서로 다른 시간 차이(Time Lag)에 따라 산출되는 방식 때문에 Lagged Correlation이란 말이 개인적으론 더 와닿는 느낌이다.
상관계수와 자기상관계수는 두 연속적인 변수 간의 관계를 분석한다는 점은 동일하다. 공분산을 표준편차로 나눈 뒤 표준화해주면 해당 계수는 -1~1 사이의 값을 가지게 된다. 하지만 상관계수는 X와 Y의 관계를 분석하게 되고 자기상관계수는 하나의 변수만의 시차만을 가지고 판단한다는 차이점이 있다.
ACF와 PACF를 python으로 구현한 코드가 있는데 필요시 참조하면 될 듯하다.
관련 포스트
2022.02.23 - [Data Science/Statistics] - [Python] 단순 선형 회귀(Simple Linear Regression, SLR)의 이해와 구현
참고 자료
https://bkshin.tistory.com/entry/DATA-17-Regression
소스코드