June is Combung
[KT AIVLE SCHOOL 3기] AI모델 해석평가 본문
1. AI모델 해석평가
AI 모델 해석평가는 인공지능 모델이 어떻게 작동하는지 이해하고 분석하는 과정이다.
이를 통해 모델의 예측 결과가 어떻게 도출되었는지를 파악하고, 모델의 결함을 발견하고 개선할 수 있다.
AI 모델 해석평가는 다음과 같은 방법으로 수행된다.
1. 모델 구조 분석: 모델의 구조와 각 계층의 기능을 파악한다.
2. 입력 데이터 분석: 모델이 입력으로 받는 데이터의 특성을 분석하고, 이를 모델이 어떻게 처리하는지 이해한다.
3. 출력 결과 분석: 모델이 출력하는 결과를 분석하고, 이를 해석하여 예측 결과의 신뢰도를 확인한다.
4. 성능 평가: 모델의 성능을 평가하여, 예측 결과의 정확도를 파악하고, 오분류된 샘플을 분석하여 모델의 결함을 발견한다.
5. 해석 결과 시각화: 분석 결과를 시각화하여, 모델의 작동 원리를 이해하기 쉽도록 한다.
AI 모델 해석평가는 인공지능 모델이 예측 결과를 도출하는 방식을 이해하고, 모델의 결함을 개선하기 위해 필수적인 과정이다. 또한, 해석평가를 통해 모델의 예측 결과를 설명 가능하게 만들어 사용자가 더욱 신뢰할 수 있도록 할 수 있다.
2. 전체 데이터
(1) 어떤 Feature가 중요한지 확인
=> Feature Importance
Feature importance는 모델의 예측 결과에 영향을 미치는 변수의 중요도를 나타내는 지표이다. Feature importance를 계산하는 방법은 다양하지만, 대표적인 방법으로는 다음과 같은 방법이 있다.
1. Permutation Importance
Permutation Importance는 변수의 중요도를 계산하는 가장 간단한 방법 중 하나이다. 모델을 훈련시킨 후, 테스트 데이터의 각 변수를 무작위로 섞어서 성능을 평가한다. 이를 여러 번 반복한 후, 성능 변화의 평균값을 계산하여 변수의 중요도를 추정한다.
from sklearn.inspection import permutation_importance
import numpy as np
# 모델 훈련 후
result = permutation_importance(model, X_test, y_test, n_repeats=10)
# 변수 중요도 출력
print(result.importances_mean)
2. Feature Importance with Tree-based models
의사결정나무(Decision Tree)나 랜덤 포레스트(Random Forest)와 같은 트리 기반 모델은 변수의 중요도를 직접 계산할 수 있다. 트리 모델에서는 분기를 결정하는데 가장 중요한 변수를 먼저 사용하기 때문이다. 각 노드에서 변수의 중요도를 계산하여 변수의 중요도를 추정한다.
from sklearn.tree import DecisionTreeClassifier
import numpy as np
# 의사결정나무 모델 생성 후 훈련
model = DecisionTreeClassifier(random_state=0).fit(X_train, y_train)
# 변수 중요도 출력
print(model.feature_importances_)
위와 같은 방법으로 Feature Importance를 계산하여 모델의 변수 중요도를 파악할 수 있다.
(2) 특정 Feature 값의 변화에 따라 예측 값이 어떻게 달라지는지 확인
=> Partial Dependence Plot(PDP)
Partial Dependence Plot(PDP)은 머신러닝 모델에서 각 입력 변수의 영향력을 시각화하는 방법 중 하나이다. PDP는 특정 변수가 다른 변수들과 결합하여 어떤 결과를 가져오는지를 보여주는 그래프이다.
PDP는 변수 하나를 선택하여, 이 변수의 값을 변경하면서 모델 예측 결과를 시각화한다. 예를 들어, 주택 가격 예측 모델에서 방 개수 변수의 PDP를 그리면, 방 개수를 변경하면서 모델의 예측 결과가 어떻게 변하는지를 확인할 수 있다.
PDP는 다음과 같은 방법으로 시각화할 수 있다.
1. 모델 훈련
먼저, PDP를 그리기 위해 머신러닝 모델을 훈련시킨다.
2. 변수 선택
PDP를 그리기 위해 변수를 선택한다. 하나의 변수만 선택할 수도 있고, 여러 개의 변수를 조합하여 PDP를 그릴 수도 있다.
3. 변수 범위 설정
선택한 변수의 범위를 지정한다. 예를 들어, 방 개수 변수의 범위를 1에서 10까지로 설정할 수 있다.
4. 예측값 계산
선택한 변수의 값을 변경하면서 모델의 예측값을 계산한다. 이를 위해, 선택한 변수의 값을 일정 구간마다 변경하면서 예측값을 계산한다.
5. 그래프 그리기
변수의 값과 모델의 예측값을 가지고 PDP 그래프를 그린다. 이를 통해 변수가 모델 예측 결과에 미치는 영향력을 시각적으로 파악할 수 있다.
PDP는 머신러닝 모델의 예측 결과를 해석하고 모델의 결함을 파악하는 데 유용하게 사용된다.
PDP를 통해 모델이 입력 변수에 대해 어떻게 반응하는지를 시각적으로 확인하여, 모델의 예측 결과에 대한 설명 가능성을 높일 수 있다.
Partial Dependence Plot(PDP)를 그리는 예시 코드는 다음과 같다.
from sklearn.datasets import load_boston
from sklearn.ensemble import RandomForestRegressor
from sklearn.inspection import plot_partial_dependence
import matplotlib.pyplot as plt
# 데이터셋 로드
boston = load_boston()
# 랜덤 포레스트 모델 훈련
model = RandomForestRegressor(n_estimators=100, random_state=42)
model.fit(boston.data, boston.target)
# PDP 그리기
features = [5, 12]
plot_partial_dependence(model, X=boston.data, features=features, feature_names=boston.feature_names)
plt.show()
위 코드는 보스턴 집값 데이터셋을 로드하고, 랜덤 포레스트 모델을 훈련한 후, 방 개수(`RM`)와 교통 접근성(`DIS`) 변수의 PDP를 그리는 코드이다.
`plot_partial_dependence` 함수는 머신러닝 모델과 데이터셋, 변수를 인자로 받아서 PDP를 그린다. `features` 인자에는 그리고자 하는 변수의 인덱스를 리스트 형태로 전달한다. `feature_names` 인자에는 데이터셋의 변수명을 리스트 형태로 전달한다.
위 코드에서는 `features=[5, 12]`로 방 개수(`RM`)와 교통 접근성(`DIS`) 변수의 PDP를 그린다. 실행 결과, 각 변수가 모델 예측 결과에 미치는 영향력을 시각적으로 확인할 수 있는 그래프가 그려진다.
3. 개별 데이터
분석단위가 왜 그러한 결과로 예측 되었는지 확인
=> Shapley Additive Explanation(SHAP)
SHAP(Shapley Additive exPlanations)는 인공지능 모델의 예측 결과를 해석하기 위한 방법 중 하나이다. SHAP은 변수의 기여도(Importance)를 계산하여, 모델의 예측 결과에 어떤 변수가 어떻게 기여했는지를 분석할 수 있다.
SHAP은 다음과 같은 방법으로 계산된다.
1. 기준값 설정
SHAP은 모델의 예측 결과를 기준값으로 설정한다. 이를 위해, 예측 결과의 평균값, 중간값 등을 사용한다.
2. 변수 조합 계산
각 변수 조합이 예측 결과에 미치는 영향력을 계산한다. 이를 위해, 변수 조합을 구성하는 모든 가능한 조합에 대해 모델의 예측 결과를 계산한다.
3. Shapley value 계산
Shapley value는 변수가 예측 결과에 기여하는 정도를 나타내는 지표이다. Shapley value는 변수의 기여도를 계산하는 공정한 방법으로 알려져 있다. SHAP은 Shapley value를 이용하여, 각 변수의 기여도를 계산한다.
4. 결과 시각화
SHAP은 각 변수의 기여도를 시각화하여 분석 결과를 확인할 수 있다. SHAP 값이 높은 변수는 모델의 예측 결과에 큰 영향을 미친 변수이며, SHAP 값이 낮은 변수는 예측 결과에 영향을 미치지 않는 변수이다.
SHAP은 파이썬 라이브러리로 제공되며, 다양한 머신러닝 모델에서 사용할 수 있다. SHAP을 사용하면 모델의 예측 결과를 해석하고, 모델의 결함을 발견하는 데 도움이 된다.
SHAP을 사용하여 머신러닝 모델의 변수 중요도를 계산하는 예시 코드는 다음과 같다.
import shap
from sklearn.datasets import load_boston
from sklearn.ensemble import RandomForestRegressor
# 보스턴 집값 데이터셋 로드
boston = load_boston()
# 랜덤 포레스트 모델 생성 후 훈련
model = RandomForestRegressor(n_estimators=100, random_state=42)
model.fit(boston.data, boston.target)
# SHAP 객체 생성
explainer = shap.TreeExplainer(model)
# SHAP 값 계산
shap_values = explainer.shap_values(boston.data)
# 변수 중요도 출력
shap.summary_plot(shap_values, boston.data)
위 코드는 랜덤 포레스트 모델을 사용하여 보스턴 집값 데이터셋의 변수 중요도를 계산하는 코드이다. `shap.TreeExplainer()` 함수를 사용하여 SHAP 객체를 생성한 후, `shap_values` 변수에 SHAP 값을 계산한다. 마지막으로 `shap.summary_plot()` 함수를 사용하여 SHAP 값의 분포를 시각화하고, 변수의 중요도를 확인할 수 있다.
SHAP은 다양한 머신러닝 모델에서 사용할 수 있으며, SHAP 값을 계산하기 위한 `shap.explainer` 객체는 모델의 종류에 따라 다르게 생성된다. 따라서, SHAP 값을 계산하기 전에 모델에 적합한 `shap.explainer` 객체를 생성해야 한다.
'KT AIVLE SCHOOL 기자단 > 강의' 카테고리의 다른 글
[KT AIVLE SCHOOL 3기] 시각지능 딥러닝 (0) | 2023.04.25 |
---|---|
[KT AIVLE SCHOOL 3기] 이상탐지 (0) | 2023.04.25 |
[KT AIVLE SCHOOL 3기] 딥러닝(2) (0) | 2023.04.24 |
[KT AIVLE SCHOOL 3기] 딥러닝(1) (0) | 2023.04.24 |
[KT AIVLE SCHOOL 3기] 머신러닝 (0) | 2023.04.23 |
Comments