XAI는 인공지능 모델이 어떤 근거로 예측을 하는지 그 이유(Why)를 설명하는 분야다.
(모델의 의사결정 과정을 이해할 수 있도록 만드는 방법)
Modeling을 통해서 높은 예측력을 보이면 되는 문제도 있지만, 현실의 많은 문제는 왜 그러한 예측력을 보이는지 Why에 관심이 많다.
아래에서는 이러한 Why 를 알 수 있는 4가지 방법들을 소개한다.
복잡도가 증가하는 딥러닝, Black-Box Model은 어떻게 해석해야 할까?
다양한 알고리즘을 동일한 기준으로 해석해 볼 수는 없을까?
모델에 의존적이지 않게 해석하고 싶다.
⇒ 쉬운 방법으로는 각각의 개별변수만 남기던가 빼서 학습하여 비교하면 어떤 변수가 중요 변수인지 알 수 있다. → 시간 오래 걸리며 비효율적

하나의 특성 값(변수 값)을 무작위로 섞은 뒤, 성능(정확도)이 얼마나 떨어지는지 확인하여 중요도를 측정한다.
Train Data Set를 활용하는 경우
Test Data Set를 활용하는 경우
- Test 데이터를 활용하면 모델의 일반화 능력(새로운 데이터에 대한 성능)을 보다 객관적으로 평가할 수 있다.
- 특히 모델이 과적합되었는지를 잘 드러낼 수 있다.
- 일반적으로 Test 데이터를 사용하는 것이 신뢰도가 높다고 평가된다.
② Permutation FI가 (-)값이 나온다면?
Permutation Importance는 기본적으로,
특정 Feature의 값을 무작위로 섞으면(Permutation) 예측 성능이 나빠질 것이란 가정에서 출발한다.
정상적이라면, Permutation 이후 예측 오차(Error)는 원래 모델의 오차보다 커져야 하므로, 중요도 값은 일반적으로 양수(+)여야 한다.
하지만, 음수(-)가 나온다는 것은 해당 Feature를 섞었더니 오히려 모델의 성능이 더 좋아졌다는 의미이기도 하다.
즉, 섞기 전 이 Feature가 모델 예측에 오히려 방해가 되고 있음을 의미하기도 한다.
그러나 대부분의 경우, 음수 값이 나오면 신뢰할 수 없는 값으로 간주하고, 추가적으로 다시 평가하거나 분석이 필요하다.
sklearn.inspection.permutation_importance를 사용하여 Permutation Importance 구하기# 필요한 라이브러리 불러오기
import numpy as np
import pandas as pd
from sklearn.datasets import load_boston
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestRegressor
from sklearn.inspection import permutation_importance
# 데이터 불러오기 및 분리
boston = load_boston()
X, y = boston.data, boston.target
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=42)
# 모델 학습 (RandomForest 예시)
model = RandomForestRegressor(random_state=42)
model.fit(X_train, y_train)
# Permutation Importance 계산 (Test 데이터 기준)
perm_importance = permutation_importance(
model, X_test, y_test, n_repeats=30, random_state=42
)
# Feature Importance 출력
importance_df = pd.DataFrame({
'feature': boston.feature_names,
'importance_mean': perm_importance.importances_mean,
'importance_std': perm_importance.importances_std
}).sort_values(by='importance_mean', ascending=False)
print(importance_df)model: 학습이 완료된 모델X_test, y_test: 중요도를 측정할 테스트 데이터n_repeats: 특성을 몇 번 섞어서 평균값을 낼지 결정 (클수록 안정적 결과)importance_mean 값이 클수록 Feature의 중요도가 높다.importance_std)는 특성을 섞을 때마다 중요도의 변동성을 나타낸다.y^surr(i)\hat{y}^{(i)}_{surr}y^surr(i) : Surrogate Model이 예측한 값
y^orig(i)\hat{y}^{(i)}_{orig}y^orig(i) : Original Model이 예측한 값
y^ˉorig\bar{\hat{y}}_{orig}y^ˉorig : Original Model 예측값의 평균값
| R2R^2R2 값 | 의미 |
|---|---|
| R2R^2R2 ≈ 1 | Surrogate Model의 예측 성능이 Original Model과 매우 유사 (우수한 근사) |
| R2R^2R2 ≈ 0 | Surrogate Model의 예측이 Original Model과 거의 무관 (낮은 근사) |
즉, R2R^2R2 값이 높을수록(1에 가까울수록), Surrogate Model이 Original Model의 예측 성능을 효과적으로 근사한다고 평가할 수 있습니다.
Regression Line(빨간색) : Surrogate Model이 Original Model의 예측값을 얼마나 잘 따라가는지 나타냅니다.
Residual(잔차) : Original Model과 Surrogate Model 예측값의 차이
RSS (Residual Sum of Squares) : 잔차를 제곱하여 합한 값 (예측 간 차이)
TSS (Total Sum of Squares) : Original Model의 예측값과 Original Model의 평균 예측값 간의 차이를 제곱하여 합한 값 (기준점 대비 차이)
Surrogate Model의 성능을 평가할 때는 결정계수(R2R^2R2)를 사용합니다.
결정계수(R2R^2R2) 값이 1에 가까울수록 좋은 Surrogate Model입니다.
| R2R^2R2 값 범위 | Surrogate 성능 근사도 |
|---|---|
| 0.8 ~ 1.0 | 매우 우수 |
| 0.5 ~ 0.8 | 보통~우수 |
| 0 ~ 0.5 | 낮음 (적합하지 않음) |
이렇게 결정계수를 사용하면 Surrogate Model이 Original Model과 얼마나 비슷한 성능을 나타내는지 쉽게 평가할 수 있습니다.
Q1 ) 만약 R2값이 0.94라면?? : 굳이 예측 모델을 따로 쓸 필요 있나?!! Surrogation model을 예측 모델로도 사용하면 된다
Q2 ) 만약 R2값이 0.1정도라면?? 사용 못한다! 예측모델과 성능이 거의 유사하지 않아서 믿을 수 있는 해석이 아니다.
| 방법 | 특징 | 설명 범위 | 계산 비용 |
|---|---|---|---|
| Permutation Importance | 특성의 중요도 순위 | 전역적(Global) | 낮음 |
| Surrogate Model | 간단한 모델로 근사하여 설명 | 전역적(Global) | 낮음~중간 |
| LIME | 특정 데이터 한 개씩 국소적 설명 | 국소적(Local) | 중간 |
| SHAP | 특성별 정확한 기여도(수학적 근거 있음) | 전역적+국소적 | 높음 |
사진 출처 : https://juhans.tistory.com/2