🤖 AI/ML

LIME

Local Interpretable Model-agnostic Explanations

모델 예측을 지역적으로 설명하는 기법. 블랙박스 모델 해석.

📖 상세 설명

LIME(Local Interpretable Model-agnostic Explanations)은 블랙박스 모델의 개별 예측을 해석하는 XAI(설명가능한 AI) 기법입니다. 2016년 Ribeiro 등이 발표했으며, 모델의 종류와 관계없이(Model-agnostic) 특정 예측이 "왜" 그렇게 나왔는지를 설명합니다.

핵심 아이디어: 복잡한 글로벌 모델도 특정 데이터 포인트 주변에서는 단순한 선형 모델로 근사할 수 있습니다. LIME은 설명하려는 샘플 주변에서 perturbation(변형)을 만들어 로컬 영역의 결정 경계를 학습합니다.

작동 과정: 1) 원본 샘플 주변에서 perturbation 생성, 2) 블랙박스 모델로 각 perturbation의 예측 획득, 3) 원본과의 거리로 가중치 부여, 4) 가중 선형 회귀로 feature 중요도 추출. 이 과정을 통해 "이 이미지가 고양이인 이유는 귀와 눈 때문"과 같은 직관적 설명이 가능합니다.

실무에서 LIME은 금융 심사, 의료 진단, 법률 AI 등 설명 의무가 있는 분야에서 필수입니다. EU AI Act에서도 고위험 AI의 설명가능성을 요구하며, LIME은 이를 충족하는 표준 도구로 자리잡았습니다.

💻 코드 예제

import lime
import lime.lime_tabular
import lime.lime_text
import numpy as np
from sklearn.ensemble import RandomForestClassifier

# 1. 테이블 데이터 설명 (대출 심사 예시)
X_train = np.array([...])  # 특성: 소득, 부채비율, 신용점수 등
model = RandomForestClassifier().fit(X_train, y_train)

explainer = lime.lime_tabular.LimeTabularExplainer(
    X_train,
    feature_names=['소득', '부채비율', '신용점수', '근무년수', '대출금액'],
    class_names=['승인', '거절'],
    mode='classification'
)

# 특정 고객의 거절 이유 설명
idx = 42  # 거절된 고객
exp = explainer.explain_instance(
    X_test[idx],
    model.predict_proba,
    num_features=5,
    num_samples=1000  # perturbation 수
)

# 결과: 거절에 기여한 요인
print(exp.as_list())
# [('부채비율 > 0.4', 0.35), ('신용점수 < 650', 0.28), ...]
exp.show_in_notebook()  # 시각화

# 2. 텍스트 데이터 설명 (스팸 분류)
from lime.lime_text import LimeTextExplainer

text_explainer = LimeTextExplainer(class_names=['정상', '스팸'])
text = "무료 당첨! 지금 클릭하세요 100만원 즉시 지급"

exp = text_explainer.explain_instance(
    text,
    spam_model.predict_proba,
    num_features=10
)
# 결과: '무료', '당첨', '클릭'이 스팸 판정에 기여
exp.as_pyplot_figure()

🗣️ 실무에서 이렇게 말하세요

💬 회의에서
"대출 거절 고객에게 왜 거절됐는지 설명해야 하는데, XGBoost 모델이라 직접 설명이 안 됩니다. LIME 붙여서 '부채비율 40% 초과'와 '신용점수 650 미만'이 주 요인이라고 리포트 자동 생성하겠습니다."
💬 면접에서
"LIME으로 이미지 분류 모델을 해석한 경험이 있습니다. Superpixel segmentation 후 각 영역을 masking하면서 예측 변화를 측정했어요. 고양이 이미지에서 귀 영역이 70% 기여도로 가장 중요했습니다."
💬 기술 토론에서
"LIME vs SHAP 비교하면, LIME은 로컬 선형 근사라 빠르지만 샘플링 변동성이 있어요. SHAP은 Shapley value 기반이라 이론적으로 더 견고하지만 계산 비용이 높습니다. 실시간 설명엔 LIME, 정밀 분석엔 SHAP 쓰고 있습니다."

⚠️ 흔한 실수 & 주의사항

❌
num_samples를 너무 적게 설정

샘플 수가 적으면 설명의 분산이 커서 같은 입력에도 다른 설명이 나옵니다. 최소 1000 이상 권장.

❌
LIME 결과를 글로벌 해석으로 오해

LIME은 특정 샘플의 로컬 설명이지, 모델 전체의 동작을 설명하지 않습니다. 글로벌 해석은 SHAP summary plot이나 PDP 사용하세요.

✅
올바른 방법

kernel_width 파라미터로 로컬 영역 크기 조절. 이미지는 superpixel 개수, 텍스트는 단어/문장 단위 조절이 중요합니다.

🔗 관련 용어

📚 더 배우기