5.5 Permutation Feature Importance

9 minute read

Permutation Feature Importance

Permutation(순열) 특성 중요도는 특성 값을 섞은 후 특성와 실제 결과 사이의 관계를 없애고 모델의 예측 오차 증가를 측정합니다.

이론

개념은 매우 간단합니다. 특성을 섞은 후 모델의 예측 오차 증가를 계산하여 특성의 중요도을 측정합니다. 특성 값을 섞으면 모델 오류가 증가하는 경우 “중요”합니다. 이 경우 모델은 예측 특성에 의존하기 때문입니다. 모델의 값을 섞을때 모델이 예측에 대해 특성이 무관한 경우 “중요하지 않음”이 됩니다. 순열 특성 중요도 측정은 Breiman(2001)이 랜덤 포리스트를 제안한 논문에서 소개되었습니다1. 이 아이디어를 바탕으로 Fisher, Rudin, Dominici(2018년)가 특성 중요도에 대한 모델 의존도라고도 불리는 model-agnostic 버전을 제안했습니다2. 또한 많은 예측 모델이 데이터를 잘 예측할 수 있다는 점을 고려한 (모델별) 버전과 같은 특성 중요도에 대한 보다 진보된 아이디어를 소개했습니다. 그들의 논문은 읽어보면 좋습니다.

순열은 Fisher, Rudin 및 Dominici(2018)를 기반으로 한 중요 알고리즘을 특성으로 합니다.

입력 값: 훈련된 모델 f, 특성 매트릭스 X, 목표 벡터 y, 오차 함수 L(y,f)입니다.

  1. 원래 모델 오류 \(e^origin\) = L(y, f(X))을 추정합니다(예: 평균 제곱 오차).
  2. 각 특성 j = 1,…,p에 대해 다음을 수행합니다.
    • 데이터 X에서 특성 j를 섞은 특성 행렬 \(X^puter\)를 생성합니다. 이로 인해 특성 j와 실제 결과 y 사이의 관계가 끊어집니다.
    • 섞인 데이터의 예측값을 기반으로 \(e^piration\) = L(Y,f(\(X^puter\)))를 추정합니다.
    • 순열 특성 중요도인 \(FI^j\)=\(\frac{e^puter}{e^orig}\)를 계산합니다. 또는 다음과 같은 차이를 사용할 수 있습니다. \(FI^j\) = \(e^puter\) - \(e^orig\).
  3. 내림차순으로 특성을 정렬합니다.

Fisher, Rudin 및 Dominici(2018년)는 논문에서 특성 j를 섞는 대신 데이터 세트를 반으로 나누고 두 반쪽 특성 j의 값을 교환할 것을 제안합니다. 생각해보면, 이것은 특성 j를 섞은 것과 정확히 같습니다. 보다 정확한 추정치를 원하는 경우 각 관측치를 각 관측치의 특성 j 값과 쌍으로 구성하여 섞은 특성 j에 대한 오류를 추정할 수 있습니다(스스로는 제외). 이렇게 하면 “n(n-1)” 크기의 데이터 세트를 제공하여 순열 오류를 추정할 수 있고, 많은 양의 계산 시간이 소요됩니다. 매우 정확한 추정치를 얻는 것이 중요한 경우에만 “n(n-1)” 방법을 사용하는 것을 추천합니다.

중요도를 학습 데이터 또는 평가 데이터, 어디에 계산해야하는가?

tl;dr: 정답이 없습니다.

