우리가 '무엇을 보는 것'이 아니라, '무엇을 무엇으로 본다는 것'이다.
우리의 인식은 일종의 해석이다.
-토마스쿤-
정수기 렌탈 비정상 계약 예측
비정상 계약으로 손실이 큼 → 고객정보와 과거 패턴 분석 후 예측 모델 만듦
수요량 예측
매장에서의 발주 정확도를 높이기 위해 → 6개 매장 200개 상품의 일별 수요량을 예측하는 알고리즘 개발
고객이 AI전문가에게 던지는 질문
- 모델이 왜 그렇게 예측을 했는지?
- 모델은 비즈니스 문제를 해결할 수 있는지?
인공지능이 예측한 결과에 대해서 사람들은 무엇을 어디까지 신뢰할까?
Interpretability(해석) vs. Explainability(설명)
Interpretability(해석)
Input에 대해 모델 왜 그런 Output을 예측했는가?
Whitebox model : 본질적으로 해석 가능
Explainability(설명)
Interpretability + 투명성에 대한 요구
White box model
: 간단한 매커니즘
Black box model
: 복잡한 매커니즘
설명이 잘되는 알고리즘은 대체로 성능이 낮음
→ Decision Tree, Linear Regression....
모델에 대한 설명
| 전체 데이터 | 모델 전체에서 어떤 feature가 중요할까? | Feature Importance |
| 특정 feature 값의 변화에 따라 예측값은 어떻게 달라질까? | Partial Dependence Plot | |
| 개별 데이터 | 이 데이터는 왜 그러한 결과로 예측되었을까? | Sharpley Addictive Explanation |
변수 중요도
: 알고리즘 별 내부 규칙에 의해, 예측에 대한 변수 별 영향도 측정 값
성능이 낮은 모델에서의 변수 중요도는 의미 없음
모델에서 Feature Importance를 제공하는 알고리즘
: Tree기반
- Decision Tree
- Random Forest
- XGB
(1) Feature Importance : Decision Tree
Mean Decrease Impurity(MDI)
- Information Gain : 지니 불순도가 감소하는 정도
- Tree 전체에 대해서, feature별로 Information Gain의 (가중) 평균을 계산
(2) Feature Importance : Random Forest
Mean Decrease GINI
- 개별 트리의 MDI로부터, feature 별 Importance 평균 계산
(3) Feature Importance : XGB
변수중요도를 계산하는 3가지 방법
weight
- 모델 전체에서 해당 feature가 split될 때 사용된 횟수의 합
- plot_importance 에서의 기본값
gain
- feature별 평균 information gain
- model.feature_importances_ 의 기본값
- total_gain : feature별 information gain의 총 합
cover
- feature가 split 할 때 샘플 수의 평균
- total_cover : 샘플수의 총 합
Permutation Feature Importance (PFI)
: 알고리즘과 상관 없이 변수 중요도를 파악할 수 있는 방법
→ Feature 하나의 데이터를 무작위로 섞을 때, model의 score가 얼마나 감소되는 지로 계산
공정, 정확성을 위해 특정 Feature j에 대해서, 여러 번(K) 시도(섞고, Score계산)해서 나온 Score의 평균 계산
단점 : 만약 다중 공선성이 있는 변수가 존재할 때, 특정 변수 하나가 섞이면 관련된 변수는 그대로 있으므로 Score가 별로 줄어들지 않을 수 있음
Partial Dependence Plots (PDP)
: 관심 feature의 값이 변할 때, 모델에 미치는 영향을 시각화
ex) 데이터셋이 3건, rm 값의 종류가 6.216, 8.259, 8.704 세가지라면, 데이터셋의 rm 값을 모두 6.216 로 바꾼 후 예측 값들을 뽑아 평균 계산.
모델의 정확도가 높다고 평가되었지만. 모델이 타겟값을 예측하는데 중요한 요인은 무엇이었을까?
타겟 예측값에 대한 근거를 좀 줘바...!
Shapley value
: 모든 가능한 조합에서, 하나의 feature에 대한 평균 기여도를 계산한 값
예측 값과 전체 평균과의 차이에 각 feature가 얼마나 기여했는지 계산한 값
알고 싶은 변수를 포함했을 때와 안했을 때의 예측값의 차이를 구한후, 가중치를 곱해 각 조합의 기여도를 합침
가중치 : 조합에 포함된 변수의 수를 감안한 값
모델을 생성한 후 생성된 모델로 Explainer를 만들고 특정 데이터셋에 대해 Shapley value 추출
→ x_train과 Shapley value의 크기가 동일 (당연한 것.. x_train으로 기여도를 계산한 것이니)
전체 평균을 중심으로 예측된 값에 어떠한 영향을 주었는지 변수 별 확인 가능
: 상승요인과 하락요인

Decision Tree
디폴트로 모델을 만들면
분류모델은 리프노드를 나눌 수 있을만큼 나눔, 복잡하게
회귀모델은 혼자 남을 때 까지
'GridSearchCV' object has no attribute 'feature_importances_'
model_gs안에 50개의 모델이 있어서..
model_gs.best_esimator_.feature_importance_
RandomForestRegressor
변수 중요도를 확인할때 평균을 보여줌
모델이 예측을 함 - lst, rm을 중요하게 봄 (예측값 기반!! 실제 값 기반이 아님)
실제 집값에 영향을 가장 많이 주는게 LST, RM이다 -- 좀 다른 말..
섞었을 때 변화가 없다 = 어차피 영향이 없던거다
변화가 크다 = 성능에 영향이 갈정도로 중요하다
PFI X끼리 강한 상관관계, 다중공선성이 존재한다면
score가별로 줄지 않음