Statistics

데이터 자료 형태에 따른 상관분석 방법

e냥냥 2022. 8. 26. 13:03
728x90

 

1. 상관분석(Correlation Analysis)

두 확률 변수 간에 어떤 선형적 관계를 가지는지 분석하는 기법으로 상관계수를 이용하여 측정합니다.

하지만 두 변수간에 선형적인 관계가 있다고 해서 인과관계까지 있다는 것은 아닙니다. 

 

2. 상관계수(Correlation Coefficient)

상관관계를 분석하는데 있어서 가장 직관적인 방법은 산점도를 그려 직선의 형태와 가까운지 확인하는 것입니다. 

상관계수는 비교하고자 하는 두 확률 변수 X와 Y가 함께 변하는 정도를 의미하며 $r$ 이라고 표현합니다.

 

X가 증가할때 Y도 같은 방향으로 증가하면 상관계수($r$)는 +1, 반대 방향으로 증가하면 $r$ = -1입니다.

아래 가운데 그림처럼 $r$ = 0인 경우는 X와 Y가 상관관계가 없다는 뜻이 아니라

선형적인 상관관계가 아니라고 말하는 게 적절합니다.  

 

 

2-1.  공분산(Covariance)

공분산은 두 확률 변수 X, Y들이 어떻게 퍼져있는지 나타내는 즉, 선형 관계에 대한 정보를 알려주는 값입니다.

공분산이 양수이면 두 확률 변수는 서로 양의 선형 관계가 있고, 음수라면 서로 음의 선형 관계가 있음을 의미합니다. 

상관계수와 같은 의미이죠? 하지만 차이점이 있습니다. 

 

$$Cov(X, Y) ≡ E[(X-E[X])(Y-E[Y])]$$

 

공분산은 두 변수의 크기(scale)에 따라 값이 달라지기 때문에

공분산이 더 크다고 해서 선형관계가 강하다고 할 수 없습니다.

 

예를들어 X, Y의 공분산은 10이고 W, V의 공분산이 100이라고 해서 W, V가 더 강한 선형적 관계라고

표현할 수 없다는 것입니다.  

 

(X, Y), (W, V)의 확률변수가 아래와 같을 때 각각 공분산을 구해보겠습니다. 

 

X = {160, 175, 180, 168, 153}, Y = {58, 62, 73, 60, 62}

 

W = {1600, 1750, 1800, 1680, 1530}, V = {580, 620, 730, 600, 620}

확률변수 (W, V)의 공분산은 3360으로 확률변수 (X, Y) 보다 100배 더 높습니다.

그렇다고 선형관계가 100배 더 크다고 할 수 없다는 것입니다. 이런 단점을 보완하기 위해 상관계수를 사용합니다. 

 

2-2. 상관관계에 영향을 주는 요인

   1) 선형관계

상관계수는 선형적인 관계를 나타내는 값이기 때문에

직선이 아닌 다른 형태의 데이터들은 0이 되어 관계가 없다고 생각할 수 있습니다.

 

하지만 비선형의 관계가 있을 수 있기 때문에 반드시 산점도를 같이 확인해서 데이터의 패턴을 확인해야합니다. 

 

   2) 관측치들의 충분한 변량

두 변수의 상관관계를 충분히 나타내기 위해서는

한 변수가 다른 변수에 대해 충분한 변량(데이터)을 가지고 있어야 합니다.

 

예를 들어서 IQ와 시험성적간의 상관계수를 구한다고 할 때 확보한 IQ의 범위가 140 이상인 관측치밖에 없다면

두 변수간 상관관계가 매우 낮게 나올 것입니다. 

3. 상관분석 방법

데이터의 형태에 따라 상관관계를 보는 방법이 다양합니다. 데이터 형태의 케이스별로 상관분석 방법을 살펴보겠습니다. 

 

 

3-1. 연속형 vs 연속형

   1) Pearson correlation

연속형 자료인 두 변수 X, Y간의 선형 상관 관계를 계량화한 수치로 -1 ~ 1 사이의 범위를 가지며

일반적으로 상관관계는 피어슨 상관관계를 의미합니다.

 

두 변수가 정규분포를 가정하는 경우 사용하는 방법으로 모수적 방법이라고 하며,

연속형인 경우 외에도 등간척도(간격척도)나 비례척도인 변수들 간의 분석에서도 피어슨 상관 계수가 사용됩니다. 

 

상관계수에 대한 해석하는 방법은 아래와 같습니다.

 

  · |0.9| ~ |1.0| 매우 높은 음/양의 상관관계

  · |0.7| ~ |0.9| 높은  음/양의 상관관계 

  · |0.5| ~ |0.7| 어느 정도의 음/양의 상관관계 

  · |0.0| ~ |0.5| 거의 상관관계가 없음

 

$$r_{XY} = \frac{\sum_i^n(X_i-\overline{X})(Y_i-\overline{Y})}{\sqrt{\sum_i^n(X_i-\overline{X})^2}{\sqrt{\sum_i^n(Y_i-\overline{Y})^2}}}
$$

 

import pandas as pd 

data = {"col1":[1,2,3,4,5,6,7,8,9,10],
        "col2":[1,4,2,8,16,32,34,37,47,50],
        "col3":[10,9,4,6,8,9,11,12,9,7]}