학습 또는 평가 데이터에 대한 질문에 대한 답변은 특성의 중요도에 대한 근본적인 질문에 도달합니다. 학습에 기반한 특성 중요도와 평가 데이터를 기반으로 한 특성 중요도의 차이를 이해하는 가장 좋은 방법은 “극적인” 예시를 드는 것입니다. 저는 50개의 무작위 특성(200개 관측치)이 주어지는 연속적인 무작위 대상 결과를 예측하기 위해 서포트 벡터 머신(SVM)을 훈련시켰습니다. “랜덤”은 목표 결과가 50개의 특성와 무관하다는 의미입니다. 이것은 최근의 복권 번호로 내일의 온도를 예측하는 것과 같습니다. 모델이 관계를 “학습”하는 경우, 해당 모델은 과적합한 것입니다. 실제로 SVM은 학습 데이터에 지나치게 적합했습니다. 교육 데이터의 평균 절대 오차(줄여서: mae)는 0.29이고 평가 데이터의 경우 0.82이며, 이는 항상 평균 결과 0(me 0.78)을 예측하는 가장 큰 모델의 오류이기도 합니다 즉, SVM 모델은 별로입니다. 이 과적합된 SVM의 50개 특성에 대해 예상되는 특성 중요도는 무엇일까요? 0볼 수 없는 평가 데이터에서 성능 향상에 기여하는 특성이 없기 때문에 0일까요? 또는 학습된 관계가 볼 수 없는 데이터로 일반화되는지 여부에 관계없이 모델이 각 특성에 얼마나 의존하는지를 중요도에 반영해야 할까요? 학습 및 평가 데이터에 대한 특성 중요도의 분포가 어떻게 다른지 살펴보겠습니다.


그림 5.27: 데이터 유형별 특성 중요도 값의 분포입니다. SVM은 50개의 랜덤 특성과 200개의 관측치로 구성된 회귀 데이터셋에 대해 학습했습니다. SVM은 데이터에 과적합했습니다. 학습 데이터를 기반으로 한 특성 중요도는 여러 가지 중요한 특성을 보여줍니다. 볼 수 없는 평가 데이터에 대해 계산된 특성 중요도는 1의 비율(=중요하지 않음)에 가깝습니다.

두 가지 결과 중 어느 것이 더 바람직한지 저에게는 분명하지 않습니다. 그래서 저는 두 가지 버전에 대한 주장을 하고 여러분이 스스로 결정할 수 있도록 하겠습니다.

평가 데이터의 경우

이는 간단한 경우입니다. 학습 데이터를 기반으로 한 모델 오류 추정치는 쓰레기입니다 -> 특성 중요도는 모델 오류 추정치에 의존합니다 -> 학습 데이터에 기반한 특성 중요도는 쓰레기입니다. 다음은 실제로 머신러닝에서 가장 먼저 학습하는 사항 중 하나입니다. 모델이 학습된 동일한 데이터에 대해 모델 오류(또는 성능)를 측정하는 것은 일반적으로 측정이 최적화되어 있으므로 실제보다 모델이 훨씬 더 잘 작동하는 것처럼 보입니다. 그리고 순열 특성의 중요도은 모델 오류의 측정에 의존하기 때문에 볼 수 없는 평가 데이터를 사용해야 합니다. 학습 데이터에 기반한 특성의 중요도은 실제로 모델이 너무 적합하고 특성이 전혀 중요하지 않았을 때 특성이 예측에 중요하다고 잘못 생각하게 만듭니다.

학습 데이터의 경우

학습 데이터 사용에 대한 주장은 공식화하기가 다소 어렵지만, 개인적인 의견으로는 평가 데이터 사용 주장 못지 않게 설득력이 있습니다. 별로 좋지 못한 SVM을 다시 한 번 살펴봅시다. 학습 데이터를 바탕으로 가장 중요한 특성은 X42 였습니다. 특성 X42의 부분 의존도를 살펴보겠습니다. 부분 의존도 그림은 특성의 변경에 따라 모델 출력이 어떻게 변하며 일반화 오류에 의존하는지 않는지를 보여 줍니다. PDP가 학습 또는 평가 데이터를 사용하여 계산되는지 여부는 중요하지 않습니다.


그림 5.28: 학습 데이터를 기반으로 한 특성 중요도에 따라 가장 중요한 특성인 X42의 PDP입니다. 그림은 SVM이 이 특성에 의존하여 예측하는 방법을 보여 줍니다.

