머신러닝 모델을 만들기 위해 EDA(Exploratory Data Analysis)라는 과정을 거치게 됩니다. EDA를 진행하면서 어떤 변수가 우리의 모델에 얼마나 영향을 주는지 확인하기 위해 다양한 방법을 사용합니다. 시각화를 통해 변수 간의 관계를 살펴보기도 하고, 상관계수를 뽑아서 얼마나 Target에 영향을 주는지 살펴보기도 합니다. 여기서 상관계수처럼 한가지의 score로 표현해야 어떤 변수가 상대적으로 더 관계가 있는지를 확인할 수 있습니다.
오늘은 각 input과 output에 따라 scoring 하는 방법에 대해 간단하게 소개하고 Category 변수간의 관계를 표현하는 방법인 Mutual Information(상호정보량)에 대해서 다뤄보겠습니다.
1. Feature Selection Scoring 방법
위의 그림은 데이터의 다양한 형태를 Correlation의 값으로 표시한 그림입니다. 실제 데이터에서 선형 관계만 존재한다면 얼마나 좋을까요. 하지만, 위의 그림처럼 어떤 관련은 있지만, 실제로 상관계수로 판단하기 어려운 비선형적인 관계가 많이 존재합니다. 그래서 항상 Feature를 고를 때에는 선형 관계와 비선형 관계의 Feature를 모두 염두에 둬야 합니다.
그렇다면, 선형적인 관계와 비선형적인 관계는 어떻게 Scoring 할 수 있을까요? 이미 많은 사람들이 만들어놓은 통계방법들을 활용할 수 있습니다. 하지만, 변수의 종류에 따라 사용할 수 있는 방법이 다릅니다.
Numerical - Numerical
수치형 변수간의 관계를 나타내기 위해서는 피어슨 상관계수(선형)와 스피어만 상관계수(비선형)을 활용할 수 있습니다.
Categorical - Numerical
범주형과 수치형 변수의 경우, ANOVA(선형), Kendall 상관계수(비선형)를 활용할 수 있습니다.
Categorical - Categorical
카테고리 변수 간에는 카이 제곱 검정과 Mutual Information을 활용할 수 있습니다.
오늘은 Categorical 변수 간의 관계성을 나타내는 방법인 Mutual Information을 자세하게 다뤄보겠습니다.
2. Mutual Information(상호정보량)
Mutual Information은 두 변수가 얼마나 관련되어 있는지를 나타내는 방법입니다. 두 개의 변수가 서로 독립일 때 0의 값을 갖으며, 한 가지의 변수에 의해 다른 변수의 발생 확률이 증가하면 값이 높아지게 됩니다.
Mutual Information을 이해하기 위해서는 정보량, 엔트로피(평균 정보량), 쿨백-라이블러 발산을 이해하면 도움이 됩니다. 아래에서 하나씩 설명해보도록 하겠습니다.
정보량
정보량은 정보의 가치가 얼마나 되느냐로 표현할 수 있습니다. 브라질이 한국을 이겼다는 소식은 굉장히 식상한 이야기입니다. 하지만, 반대로 한국이 브라질을 이겼다면, 다음 날 하루 종일 한국 축구 이야기가 끊이지 않을 것입니다. 이처럼, 정보는 발생할 확률이 낮을수록 가치가 높아집니다.
그래서 확률을 활용해서 정보량을 표현하면, $$-log_{a}p(x_j)$$로 표현할 수 있습니다. 이때의 $p(x_j)$는 $x_j$가 발생할 확률입니다. 밑 a 값에 따라 정보량의 단위가 달라집니다. 그림으로 표현해보면 아래와 같은 그래프처럼 그려집니다.
확률은 0과 1 사이 이므로, 정보량 그래프는 위의 그림처럼 0부터 $+ \infty$ 값을 가질 수 있습니다. 아까 든 예시로, 브라질이 0.9 확률로 이긴다고 하면 $log_2 {\frac{10}{9}} < log_2{10}$로 한국이 승리했을 때의 정보량이 크다는 것을 알 수 있습니다. 간략하게 정리해보면, A라는 사건이 발생할 확률이 높을수록 A 사건이 가지는 정보량은 굉장히 작아진다고 정리할 수 있습니다.
엔트로피(평균 정보량)
엔트로피는 평균 정보량으로 X의 모든 경우에 대해서 정보량과 해당 사건의 확률의 곱을 모두 더한 값입니다.
수식으로 표현하면, $$H(X) = -\sum_{j=1}^{n} p(x_j)log_a p(x_j)$$위와 같이 표현할 수 있습니다.
예를 들어, 4면을 가진 주사위 A, B가 있다고 가정해봅시다. 각 값이 나올 확률이 아래와 같다고 해봅시다.
1 | 2 | 3 | 4 | |
A | 1/4 | 1/4 | 1/4 | 1/4 |
B | 1/8 | 1/8 | 1/4 | 1/2 |
A의 엔트로피를 한번 계산해보겠습니다.
$$ H(A) = - 4 \times \frac{1}{4} log_2 \frac{1}{4} = 2 $$
각 확률이 동일하기 때문에 위와 같은 결과를 얻을 수 있습니다. 그러면, 확률이 다른 B의 엔트로피를 계산해보겠습니다.
$$ H(B) = - 2 \times \frac{1}{8} log_2 \frac{1}{8} - \frac{1}{4} log_2 \frac{1}{4} - \frac{1}{2} log_2 \frac{1}{2} = 1.75 $$
H(A)가 H(B)보다 더 큰 엔트로피 값을 가지는 것을 확인할 수 있습니다. 만약에 한 개의 번호에 배팅해야 한다고 해봅시다. B 주사위가 위와 같은 확률로 나온다고 하면, 몇 번에 배팅하게 될까요? 당연히, 4번에 하는 게 확률이 가장 높겠죠. 하지만, A 주사위라고 한다면, 1,2,3,4 모두 동일한 확률이기 때문에 어떤 것이 나올지 예측하기 어렵습니다. 이처럼 불확실성이 높은 주사위(공정한 주사위)일수록 가지고 있는 엔트로피(평균 정보량)가 큰 값을 가지게 됩니다.
결합 엔트로피
지금까지 단일의 변수에 대해서 다뤘다면, 결합 엔트로피는 X, Y가 동시에 발생할 때의 평균 정보량을 의미합니다. 그래서 수식으로는 $$ H(X, Y) = - \sum_{i=0}^{N} \sum_{j=0}^{M} p(x_i, y_j) log_a p(x_i, y_j)$$ 위와 같이 표현할 수 있습니다.
만약, X, Y가 독립이라면 $H(X, Y) = H(X) + H(Y)$로 각각의 엔트로피의 합으로 표현할 수 있습니다.
크로스 엔트로피
크로스 엔트로피는 실제 확률과 우리가 만든 모델의 확률 값의 차이를 구하는 방법입니다. 우리가 만든 모형이 정답과 동일하게 맞출수록 0에 가까운 값을 만들게 됩니다. 그래서 딥러닝 모델에서 loss function으로 많이 활용됩니다.
$$ H_q (p) = -\sum_{i} p(x_i) log_a q(x_i) $$
결합 엔트로피와 다른 점은 $p(x)$를 설명하기 위해 $q(x)$를 활용한다는 측면에서 다릅니다.
쿨백-라이블러 발산
쿨백-라이블러 발산은 두 개의 분포가 얼마나 유사한 지를 살펴보는 방법입니다. 값이 낮을수록 두 확률분포가 비슷하다고 볼 수 있습니다.
$$ D_{KL} (P||Q) = \sum_{i} P(i) log_a \frac{P(i)}{Q(i)} $$
Mutual Information
Mutual Information은 단순하게 말하면, $p(x, y)$ 와 $p(x)p(y)$가 같으면 독립이니까 상관관계가 없을 것이고, 다르면 둘의 관계성이 있다고 봅니다. 그래서 수식으로 표현해보면, $$ D_{KL} (p(x, y) || p(x)p(y)) = \sum_{i}^{N} \sum_{j}^{M} p(x, y) log_a \frac{p(x, y)}{p(x)p(y)} $$
로 표현할 수 있습니다.
위에서 배웠던 KL-divergence를 활용하여, $p(x, y)$ 와 $p(x)p(y)$ 두 분포가 얼마나 유사한지 확인했다고 보시면 될 것 같습니다. 앞에서 말했던 것처럼 $x$ 와 $y$가 독립이라면, $p(x, y) = p(x)p(y)$ 이므로, log 값이 0이 되어 Mutual Information 값이 0이 됩니다. 독립이 아니라면, 상관관계가 있는 만큼 커지게 됩니다. 이를 활용하여, Feature를 고를 때, Mutual Information 값이 클수록 영향이 큰 Feature로 고를 수 있게 됩니다.
위에서 만든 수식을 전개해보면 다음과 같은 수식을 얻을 수 있습니다.
$$ I(X; Y) = \sum_{i}^{N} \sum_{j}^{M} p(x, y) log_a p(x, y) - \sum_{i}^{N} \sum_{j}^{M} p(x, y) log_a p(x)p(y) $$
$$ I(X; Y) = -H(X, Y) - \sum_{i}^{N} \sum_{j}^{M} p(x, y) log_a p(x) - \sum_{i}^{N} \sum_{j}^{M} p(x, y) log_a p(y) $$
$$ I(X; Y) = -H(X, Y) - \sum_{i}^{N} p(x) log_a p(x) - \sum_{j}^{M} p(y) log_a p(y) $$
$$ I(X; Y) = -H(X, Y) + H(X) + H(Y) $$
결국, 엔트로피로 표현해보면, X와 Y의 각각의 평균 정보량에서 X, Y의 결합 평균 정보량을 제거한 값이 우리가 원하는 Mutual Information 값이 됩니다.
지금까지 여러 가지 개념들과 Mutual Information에 대해서 정리해봤습니다. 위에서 작성한 방법들은 이산형 변수에 대해서 작성했기에 $ \sum $ 기호를 사용했습니다. 만약, 수치형 변수를 활용한다면 $ \int $ 로 바꿔서 생각하시면 되겠습니다.
3. 정리
변수 간의 관계를 하나의 값으로 구하는 방법은 Input과 Output이 어떤 형태인지에 따라 다양합니다. 그 중에서 이산형 변수간의 관계를 다룰 때에는 카이제곱 검정과 Mutual Information을 사용할 수 있습니다.
Mutual Information은 두 변수가 독립인지를 확인하는 방법으로, 독립이라면 값이 0의 값을 얻게 됩니다. 아니라면, 더 연관성이 많은 Feature가 큰 값을 가지게 됩니다. 이산형 변수 간의 중요도를 구하고 싶다면, Mutual Information을 활용해보면 어떨까요? 부족하지만 도움이 되셨으면 좋겠습니다.