[1]. LIME란?
예측 하나를 설명하기 위해, 주변만 단순한 모델로 흉내 내는 기법이다.
[2]. 핵심 아이디어
복잡한 모델 전체를 이해하려 하지 말고,
설명하고 싶은 예측 1건 주변에서만 단순한 선형 모델로 근사해서 설명하자
{1}. "주변"?
입력 데이터를 살짝 변형한 유사한 데이터들을 의미한다.
예를 들어 원본 데이터가 종양 크기 = 2.1cm, 나이=40 이면,
- 종양크기 = 2.3cm, 나이 = 45 ⇒ 주변
- 종양크기 = 1.7cm, 나이 = 43 ⇒ 주변
- 종양크기 = 1.0cm, 나이 = 25 ⇒ 주변 아님
즉, 거리가 가까울수록 가중치를 높게, 멀수록 낮게 줘서 선형 모델을 학습시키는 것이다.
[3]. 작동 원리
{1}. 설명할 데이터 1건 선택
원본 : 종양 크기 = 2.1cm, MRI 신호강도 = 0.7, 나이 = 45세 ⇒ 예측값 = 0.82
{2}. 주변 랜덤 샘플 생성
원본 주변을 살짝 변형한 데이터 N개 생성
N은 사용자가 지정하는 하이퍼파라미터이다.
- N이 크면 더 안정적이지만, 느리다.
- N이 작으면 불안정하지만 빠르다.
그래서 일반적으로 500~1000 정도를 기본값으로 쓴다.
- 샘플1 : 종양크기=2.0, MRI 신호강도=0.6, 나이=46세 ⇒ 예측값 = 0.79
- 샘플2 : 종양크기=2.3, MRI 신호강도=0.8, 나이=44세 ⇒ 예측값 = 0.85
- 샘플3: 종양크기=1.9, MRI 신호강도=0.7, 나이=47세 ⇒ 예측값 = 0.76
{3}. 거리 기반 가중치 부여
원본과 가까울수록 가중치 높음, 멀수록 낮음
- 샘플1 (가까움) ⇒ 가중치 0.9
- 샘플2 (보통) ⇒ 가중치 0.6
- 샘플3 (멂) ⇒ 가중치 0.2
{4}. 가중 선형 회귀 학습
샘플들과 가중치로 단순 선형 모델 학습
예측값 =0.5 + 0.15 x 종양크기 + 0.10 x MRI 신호강도 - 0.02 x 나이
측량 지점들을 기반으로 "이 근처 지형은 대략 이런 경사"라고 직성으로 근사하는 것이다.
{5}. 선형 모델 계수 = 기여도
- 종양크기 계수 = +0.15 ⇒ 가장 중요
- MRI 신호강도 계수 = +0.10 ⇒ 두 번째로 중요
- 나이 계수 = -0.02 ⇒ 악영향
원본 주변에 샘플을 뿌리고 가까울수록 가중치를 높게 측정하고 선형 회귀 학습을 진행한다.
학습 진행 후, 계수가 곧 기여도를 의미한다.
[4]. LIME 수식


저 수식을 항 별로 정리하면 아래와 같다.

