늦깎이 공대생의 인공지능 연구실

[해석할 수 있는 기계학습(5-5)] 순열 특성 중요도(Permutation Feature Importance) 본문

해석할 수 있는 기계학습/5. 모델 불특정성 방법

[해석할 수 있는 기계학습(5-5)] 순열 특성 중요도(Permutation Feature Importance)

Justin T. 2020. 6. 15. 12:11

 

 순열 특성 중요도(Permutation Feature Importance)는 특성값의 순서를 변경한 후 모델의 예측 오차 증가량을 측정하여 특성값과 실제 결과 사이의 관계를 끊어버립니다.

이론

 순열 특성 중요도의 개념은 매우 간단합니다. 특성값을 순열로 만든 후 모델의 예측 오차 증가량을 계산하여 특성값의 중요도를 측정하는 것입니다. 이는 모델의 예측을 위해 특성값에 의존했을 경우 특성값을 섞였을 때 모델 오차가 증가한다면 특성값은 "중요하다"고 할 수 있습니다. 반면, 모델의 예측을 위해 특성을 무시하였을 경우 모델의 값을 섞었을 때 모델 오류가 변경되지 않는 경우 특성은 "중요하지 않다"고 할 수 있습니다. 순열 특성 중요도 측정은 랜덤포레스트에 대하여 Breiman(2001)이 도입한 개념입니다. 이러한 개념을 바탕으로 Fisher, Rudin, Dominici(2018) 3인은 특성 중요도에 대한 모델별 버전을 제안하고 모델 외존(Model reliance)라고 불렀습니다. 그들은 또한 많은 예측 모델이 데이터를 잘 예측할 수 있다는 것을 고려하는 (모델 특정) 버전과 같이 특성 중요도에 대한 더 진보적인 아이디어를 도입하였습니다. 그들의 연구에 대하여 더 자세히 알고자 하시는 분들께서는 위의 링크를 참조해 주시기 바랍니다.

 

Fisher, Rudin, Dominici의 순열 특성 중요도 알고리즘(2018):

입력: 훈련된 모델 f, 특성 행렬 X, 목표값 벡터 y, 에러 측정값 L(y,f).

 

  1. 원본 모델 에러 \(e^{orig} = L(y,f(X))\) 추정 (e.g. mean squared error)
  2. 각 특성 j = 1,...,p에 대하여
    ○ 데이터 X 안에 있는 순열 특성 j 특성 행렬 \(X^{perm}\) 생성. 이는 특성 j와 실제 결과값 y와의 연관성을 떼어낸다.
    ○ 순열 데이터의 예측값을 기반으로한 에러값 \(e^{perm} = L(Y,f(X^{perm}))\) 예측
    ○ 순열 특성 중요도 \(FI^j = e^{perm} - e^{orig}\) 계산. 또는, \(FI^j = e^{perm} - e^{orig}\)를 사용가능
  3. FI를 내림차순으로 특성값을 정렬

  Fisher, Rudin, Dominici(2018)은 논문에서 특성 j를 순열하는 대신 데이터 집합을 반으로 나누고 두 반반의 특성 j의 값을 교환할 것을 제안하였습니다. 이는 생각해보면 특성 j를 순열한 것과 정확히 같습니다. 보다 정확한 추정치를 원한다면 각 인스턴스를 서로 다른 인스턴스의 특성 j와 쌍으로 구성하여 특성 j의 허용오차를 추정할 수 있습니다.(자기 자신의 값은 제외). 이를 통해 순열 오류를 추정할 수 있는 n(n-1) 크기의 데이터 집합을 얻을 수 있으며, 계산에 많은 시간이 소요됩니다. 만약 여러분이 매우 정확한 추정치를 얻는 것을 윈한다면 그러한 경우에만 n(n-1) 방법을 사용할 것을 추천드립니다.

