얼레벌레

[7주차] AI 모델 해석 및 평가 본문

취업/KT AIVLE SCHOOL

[7주차] AI 모델 해석 및 평가

__Lucie__ 2022. 9. 12. 18:08
1일차 모델 해석
2일차 모델 평가

 

AI 모델 해석과 평가가 필요한 이유

AI 모델을 하는 이유는 비즈니스 문제를 해결하기 위해서였다.

그럴려면 누군가가 모델에 대해서 왜 그런지, 비즈니스 문제를 해결할 수 있는지 의문을 제기했을 때 대답할 수 있어야 한다.

  1. 인식 전환 : 모델이 왜 그렇게 예측했는가?
  2. 모델이 비즈니스 문제를 해결할 수 있는가?

이 문제들에 대한 대답을 찾기 위해 AI 모델 해석과 평가가 중요하다.

 

Interpretability vs Explainability

Interpretatbility : 해석, input에 대해 모델이 왜 그런 output을 예측했는가?
(whitebox model은 본질적으로 해석가능)

Explainability : 설명, 추가로 투명성에 대한 요구, 모델이 어떻게 학습 되는지 단계별로 설명이 가능해야 함(model transparency)

+ 설명이 잘 되는 알고리즘은 대체로 성능이 낮다.

 

모델에 대한 설명

  1. Feature Importance (변수 중요도) : 모델 전체에서 어떤 feature가 중요?
  2. Partial Dependence Plot (PDP) : 특정 feature 값의 변화에 따라 예측값은 어떻게 달라질까?
  3. Shapley Additive Explanation(SHAP) : 이 데이터(분석단위)는 왜 그러한 결과로 예측되었을까?

이 모든 것은 모델 최적화가 전제조건이다. (모델 해석과 설명은 튜닝이 먼저)

 

변수 중요도

알고리즘 별 내부 규칙에 의해, 예측에 대한 변수 별 영향도 측정 값.

성능이 낮은 모델에서의 변수 중요도는 의미 없음.

모델에서 Feature Importance를 제공하는 알고리즘 : Tree 기반 알고리즘들 (DT, RF, XGB 등)

+ 변수 중요도를 제공안하는 모델에서도 어떻게든 뽑아내야 함.

  • Decision Tree 에서의 Feature Importance
    • Mean Decrease Impurity (MDI)
      전체 Tree에 대해서, 각 변수 별로 Information Gain의 가중평균을 계산한다.
  • Random Forest 에서의 Feature Importance
    • Mean Decrease GINI 
      개별 트리의 MDI로부터, 각 변수 별 importance의 평균을 계산
      개별 트리의 변수중요도로부터 평균을 구해 랜덤 포레스트의 변수중요도를 구함
  • XGB에서의 Feature Importance
    구하는 데는 3가지 방법이 있다.
    1. weight : 모델 전체에서 해당 feature가 split될 때 사용된 횟수의 합
      plot_importance 에서의 기본 값
    2. gain : 각 feature 별 평균 information gain
      model.feature_importances_ 의 기본 값
      total_gain은 각 feature 별 information gain의 총 합이다.
    3. cover : feature가 split할 때 샘플 수의 평균 (얼마나 많은 데이터를 분할하는지)
      total_cover은 샘플 수의 총 합
  • Permutation Feature Importance : 순열을 기반으로 한 feature importance
    feature 하나의 데이터를 무작위로 섞을 때, model의 score가 얼마나 감소되는지로 계산한다. 
    (섞지 않을 때와 섞었을 때의 성능을 비교한다.)
    => feature 하나의 순서가 바뀌면 score가 바뀌는데, 많이 바뀔수록 중요도가 높은 변수이다. (영향이 높으니까)
    • 중요도 i(j) = s - 1/K * (s(k, j)의 합)
      s는 원본 score , K는 섞는 횟수, s(k, j)는 j번째 변수를 k번째 섞을 때의 score
    • 단점: 다중공선성이 있는 변수가 있을 때, 특정 변수 하나가 섞이면 관련된 변수는 그대로 있음 => score가 별로 줄지 않음
    • 코드
      from sklearn.inspection import permutation_importance
      pfi1 = permutation_importance(model1, x_val_s, y_val, n_repeats=10, random_state=2022)
      model1 : 알고리즘 상관 없음
      n_repeats : 반복횟수 (10번 반복)
    • 결과
      importances : 각 변수별 반복횟수만큼 계산된 score
      importances_mean : 변수 별 score의 평균
      importances_sdt : 변수 별 표준 편차
    • 시각화 : kde plot, bat plot

kde plot
bar plot

 

PDP (Partial Dependence Plots)

  • 관심 feature의 값이 변할 때, 모델에 미치는 영향을 시각화
    1. feature 값의 종류가 6.2, 8.4, 8.9 3가지라면 
    2. 데이터 셋의 해당 feature 값을 모두 6.2로 바꾼 후 예측값들을 뽑아 평균을 계산한다.
    3. 8.4와 8.9에 대해서도 같은 작업을 하고, 그래프를 그린다.
  • 코드
    from sklearn.inspection import plot_partial_dependence
    plot_partial_dependence(model, features=['rm'], X=x_train, kind='both')
    kind='both'는 개별 instance와 average값을 함께 그리는 옵션
  • 결과 그래프에서 경향을 파악할 수 있다. (x축은 해당 feature, y축은 target값)

