-
[Yongggg's] Feature Importance의 이해Statistic & Machine Learning 2021. 1. 27. 20:06
안녕하세요 Yonggg's Blog입니다! 오늘은 Tree기반 모델의 Feature Importance에 대해 알아보겠습니다!
Feature Importance (Tree models)
1. 목적
Tree 기반 모델링을 진행하여 예측 값을 산출하는 것 이외에 우리가 관심있는 Target 값에 영향을 주는 중요한 Feature를 찾고자 Feature Importance라는 개념이 생겼다.
2. 개념
기본적으로 Entropy와 Gini 계수를 바탕으로 각 노드의 중요도를 구할 수 있고, 자식노드를 생성할 때 사용했던 Feature의 중요도를 구한 뒤, 모든 Feature의 중요도를 Normalization함으로 써 Feature들 중의 중요한 변수를 알 수 있다.
3. 원리
Tree 모델에서 Feature Importance는 Entropy 혹은 Gini 계수를 바탕으로 산출한다. (특정 Feature가 트리를 분할하는 데 기여한 정도에 따라 결정됨.)
여기서 Entropy는 (수식 1)로 구할 수 있다.
$$ Entropy = - \sum_{j=1}^{n} p_{j} log p_{j} \;\; (p \; is \; proportion \; of \; class) \quad (수식 1)$$
이를 바탕으로 해당 Feature의 정보량은 (수식 2)와 같이 Entropy를 이용하여 구할 수 있다.
$$ Gain(CP, f) = Entropy(CP) - \sum_{v \in values(f)} {| CC_{v} | \over |CP| } Entropy(CC_{v}) \quad (수식 2) $$
$$ where \; CP \; is \; Parents \; node, \; CC \; is \; Child \; node $$
또, Gini계수는
어떤 노드가 중요하다고 하면, 자식노드의 불순도가 감소하는 성질을 이용한 것이다. Class의 개수가 총 C개, 각 샘플이 특정 Class의 속할 확률을 $ p_{i}, \; i=1,\; \cdots, \; C $ 라고 하면, 특정노드 $N_{j}$에서 지니 계수는 (수식 3)처럼 구할 수 있다.
$$ G(N_{k}) = \sum_{i=1}^{C} p_{i}(1-p_{i}) = 1 - \sum_{i=1}^{C} p_{i}^{2} \quad (수식 3) $$
(수식 3)에서 특정 노드의 Gini 계수가 높다는 것은 샘플들의 불순도가 높다는 것과 동치임을 알 수 있다.
이제 이 Gini 계수로 Feature importance를 구할 수 있다.
[그림 1] Feature K에 의해 나눠진 Tree 먼저, [그림 1]에서 각 Node의 Gini 계수를 구하면,
$$ G(CP) = 1-{({400 \over 800})^{2} + ({400 \over 800})^{2}} = 0.5 \\ G(CC_{1}) =1 - {({300 \over 400})^{2} + ({100 \over 400})^{2}} =0.375 \\ G(CC_{2}) = 1 - {({100 \over 400})^{2} + ({300 \over 400})^{2}} =0.375 $$
처럼 계산 할 수 있고 이로부터 부모 노드의 Information Gain을 얻을 수 있다.
$$ I(CP) = 1 \cdot G(CP) - pro1 \cdot G(CC_{1}) - pro2 \cdot G(CC_{2}) \quad (수식 4) $$
$$ where \; pro1 = len(CC_{1})/len(CP), \; pro2 = len(CC_{2})/len(CP), \; (이전 \; 노드와 \; 다음 \; 노드의 \; 샘플 개수의 \; 비율) $$
[그림 1]의 경우에는 $ I(CP) = 0.5 - {400 \over 800} \cdot 0.375 - {400 \over 800} \cdot 0.375 =0.125 $이다.
특정($ i $번째) Feature의 중요도 $ I(f_{i}) $는 (수식 4)와 같이 계산할 수 있다.
$$ I(f_{i}) = {\sum_{j:f_{i}에 \; 의해 \; 생성된 \; 모든 \;node \;CC_{j}} I(CC_{j}) \over \sum_{k \in all \; node \; C_{k}} I(C_{k})} \quad (수식 4) $$
이 값을 모든 Feature에 대해 구하여 Normalize하면, 최종적인 Feature Importance가 구해진다.
$$ I(f_{i})^{norm} = {I(f_{i}) \over \sum_{i \in all \; feature \; f_{i}} I(f_{i}) }$$
해석 하면, $ I(f_{i}) $이 클수록 해당 Feature의 중요도가 크다는 것이고 샘플을 불순도가 적게 분류했다는 뜻으로 해석할 수 있다.
하지만, 이는 절대적인 평가 지표가 될 수 없다. 왜냐하면, Feature Importance 자체는 Information gain(Etropy 기반), Gini 상수만을 고려하여 중요도를 평가하기 때문에, 과적합 등의 여러 상황을 고려하지 못하기 때문이다.
Permutation Feature Importance (model-agnostic)
1. 목적
위에서 설명한 Tree 기반 Feature Importance는 Entropy 혹은 Gini 계수에 대해서 나온 지표이기 때문에, 모델에 부정적인 영향을 주는 지는 알 수 없다. 이는 변수 선택에서 Backward Elimination 과정을 실현할 수 없다는 뜻이다.
하지만 Permutation Feature Importance를 사용한다면, 모델에 좋은 영향을 주는 Feature 혹은 나쁜 영향을 주는 Feature를 찾을 수 있다.
2. 개념
Permutation Feature Importance의 동작 원리를 간략하게 설명하면, 학습 데이터로 모델을 학습시킨 후, 검증 데이터의 특정 Feature 데이터를 Row(샘플) 방향으로 Shuffle 시켰을 때, 성능을 비교한다. 만약 성능이 떨어진다고 하면, 그 Feature는 우리의 Model에서 중요한 Feature가 되는 것이고 그렇지 않다면, 중요하지 않은 Feature가 될 것이다.
3. 원리
이를 알고리즘으로 다시 설명하겠다. 훈련된 모델 : $ f $, 검증 데이터 매트릭스 : $ X $, Target 값 : $ y $, Cost function : $ L() $이라고 했을 때, 다음 과정을 실시한다.
1. $ e_{origin} = L(y, f(x)) $를 추정한다.
2. 각 Feature $ k =1,2,3, \cdots, p $에 대해 다음 과정을 실시한다.2.1 검증 데이터 $ X $에서 특성 $ k $를 섞습니다. 이를 특성 행렬 $ X_{after} $이라고하자.(이로 인해 특성 $ k $와 Target $ y $사이의 관계가 끊어진다.)
2.2 섞인 데이터의 예측값으로 $ e_{after} = L(y, f(X_{after}))$를 추정한다.
2.3 Permutation Feature Importance인 $ FI_{k} = {e_{after} \over e_{origin}} $ 을 계산한다. (혹은 $ FI_{k} = e_{after}-e_{origin} $을 사용할 수 있다.)
3. 내림차순으로 특성을 정렬한다.이렇게 Permutation Feature Importance를 구할 수 있다.
긴 글 읽어주셔서 감사합니다. 제가 이 부분을 공부하면서 작동 원리에 대해 궁금했었기 때문에 작동원리를 중심으로 글을 작성하였습니다. 혹시 글에 오류가 있거나 오타 등을 보신다면 답글 달아주세요. ^^
'Statistic & Machine Learning' 카테고리의 다른 글
[Yongggg's] LIME(Locally Interpretable Model-agnostic Explainations) (1) 2021.01.30 [Yongggg's] Partial Dependence Plot의 이해 (0) 2021.01.28 [Yongggg's] Matrix Factorization의 이해 (3) 2021.01.26