그림은 SVM이 예측에 대해 특성 X42에 의존하여 학습했음을 분명히 보여주지만 평가 데이터(1.04)에 따른 특성 중요도를 보면 그건 별로 중요하지 않습니다. 학습 데이터를 기반으로 한 중요도는 1.21이며, 이는 모델이 이 특성을 사용하는 방법을 학습했음을 나타냅니다. 학습 데이터에 기반한 특성 중요도는 예측에 따라 달라지는 관점에서 모델에 중요한 특성을 알려줍니다.

학습 데이터 사용 사례의 일부로, 평가 데이터에 대한 반대되는 주장을 소개하고자 합니다. 실제로 모든 데이터를 사용하여 모델을 학습하여 최상의 모델을 얻을 수 있기를 원합니다. 즉, 특성 중요도를 계산하는 데 볼 수 없는 평가 데이터가 사용되지 않습니다. 모델의 일반화 오류를 추정하려는 경우에도 동일한 문제가 발생합니다. 특성 중요도 추정에 (내포) 교차 검증을 사용하는 경우 최종 모델에서 모든 데이터가 아니라 다르게 동작할 수 있는 데이터의 하위 집합이 있는 모델에서 특성 중요도가 계산된다는 문제가 발생할 수 있습니다.

결국 예측을 위해 모델이 각 특성에 얼마나 의존하는지(-> 학습 데이터) 또는 이 특성이 볼 수 없는 데이터(-> 평가 데이터에 대한 모델의 성능에 얼마나 기여하는지(-> 평가 데이터)를 파악해야 합니다. 제가 아는 한, 훈련과 평가 데이터의 문제를 다루는 연구는 없습니다. “쓰레기-SVM” 예제보다 더 철저한 조사가 필요합니다. 더 나은 이해를 위해 이러한 도구들에 대한 더 많은 연구와 실험이 필요합니다.

다음으로, 몇 가지 예를 살펴보겠습니다. 저는 학습 데이터를 기반으로 중요도 연산을 했습니다. 왜냐하면 학습 데이터를 사용하면서 코드는 몇 줄 덜 필요했기 때문입니다.

예시와 해석

분류와 회귀에 대한 예를 보여드리겠습니다.

자궁경부암 (분류)

우리는 랜덤 포레스트를 학습시켜 자궁경부암을 예측하였습니다. 1-AUC(1에서 ROC 곡선 아래의 영역을 뺀 값)만큼 오차 증가를 측정합니다. 모델 오류의 1배 증가와 관련된 특성은 자궁경부암을 예측하는 데 중요하지 않았습니다.


그림 5.29: 랜덤 포레스트로 자궁경부암을 예측하는 각각의 특성의 중요도입니다. 가장 중요한 특성은 나이입이다. 섞은 나이가 4.49배 증가하였습니다.

가장 중요한 특성은 순열 후 4.49의 오차 증가와 관련된 Age였습니다.

자전거 대여 (회귀)

우리는 날씨 조건과 달력 정보를 고려하여 임대 자전거의 수를 예측하기 위해 서포트 벡터 머신 모델을 사용했습니다. 오류 측정에서는 평균 절대 오차를 사용합니다.


그림 5.30: 서포트 벡터 기계를 사용하여 자전거 수를 예측하는 각 기능의 중요도입니다. 가장 중요한 특징은 온도(temp)였고, 가장 덜 중요한 것은 휴일(holiday)이었습니다.

장점

적합한 해석: 특성 중요도는 특성의 정보가 파괴될 때 모델 오류가 증가하는 것을 말합니다.

특성 중요도는 모델의 동작에 대한 글로벌 인사이트를 제공합니다.

오류 차이 대신 오류 비율을 사용하는 것은 특성 중요도 측정이 서로 다른 문제에서 비교할 수 있다는 것입니다.

중요도 측정은 자동으로 다른 특성과의 모든 상호 작용을 고려합니다. 특성을 섞으면 다른 특성과 교호작용 효과도 파괴됩니다. 즉, 순열 특성의 중요도은 주요 특성 효과와 모델 성능에 대한 상호 작용 효과를 모두 고려합니다. 반면 두 특성 간의 상호 작용의 중요도이 두 특성의 중요도 측정에 포함되기 때문에 단점이 되기도 합니다. 즉, 특성 중요도가 전체 성능 저하에는 미치지 못하지만 합계는 더 크다는 뜻입니다. 선형 모델에서와 같이 특성 간에 상호 작용이 없는 경우에만 중요도 범위가 대략적으로 증가합니다.

순열 특성의 중요도 모델을 재학습할 필요가 없습니다. 일부 다른 방법에서는 특성를 삭제하고 모델을 재학습한 다음 모델 오류를 비교하는 것이 좋습니다. 머신러닝 모델의 재훈련은 시간이 오래 걸릴 수 있기 때문에, 특성을 “단순히” 섞기만 하면 많은 시간을 절약할 수 있습니다. 일부 특성으로 모델을 재학습해서 중요도을 계산하는 방법은 언뜻 보기에는 직관적으로 보이지만 데이터가 줄어든 모델은 특성 중요도에 의미가 없습니다. 우리는 고정 모델의 특성적인 중요도에 관심이 있습니다. 축소된 데이터 세트로 재학습하면 관심 있는 모델과는 다른 모델이 생성됩니다. 0이 아닌 가중치의 고정된 특성 수를 사용하여 희소 선형 모델(lasso 포함)을 학습한다고 가정합니다. 데이터 세트에는 100개의 특성이 있습니다. 0이 아닌 가중치의 수를 5로 설정합니다. 0이 아닌 가중치를 가진 특성 중 하나의 중요도를 분석합니다. 특성를 제거하고 모델을 재학습할 수 있습니다. 모델 성능은 동일하게 양호한 또 다른 특성이 0이 아닌 가중치을 가지기 때문에 그대로 유지됩니다. 다른 예는 다음과 같습니다. 모델은 의사결정 트리이며, 첫 번째 분할로 선택된 특성의 중요도을 분석합니다. 특성를 제거하고 모델을 재학습할 수 있습니다. 다른 특성이 첫 번째 분할로 선택되기 때문에 트리 전체가 매우 다를 수 있습니다. 즉, (잠재적으로) 완전히 다른 트리의 오류율을 비교하여 해당 특성이 트리 중 하나에 얼마나 중요한지를 결정합니다.

단점

특성 중요도를 계산하기 위해 학습 또는 평가 데이터를 사용해야 하는지 매우 불명확합니다.

순열 특성의 중요도은 모델의 오류와 연결됩니다. 이것은 본질적으로 나쁜 것은 아니지만, 어떤 경우에는 필요한 것이 아닙니다. 경우에 따라 성능에 대한 의미를 고려하지 않고 모델의 출력이 특성에 대해 얼마나 달라지는지 알고 싶을 수도 있습니다. 예를 들어, 누군가가 특성을 조작할 때 모델의 결과가 얼마나 강건한지 알아보려고 합니다. 이 경우 특성을 섞을 때 모델 성능이 얼마나 감소하는지는 관심이 없지만 각 특성에 의해 모델의 출력 분산이 어느 정도 설명되는지에 대해서는 관심이 있습니다. 모델의 분산(특성에 의해 설명됨)과 특성 중요도는 모델이 잘 일반화될 때(즉, 과적합되지 않음) 강하게 상관합니다.

결과 값이 필요합니다.. 다른 사람이 모델 및 레이블이 없는 데이터만 제공하고 실제 결과는 제공하지 않는 경우, 순열 특성의 중요도를 계산할 수 없습니다.

섞은 특성의 중요도은 측정에 랜덤성을 더하는 특성의 셔플링에 따라 달라집니다. 섞임 반복되면 결과가 크게 달라질 수 있습니다. 반복을 반복하고 반복에 대한 중요도 측정을 평균화하면 측정은 안정화되지만 계산 시간은 증가합니다.

특성이 상관관계가 있는 경우, 섞임의 중요도는 비현실적인 데이터 관측치에 의해 편향될 수 있습니다. 문제는 부분 의존도 그림과 동일합니다. 특성의 순열은 두 개 이상의 특성이 상관 관계일 때 데이터 관측치가 발생할 가능성이 낮습니다. 그들이 긍정적으로 연관되어 있을 때(예: 사람의 키와 몸무게) 특성들 중 하나를 섞었으면, 가능성이 없거나 심지어 물리적으로 불가능한 새로운 관측치를 만들지만, 중요도를 측정하기 위해 이러한 새로운 관측치를 사용합니다. 즉, 순열은 상관 관계가 있는 특성의 중요도에 대해, 실제로 관측할 수 없는 값과 특성을 교환할 때 모델 성능이 얼마나 감소하는지를 고려합니다. 특성이 강하게 상호 연관되어 있는지 확인하고 특성 중요도의 해석에 유의해야 합니다.

또 다른 까다로운 점은 다음과 같습니다. 상호 연관된 특성을 추가하면 두 특성 간에 중요도를 분할하여 관련 특성의 중요도를 줄일 수 있습니다. “분할” 특성 중요도의 예를 들어 보겠습니다. 우리는 비가 올 가능성을 예측하기 위해 전날 아침 8시에 온도를 다른 상관없는 특성들과 함께 사용하고자 합니다. 랜덤 포레스트를 훈련했고, 온도가 가장 중요한 특성이었고 모든 것이 잘 예측되어 다음날 밤 잠을 편하게 잘 수 있을 것입니다. 이제 제가 아침 9시의 온도를 아침 8시의 온도와 강하게 상관되는 특성으로 추가하는 또 다른 시나리오를 생각해봅시다. 오전 9시의 온도는 이미 오전 8시의 온도를 알고 있다면 크게 추가적인 정보를 주지 않습니다. 하지만 더 많은 특성을 갖는 것은 항상 좋은 일이죠, 그렇지 않나요? 저는 두 가지 온도 특성과 상관없는 특성을 가진 랜덤 포레스트를 훈련시킵니다. 랜덤 포레스트에 있는 트리들 중 일부는 아침 8시 온도를, 다른 트리들은 아침 9시 온도를, 다른 트리들은 오전 9시 온도를, 다른 트리들은 오전 9시 온도를, 그리고 다른 트리들은 전혀 받지 않습니다. 두 온도 특성을 함께 사용하면 이전의 단일 온도 특성보다 약간 더 중요한 의미를 가질 수 있지만, 중요한 특성 목록의 맨 위에 있는 대신, 각 온도는 이제 중간 어딘가에 있습니다. 상관적인 특성을 소개함으로써, 저는 가장 중요한 특성을 꼭대기에서 중간으로 걷어찼습니다. 한편으로는 또 괜찮습니다. 왜냐하면 이것은 단지 랜덤 포리스트의 행동을 반영하기 때문입니다. 이제 모델도 오전 9시 측정에 의존할 수 있기 때문에 오전 8시 온도가 더 낮아졌습니다. 반면에, 그것은 특성의 중요도에 대한 해석을 상당히 어렵게 만듭니다. 측정 오류가 있는지 특성을 확인하려고 합니다. 확인하기에는 시간이 오래걸리고 가장 중요한 특성 중 상위 3개만 확인하기로 결정하게 됩니다. 첫 번째의 경우 온도를 확인하고 두 번째의 경우 온도 특성을 포함하지 않습니다. 단지 그 중요도을 공유한다는 이유만으로 말이죠. 중요도 값이 모델 동작 수준에서 의미가 있을 수 있지만 상관 관계가 있는 특성이 있으면 혼동됩니다.

소프트웨어 및 대안책

예시에서는 iml R 패키지가 사용되었습니다. 물론 파이썬 라이브러리 alibi 뿐만 아니라 R 패키지 DALEXvip도 model-agnostic한 순열 중요도 특성이 구현되어 있습니다.

PIMP라는 알고리즘은 특성 중요 알고리즘을 조정하여 중요도 위한 p-값을 제공합니다.


  1. Breiman, Leo.“Random Forests.” Machine Learning 45 (1). Springer: 5-32 (2001). 

  2. Fisher, Aaron, Cynthia Rudin, and Francesca Dominici. “Model Class Reliance: Variable importance measures for any machine learning model class, from the ‘Rashomon’ perspective.” http://arxiv.org/abs/1801.01489 (2018).