ML

[Feature Engineering] Mutual Information이란?

dontgive 2024. 3. 24. 00:00
728x90

 

ML에 대한 전반적인 복습을 위해 Kaggle에 있는 Feature Engineering을 통해 그 개념들과 예제에 대해서 다시 복기해보고자 한다.

 

튜토리얼에 나와 있는 Feature Engineering의 목적을 살펴보면 다음과 같다.

 

"The goal of feature engineering is simply to make your data better suited to the problem at hand."

 

Feature Engineering을 통해 얻을 수 있는 효과는 다음과 같다.

 

1) 모델의 예측 성능 향상

2) 계산적인 요구(computational needs)나 데이터 양에 대한 요구(data needs)를 줄여줌

3) 결과에 대한 해석 가능성 향상

 

유용한 Feature 발굴을 위해서는 만들고자 하는 Feature가 Target이 되는 값과 특정한 관계를 가지고 있어야 하는데, 예를 들어 선형 모델의 경우 변수들의 선형적인 관계만을 학습할 수 있기 때문에 target과 선형적인 관계를 갖는 feature가 아닌 경우는 변환해주어야 한다.

 

이에 대한 예시로 글에서는 특정 부지의 "가격"이라는 타겟을 예측하기 위한 변수로 "길이"를 사용하는 경우와 "면적(길이의 제곱)"을 사용하는 경우에 대해 이야기하고 있는데, 선형적인 관계 (Linear Relationship)가 아닌 "길이"를 사용해 선형회귀 직선을 만드는 경우보다 선형적인 관계에 있는 "길이의 제곱"로 선형회귀 직선을 만드는 경우에는 더 잘 적합된다고 설명하고 있다.

 

Mutual Information (MI, 상호 정보량)

굉장히 많은 feature들이 존재하는 경우에 가장 첫 번째 단계로 "feature utility metric"을 통해 ranking을 만드는 것이 중요하다고 설명한다. 그리고 그 중 가장 유용한 일부 feature들을 활용할 수 있다고 한다.

 

"Correlation"과 "Mutual information"은 무엇이 다른가?

 

Correlation의 경우 두 값 사이의 선형적인 관계만을 찾아낼 수 있지만 Mutual information의 경우 모든 관계 (any kind of relationship)를 찾아낸다는 장점이 있다고 한다.

 

특히 최초 feature development 단계에서 어떠한 모델을 사용할 지 미정인 경우에 사용할 수 있는 general-purpose metric이라는 점이 큰 장점이라고 할 수 있다.

 

장점들

1. 사용하기 쉽고 해석하기도 쉽다 (easy to use and interpret)

2. 계산면에서 효율적이다 (Computationally efficient)

3. 이론적 기반이 탄탄하다 (theoretically well-founded)

4. 과적합에 대해 강한 편이다 (resistant to overfitting)

5. 선형관계가 아닌 관계도 찾아낼 수 있다 (able to detect any kind of relationship)

 

그래서 Mutual Information (MI) 는 무엇인가?

 

두 특성 사이의 상호 정보량은 하나의 특성에 대한 값을 알게 되었을 때 다른 값에 대한 불확실성이 얼마나 줄어드는 지를 측정하는 척도라고 한다. 이 때의 불확실성은 정보이론의 '엔트로피'를 통해 측정된다. 어떠한 변수의 엔트로피는 대략적으로 "그 변수의 한 사건을 설명하기 위해 평균적으로 몇 개의 y/n 질문이 필요한가"를 의미한다고 하고, 상호 정보량은 특성(feature)이 목표(target)에 대해 답할 것으로 예상되는 질문의 수라고 한다.

 

MI 값 해석하는 방법

MI의 최솟값은 0으로, 두 변수의 MI 값이 0인 경우에는 두 변수가 독립이라는 것을 의미한다고 한다.

이론적으로 MI의 상한값은 없지만 로그 단위의 값이기 때문에 2.0을 초과하는 경우는 거의 드물다고 한다.

 

실제로 MI값을 분석에 적용하기 전 유의해야 할 사항들이 있다.

 

첫 번째로, MI는 feature들 사이의 interaction에 대해서는 사용될 수 없는 univariate metric 이라고 한다.

 

두 번째로 Feature의 실질적인 유용성은 target과의 relationship을 모델이 학습할 수 있는 경우에 발생하기 때문에 단지 MI 값이 높다는 것이 모델의 성능을 보장하지 않을 수 있다고 한다. 이러한 경우 적절한 feature engineering이 필요해지는 시점이라고 할 수 있다.

 

MI값에 따라 중요도가 높은 변수 탐색하기

https://www.kaggle.com/datasets/toramky/automobile-dataset

 

Automobile Dataset

Dataset consist of various characteristic of an auto

www.kaggle.com

 

위 데이터셋에서는 일부 numerical 변수들이 object type으로 되어 있는 경우 (price, horsepower 등)가 있고, NULL값이 아닌 "?" 값이 존재한다. 데이터셋 카드의 Detail 혹은 Column에서 확인이 가능하고 별도의 전처리가 필요했다.

 

NULL에 해당하는 부분들과 plot을 그릴 때 필요한 price, horsepower 값이 실수값이 맞는지 확인해준다.

 

Mutual Information을 계산하기 위해서는 discrete_features에 대해 정수로 바꿔주는 과정이 필요하다.

sklearn.feature_selection에는 target이 범주형인지 여부에 따라 mutual_info_regression과 mutual_info_classif로 나뉜다.

 

sns.relplot(x="curb-weight", y="price", data=df)

MI 값이 가장 높게 등장한 curb-weight를 target 변수인 price와 시각화 해본 결과 선형적인 관계임을 파악할 수 있었다.

sns.lmplot(x='horsepower', y='price', hue='fuel-type', data=df)

두 번째로 높은 'horsepower'라는 feature를 시각화 할 때 MI 값이 낮게 나온 'fuel-type'에 따라 나누어 price에 대한 regression line을 그어보면 위 시각화 결과 처럼 명확히 분리되는 모습을 볼 수 있다. 이러한 예시처럼 MI 값이 낮다고 해서 그 변수가 target 변수의 예측에 의미가 없는 것은 아니기 때문에 각 feature들 사이의 관계들을 살펴보고 (이 때 Domain Knowlege가 힘을 발휘한다고 한다.) 사용할 feature를 선택하는 데 고려해야 한다고 한다.

 

 

혹시 잘못 기재한 부분이나 수정할 부분에 대한 의견이 있으시다면 즉각 반영하도록 하겠습니다 :)

728x90

'ML' 카테고리의 다른 글

[Feature Engineering] MI & Creating Features 연습하기  (0) 2024.03.25