🤖 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 개수, 텍스트는 단어/문장 단위 조절이 중요합니다.

🔗 관련 용어

📚 더 배우기