PDP 그래프

  • 두 feature와 예측 결과와의 관계

두 변수를 리스트로 줬을 때
두 변수를 튜플로 줬을 때

 

 

SHAP (SHapley Additive exPlanations)

  • 가중평균을 가지고 왜 그렇게 예측했는지 설명하는 방법
    ex) 데이터 한 건에 대해서 집값을 예측했더니 30만 유로, 모든 아파트의 평균 예측값은 31만 유로라고 했을 때
    -1만 유로 차이에 각 feature들이 어떤 기여를 했는지가 궁금.
  • Shapley value : 모든 가능한 조합에서, 하나의 feature에 대한 평균 기여도를 계산한 값.
    1. 각 조합을 구함 (target 변수는 고정시켜놓고, 나머지 변수들로 조합을 구성)
    2. 각각의 조합에 대해서 모델1을 만들어 예측 (.predict에 조합을 넣어 모델을 만듦)
    3. 조합에서 특정 feature을 뺀 예측값으로 모델2를 만들어 예측
    4. 모델1의 예측값과 모델2의 예측값의 차이가 그 feature의 기여도
    5. 각 feature 별로 구한 기여도를 바탕으로 가중평균 구하기 => 결과가 shapley value
      (가중평균은 가중치*값의 합으로 구함)
  • 코드 
    # 모델 생성
    model1 = RandomForestRegressor()
    model1.fit(x_train, y_train)

    # 생성된 모델로 Explainer 만들고, 특정 데이터 셋에 대해 shapley value 추출
    explainer1 = shap.TreeExplainer(model1)
    shap_values1 = explainer1.shap_values(x_train)

    x_train.shape, shap_values1.shape #같은 결과
  • 시각화
    • shap.force_plot
      전체 평균을 중심으로 예측된 값에 어떠한 영향을 주었는지 변수 별로 확인 (상승요인:빨강, 하락요인:파랑)
      similarity 선택하면 shap value에 대해 클러스터링하고 나서 정렬
    • shap.summary_plot
      feature 별 전체 shapley value 시각화
    • shap.dependence_plot
      특정 feature과 shap value의 관계 (scatter)
    • 외에도 많은 plot 함수가 있다.

 

타겟 마케팅

ML Metric 의 의미

Regression : 수요량 예측 모델을 만들었는데, RMSE가 줄었다. 개선된걸까?

Classification : 기계고장 예측 모델을 만들었는데, f1score가 올랐다. 개선된걸까?

=> 모델 성능은 좋아졌지만, 비즈니스 관점에서도?

 

Q. 어떤 문제를 해결하기 위해 모델을 만들었는가? => FI, PFI, PDP, SHAP

Q. 실제 목적에 맞게 모델의 결과를 평가하고 있는가?

Q. 모델의 예측 겨로가에 대한 현장의 비즈니스 프로세스는 어떻게 정의되어 있는가?

 

타겟 마케팅

매스 마케팅 : 불특정 다수 고객 대상

타겟 마케팅 : 특정 고객 대상

 

프로모션에 응할 확률을 P(x), 
그 때의 비즈니스 가치 V1,

응하지 않았을 때의 비즈니스 가치를 V0이라고 정의하면

기대가치 = P(x) * V1 + (1-P(x)) * V0

=> 기대가치가 0보다 커야 이익

 

  1. 모델 예측 결과를 비율로 변경
      Positive Negative
    프로모션에 응한 사람 40 => 0.04 10 => 0.01
    응하지 않은 사람 220 => 0.22 730 => 0.73
  2. 비즈니스 가치 matrix 계산 (상품 판매가 20000원, 매입원가 10000원, 프로모션 비용 상품 개당 200원이라고 가정)
      Positive Negative
    프로모션에 응한 사람 9800 (20000-10000-200) 0 (기회비용 생각하지 않음)
    응하지 않은 사람 -200 0'
  3. 모델 기대가치 계산 : 위의 매트릭스 두개를 곱해서 구함
      Positive Negative
    프로모션에 응한 사람 392 0
    응하지 않은 사람 -44 0
    => 예측 기반 프로모션을 통한 1인당 예상 수익액 : 348원
    => 이 때부터 목표는 348원을 높이는 것이 됨. (348원을 가장 높이는 모델 만들기가 목표)

모델을 통해 예측 결과를 뽑게 되면, 그 결과를 활용해 이후 업무 절차 전개를 정의해야 한다.

=> 그걸로 비즈니스 평가에 대한 방안 도출

'취업 > KT AIVLE SCHOOL' 카테고리의 다른 글

[8주차] 딥러닝  (1) 2022.09.22
[7주차] 에이블데이  (1) 2022.09.12
[6주차] 미니프로젝트 2차  (0) 2022.09.12
[5주차] 시계열 분석  (1) 2022.09.12
[5주차] 머신러닝 모델링 - 성능  (0) 2022.09.12