학습데이터 혹은 테스트 데이터에 대한 중요도를 계산해야만 할까?

 요약: 이에 대한 명확한 답은 없습니다.

 

 학습데이터나 테스트 데이터에 관련된 질문에 답한다면 어떤 것이 중요한지에 대한 근본적인 질문을 접하게 됩니다. 학습 데이터의 기반과 테스트 데이터에 기반한 특성 중요도 간의 차이를 이해하는 가장 좋은 방법은 "극한"입니다. 50개의 무작위 특성(200개의 인스턴스)이 주어진 연속적이고 무작위적인 목표 결과를 예측할 수 있도록 SVM을 학습시킵니다. "무작위"는 목표 결과가 50개의 특성과 무관하다는 것을 의미합니다. 이는 마치 최근의 로또 복권 번호를 보고 다음날의 기온을 예측하는 것과 같지요. 만약 모델이 어떤 관계를 "학습"한다면, 이는 오버핏이 됩니다. 그리고 사실, SVM은 학습 데이터에 오버핏 한다고 볼 수 있습니다. 학습 데이터의 평균 절대 오차(mae)는 0.29이고, 테스트 데이터의 경우 0.82이며, 이는 또한 항상 평균 0(mae로 0.78)의 결과를 예측하는 최선의 모텔 오차이기도 합니다. 즉 SVM 모델은 말도 안되는 것이지요. 이 오버핏된 SVM의 50가지 특성에 대해 어떤 특성 중요도를 예측할 수 있을까요? 어떠한 특성도 본 적 없는 테스트 데이터의 성능 향상에 기여하지 않기 때문에 0인 것일까요? 또는 학습된 관계가 보이지 않는 데이터에 일반화되는지의 여부에 관계없이 모델이 각 특성에 얼마나 의존하는지 중요도가 반영되어야 할까요? 학습 및 데스트 데이터에 대한 특성 중요도 분포가 어떻게 다른지 살펴보도록 합시다.

 

데이터의 유형별 특성 중요도 분포. SVM은 50개의 무작위 특성과 200개의 인스턴스가 있는 회귀 데이터셋에서 학습되었다. SVM이 데이터에 과적합되는데 학습데이터에 기반한 특성 중요도는 많은 중요한 특성들을 나타낸다. 보이지 않는 테스트 데이터를 기반으로 계산된 특성 중요도는 1(=중요히지 않음)의 비율에 가까워진다.

 

 위의 두 가지 결과 중 어떤 것이 더 바람직한지는 확실하지 않습니다. 두 가지 버전에 대한 주장을 보시고 어떤 것이 더 좋을지 판단해 보시길 바랍니다.

 

테스트 데이터의 경우

 

 이는 단순한 경우입니다. 학습 데이터에 기반한 모델 오류 추정치는 말도 안되는 것 → 특성 중요도는 모델 오류 추정치에 종속됨 → 학습 데이터에 기반한 특성 중요도는 말도 안되는것.

 사실, 이는 기계학습에서 가장 먼저 배우는 것 중 하나입니다. 모델이 학습된 동일한 데이터에 대해 모델 오류(또는 성능)을 측정하면, 일반적으로 측정값이 너무 낙관적이기 때문에 모델이 실제보다 훨씬 더 잘 동작하는 것처럼 보입니다. 그리고 순열 특성의 중요도는 모델 오차의 측정에 종속되기 때문에, 보이지 않는 테스트 데이터를 사용해야 합니다. 학습 데이터에 기반한 특성 중요도는 실제로 모델이 지나치게 적합하고 특성이 전혀 중요하지 않는 경우 예측에 특성이 중요한 것으로 잘못 이해하게 됩니다.

 

학습 데이터의 경우

 

 학습 데이터 사용에 대한 주장은 다소 표현하기 더 어렵지만 개인적인 소견으로 테스트 데이터 사용에 대한 주장만큼 설득력이 있음을 자부합니다. 위에서 언급하였던 말도 안되는 SVM을 한 번 더 살펴봅시다. 학습 데이터를 바탕으로 가장 중요한 특성은 X42였습니다. 특성 X42의 부분 의존도를 살펴봅시다. 부분 의존도는 모델 출력이 특성의 변화에 따라 어떻게 변하는지 보여주며, 일반화 오류에 의존하지 않습니다. PDP가 학습 데이터로 계산되는지 테스트 데이터로 계산되는지는 중요하지 않습니다.

