기술

AI의 속마음 설명서: SHAP vs LIME, 당신의 모델에 맞는 XAI 선택 가이드

“AI가 왜요?” 이 질문에 답하지 못하면, 당신의 모델은 ‘깡통’일 뿐입니다

SHAP vs LIME, 당신의 모델에 맞는 XAI 선택 가이드

우리가 만든 AI 모델이 99%의 정확도를 자랑한다고 가정해 봅시다. 하지만 “왜 이 고객의 대출 신청을 거절했습니까?” 라는 금융감독원의 질문에 “모델이 그렇게 판단했습니다” 외에 아무런 답도 할 수 없다면, 그 모델은 비즈니스에서 사용할 수 없는 ‘블랙박스’에 불과합니다.

특히 금융(신용평가), 의료(질병 진단), 보험(사기 탐지)과 같이 규제가 강하고 결정 하나하나가 개인의 삶에 큰 영향을 미치는 분야에서 AI의 투명성과 공정성은 선택이 아닌 필수입니다. 유럽의 GDPR이 ‘설명을 요구할 권리’를 명시한 것처럼, 이제 AI의 판단 근거를 제시하는 것은 기술적 호기심을 넘어 법적, 사업적 요구사항이 되었습니다.

이러한 ‘책임감 있는 AI(Responsible AI)’를 구현하는 핵심 기술이 바로 설명가능 AI(Explainable AI, XAI)입니다. 이 글에서는 가장 강력한 XAI 라이브러리인 SHAPLIME을 심층 비교하고, ‘대출 부도 예측’ 실전 예제 코드를 통해 당신의 AI 모델을 ‘설명 가능한 화이트박스’로 바꾸는 방법을 알려드립니다.


XAI의 두 거인, SHAP vs LIME 전격 비교 분석

SHAP과 LIME은 블랙박스 모델을 해석하는 가장 대표적인 방법이지만, 작동 원리와 장단점이 명확히 다릅니다. 당신의 상황에 맞는 최적의 도구를 선택하기 위해 둘의 차이점을 명확히 이해해야 합니다.

구분 항목 SHAP (SHapley Additive exPlanations) LIME (Local Interpretable Model-agnostic Explanations)
이론적 기반 게임 이론 (Game Theory) 지역적 대리 모델 (Local Surrogate Model)
설명의 범위 전역적(Global) & 지역적(Local) 해석 모두 가능 지역적(Local) 해석에 특화 (개별 데이터)
결과의 일관성 항상 동일한 결과 보장 (견고함) 샘플링 방식에 따라 결과가 변동될 수 있음
계산 속도 상대적으로 느림 (특히 커널 기반) 매우 빠름
핵심 아이디어 각 특성(Feature)이 예측에 기여한 정도를 ‘상금’처럼 공정하게 배분 특정 데이터 주변을 잘 설명하는 단순한 모델(예: 선형 회귀)을 만들어 흉내 냄
언제 사용할까? 모델 전체의 특성 중요도를 파악하고, 개별 예측의 이유를 일관성 있게 설명하고 싶을 때 특정 예측 결과에 대해 ‘빠르게’ 이유를 확인하고 싶을 때, 프로토타이핑 단계

간단히 비유하자면, LIME은 ‘특정 사건 현장의 목격자’와 같습니다. 그 사건(하나의 예측)에 대해서는 빠르고 명확하게 진술하지만, 전체 범죄(모델 전체)를 보지는 못합니다. 반면 SHAP은 사건 전체의 인과관계를 분석하는 ‘프로파일러’에 가깝습니다. 시간이 더 걸리지만, 개별 사건의 원인과 전체 패턴을 일관성 있게 설명해 줍니다.


실전 XAI: ‘대출 부도 예측’ 모델 해부하기 (Python 튜토리얼)

SHAP과 LIME 라이브러리의 작동 원리를 시각적으로 비교하는 인포그래픽. SHAP 섹션에는 중앙의 예측 점수(0.93)를 중심으로 여러 특성(Feature A, B, D, E)들이 게임 이론 기반의 기여도를 보여주며 전역적/지역적 설명을 강조한다. LIME 섹션은 특정 데이터 인스턴스(초록색 원) 주변에서 선형 모델을 학습하여 지역적 설명을 제공하는 과정을 보여준다.SHAP과 LIME 라이브러리의 작동 원리를 시각적으로 비교하는 인포그래픽. SHAP 섹션에는 중앙의 예측 점수(0.93)를 중심으로 여러 특성(Feature A, B, D, E)들이 게임 이론 기반의 기여도를 보여주며 전역적/지역적 설명을 강조한다. LIME 섹션은 특정 데이터 인스턴스(초록색 원) 주변에서 선형 모델을 학습하여 지역적 설명을 제공하는 과정을 보여준다.

이제 실제 금융 데이터를 바탕으로 XGBoost라는 강력한 블랙박스 모델을 훈련시킨 후, LIME과 SHAP을 이용해 그 속을 들여다보겠습니다.

