학습된 deeplearning 모델에 feature 를 입력하면 output 을 얻어낼 수 있다.
그런데 deeplearning 모델 자체만으로는, 무엇때문에, 구체적으로 어떤 feature 때문에 그런 output 이 나왔는지, 그 이유를 알기 힘들다.
이것에 대한 해답을 알려주기 위한 도구로 shap value 라는걸 사용할 수 있다.
이 글에서는 shap 이 무엇인지, deeplearning model 에서는 어떻게 활용할 수 있는지, 사용할 수 있는 오픈 소스는 어떤게 있는지 대략적으로 설명하고자 한다. 또한 이 글의 시리즈 글로, 1.shap 에 대한 자세한 설명글, 2.deeplearning model 에서의 shap value 로 활용될 수 있는 deeplift 에 대한 설명 글, 3.오픈 소스를 활용할때에 피할 수 없는 삽질(?)들에 대한 설명 글을 이어서 작성하고자한다.
shap value 는 feature 들 각각이 해당 output 을 내는데에 얼마나 기여했는지를 수치적으로 보여주는 값이다.
이것을 잘 활용하면, output 이 잘못 나왔을때에 어떤 feature 가 문제였는지, 어떤 feature 를 보강해야 앞으로 성능이 잘 나올지를 알 수 있게 된다!
shap value 는 간단하게는 여러 feature 중 해당 feature 가 있었을때와 없었을때에 output 달라지는 정도에 따라 그 값을 도출된다고 생각하면 된다.(자세한 설명은 아마도 다음 글에서 할 예정이다.)
최초 개발된 shap value 는 트리 모델을 상정하고 있었는데, 최근에는 deeplearning 모델에서도 shap 과 유사하게 각 input feature 들이 output 에 기여한 정도를 계산할 수 있게 해주는 여러 방법들이 개발되었다.
그 중 대표적인 것으로 Integrated Gradients(https://arxiv.org/abs/1703.01365)와, 이것의 단점을 수정한 DeepLIFT(https://arxiv.org/abs/1704.02685)의 기법이 있다.(이 또한 추후 설명 예정)
위의 shap value 를 구현한 public repository 가 생각보다 많이 있고, 그중 대표적인 것으로 https://github.com/slundberg/shap 가 있고, https://shap-lrjball.readthedocs.io/en/latest/index.html 의 페이지에서 api 와 example을 잘 설명해주고 있다. 이 레포는 스타도 꽤 많이 달려있고, 별도의 웹페이지로 설명까지 해주고 있어서, 언뜻보면 별 장애물 없이 문서를 따라가면 성공할 것만 같은 기분이 들게 하지만, 직접 사용해보면 전혀 아니다... 이 레포를 이용하여 deeplearning model에서의 shap value 를 구하기 위해 거쳐가야할 삽질에 대해 하위 글에서 설명할 에정이다.