학습 데이터를 바탕으로 한 특성 중요도에 따라 가장 중요한 특성은 X42의 PDP. 위 그림은 SVM이 이 특성에 따라 예측하는 방법을 나타낸다.

 위 그림에서 SVM이 예측을 위해 특성 X42에 의존하는 방법에 대해 배울 수 있음을 분명히 나타내지만, 테스트 데이터 (1)에 기반한 특성 중요도에 따르면, 이는 중요하지 않습니다. 학습 데이터를 바탕으로, 중요도는 1.19로, 모델이 특성을 사용하는 법을 배웠음을 반영합니다. 학습 데이터에 기반한 특성 중요도는 예측을 위해 모델에 의존한다는 점에서 모델에 중요한 특성을 알려줍니다.

 

 학습 데이터를 사용하는 사례의 일부분으로서, 테스트 데이터에 대한 주장에 대해 소개해드리고자 합니다. 실제 모든 데이터를 사용하여 모델을 학습시켜 최상의 모델을 얻고자 하는 것이 목적입니다. 즉, 특성 중요도를 계산히기 위해 사용되지 않은 테스트 데이터가 남아 있지 않음을 의미합니다. 모델의 일반화 오차를 추정할 때도 같은 문제가 있습니다. 특성 중요도 추정에 교차 검증을 사용할 경우 특성 중요도가 모든 데이터가 포함된 최종 모델이 아니라 다르게 동작할 수 있는 데이터의 부분집합이 있는 모델에서 계산된다는 문제가 발생할 수 있습니다.

 

 결국 예측(학습 데이터)을 위해 각 특성에 얼마나 의존하는 모델인지, 보이지 않는 데이터(테스트 데이터)에 대한 모델의 성능에 어느 정도 기여하는 특성을 알고 싶은지 판단해야 합니다. 제가 아는 한, 학습 데이터와 테스트 데이터의 문제를 다루는 연구는 없습니다. 이는 위에서 언급하였던 "말도 안되는 SVM" 예시보다 더 철저한 시험을 필요로 할 것입니다. 이제 더 나은 이해를 위해 이러한 도구들에 대한 더 많은 연구와 경험이 필요합니다.

 

 다음으로 몇 가지 예제를 살펴보겠습니다. 학습 데이터를 기반으로 중요한 계산을 수행하였습니다. 왜냐하믄 이 중 하나를 선택해야 하였고 학습 데이터를 사용하기 위해 더 적은 양의 코드를 사용하기 때문입니다.

실험 및 해석

 다음으로 분류와 회귀에 대한 예를 나타내보도록 하겠습니다.

 

자궁경부암(분류)

 

 자궁경부암을 예측하기 위해 랜덤포레스트 모델을 적용하였습니다. 오차 증가를 1 - AUC(1 - ROC 곡선 아래의 영역)으로 측정합니다. 1(=변화 없음)의 모델 오류 증가와 관련된 특성들은 자궁경부암 예측에 중요하지 않았습니다.

 

 

랜덤포레스트로 자궁경부암을 예측하기 위한 각 특성 중요도. 가장 중요한 특성은 Hormonal.Contraceptives..years.이다. Hormonal.Contraceptives..years.의 순열은 1 - AUC가 6.13배 증가하였다.

 가장 중요한 특성은 순열 후 6.13배의 오차 증가와 관련된 Hormonal.Contraceptives..years.였습니다.

 

자전거 공유(회귀)

 

 기후 조건과 날짜 정보를 고려하여 자전거 대여수를 예측하기 위해 SVM(Support Vector Machine)을 사용하였습니다. 오차 측정으로 평균 절대 오차를 사용합니다.

SVM을 이용한 자전거 예측 대여수 특성 중요도. 가장 중요한 특성은 온도였고, 가장 덜 중요한 특성은 휴일이었다.