1단계: 실험실 준비 (라이브러리 설치)

터미널 또는 Jupyter Notebook 셀에서 아래 명령어를 실행하여 필요한 도구들을 설치합니다.

Python
pip install shap lime xgboost matplotlib scikit-learn

2단계: ‘블랙박스’ 모델 훈련시키기

현실적인 데이터셋을 위해 Scikit-learn을 이용해 가상의 ‘대출 심사 데이터’와 ‘XGBoost 부도 예측 모델’을 만들겠습니다.

Python
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의 첫 번째 고객)의 예측 결과를 해석해 보겠습니다.

3단계: LIME으로 특정 고객 심사 결과 분석하기 (지역적 해석)

LIME을 이용해 ‘ID 0번 고객’이 왜 ‘부도 가능성이 낮다(0)’고 예측되었는지 분석해 보겠습니다.

Python
# 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번 고객’의 예측에 대한 설명입니다.

  • Prediction probabilities: 모델은 이 고객이 ‘정상’일 확률을 93%로 예측했습니다.
  • Feature Importance (막대그래프):
    • 초록색 막대 (Supporting): ‘정상’ 예측을 지지하는 근거입니다. 신용점수 > 0.35연소득 > 0.88이 부도 확률을 낮추는 결정적인 역할을 했음을 보여줍니다.
    • 주황색 막대 (Contradicting): ‘정상’ 예측에 반대되는 근거입니다. 총 대출 건수 <= -0.52는 부도 확률을 높이는 방향으로 작용했지만, 초록색 요인들의 영향력이 더 커서 최종적으로 ‘정상’으로 예측되었습니다.

LIME은 이처럼 특정 한 건에 대해 어떤 특성이 긍정/부정적 영향을 미쳤는지 빠르고 직관적으로 보여줍니다.

4단계: SHAP으로 모델의 전체 패턴과 개별 결과를 동시에 분석하기

이제 SHAP을 사용해 보겠습니다. SHAP은 개별 예측(Local)은 물론 모델 전체(Global)의 동작 방식까지 일관된 기준으로 설명해 줍니다.

Python
# 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번 고객’을 분석하지만, 더 정교한 정보를 제공합니다.

  • base value (0.0468): 모델이 아무 정보도 없을 때의 평균 예측값(기본 부도 확률)입니다.
  • f(x) ( -1.97): 이 고객의 최종 예측 점수입니다. (이 값이 낮을수록 부도 확률이 낮음)
  • 빨간색 화살표 (Positive): 예측 점수를 높이는(부도 위험 증가) 요인입니다. 총 대출 건수 = -0.739가 위험을 높이는 쪽으로 작용했습니다.
  • 파란색 화살표 (Negative): 예측 점수를 낮추는(부도 위험 감소) 요인입니다. 신용점수 = 1.096연소득 = 1.156이 위험도를 크게 낮췄습니다.
  • 결론: 기본 확률(base value)에서 출발하여, 여러 특성들이 밀고 당긴 결과(빨간색/파란색 화살표), 최종적으로 낮은 예측 점수(-1.97)에 도달했음을 보여줍니다.

2. 모델 전체 특성 중요도 분석 (Summary Plot) SHAP의 진정한 강력함은 모델 전체를 조망하는 것에서 나옵니다.

Python
# 모델 전체의 특성 중요도 시각화
shap.summary_plot(shap_values, X_test, plot_type="bar")
shap.summary_plot(shap_values, X_test)

Summary Plot 해석: 이 그래프는 우리 모델이 전반적으로 어떤 특성을 중요하게 생각하는지 알려줍니다.

  • 왼쪽 (Bar Plot): 가장 영향력이 큰 특성 순서를 보여줍니다. 신용점수가 부도 예측에 가장 중요한 변수이고, 그 다음이 연소득, 총 대출 건수 순입니다.
  • 오른쪽 (Dot Plot): 더 풍부한 정보를 담고 있습니다.
    • Y축: 특성의 중요도 (위로 갈수록 중요).
    • X축: 해당 특성이 예측에 미치는 영향 (SHAP value). 양수(+)는 부도 확률 증가, 음수(-)는 부도 확률 감소.
    • 색상: 특성 값의 높고 낮음 (빨간색은 높음, 파란색은 낮음).
    • 해석: 신용점수의 경우, 점들이 주로 왼쪽에 분포하며 파란색이 많고, 오른쪽에는 빨간색이 많습니다. 이는 신용점수가 높을수록(빨간색) 부도 확률을 낮추고(SHAP value 음수), 낮을수록(파란색) 부도 확률을 높인다(SHAP value 양수)는 상식적인 관계를 모델이 잘 학습했음을 명확히 보여줍니다.

결론: 코드를 넘어 ‘AI 해석 역량’을 키워라

