모델 설명 가능성을 위한 SHAP 값
shap.Explainer, TreeExplainer, 포스 플롯, 비스웜 플롯, 특성 중요도 순위 매기기를 다룹니다.
모델 설명 가능성을 위한 SHAP 값은(는) CoddyKit의 무료 Learn AI with Python 강의입니다. 이것은 4개 중 2번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Learn AI with Python 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Learn AI with Python 강의에는 총 4개의 강의가 포함되어 있습니다.
설명 가능성이 중요한 이유
복잡한 모델은 정확하지만 불투명합니다. 설명 가능성은 "모델이 왜 이 예측을 했을까요?"라는 질문에 답하며, 신뢰, 디버깅, 규제 준수를 위해 필수적입니다. SHAP은 가장 널리 사용되는 설명 방법 중 하나입니다.
SHAP이 측정하는 것
SHAP(샤플리 가산적 exPlanations)은 각 특성이 하나의 예측에 기여한 정도를 계산합니다. 이 값은 협동 게임 이론의 샤플리 값에 기반합니다. 각 특성을 하나의 "참여자"로 보고, 해당 특성의 SHAP 값은 기준값과 비교한 예측값에서 그 특성이 공정하게 차지하는 몫입니다.
가법성
SHAP 값은 가법적입니다. 기준값(모델 출력의 평균)에 모든 특성의 SHAP 값을 더하면 실제 예측값이 됩니다. 따라서 모든 설명은 출력을 완전하고 검증 가능하게 산정한 내역이 됩니다.
# prediction = base_value + sum(shap_values_for_each_feature)TreeExplainer
트리 모델(엑스지부스트, LightGBM, 랜덤 포리스트)의 경우 shap.TreeExplainer는 트리 구조를 활용하여 정확한 SHAP 값을 빠르게 계산합니다.
import shap
import xgboost
model = xgboost.XGBClassifier().fit(X_train, y_train)
explainer = shap.TreeExplainer(model)shap_values 계산
explainer.shap_values(X_test)는 행마다 각 특성에 대한 SHAP 값이 하나씩 포함된 행렬을 반환합니다. 이 값은 시각화할 원시 기여도입니다.
shap_values = explainer.shap_values(X_test)
print(shap_values.shape) # (n_samples, n_features)summary_plot 벌떼형 차트
shap.summary_plot은 벌떼형 차트를 생성합니다. 각 점은 한 특성에 대한 하나의 표본을 나타냅니다. 위치는 SHAP 값(영향의 방향과 크기)을 보여 주고, 색상은 특성값을 보여 줍니다. 특성은 전체 중요도에 따라 순위가 매겨집니다.
shap.summary_plot(shap_values, X_test)벌떼형 차트 읽기
벌떼형 차트는 다음과 같이 읽습니다.
- 위쪽 특성일수록 전체적으로 더 큰 영향을 줍니다
- 오른쪽으로 멀리 있는 점은 예측값을 높이고, 왼쪽으로 멀리 있는 점은 예측값을 낮춥니다
- 색상은 방향을 보여 줍니다. 예를 들어 오른쪽에 높은 특성값(빨간색)이 모여 있다면 "높은 값이 예측값을 높인다"는 의미입니다
하나의 예측 설명하기
SHAP은 개별 수준에서 특히 유용합니다. 하나의 행을 설명하려면 해당 행의 SHAP 값과 모델 기준값이 필요합니다.
idx = 0
base = explainer.expected_value
row_shap = shap_values[idx]force_plot
shap.force_plot은 기준값에서 시작하여 각 특성이 미는 힘으로 하나의 예측을 보여 줍니다. 빨간색 특성은 출력을 높이고, 파란색 특성은 출력을 낮춥니다. 이 힘을 모두 합한 결과가 최종 예측값에 도달합니다.
shap.force_plot(
explainer.expected_value,
shap_values[0],
X_test.iloc[0],
)waterfall_plot
shap.waterfall_plot은 하나의 예측을 가장 읽기 쉽게 보여 주는 방식입니다. 기준값에서 시작하여 각 특성의 기여도를 크기순으로 하나씩 쌓아 최종 출력값에 도달합니다.
shap.waterfall_plot(
shap.Explanation(
values=shap_values[0],
base_values=explainer.expected_value,
data=X_test.iloc[0],
)
)전체 설명과 국소 설명
SHAP은 두 가지 목적에 사용됩니다.
- 전체:
summary_plot은 어떤 특성이 전체적으로 모델을 이끄는지 보여 줍니다 - 국소:
force_plot과waterfall_plot은 특정한 하나의 예측을 설명합니다
두 방식 모두 동일한 SHAP 값에서 나오므로, 서로 다른 범위에서도 일관된 설명을 제공합니다.
간단히 확인하기
SHAP에 대한 지식을 확인해 보세요.
복습
SHAP을 사용한 모델 설명 가능성을 배웠습니다.
shap.TreeExplainer(model)은 트리 모델에 대한 정확한 값을 계산합니다explainer.shap_values(X_test)는 특성별 기여도를 반환합니다summary_plot벌떼형 차트는 전체 중요도를 보여 줍니다force_plot과waterfall_plot은 하나의 예측을 설명합니다- SHAP 값은 가법적입니다. 기준값 + 기여도 = 예측값
자주 묻는 질문
“모델 설명 가능성을 위한 SHAP 값” 강의는 무료인가요?
네 — “모델 설명 가능성을 위한 SHAP 값” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Learn AI with Python 강의 전체를 잠금 해제할 수 있습니다. Learn AI with Python 강의에는 총 4개의 강의가 포함되어 있습니다.
“모델 설명 가능성을 위한 SHAP 값”에서 뭘 배우나요?
shap.Explainer, TreeExplainer, 포스 플롯, 비스웜 플롯, 특성 중요도 순위 매기기를 다룹니다. 브라우저에서 직접 실행하는 실습 코드로 Learn AI with Python을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
Learn AI with Python을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 Learn AI with Python은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 2번째 강의입니다.
“모델 설명 가능성을 위한 SHAP 값” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 Learn AI with Python 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 Learn AI with Python 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.
이 강의의 모든 강의
- 머신러닝 모델의 편향 탐지
- 모델 설명 가능성을 위한 SHAP 값
- LIME: 국소 해석 가능 설명
- 인공지능 윤리 및 거버넌스 프레임워크