장점

 좋은 해석: 특성 중요도는 특성의 정보가 망가졌을때 모델 오류가 증가합니다.

 

 특성 중요도는 모델의 행동에 대한 고도로 압축된, 전반적인 통찰력을 제공합니다.

 

 오차 대신 오류 비율을 사용하는 긍정적인 측면은 특성 중요도 측정이 서로 다른 문제에서 비교가 가능하다는 점입니다.

 

 중요도 측정은 다른 특성과의 모든 상호작용을 자동으로 고려합니다. 특성을 순열하면서 다른 특성과의 상호작용 효과를 끊어낼 수 있습니다. 즉, 순열 특성 중요도는 주요한 특성 효과와 모델 성능에 대한 상호작용 효과를 모두 고려합니다. 두 특성 사이의 상호작용의 중요성이 두 특성의 중요도 측정에 포함되기 때문에 이는 또한 단점이기도 합니다. 이는 특성 중요도가 전체 성능 저하로 합산되지 않지만 합계가 더 크다는 것을 의미합니다. 선형 모델에서와 같이 특성 사이에 상호작용이 없는 경우에만 중요도가 대락적으로 합해집니다.

 

 순열 특성 중요도는 모델을 다시 학습시킬 필요가 없습니다. 일부 다른 방법에서는 특성을 삭제하고 모델을 다시 학습한 다음 모델 오류를 비교하는것을 제안합니다. 기계학습 모델의 재학습은 상당히 많은 시간이 걸릴 수도 있기 때문에, "오직" 순열된 하나의 특성만이 많은 시간을 절약할 수 있습니다. 일부 특성으로 모델을 다시 학습시키는 중요도 방법은 언뜻 보기에는 직관적일 수 있지만 데이터가 줄어든 모델은 특성 중요도를 위해서는 의미가 없습니다. 우리는 고정된 모델의 특성 중요도에 관심이 있습니다. 축소된 데이터셋으로 다시 학습시키면 우리가 관심있는 모델과는 다른 모델이 생성됩니다. 0이 아닌 가중치를 갖는 고정된 수치의 특성을 갖는 희박한 선형 모델(Lasso를 포함)을 학습시킨다고 가정합니다. 데이터셋에는 100개의 특성이 있으며, 0이 아닌 가중치의 갯수를 5로 설정합니다. 0이 아닌 가중치를 갖는 특성 중 하나의 중요도를 분석하는 경우, 특성을 제거하고 모델을 다시 학습시키는 경우, 모델 성능은 그대로 유지되는데, 그 이유는 똑같이 좋은 다른 특성이 0이 아닌 가중치를 가지기 때문입니다. 그리고 결론적으로 이러한 특성이 중요하지 않다는 것입니다. 다를 예로 모델은 의사결정 트리로, 첫 번째 분할로 선택된 특성의 중요도를 분석합니다. 특성을 제거하고 모델을 다시 학습시킵니다. 또다른 특성이 첫 번째 분할로 선택되기 때문에 트리 전체가 매우 달라질 수 있는데, 이는 (잠재적으로) 완전히 달느 트리의 오차율을 비교하여 그 특성이 트리들 중 하나에 얼마나 중요하니즐 결정한다는 것을 의미합니다.

