Shap repo 삽질기

오영주·2021년 12월 20일
2

ShapForDeepModel

목록 보기
3/3
post-thumbnail
  • 개발했던 deep learning 추천 시스템에 shap(https://github.com/slundberg/shap) 을 적용해보았다.
  • 이때 발견했던 해당 레포의 문제점들과, 삽질들, 해결과정을 기록한다.
  • 아래 내용은 2021년 9월 29일에 적용해보았던 내용으로, 그 이후에 해당 레포에 수정이 있었을 수 있다.

1. explainer 의 선택

  • 해당 레포는 아래 링크에서의 여러 explainable model 논문의 구현체를 통합하여 제공하고 있다.
  • 이 9개의 explainer 들 중 deep learning model 에 활용할 수 있는 건, DeepExplainer 와 GradientExplainer, 이렇게 딱 두 가지이다.
  • 이중 GradientExplainer 는 tensorflow, keras, pytorch의 세 모델 코드에 적용이 가능한 한편, DeepExplainer 는 tensorflow, keras 에만 적용이 가능하니 주의하자.

2. embedding layer 의 존재에 따른 explainer 선택

  • (이걸 꽤 나중에야 깨달아서 많이 화가났었다...)
  • gradient explainer 의 경우 multi input 을 받으면서도, embedding layer 를 포함한 경우 사용할 수 없다!
  • issue에 보면 이것과 관련해서 말이 많은데, 명확히 된다 안된다 말이 나오는 경우 없이, 성토의 자리가 되고 있어서(혹은 이거말고 다른 explainer 를 썼더니 되는것같더라) 이걸 확신하고 다른 길로 트는데에 나도 오래걸렸다.
  • 2021년 9월 29일까지는 분명히 안된다...
  • issue 에는 embedding layer 의 element 각각을 평균 내서라도 어떤 값을 떨어트려주면 안되냐는 식의 요청 혹은 질문들인데, 아직까지 반영이 안되고 있다.

3. input 형태

  • 다른 explainer 는 잘 모르겠지만 deep explainer 와 gradient explainer 의 경우 input layer 가 하나만 존재하는 경우를 기본 상황으로 보고 있는지, api document 에는 이에 관해서만 설명되어있다.(https://shap-lrjball.readthedocs.io/en/latest/generated/shap.DeepExplainer.html#shap.DeepExplainer)
  • 그러나 여러 input layer 를 병렬적으로 두고, 합쳐서 사용하는 것이 이보다 더 일반적인 사용이기때문에, 이 표기만 보면 문제가 생길 수 있다.
  • api document 에서는 input 으로 np array 와 dataframe 만을 받는다고 나와있지만, multiple input layer 를 사용할 경우 경우 각 feature 들을 np.array 로 하는 list 형태로 넣어줘야한다...

4. input 의 순서

  • 위에서와 같이, 여러 feature 들을 list 로 받다보니, feature 입력 순서가 중요해진다.(input layer 이름과 매핑하는 등의 과정이 전혀 없다.)
  • 이때 tensorflow 와 keras의 경우, model.summary()에서 표시되는 feature 의 순서로 하면 된다.

5. tf2 지원X

마무리 하며...

  • 내가 사용한 https://github.com/slundberg/shap의 레포는 받는 관심에 비해서, as가 활발하지는 않은 안타까운 레포인 것 같다.
  • 글을 쓰고 있는 현재(2021년 12월 20일)star 수가 14k 인 것에 반해, issue 1.2k개가 open 된 상태로 방치되어있다...
  • 쓸 수는 있는 상태지만, 그 편의성이 다소 안타까울 따름이다...
profile
data scientist

1개의 댓글

comment-user-thumbnail
2022년 6월 19일

감사합니다 ㅜㅜ 제가 삽질할 시간을 크게 줄여주셨습니다

답글 달기