오늘 우리는 LIME과 SHAP이라는 두 개의 강력한 렌즈로 블랙박스 AI의 내부를 들여다보는 방법을 배웠습니다. 중요한 것은 특정 라이브러리의 함수 몇 개를 외우는 것이 아닙니다. AI의 판단 근거를 논리적으로 추적하고, 시각화된 결과를 비즈니스 언어로 설명하며, 모델의 잠재적 편향성까지도 발견해내는 ‘AI 모델 해석 역량’을 키우는 것이 핵심입니다.

XAI는 더 이상 연구실의 기술이 아닙니다. 신뢰할 수 있고 공정한 AI 시스템을 구축하려는 모든 데이터 과학자와 엔지니어의 필수 생존 도구입니다.

지식 확장 로드맵: 다음 스텝은?

SHAP과 LIME은 훌륭한 시작점이지만, XAI의 세계는 더 넓고 깊습니다.

  • InterpretML: Microsoft에서 개발한 오픈소스 라이브러리로, EBM(Explainable Boosting Machine)과 같이 그 자체로 해석 가능한 모델(Glassbox)과 다양한 블랙박스 해석 기법을 통합 제공합니다.
  • Captum: PyTorch 기반 모델의 해석에 특화된 라이브러리로, 딥러닝 모델의 뉴런 단위 분석 등 더 깊이 있는 해석이 필요할 때 유용합니다.

오늘 배운 내용을 바탕으로 이 도구들을 탐색하며, 당신의 AI 모델에 대한 설명 책임을 완수하는 전문가로 성장하시길 바랍니다.


FAQ (자주 묻는 질문)

Q1: SHAP과 LIME 중 결국 무엇을 써야 하나요? A: 둘 다 사용하는 것을 추천합니다.

특정 예측에 대한 빠른 확인이 필요할 때는 LIME을, 모델 전체의 동작 방식과 일관성 있는 개별 설명이 필요하며 시간이 좀 더 걸려도 괜찮다면 SHAP을 사용하세요. 특히 규제 기관에 제출할 보고서 등에는 결과의 일관성이 보장되는 SHAP이 더 적합합니다.

Q2: 이 기술들을 이미지나 텍스트 데이터에도 적용할 수 있나요?

A: 네, 가능합니다. LIME과 SHAP 모두 이미지의 어떤 픽셀 영역이 예측에 영향을 미쳤는지(LIME Image Explainer), 또는 텍스트의 어떤 단어가 긍정/부정 판단의 근거가 되었는지(SHAP Text Explainer)를 시각적으로 보여주는 기능을 제공합니다.

Q3: XAI를 사용하면 모델의 성능이 떨어지나요?

A: XAI는 이미 훈련된 모델을 ‘해석’하는 기술이므로, 모델의 성능 자체에 영향을 주지 않습니다. 오히려 모델이 왜 잘못된 예측을 하는지 원인을 파악하여 성능을 개선하는 데 큰 도움을 줍니다.

Tags: AI 해석 역량 Python 튜토리얼 SHAP vs LIME 대출 부도 예측 라이브러리 설치 비교 분석

Recent Posts

  • 기술

구글 코랄(Coral) 입문서: 라즈베리파이로 나만의 ‘엣지 AI’ 만들기(ft. 젯슨 나노 비교, 구매 가이드)

당신의 라즈베리파이가 AI 두뇌를 갖게 된다면? "인터넷 없이도 스스로 보고 생각하는 AI 카메라를 만들 수…

6시간 ago
  • 기술

AI FDS 구축 사례: 카드사 금융 사기, 게임 어뷰징은 이렇게 잡는다

"이 패턴은 어제까지 없던 새로운 사기 수법인데?" 전통적인 규칙(Rule-based) 기반의 FDS 앞에서 보안 담당자는 매일같이…

6시간 ago
  • 기술

코딩 없이 AI 튜터 만들기: 나만의 AI 학습 플랫폼 프로토타입 개발 가이드 (노코드)

당신의 교육 아이디어, 언제까지 머릿속에만 두실 건가요? 코딩 없이 AI 튜터 만들기에 대해 알아보세요! "학생…

6시간 ago
  • 기술

AI 물류 최적화, 우리 회사도 가능할까? (아마존, CJ 성공사례 및 ROI 분석)

"재고는 쌓이고, 운송비는 치솟고…" 혹시 당신의 이야기인가요? AI 물류 최적화를 생각해 보셔야 할 때입니다. 매일…

6시간 ago
  • 기술

의료 AI 솔루션 도입 가이드: Lunit vs VUNO 등 정확도, 수가, PACS 연동 전격 비교

들어가며: SaMD, 왜 규제와 수가를 먼저 이해해야 하는가? 의료 AI 솔루션, 즉 소프트웨어 의료기기(SaMD, Software…

9시간 ago
  • 기술

파이썬 AI 주가 예측 모델 만들기 A to Z (ft. 텐서플로우, LSTM)

당신의 첫 '금융 AI 포트폴리오', 1시간 만에 완성시켜 드립니다. 파이썬 AI 주가 예측 모델 만들기…

9시간 ago