본문 바로가기

기초지식

Feature selection (feature importance/permutation importance)

Feature selection은 말 그대로 "모델에 사용될 feature를 선택하는 과정"이다.

 

feature importances

Decision Tree와 이를 기반으로 앙상블 학습하는 Random Forest, XGBoost, LightGBM에서 API 혹은 내장 함수로 제공한다. 

 

feature_importances_는 결정트리에서 노드를 분기할 때, 해당 피쳐가 클래스를 나누는데 얼마나 영향을 미쳤는지를 표기하는 척도로, normalize된 ndarray를 반환하므로 0~1 사이의 값을 가진다.

  • 0이면 클래스를 구분하는데 해당 피쳐가 선택되지 않았다는 것을,
  • 1이면 해당 피쳐가 클래스를 완벽하게 나누었다는 것을 의미한다.
feautre importances 지표 값이 낮게 나왔다고 해서, 해당 피쳐가 중요하지 않다고 판단하여 제거하는 방식은 적절하지 않다.
feature importances를 고려하여 특성별로 A/B test를 진행하며 feature selection을 진행해야 한다. 

 

 

위의 내용에서, 왜 feature importances 라는 지표가 절대적이지 못하는가?

 

feature importances는 트리 구조에서 특정 feature가 노드를 얼마나 잘 분할하는데 기여했는지에 따라 중요도가 결정되는 방식인데, 노드는 '순수도'를 기준으로 분할한다. **즉, 가장 잘 분류시키는 feature를 순수도라는 기준으로 판단한다.

  • '성별'이라는 특성으로 고양이와 강아지를 잘 분류하지 못한다 = 순수도가 낮다
  • '눈동자 모양'이라는 특성으로 고양이와 강아지를 잘 분류한다 = 순수도가 높다 
  • 따라서, '눈동자 모양'을 해당 트리 분할 기준으로 선택하는 것이다. 즉, '눈동자 모양'의 중요도가 높게 판단된다.

 

순수도는 어떻게 계산되는가?

엔트로피와 gini 계수로 계산한다.

 

엔트로피를 이용한 트리 분할

  • 엔트로피 계산식으로 각 노드들의 순수도를 계산할 수는 있으나, 각 노드들의 엔트로피만으로는 특정 feature로 인한 순수도 변화량을 알지 못한다.
  • 따라서, 엔트로피를 활용한 정보 이득량(information gain)을 계산한다. ** 이 feature로 인한 정보 이득량이 얼마나 되는지 엔트로피로 계산하는 것

 

gini 계수를 이용한 트리 분할

  • 지니계수 역시 엔트로피와 마찬가지로 각 노드들의 순수도를 측정하는 하나의 척도이지만, 어떤 feature가 중요한지는 알 수 없으므로 gini 계수를 활용하여 gini split이라는 것을 계산한다. ** 그리고 가장 작은 gini split를 가진 특성을 기준으로 트리를 분할한다.

 

위의 내용과 같이 특정 feature의 중요도를 파악하기 위해서는 순수도의 변화량을 계산해야 하는데, 순수도의 변화량을 계산하는 방법은 다음과 같은 두가지가 있다.
     (1) 엔트로피를 활용한 정보이득량 
     (2) gini 계수를 이용한 gini split

이때, '정보 이득량이 가장 높은' 혹은 'gini split이 가장 낮은' feature를 선택하여 트리를 분할하고, 중요도에 반영된다.

 

 

다시, feature importances가 왜 절대적인 지표가 되지 못하는가?

feature importances는 노드가 분기할때의 정보 이득 혹은 지니 상수만을 고려하여 중요도를 부여하므로, 과적합에 대해 고려하지 못하기 때문이다. ** 편향을 학습할 수 있다. (동그라미, 세모를 분리하려고 여러 기준선을 추가할때, 트리에서도 동그라미 속에 있는 단 하나의 세모를 분리해내는 특성을 선택하려고 한다. 즉, 과적합 발생 + 순수도 높아짐) 

 

 

permutation importance

(permutation: 무작위로 섞는다~ )

 

