본문 바로가기
수학의 재미/행렬 이론

상관계수와 상관계수 행렬 #1

by hustler78 2022. 7. 5.
728x90
반응형

이번 글은

2022.07.04 - [수학의 재미/행렬 이론] - 공분산과 공분산 행렬

 

공분산과 공분산 행렬

어떤 현상이나 타깃을 관찰하다 보면 여러 특징(features)들이 있습니다. 예를 들어 사람을 관찰할 경우 키, 몸무게, 나이 등등 학생 학습 성취도를 관찰할 경우: 국어 점수, 수학 점수 등 그런데 경

sine-qua-none.tistory.com

에서 이어집니다.  저번 글에서는 아래의 예제로 공분산 행렬을 구하는 방법을 알아봤습니다.

공분산 행렬은

covariance matrix(python function):
[[ 3.4344     15.84933333]
 [15.84933333 90.72888889]]

위와 같이 나왔습니다. 

 

그런데 말이죠. 공분산 행렬의 원소들을 보고 어떤 정보들을 알 수 있을까요?

  • (1,1) 의 원소는 3.43 이다. (1,1) 은 첫 번째 feature인 배달거리(km)의 분산이다.
  • (2,2) 의 원소는 90.72 이다. 즉 두 번째 feature인 배달시간(m) 의 분산이다.
  • (1,2)의 원소는 15.85이다. 첫번째, 두 번째 feature 사이에 관계가 15.85 정도이다.

이런 정보들이 있겠지요. 그런데 분산은 어찌 어찌 평균으로부터 떨어져 있는 거리 정도로 이해한다손 치더라도, 공분산은 어떻게 이해하는 게 맞을까요? 15.85 이 양수이니까, 배달 거리와 시간은 양의 관계는 있구나, 이 정도는 알겠지만 이 숫자가 주는 의미가 불분명합니다. 만일 배달 시간을 초로 바꾸면요? 1분이 60초니까 공분산은 15.85×60 =951 이 나오게 됩니다. 똑같은 현상에 분석 단위만 분에서 초로 바뀌었는데 말이죠.

 

그럼 과연 공분산은 그냥 구해 보고 양인지 음인지만 따지는 멋없는 수일까요?

 

의미를 잘 모르겠다는 유명방송인

 

공분산이 말하는 의미를 찾으려면 일단 분석 단위에 휘둘리지 않는 방법으로 바꿔주는 것이 필요합니다. 

 

그래서 생각해 낸 것이 통계 변수를 정규화 시키는 것입니다. 정규화를 시키면 데이터의 크기가 주는 왜곡에서 벗어나게 됩니다.  정규화를 안 시키게 되면 아래와 같은 상황이 벌어질 수도 있는 것이죠.

 

 

삼성전자의 1/50 액면분할을 간과한 자의 장탄식

 

정규화에 여러 방법이 있겠지만 가장 유용하게 쓰이는 방법 중 하나가 바로 Z-score 정규화입니다.

 

Z-score 정규화( Z-score normalization)

변수 $X$의 평균을 $\mu$, 표준편차를 $\sigma$라 할 때,
$$ Z = \frac{X-\mu}\sigma $$
를 $X$의 Z-score 정규화라고 한다.

정규화 대신에 스케일링(scaling) 등 여러 단어로 부르기도 합니다.

 

 

1. 상관계수란?

이제 두 변수 $X_1$과 $X_2$가 있을 때 이 둘의 상관계수(correlation)을 정의해 봅시다.

상관계수(correlation)
두 변수 $X_1, X_2$의 상관계수 $\mathbf{Corr}$는 다음과 같이 정의한다.

$X_1, X_2$ 의 평균을 각각 $\mu_1, \mu_2$ 이고 표준편차를 $\sigma_1, \sigma_2$ 라 하고 각각의 Z-score를 
$$Z_1 = \frac{X_1 -\mu_1}{\sigma_1}~,~ Z_2 = \frac{X_2 - \mu_2}{\sigma_2} $$ 
라 할 때,
$$\mathbf{Corr}= \mathbb{E}(Z_1 Z_2) $$
이다. 

이것을 좀 더 정리해보면

 

$$
\begin{align}
\rho &= \mathbb{E}(Z_1 Z_2)\\
                      & = \mathbb{E} \left( \frac{(X_1-\mu_1)(X_2-\mu_2)}{\sigma_1 \sigma_2} \right) \\
       & = \frac{\mathbb{Cov}(X_1, X_2)}{\sigma_1 \sigma_2}
\end{align}
$$

입니다. 즉 $X_1,X_2$의 covariance를 각각의 표준편차 $\sigma_1,\sigma_2$로 모두 나눠주면 됩니다.

 

 


2. 상관계수 행렬이란?

공분산 때와 마찬가지로 다음의 상황을 가정합시다.

 

$p$개의 변수(features) $X_1, X_2, \cdots, X_p$ 가 있고 각각이 $n$개의 관찰 데이터 샘플을 가지고 있는 상황에서, 즉

 

$$
\pmatrix
{
\mid  & \mid &  & \mid \\
X_1 & X_2 & \cdots & X_p \\
\mid  & \mid & & \mid 
} =

\pmatrix
{
x_{11} & x_{12} & \cdots & x_{1p} \\
x_{21} & x_{22} & \cdots & x_{2p} \\
\vdots & \vdots &\ddots  &\vdots \\
x_{n1} & x_{n2} & \cdots & x_{np} \\
}
$$

에서 상관계수행렬 $\mathbf{R}$는 다음과 같이 구합니다. 각 $i\leq p$에 대해 $\mathbb{E}(X_i)=\mu_i, \mathbb{V}(X_i)=\sigma_i^2$이라 하면,

 

방법 1
$1\leq i , j \leq p$ 에 대해,
$$\mathbf{R}_{ij} = \mathbf{Corr}(X_i , X_j)$$

 

방법 2
$$ \mathbf{Z} = \pmatrix { \mid & \mid & & \mid \\ \frac{X_1-\mu_1}{\sigma_1} & \frac{X_2-\mu_2}{\sigma_2} & \cdots & \frac{X_p-\mu_p}{\sigma_p} \\ \mid & \mid & & \mid } $$
라 놓고 

$$ \mathbf{R} = \frac{1}{n} \mathbf{Z}^T \mathbf{Z} $$
를 이용하여 구하기

 

이렇게 구하면 어떤 장점이 있을까요? 정규화를 시켰으면 뭔가 분석하기 쉬운 숫자로 표현이 되겠죠? 공분산 행렬이나 공분산과 비교하여 어떤 장점이 있는지 다음 글에서 한번 알아보도록 하겠습니다. 

 

아울러 python을 이용하여 상관계수행렬을 구할 수 있습니다. 다음 글에서 예제를 들어서 설명하도록 하겠습니다.

728x90
반응형

댓글