1편 : https://taksw222.tistory.com/248
도입
2편의 목적은, 앞에서 만든 모델을 해석해 보는 것입니다. 물론 LightGBM을 Tree로 그릴 수 있겠지만, 조금 더 좋은 설명 명법은 없을까요? 우리는 인공지능에게 설명을 요구해보겠습니다.
* 수정사항 : 1편과 다르게 2편에서는 경력 년수를 연수 자체로 변형하여 넣었습니다.
XAI를 도입하자.
인공지능에게 설명을 요구하겠습니다. XAI는 간단하게, 모델이 왜 그런 결과를 내었는지 그 근거를 답해주는 역할을 말합니다. 간단하게 Ensemble Tree들의 Feature Importance도 하나의 예시가 될 수 있습니다. 하지만 더 중요한 질문을 하나 해보죠
그 변수가 중요한 판단의 기준인 건 알겠어요.
근데 그 값이 커지면 목표로 하는 변수에는 어떤 영향이 갑니까?
이 질문에 답하기 위해 XAI를 도입해 보겠습니다. 딥러닝 방법론은 제외하고, 간단한 것들만 실제 활용으로 살펴보겠습니다. 수식적인 이해, 상세 설명은 추후 공부가 더 되면 가져오겠습니다.
PDP(Partial Dependence Plot)
편의존성 플롯이라는 것을 가장 먼저 사용해보겠습니다. 관심이 있는 특정 입력 변수를 제외한 다른 입력 변수들의 값은 고정시킨 상태에서 관심있는 입력 변수의 값을 변화시킵니다. 예측값이 계산되면, 그 값들의 평균을 내봅니다. 즉 하나의 변수만 변화했을 때 예측의 변화를 살펴보겠습니다.
(1)에서 만들었던 lightgbm을 기준으로 모델 해석을 진행해보겠습니다.
plot_partial_dependence(estimator = clf_lgb, X=X_train, features = ['city_development_index'],
grid_resolution=round(X.shape[0]*0.1), percentiles=(0, 1))
모델과, 모델 학습에 사용된 데이터, 그리고 원하는 feature 를 지정하여 그래프를 그릴 수 있습니다.
도시의 발전도가 높아질수록, 이직 가능성의 값은 낮아집니다. 반면에 도시 발전도가 특정값 이하일 경우 이직 가능성이 굉장이 높아집니다. 즉 회사 입장에서는 도심에 위치하지 않은 회사의 경우 인프라 관련 복지들에 대해 고려해야 이직 가능성을 낮출 수 있을 것이다 라고 생각해 볼수도 있겠습니다.
훈련 시간에 대해서도 한번 살펴보면
훈련 시간에 대해서는 확실한 경향성을 찾기 어려워보입니다. 사실 사람마다 훈련시간이 매우 다르기에 명확한 경향성을 찾기는 어렵겠습니다. 그런지 진폭이 큰 경향을 보입니다.
최근 직장 근무 년수에 대해서도 근무를 오래할 수록, 이직 가능성이 높다고 볼 수 있겠습니다. (어찌보면 당연한 결과이긴 한데, 데이터로 검증을 했네요)
Shap Value
앞에서 본 문제의 경우는 1개의 변수에 대해서만 고려한 것입니다. 모든 변수에 대해서는 고려할 수 없을까요?
이론적인 부분은 나중에 살펴보기로 하고 그냥 본론부터 말하면 Shap Value는 하나의 특성에 대한 중요도를 알기 위해 여러 특성들의 조합을 구성하고, 해당 특성의 유무에 따른 평균적인 변화로 기여도를 확인하는 값입니다.
무슨 소리냐고요? 그냥 그래프를 보면서 알아봅시다.
Shap Value는 train 개별 데이터별로 왜 그런 판단을 했는지 시각화가 가능합니다.
import shap
explainer = shap.TreeExplainer(clf_lgb, data = X_train, model_output='probability')
shap_values = explainer(X_train)
shap.plots.waterfall(shap_values[0])
* probability를 사용한 이유는, 이진분류문제이므로 이직으로 판단할 확률 자체를 예측하고 이를 설명하는 것이 좋겠다는 판단하에, 이렇게 적용하였습니다.
가장 첫번째 데이터를 에로 들면, 도시 발전도가 0.624로 매우 낮습니다. 위의 PDP 그래프를 봐도 알겠지만 이직 가능성이 높습니다. 실제로 다른 변수들에 대비하여 이직 가능성을 매우 높게 만든다고 설명해주고 있습니다. 그 이외의 다른 변수들에 대해서도 설명의 강도와 방향을 보여주는 것이 Shap Value의 장점입니다.
다른 데이터 케이스를 살펴보면, 이 데이터의 경우 가장 최근 직장에서 5년 이상으로 근무하였고, 이 요인이 약간의 이직 확률을 높여주었으나, 회사 위치의 도시 발전도가 0.9근처로 높아 이직 가능성을 매우 낮춰주었다는 것을 알 수 있습니다.
Shap Value는 개별 데이터 말고도 전체 데이터의 경향도 확인 가능합니다.
shap.summary_plot(shap_values, X_train)
붉은색의 경우는 위의 단일 케이스 그래프에서 보듯 이직 확률을 높여주는 방향, 파란색은 이직 확률을 낮춰주는 방향입니다. 즉 도시 발전도가 낮을 수록 이직 확률을 높여주는 방향으로 작용한다는 것을 알 수있습니다. 최근 직장에서의 경력도 앞에서 본것과 거의 동일하게 연차가 높을 때 이직을 생각하는 방향으로 보여주고 있습니다.
이렇게 각 변수별로 전체적인 방향성을 한 눈에 볼 수 있습니다.
앞으로 해야할 것.
변수에 대한 설명까지 XAI의 적용을 해 보았습니다. 이후 해볼만한 과제들은 다음과 같습니다.
모델 개선해보기
데이터 클러스터링 후 이직 가능성이 있는 사람과 없는 사람 비교해보기
기타 추가 인사이트 찾기
'Archive > Playground' 카테고리의 다른 글
[Playground] 이직 예측 모델 만들기 (1) (1) | 2024.02.14 |
---|---|
[Playground] 너의 레이팅이 보여 (2) 레이팅 예측에 도 전 (1) | 2024.02.02 |
[Playground] 너의 레이팅이 보여 (1) 도입, 데이터 탐색 (1) | 2024.01.26 |