본문 바로가기
DataScience/MachineLearning

[eXplainable Method] LIME

by mkk4726 2023. 7. 30.

 

그림1. LIME 기본 개념

1. LIME의 기본 컨셉

 

Local Interpretable Model-agnostic Explanation. 

모델과 상관없이 local Y를 해석가능한 모델을 말합니다.

 

복잡도가 높은 블랙박스 모델을 해석하기 위해서는 여러번 두드려보고 이를 통해 추론해야합니다.

LIME의 기본 컨셉은 "특정 Y값을 변형시키고 이에 맞게 새로운 모델을 학습해 이로부터 원래 모델을 추론하는 것" 입니다.

 

이를 좀 더 자세히 설명하자면 원래 모델을 A, 새로운 모델을 B, 궁금한 i번째 Y 값을 Y_i라고 할 때,

1. 모델 A를 학습시킨다.

2. Y_i를 변형시킨다.

3. 학습된 모델 A로 변형된 데이터셋들을 예측한다.

4. 모델 B를 변형된 데이터셋과 A로 예측한 Y값들에 대해 학습시킨다.

5. 학습된 모델 B를 통해 모델 A를 추론해본다 

 

 

이 컨셉을 바탕으로 LIME은 회귀, 분류, 이미지, 텍스트 까지 다양한 문제에 적용가능합니다.

그림2. 이미지, 텍스트 적용 예시
그림3. 분류문제 예시

그림2와 그림3과 같이 데이터를 변형시키고 이를 통해 Y값에 영향을 크게 주는 피처를 찾습니다.

그림4. 변형된 데이터셋 예시

변형된 데이터와 Y_i의 거리를 통해 가중치를 부여해, 모델 B가 Y_i와 비슷한 데이터를 더 잘 구분하도록 합니다.

그림 4를 보면 빨간색 굵은 십자가가 Y_i입니다.

Y_i와 가깝게 생성된 데이터들은 크게, 멀리 있는 데이터들은 작게 반영하도록 가중치를 부여해 모델 B를 학습시킵니다.


2. LIME python code

이제 python 코드를 통해 이를 살펴보겠습니다. 코드는 아래 첨부했고 결과만 정리하겠습니다.


2.1 Regression problem

보스턴 집값 문제를 푸는 문제입니다.

간단히 simple regression으로 학습했고 이를 lime을 이용해 local Y에 대해 해석해봤습니다.

from lime import lime_tabular

explainer = lime_tabular.LimeTabularExplainer(X_train, mode='regression', feature_names=boston.feature_names)

# 랜덤으로 local Y 하나 뽑기
idx = random.randint(1, len(X_test))

print("Prediction : ", lr.predict(X_test[idx].reshape(1,-1)))
print("Actual :     ", Y_test[idx])

# 모델 B가 학습한 Y값은 모델 A가 예측한 값
explanation = explainer.explain_instance(X_test[idx], lr.predict, num_features=len(boston.feature_names))
explanation.show_in_notebook()

랜덤으로 Y를 하나 뽑고 이에 대해 결과를 살펴봤습니다.

그림5. 결과 1

원래 값은 18.5이고 예측값은 19.3입니다.

LIME을 통해 모델이 왜 19.3으로 예측했는지에 대해 분석해볼 수 있습니다.

 

그림5의 오른쪽에 보이는 값들은 모델 B의 계수입니다.

이를 통해 피처가 Y에 어느정도 영향을 끼치는지 확인할 수 있습니다.

 

대표적으로 DIS가 5.17보다 커서 부정적으로로 예측했고,

TAX가 279.50보다 작고 LSTAT값이 7.16보다 크고 11.65보다 작아 긍적으로 에측했다고 분석해볼 수 있습니다.

기존 모델을 Linear Regression으로 단순한 모델을 사용해서 큰 차이는 없습니다.

하지만 Boosting 계열의 모델이나 DNN 계열의 복잡도가 아주 높은 모델의 경우,

이런 방식으로 모델의 예측 방향을 추론해볼 수 있다는 것은 꽤나 매력적인 것 같습니다.

 

 2.2 Classification problem

분류문제는 간단히 결과만 나열하겠습니다.

 

그림6. 결과2(정답) 결과3(오답)

랜덤으로 뽑은 2개의 Y에 대해 분석한 결과입니다.

공통적으로 area error가 bengin으로 예측하는데 영향을 끼침을 알 수 있습니다.

 

정답을 잘 맞춘 Y만을 골라 예측 패턴을 찾을 수 있고,

그림6의 오른쪽처럼 LIME 모델을 통해 왜 틀렸는지에 대해서도 분석해볼 수 있습니다.

 

 


3. 결과정리

 

LIME 모델을 정리하자면 복잡한 모델을 추론하기 위해, local Y를 고른 후 이를 이용해 새로운 데이터 셋을 만들고,

이를 간단한 모델로 학습시켜 원래 모델의 논리를 추론해보는 방법입니다.

 

말 그대로 "추론" 해보는 것이기에 , "설명해주는 모델은 과연 믿어도 되는 것인가?" 라는 의문이 남아있습니다.

모델을 두들겨보는 과정에서 모델을 더 잘 이해할 수 있겠지만, 무작정 믿기보다는 비판적으로 바라볼 필요가 있습니다.

 

 


LIME.ipynb
5.18MB


Reference

- 패스트캠퍼스, 초격차 패키지 : 50개 프로젝트로 완벽하게 끝내는 머신러닝

- https://coderzcolumn.com/tutorials/machine-learning/how-to-use-lime-to-understand-sklearn-models-predictions

 

-출처

- 그림1: https://www.google.com/url?sa=i&url=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DeUu9xwraeqo&psig=AOvVaw0PcERRRPZcCtmhsfXtVfip&ust=1690788685023000&source=images&cd=vfe&opi=89978449&ved=0CBEQjRxqFwoTCNCsjen0tYADFQAAAAAdAAAAABAE

 

 

댓글