이번 글은
2022.07.04 - [수학의 재미/행렬 이론] - 공분산과 공분산 행렬
에서 이어집니다. 저번 글에서는 아래의 예제로 공분산 행렬을 구하는 방법을 알아봤습니다.
공분산 행렬은
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 이 나오게 됩니다. 똑같은 현상에 분석 단위만 분에서 초로 바뀌었는데 말이죠.
그럼 과연 공분산은 그냥 구해 보고 양인지 음인지만 따지는 멋없는 수일까요?
공분산이 말하는 의미를 찾으려면 일단 분석 단위에 휘둘리지 않는 방법으로 바꿔주는 것이 필요합니다.
그래서 생각해 낸 것이 통계 변수를 정규화 시키는 것입니다. 정규화를 시키면 데이터의 크기가 주는 왜곡에서 벗어나게 됩니다. 정규화를 안 시키게 되면 아래와 같은 상황이 벌어질 수도 있는 것이죠.
정규화에 여러 방법이 있겠지만 가장 유용하게 쓰이는 방법 중 하나가 바로 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을 이용하여 상관계수행렬을 구할 수 있습니다. 다음 글에서 예제를 들어서 설명하도록 하겠습니다.
'수학의 재미 > 행렬 이론' 카테고리의 다른 글
3중 대각행렬의 풀이 (0) | 2022.07.29 |
---|---|
상관계수와 상관계수 행렬 #2 (0) | 2022.07.06 |
공분산과 공분산 행렬 (0) | 2022.07.04 |
행렬이 양수다? positive semidefinite (0) | 2022.07.04 |
대칭행렬 만들고 고윳값 분해하기 (0) | 2022.07.02 |
댓글