data = pd.DataFrame(data)

data.corr(method = 'pearson')

 

   2) Spearman correlation

두 변수 X, Y가 연속형 자료이나 정규성을 만족하지 않는 경우, 순서척도인 경우 스피어만 상관계수를 사용합니다.

스피어만 순위 상관계수는 값에 순위를 매겨 순위에 대한 상관계수 값을 구하기 때문에 비모수적 방법이라고 합니다. 

 

또한 순위를 이용하기 때문에 연속형 변수가 아닌 순서형 변수인 경우에도 사용할 수 있습니다.

피어슨 상관계수와 동일하게 상관계수 값은 -1 ~ 1 사이의 범위를 갖습니다.

 

data.corr(method = 'spearman')

 

 3) Kendall's Tau

켄달의 타우는 두 변수들간의 순위를 비교해서 연관성을 계산하는 방식입니다.

스피어만 상관계수와 유사하며 계수 값은 조금 다르지만 p-value는 거의 비슷한 값을 가지며 처리 방법에 따라서

Kendall's tau-a, tau-b, tau-c가 있습니다.

 

켄달의 타우는 상관계수(상관의 정도)를 보기보다는 X변수가 증가할 때 Y 변수가 증가하는지 또는 감소하는지

여부 정도로만 확인합니다.

 

데이터 샘플을 수가 적거나 순위에서 동률이 많은 경우 유용하게 사용할 수 있고

상관계수 값은 -1 ~ 1 사이의 범위를 갖습니다.

 

data.corr(method = 'kendall')

 

3-2. 연속형 vs 범주형

   1) Point biserial correlation

점이연 상관계수라고 부르며 X변수가 연속형이고, Y변수는 이분변수일 때 사용하는 상관계수입니다.

이분변수는 네/아니오, 있음/없음 등의 형태를 말하고 이를 0과 1로 코딩한 다음 pearson 상관계수를 계산한 것을

point biserial correlation이라고 합니다. 

 

from scipy import stats
a = np.array([0, 0, 0, 0, 1, 1, 1, 1])
b = np.arange(8)

stats.pointbiserialr(a, b)

   2) Biserial correlation

point biserial correlation과 동일하게 X변수가 연속형이고 Y변수가 이분변수일 때 사용하지만

이분변수가 원래 연속형변수를 이분화한 경우에 사용합니다. 

 

   3) Polyserial correlation

X변수가 연속형이고 Y변수의 범주화가 3개 이상인 경우에 사용합니다.

 

3-3. 범주형 vs 범주형

   1) 파이 계수(Phi coefficient)

X, Y변수 모두 남/여 또는 있다/없다 등 이분변수일 때 두 변수간의 상관분석을 하는 방법으로

파이 계수 대신 L, C, Lambda 등을 이용하기도 합니다.

파이 계수의 상관계수 값은 0 ~ 1 사이의 범위를 갖고, 0에 가까울수록 상관관계가 낮으며

1에 가까울수록 상관관계가 높다고 해석됩니다. 

 

$$r_{phi} = \frac{ad-bc}{\sqrt{(a+c)(b+d)(a+b)(c+d)}}$$

from scipy.stats.contingency import association

X = np.array([[30, 10],
              [20, 30]])

association(X, method="tschuprow")

 

   2) 크래머 V계수(Cramer's V)

X, Y 변수의 범주가 3개 이상인 경우 상관분석을 하는 방법으로 크래머 V계수를 사용합니다.

크래머 V계수의 상관계수 값도 파이 계수와 동일하게 0 ~ 1 사이의 범위를 갖습니다. 

 

$$V = \sqrt{\frac{\chi^2}{n(q-1)}}$$

 

$χ^2$ : 카이제곱 공식 이용

$n$ : 총 데이터 수

$q$ : 줄 수와 칸 수 중 적은 수 

 

association(obs4x2, method="cramer")

4. 상관계수 시각화

변수들이 많아지게 되면 표로 파악하는게 어려워져 시각화하면 직관적으로 파악할 수 있습니다.

import seaborn as sns

sns.heatmap(data.corr(), annot=True, cmap="coolwarm", vmax=1, vmin=-1)

옵션

annot : 표에 값 표시

cmap : 색상 참고 matplot-color

vmax :  오른쪽 컬러바 최댓값 설정

vmin : 오른쪽 컬러바 최솟값 설정

 

히트맵을 사용하게 되면 시각적으로 상관관계가 높은 변수들을 쉽게 찾을 수 있지만

대각선을 중심으로 위/아래가 대칭이어서 가독성이 떨어집니다.

 

가독성을 높이기 위해 윗부분과 대각선(항상 1)을 제외한 히트맵을 그려보도록 하겠습니다.

corr = data.corr()
mask = np.triu(np.ones_like(corr))
sns.heatmap(corr, annot=True, cmap="coolwarm", vmax=1, vmin=-1, mask = mask)

 

 

 

 

 

 

 

감사합니다 :)

 

 

 

 

 

 

참고자료

데이터과학 삼학년

의학을 가르치는 것은 횃불을 전달하는 것과 같다

위키피디아

Hyen4110

728x90

'Statistics' 카테고리의 다른 글

[비율검정] 두 그룹의 비율 차를 이용한 검정  (1) 2019.04.01
loading