본문 바로가기

Codestates AI 부트캠프/2. Machine Learning

[머신러닝] 3-1 모델 해석 (특성 기준)

0. 모델 해석이란?

이번주는 모델을 완성한 뒤, 클라이언트에게 모델을 설명하는 방법에 대해 배운다. 실무에 사용하도록 모델에 신뢰도를 부여하는 작업이다. 또 모델이 어떤 과정을 통해 예측값을 반환하는 지 설명한다.


해석 내용

  • 모델의 의사결정에 대한 이유 제시
  • 모델이 주요하게 학습한 규칙 및 특성 제시

모델 해석이 왜 중요한가

  • 검증지표만으로 모델을 신뢰할 수 없다
  • 모델 해석을 통해 개선사항을 확인할 수 있다
  • 어떤 경우에는 모델이 왜 이런 결정을 내렸는지 설명해야할 때도 있다

 

1. Feature Importance

트리 기반 모델에서 특성이 불순도를 감소시키는 정도를 수치로 나타낸 것이다. 이때 불순도를 크게 감소시킬수록 중요한 특성으로 판단한다.

카디널리티가 높은 특성에 feature importance를 높게 부여하는 경향이 있다. 노드에서 카디널리티가 높은 특성을 자주 이용해 데이터를 분할하기 때문이다. 
 

2. Drop-Column Importnace

특정 특성을 제외하고 모델을 학습시켰을 때 모델의 성능이 얼마나 떨어졌는지 살펴본다. 만약 크게 하락했다면 해당 특성은 매우 중요한 특성일 것이다.

특성마다 각각 제외하고 학습시키는 일을 반복해야하기 때문에 처리가 느리다. n개의 특성이 있는 경우 n+1번의 모델 학습(모든 특성을 학습했을 때까지)이 필요하기 때문이다. 


3. Permutation Importance

모델을 재학습 시키지 않고, 기존 모델에서 각 특성에 노이즈를 주어 모델이 해당 특성을 의사결정에 사용하지 못하게 만들었을 때 성능이 얼마나 감소하는지 확인한다.

처리시간이 Drop-Column Importance보다 짧고 높은 카디널리티의 영향을 덜 받는다

강한 상관관계가 있는 특성들이 존재할 때 잘못된 값을 낼 수 있다. 두 특성 중 하나의 값에 노이즈를 주어 비현실적 데이터를 사용해 결과를 도출할 수 있다. 또, 특성 하나가 무력화하여도 다른 특성으로 비슷한 결과를 얻어 성능이 크게 하락하지 않을 수 있다.

import eli5
from eli5.sklearn import PermutationImportance

# permuter 정의
permuter = PermutationImportance(
    model,
    scoring="accuracy",  # metric
    n_iter=10,  # 다른 random seed를 사용하여 10번 반복
    random_state=2,
)

# 스코어 다시 계산
X_test_encoded = encoder.transform(X_test)
permuter.fit(X_test_encoded, y_test)

# 시각화
feature_names = X_test.columns.tolist()
pi = pd.Series(permuter.feature_importances_, feature_names).sort_values()
pi.plot.barh()
plt.title("Permutation Importance")


*ordinal encoder는 빈도에 따라 1, 2, 3등을 매긴다. 그래서 순서가 있는 정보들은 손실될 수 있다. 카테고리 데이터로 바꾼 뒤 (카테고리 데이터는 순서를 인식하고 있는 데이터타입) 적용하면 된다.

*label encoder는 알파벳 순서에 따라 1,2,3을 매긴다.