본문 바로가기
C.W.K.
Stream
Lesson 02 of 05 · published

Feature Importance

~28 min · importance, interpretation

Level 0Scout
0 XP0/48 lessons0/11 achievements
0/120 XP to next level120 XP to go0% complete

중요도는 모델이 무엇에 기대는지 묻는다

특성 중요도는 현재 모델과 현재 자료 분포에서 어떤 입력이 예측 품질이나 개별 점수에 얼마나 기여하는지 설명하려는 도구야. 하나의 절대 진실이 아니라 질문과 계산법에 따라 다른 답을 내. 모델 디버깅, 자료 감사, 개별 결정 설명 가운데 목적을 먼저 정해야 적절한 방법을 고를 수 있어.

나무 내부 중요도는 빠른 첫눈이야

결정나무 계열의 불순도 기반 중요도는 한 특성이 분할에서 손실을 얼마나 줄였는지 합산해. 학습 직후 바로 얻을 수 있지만 가능한 분할점이나 고유값이 많은 특성을 선호하고 학습 자료의 과적합까지 반영할 수 있어. 빠른 탐색에는 쓰되 최종 순위로 단정하지 마.

순열 중요도는 성능 의존도를 잰다

홀드아웃 자료에서 한 특성의 값을 무작위로 섞어 관계를 끊은 뒤 관심 지표가 얼마나 떨어지는지 재. 어떤 모델에도 적용할 수 있고 실제 평가 지표를 기준으로 한다는 장점이 있어. 여러 번 섞어 평균과 흔들림을 보고해야 해. 계산이 비싸고 서로 강하게 연관된 특성은 하나를 섞어도 다른 특성이 대신해 중요도가 낮게 나올 수 있어.

SHAP은 개별 예측의 기여를 나눠

SHAP 값은 기준 예측에서 특정 사례의 예측으로 이동할 때 각 특성이 더하거나 뺀 기여를 일관된 규칙으로 배분해. 한 사례가 왜 높은 점수를 받았는지 보는 지역 설명과 전체 요약 그림에 강력해. 하지만 기준 자료 선택과 특성 의존성 가정에 따라 값이 달라지고, 계산된 기여도 역시 원인 효과는 아니야.

방향과 모양은 별도 그림으로 봐

중요도 순위는 특성이 예측을 어느 방향으로 움직이는지 알려주지 않아. SHAP 요약, 부분의존, 누적국소효과 그림으로 값의 증가와 예측 변화 모양을 확인해. 강하게 연관된 특성에서는 부분의존이 현실에 없는 조합을 만들 수 있으니 원본 자료 범위와 함께 읽어야 해.

연관된 특성은 기여를 나눠 가진다

주문 수와 매출처럼 비슷한 정보를 담은 열은 중요도가 둘로 갈리거나 모델이 하나만 고를 수 있어. 한 열의 중요도가 낮다고 정보가 쓸모없다는 뜻은 아니야. 연관된 열을 묶어 함께 순열하거나 대체 모델과 여러 씨앗에서 순위 안정성을 확인해. 이름만 다른 누출 열도 이 과정에서 찾아야 하고.

중요도는 개입 효과가 아니야

상담 건수가 해지 예측에 중요하다고 상담 기록을 지우면 해지가 줄어드는 게 아니야. 둘 다 불만이라는 원인에서 생겼을 수 있어. 현재 세계의 예측 기여를 ‘이 값을 바꾸면 결과가 바뀐다’는 인과 주장으로 옮기지 마. 행동을 정하려면 실험이나 인과 설계가 필요해.

예상과 다른 결과를 감사 기회로 써

팀이 반드시 중요하다고 아는 건전한 확인용 열을 하나 포함해. 중요도가 0이라면 열이 잘못 연결됐거나 자료 범위가 예상과 다를 수 있어. 반대로 식별자나 사건 뒤 열이 1위라면 누출을 의심해. 상위 열 열 개를 점수와 불확실성, 방향, 사용 가능 시각과 함께 보고해야 설명이 행동 가능한 검사가 돼.

Code

기본값으로 쓰는 순열 중요도·python
from sklearn.inspection import permutation_importance

result = permutation_importance(
    model, X_val, y_val, n_repeats=20, random_state=7,
    scoring="average_precision", n_jobs=-1
)
for name, score in sorted(zip(X_val.columns, result.importances_mean), key=lambda kv: -kv[1])[:10]:
    print(f"{score:+.4f}  {name}")
개별 예측 설명을 위한 SHAP·python
import shap

explainer = shap.TreeExplainer(model)
shap_values = explainer.shap_values(X_val.sample(500, random_state=7))
shap.summary_plot(shap_values, X_val.sample(500, random_state=7))

External links

Exercise

홀드아웃 자료에서 반복 순열 중요도와 SHAP 요약을 계산해 상위 열 개의 방향과 흔들림을 보고해. 팀 예상과 가장 크게 어긋나는 특성 하나를 원본 열, 생성 시각, 상관 특성까지 조사해.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.