feature 하나하나마다 shuffle을 하며 성능 변화를 지켜보고, 만약 그 feature가 모델링에서 중요한 역할을 하고 있었다면 성능이 크게 떨어질 것이라는 개념에서 출발한다. 

 

즉, 훈련된 모델이 특정 feature를 쓰지 않았을 때, 이것이 성능 손실에 얼마만큼의 영향을 주는지를 통해 그 feature의 중요도를 파악하는 방법이라고 할 수 있다. 

  • weight(성능 감소량)가 양수의 값을 가지는 변수들은 모델에 큰 영향을 끼친다는 의미이므로 중요한 feature라고 판단할 수 있다.
  • 반면, 성능의 변화가 없거나(0), 음수의 값을 가지는 변수들은 모델에 큰 영향을 끼치지 못하는 중요하지 않은 feature라고 판단할 수 있다.

 

10살 당시의 정보로 20살이 되었을 때의 키를 예측하는 사례에서, (위의 표 참고)

  • 변수들 중 하나인 '10살 때의 키' 정보만을 무작위로 섞은 후 성능을 측정한다면, 성능은 떨어질 것이다.
    • 모델과 상관없이 직관적으로 해당 변수가 결과값에 큰 영향을 미치므로
  • 반면, '10살 때의 양말 갯수'에 대한 정보를 무작위로 섞은 후 성능을 비교한다면, 큰 차이는 없을 것이다.
    • 해당 변수가 20살의 키를 예측하는데 큰 영향을 미치지 못하기 때문 

 

Permutation Importance의 장점

  • feature를 제거하는 대신, 특정 feature를 무작위로 섞어서(permutation) 특정 feature를 노이즈로 만들기 때문에 모델을 재학습 시킬 필요가 없다.
    • 이렇게 특정 feature를 섞었을 때, 예측값이 실제 값보다 얼마나 차이가 나는지를 통해, 해당 feature의 영향력을 파악한다.
    • 훈련된 모델이 이 특정 feature에 크게 의존하고 있을 경우에는, 예측 정확도가 크게 감소할 것
      • 즉, feature를 suffle했을 때 
        • 모델의 성능이 떨어지면 중요한 feature
        • 모델의 성능이 그대로거나 더 좋아지면 중요하지 않은 feature 
  • 각 feature의 중요도는 'partial importances'가 아니라 다른 feature들과의 상호작용들도 포함된다. 

 

 

Permutation Importance의 단점

  • 특정 feature를 무작위로 섞기 때문에,
    • 실행마다 Feature Importance 결과가 달라질 수 있다.
    • 매우 비현실적인 데이터 조합이 생성될 가능성이 있다. 
  • 따라서, 미리 변수들 간 상관관계가 높은지를 확인하고, 이를 염두에 두고 결과를 해석해야 한다. 

 

 

https://wooono.tistory.com/328

 

[ML] Sklearn Permutation Importance 를 사용한 Feature 중요도 파악

Permutation Importance 란? Permutation Importance 는, 모델 예측에 가장 큰 영향을 미치는 Feature 를 파악하는 방법입니다. Permutation Importance 는 모델 훈련이 끝난 뒤에 계산되며, 훈련된 모델이 특정 Feature 를

wooono.tistory.com

 

https://hwi-doc.tistory.com/entry/Feature-selection-feature-importance-vs-permutation-importance

 

Feature selection : feature importance vs permutation importance

안녕하세요, 오늘은 Feature selection 에 대해 다뤄보려고 합니다! Feature selection은 말 그대로 모델에 사용될 feature를 선택하는 과정입니다. feature가 그냥 많으면 많을수록 좋은거 아닌구요? 네!! 아닙

hwi-doc.tistory.com

 

'기초지식' 카테고리의 다른 글

LSTM  (0) 2024.05.12
Random Forest의 Hyperparmeter  (0) 2024.05.11
분류 성능 평가 지표  (0) 2024.05.09
Ridge Classifier, Ridge Regression, L2 Normalization, L1 Normalization  (0) 2024.05.09
Logistic Regression  (0) 2024.05.09