단점

 특성 중요도를 계산하기 위해 학습 데이터를 사용해야 하는지 테스트 데이터를 사용해야 하는지는 매우 불분명합니다.

 

 순열 특성 중요도는 모델의 오류와 연결됩니다. 이는 본질적으로 단점은 아니지만, 어떤 경우에는 필요로 하는 것이 아닙니다. 어떤 경우에는 성능에 대한 의미를 고려하지 않고 모델의 출력이 특성에 따라 얼마나 달라지는지 알고 싶을 수 있습니다. 예를 들어, 다른 사용자가 특성을 조작할 때 모델의 출력이 얼마나 강력한지 알아보려고 할 때 이 경우, 특성을 순열할 때 모델 성능이 얼마나 감소하는지는 관심이 없지만 각 특성에 의해 모델 출력 분포 중 어느 정도가 설명되는지는 관심있을 것입니다. 모델이 일반화될 때(즉, 지나치게 오버핏이 되지 않을때) 모델 분포(특성에 의해 설명되는)와 특성 중요도는 강한 상관관계를 갖습니다.

 

 무엇보다도 여러분들은 진정한 결과를 얻을 수 있는 접근이 필요합니다. 누군가가 모델의 label이 부착되지 않은 데이터만 제공한다면(실제 결과는 아니지만) 순열 특성 중요도를 계산할 수 없습니다.

 

 순열 특성 중요도는 특성이 잘 섞였는지에 따라 달라지며, 이는 측정에 랜덤성이 추가됩니다. 순열이 반복되면 결과가 크게 달라질 수 있습니다. 순열을 반복하고 반복해서 중요도 측정을 평균화하면 측정은 안정화되지만 계산 시간은 증가합니다.

 

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

 

 또다른 까다로운 점으로 상관관계가 있는 특성을 추가하면 두 특성 간에 중요도를 분할하여 관련 특성의 중요도를 줄일 수 있습니다. 여기서 말하는 "분할" 특성의 중요성에 대한 예를 들어보겠습니다. 비가 올 확률을 예측해 전날 오전 8시 온도를 다른 연관성없는 특성과 함께 특성으로 사용하고자 합니다. 랜덤 포레스트를 학습시키고 그 결과 온도가 가장 중요한 특성이고 모든것이 잘 되어서 다음날까지 편히 잘 수 있을 것입니다. 이제 오전 8시 온도와 강한 상관관계가 있는 특성으로 오전 9시 온도를 추가로 포함하는 다른 시나리오를 생각해봅시다. 오전 9시의 기온은 오전 8시 온도를 이미 알고 있다면 많은 추가 정보를 주지 않습니다. 하지만 더 많은 특성을 갖는것은 항상 좋다고 볼 수 있겠지요? 두 가지 온도 특성과 상관없는 특성을 가진 랜덤 포레스트를 학습시킵니다. 랜덤 포레스트에 있는 트리 중 몇몇은 오전 8시, 다른 몇몇은 오전 9시, 다른 몇몇은 둘 다, 나머지는 둘 다 없을 경우가 있습니다. 두 개의 온도 특성이 함께 있는 것은 이전의 단일 온도 특성보다 더 중요하지만, 특성 중요도 목록의 맨 위애 있는 대신, 각 온도는 이제 중간 어딘가에 위치할것입니다. 연관듼 특성을 도입함으로서 가장 중요한 특성을 평범한 것으로 바꿔버립니다. 한편으로 이는 단지 기초적인 랜덤 포레스트의 기계학습 모델의 특성을 반영하기 때문에 괜찮습니다. 모델이 지금 오전 9시 측정에 의존할 수 있기 때문에 오전 8시 온도는 단순이 덜 중요해졌습니다. 반면에 이는 특성 중요도에 대한해석을 상당히 어렵게 만듭니다. 특성에 측정 오류가 있는지 확인하려 한다고 상상해 봅시다. 온도 체크가 상당한 비용이 들고 가장 중요한 특성 중 상위 3개만 확인하기로 하였을 때 첫 번째 경우에는 온도를 확인하고, 두 번째 경우에는 온도 특성이 현재 중요도를 공유한다는 이유만으로 온도 특성을 포함하지 않습니다. 중요도 값은 모델 동작 수준에서 타당할 수 있지만 상관관계가 있는 특성이 있으면 이를 분석함에 있어 상당히 혼란스러울 수 있음을 알 수 있습니다.

소프트웨어 및 대안

 예제를 위해 R 패키지의 iml이 사용되었습니다. Python 라이브러리 alibi 뿐 아니라 R 패키지의 DALEXvip 또한 모델 불특정성 순열 특성 중요도에 사용됩니다.

 

 PIMP라는 이름의 알고리즘은 중요도를 위한 p-value를 재공하기 위한 특성 중요도 알고리즘에 적용되어 있습니다.

 

참고자료: https://christophm.github.io/interpretable-ml-book/feature-importance.html

 

5.5 Permutation Feature Importance | Interpretable Machine Learning

Machine learning algorithms usually operate as black boxes and it is unclear how they derived a certain decision. This book is a guide for practitioners to make machine learning decisions interpretable.

christophm.github.io

 

반응형