우리가 만든 AI 모델이 99%의 정확도를 자랑한다고 가정해 봅시다. 하지만 “왜 이 고객의 대출 신청을 거절했습니까?” 라는 금융감독원의 질문에 “모델이 그렇게 판단했습니다” 외에 아무런 답도 할 수 없다면, 그 모델은 비즈니스에서 사용할 수 없는 ‘블랙박스’에 불과합니다.
특히 금융(신용평가), 의료(질병 진단), 보험(사기 탐지)과 같이 규제가 강하고 결정 하나하나가 개인의 삶에 큰 영향을 미치는 분야에서 AI의 투명성과 공정성은 선택이 아닌 필수입니다. 유럽의 GDPR이 ‘설명을 요구할 권리’를 명시한 것처럼, 이제 AI의 판단 근거를 제시하는 것은 기술적 호기심을 넘어 법적, 사업적 요구사항이 되었습니다.
이러한 ‘책임감 있는 AI(Responsible AI)’를 구현하는 핵심 기술이 바로 설명가능 AI(Explainable AI, XAI)입니다. 이 글에서는 가장 강력한 XAI 라이브러리인 SHAP과 LIME을 심층 비교하고, ‘대출 부도 예측’ 실전 예제 코드를 통해 당신의 AI 모델을 ‘설명 가능한 화이트박스’로 바꾸는 방법을 알려드립니다.
SHAP과 LIME은 블랙박스 모델을 해석하는 가장 대표적인 방법이지만, 작동 원리와 장단점이 명확히 다릅니다. 당신의 상황에 맞는 최적의 도구를 선택하기 위해 둘의 차이점을 명확히 이해해야 합니다.
간단히 비유하자면, LIME은 ‘특정 사건 현장의 목격자’와 같습니다. 그 사건(하나의 예측)에 대해서는 빠르고 명확하게 진술하지만, 전체 범죄(모델 전체)를 보지는 못합니다. 반면 SHAP은 사건 전체의 인과관계를 분석하는 ‘프로파일러’에 가깝습니다. 시간이 더 걸리지만, 개별 사건의 원인과 전체 패턴을 일관성 있게 설명해 줍니다.
이제 실제 금융 데이터를 바탕으로 XGBoost라는 강력한 블랙박스 모델을 훈련시킨 후, LIME과 SHAP을 이용해 그 속을 들여다보겠습니다.
터미널 또는 Jupyter Notebook 셀에서 아래 명령어를 실행하여 필요한 도구들을 설치합니다.
pip install shap lime xgboost matplotlib scikit-learn
현실적인 데이터셋을 위해 Scikit-learn을 이용해 가상의 ‘대출 심사 데이터’와 ‘XGBoost 부도 예측 모델’을 만들겠습니다.
import xgboost
import shap
import lime
import lime.lime_tabular
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from sklearn.datasets import make_classification
import pandas as pd
import numpy as np
# 1. 현실적인 금융 데이터셋 생성
X_raw, y = make_classification(n_samples=1000, n_features=5, n_informative=3, n_redundant=0,
n_classes=2, random_state=42, class_sep=2.0, flip_y=0.05)
feature_names = ['연소득(만원)', '총 대출 건수', '신용점수', 'DTI(총부채상환비율)', '연체 기록']
X = pd.DataFrame(X_raw, columns=feature_names)
# 데이터 확인
print("데이터 샘플:")
print(X.head())
# 2. 데이터 분할 및 XGBoost 모델 훈련
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
model = xgboost.XGBClassifier(use_label_encoder=False, eval_metric='logloss')
model.fit(X_train, y_train)
print(f"\n모델 정확도: {model.score(X_test, y_test):.2f}")
이제 우리는 model
이라는, 속을 알 수 없는 강력한 부도 예측 모델을 손에 넣었습니다. 특정 고객(예: X_test
의 첫 번째 고객)의 예측 결과를 해석해 보겠습니다.
LIME을 이용해 ‘ID 0번 고객’이 왜 ‘부도 가능성이 낮다(0)’고 예측되었는지 분석해 보겠습니다.
# LIME Explainer 생성
explainer_lime = lime.lime_tabular.LimeTabularExplainer(
training_data=X_train.values,
feature_names=X_train.columns.tolist(),
class_names=['정상', '부도'],
mode='classification'
)
# 해석할 데이터 선택 (ID 0번 고객)
i = 0
X_instance = X_test.iloc[[i]]
# LIME 설명 생성 및 시각화
exp_lime = explainer_lime.explain_instance(
data_row=X_instance.values[0],
predict_fn=model.predict_proba,
num_features=5
)
# LIME 결과 시각화
exp_lime.show_in_notebook(show_table=True, show_all=False)
결과 해석: 위 LIME 결과는 ‘ID 0번 고객’의 예측에 대한 설명입니다.
신용점수 > 0.35
와 연소득 > 0.88
이 부도 확률을 낮추는 결정적인 역할을 했음을 보여줍니다.총 대출 건수 <= -0.52
는 부도 확률을 높이는 방향으로 작용했지만, 초록색 요인들의 영향력이 더 커서 최종적으로 ‘정상’으로 예측되었습니다.LIME은 이처럼 특정 한 건에 대해 어떤 특성이 긍정/부정적 영향을 미쳤는지 빠르고 직관적으로 보여줍니다.
이제 SHAP을 사용해 보겠습니다. SHAP은 개별 예측(Local)은 물론 모델 전체(Global)의 동작 방식까지 일관된 기준으로 설명해 줍니다.
# SHAP Explainer 생성 (Tree 모델에 최적화)
explainer_shap = shap.TreeExplainer(model)
shap_values = explainer_shap.shap_values(X_test)
# 1. 개별 예측 분석 (Force Plot) - ID 0번 고객
shap.initjs() # Javascript 초기화
shap.force_plot(explainer_shap.expected_value, shap_values[i, :], X_test.iloc[i, :])
Force Plot 해석: 이 그래프는 LIME과 동일하게 ‘ID 0번 고객’을 분석하지만, 더 정교한 정보를 제공합니다.
총 대출 건수 = -0.739
가 위험을 높이는 쪽으로 작용했습니다.신용점수 = 1.096
과 연소득 = 1.156
이 위험도를 크게 낮췄습니다.2. 모델 전체 특성 중요도 분석 (Summary Plot) SHAP의 진정한 강력함은 모델 전체를 조망하는 것에서 나옵니다.
# 모델 전체의 특성 중요도 시각화
shap.summary_plot(shap_values, X_test, plot_type="bar")
shap.summary_plot(shap_values, X_test)
Summary Plot 해석: 이 그래프는 우리 모델이 전반적으로 어떤 특성을 중요하게 생각하는지 알려줍니다.
신용점수
가 부도 예측에 가장 중요한 변수이고, 그 다음이 연소득
, 총 대출 건수
순입니다.신용점수
의 경우, 점들이 주로 왼쪽에 분포하며 파란색이 많고, 오른쪽에는 빨간색이 많습니다. 이는 신용점수가 높을수록(빨간색) 부도 확률을 낮추고(SHAP value 음수), 낮을수록(파란색) 부도 확률을 높인다(SHAP value 양수)는 상식적인 관계를 모델이 잘 학습했음을 명확히 보여줍니다.오늘 우리는 LIME과 SHAP이라는 두 개의 강력한 렌즈로 블랙박스 AI의 내부를 들여다보는 방법을 배웠습니다. 중요한 것은 특정 라이브러리의 함수 몇 개를 외우는 것이 아닙니다. AI의 판단 근거를 논리적으로 추적하고, 시각화된 결과를 비즈니스 언어로 설명하며, 모델의 잠재적 편향성까지도 발견해내는 ‘AI 모델 해석 역량’을 키우는 것이 핵심입니다.
XAI는 더 이상 연구실의 기술이 아닙니다. 신뢰할 수 있고 공정한 AI 시스템을 구축하려는 모든 데이터 과학자와 엔지니어의 필수 생존 도구입니다.
SHAP과 LIME은 훌륭한 시작점이지만, XAI의 세계는 더 넓고 깊습니다.
오늘 배운 내용을 바탕으로 이 도구들을 탐색하며, 당신의 AI 모델에 대한 설명 책임을 완수하는 전문가로 성장하시길 바랍니다.
특정 예측에 대한 빠른 확인이 필요할 때는 LIME을, 모델 전체의 동작 방식과 일관성 있는 개별 설명이 필요하며 시간이 좀 더 걸려도 괜찮다면 SHAP을 사용하세요. 특히 규제 기관에 제출할 보고서 등에는 결과의 일관성이 보장되는 SHAP이 더 적합합니다.
A: 네, 가능합니다. LIME과 SHAP 모두 이미지의 어떤 픽셀 영역이 예측에 영향을 미쳤는지(LIME Image Explainer), 또는 텍스트의 어떤 단어가 긍정/부정 판단의 근거가 되었는지(SHAP Text Explainer)를 시각적으로 보여주는 기능을 제공합니다.
A: XAI는 이미 훈련된 모델을 ‘해석’하는 기술이므로, 모델의 성능 자체에 영향을 주지 않습니다. 오히려 모델이 왜 잘못된 예측을 하는지 원인을 파악하여 성능을 개선하는 데 큰 도움을 줍니다.
당신의 라즈베리파이가 AI 두뇌를 갖게 된다면? "인터넷 없이도 스스로 보고 생각하는 AI 카메라를 만들 수…
"이 패턴은 어제까지 없던 새로운 사기 수법인데?" 전통적인 규칙(Rule-based) 기반의 FDS 앞에서 보안 담당자는 매일같이…
당신의 교육 아이디어, 언제까지 머릿속에만 두실 건가요? 코딩 없이 AI 튜터 만들기에 대해 알아보세요! "학생…
"재고는 쌓이고, 운송비는 치솟고…" 혹시 당신의 이야기인가요? AI 물류 최적화를 생각해 보셔야 할 때입니다. 매일…
들어가며: SaMD, 왜 규제와 수가를 먼저 이해해야 하는가? 의료 AI 솔루션, 즉 소프트웨어 의료기기(SaMD, Software…
당신의 첫 '금융 AI 포트폴리오', 1시간 만에 완성시켜 드립니다. 파이썬 AI 주가 예측 모델 만들기…