비유하자면
복잡한 산길을 직선으로 근사할 때,
"실제 지형과 최대한 비슷하면서도(L), 최대한 단순한 직선 (Ω)을 찾는 것이다.
블랙박스 AI 모델의 예측 이유를 설명하는 XAI 대표 기술은
LIME과 SHAP이 있다.
[5]. LIME vs SHAP 비교
{1}. 핵심 철학 차이
| 구분 | LIME | SHAP |
| 기반 | 최적화(선형 근사) | 게임이론(공정한 기여도 분배 |
| 질문 | "이 주변을 단순하게 설명하면?" | "각 피처가 얼마나 기여했나? |
비유하자면
LIME : 복잡한 산길을 "이 근처만 평평하다고 가정"하고 설명
SHAP : 산길 전체를 분석해서 "각 구간이 정확히 얼마나 험했나?"를 계산
{2}. 설명 범위
| 구분 | LIME | SHAP |
| 범위 | Local | Local + Global 둘 다 |
| Global 설명 | 불가능 | Summary Plot으로 가능 |
비유하자면
LIME : 골목길 하나만 설명 가능
SHAP : 골목길 하나도 되고, 도시 전체 지도도 가능
{3}. 결과 안정성
| 구분 | LIME | SHAP |
| 같은 데이터 반복 실행 | 겨로가가 달라질 수 있음 | 항상 동일한 값 |
| 이유 | 샘플링 랜덤성 | 수학저긍로 유일한 값 보장 |
비유하자면
LIME : 여론조사를 매번 다른 사람에게 물어봐서 겨로가가 달라짐
SHAP : 수학 공식으로 계산하니까 항상 같은 답이 나옴
{4}. 계산 속도
| 구분 | LIME | SHAP |
| 기본 속도 | 빠름 | 느림(Tree SHAP은 빠름) |
| 이유 | 선형 회귀만 돌리면 됨 | 모든 피처 조합 계산 |
비유하자면
LIME : 근처 100m만 측량하면 되니까 빠름
SHAP : 도시 전체를 측량하니까 느림
{5}. 모델 적용 범위
| 구분 | LIME | SHAP |
| 적용 가능 모델 | 모든 블랙박스 | 모든 블랙박스 |
| 최적화 버전 | 없음 | Tree SHAP, Deep SHAP |
둘 다 블랙박스에 적용 가능하지만,
SHAP은 모델 구조에 맞는 최적화 버전이 따로 있어서 더 빠르고 정확하게 쓸 수 있다.
{6}. 한계
| 구분 | LIME | SHAP |
| 주요 한계 | 샘플링마다 결과 달라짐 | 피처 간 상관관계 문제 |
| *커널 너비 의존 | 있음 | 없음 |
| 계산 비용 | 낮음 | 높음 |
? 커널 너비 의존
범위를 어떻게 잡느냐에 따라 설명이 달라지는 LIME의 불안정성이다.
"주변"의 범위를 얼마나 넓게 볼 것인가를 결정하는 값으로
주변을 측량할 때
- 커널 너비 작음 = 반경 50m만 봄
- 커널 너비 큼 = 반경 500m까지 봄
같은 데이터인데 커널 너비 설정에 따라 기여도가 달라진다.
SHAP은 이 문제가 없다.
커널 너비 같은 설정값 없이 수학적으로 모든 조합을 계산하기 때문에
사용자 설정에 의존하지 않는다.
{7}. 언제 뭘 써야하나?
(1). LIME 선택
- 빠른 확인 필요할 때
- 모델 구조를 전혀 모를 때
- Local 설명 1건만 필요할 때
(2). SHAP 선택 상황
- 결과 안정성이 중요할 때
- Global + Local 둘 다 필요할 때
- 트리 기반 모델 쓸 때 (Tree SHAP)
LIME은 빠르고 단순하지만 불안정하다.
SHAP은 느리지만 수학적으로 정확하고 다양학 활용이 가능하다.
연구 목적이라면 SHAP, 빠른 프로토타입이라면 LIME을 선택하는 게 좋다.
[6]. 실습
{1}. 코드
# ── 1. 샘플 데이터 생성 ──────────────────────────────
np.random.seed(42)
n = 200
data = pd.DataFrame({
'종양크기': np.random.uniform(0.5, 5.0, n),
'위치': np.random.uniform(0.0, 1.0, n),
'나이': np.random.uniform(20, 80, n),
'혈압': np.random.uniform(60, 140, n),
'MRI강도': np.random.uniform(0.1, 1.0, n),
})
prob = 1 / (1 + np.exp(-(
1.5 * data['종양크기'] +
0.8 * data['MRI강도'] * 5 +
0.3 * (data['나이'] - 50) / 10 -
3.0
)))
y = (prob > 0.5).astype(int)
# ── 2. 모델 학습 ─────────────────────────────────────
model = RandomForestClassifier(n_estimators=100, random_state=42)
model.fit(data, y)
# 3. LIME Explainer 생성
explainer = lime.lime_tabular.LimeTabularExplainer(
training_data = data.values,
feature_names = data.columns.tolist(),
class_names = ['양성', '악성'],
mode = 'classification'
)
# 4. 설명 생성
exp = explainer.explain_instance(
data_row = data.iloc[0].values,
predict_fn = model.predict_proba,
num_samples = 1000 # 샘플 N 지정
)
{2}. 코드 흐름
1. 샘플 데이터 생성
- 종양크기, 위치, 나이, 혈압, MRI신호강도 200개 데이터 생성
- prob 수식으로 악성 확률 계산(0.5 넘으면 악성(1), 아니면 양성(0))
2. 모델 학습
- RandomForest가 위 데이터로 "악성 vs 양성" 분류 학습
3. LIME Explainer 생성
- "나는 이런 데이터를 다루는 분류 모델을 설명할 거야"를 선언
- training_data : 전체 데이터 분포 파악용
- feature_names : 피처 이름
- mode='classification' : 분류 문제임을 명시
4. 설명 생성
- data.iloc[0] : 첫 번째 환자 1건만 설명
- 환자 주변에 1000개 가상 샘플 생성
- 각 샘플을 모델에 넣어서 예측값 수집
- 그 결과로 선형 모델 근사하여 "이 예측에 어떤 피처가 영향을 줬나?"를 계산
{3}. 결과

- 초록 막대 : 악성 확률
- 빨간 막대 : 악성 아닐 확률
종양크기와 MRI 신호강도가 악성 확률을 올리고, 젊은 나이(35세 이하)가 유일하게 내리고 있다.
[7]. 한계
{1}. 결과 불안정성
같은 데이터로 여러 번 실행하면 결과가 달라진다.
예를 들어 여론 조사를 매번 다른 사람에게 물어보니까 결과가 조금씩 달라지는 것이다.
{2}. 커널 너비 의존성
"주변"을 얼마나 넓게 볼지 설정값에 따라 기여도가 달라진다.
예를 들어 반경 50cm로 측량하나, 500m로 측량하냐에 따라 지형 설명이 달라지는 것이다.
{3}. 선형 근사의 한계
복잡한 비선형 모델을 선형으로 근사하기 때문에 실제와 다를 수 있다.
예를 들어 구불구불한 산길을 억지로 직선으로 그리면 실제 지형과 오차가 생기는 것이다.
{4}. Global 설명 불가
1건씩만 설명 가능하다. 전체 데이터 패턴은 볼 수 없다.
{5}. 한계 정리
| 구분 | LIME |
| 주요 한계 | 불안정, 커널 너비 의존 |
| Global 설명 | 불가능 |
| 계산 안정성 | 낮음 |
'AI > AI' 카테고리의 다른 글
| Attribution (0) | 2026.05.03 |
|---|---|
| XAI 기법 - SHAP (0) | 2026.05.02 |
| Attention Mechanism (0) | 2026.05.02 |
| Saliency Map (0) | 2026.04.30 |
| Activation Function (활성화 함수) (0) | 2026.04.29 |