본문 바로가기
Machine Learning

XAI SHAP 파이썬 예제 - Summary, Force, Interaction, Dependence Plot 해석

by 무적물리 2022. 4. 10.

이번 포스팅에서는 지난번 포스팅에 이어서 XAI 방법 중 SHAP에 대해 연재하고자 합니다. 해당 포스팅에서는 다양한 SHAP Plot 방법인 Summary, Force, Interaction, Dependence, Waterfall Plot에 대해 파이썬 예제로 여러분과 공유합니다.

 

Contents

     

    모델 학습 단계

    해당 예제는 Boston dataset 데이터를 사용해서 회귀 문제를 풀어보겠습니다. Training Set와 Test Set은 따로 나누지 않고 예제 풀겠습니다. 해당 예제 풀이를 위한 파이썬 코드는 다음과 같습니다. 참고로, 회귀 모델은 XGBoost를 사용하였습니다.

     

    import xgboost
    import shap
    
    # train XGBoost model
    X, y = shap.datasets.boston()
    model = xgboost.XGBRegressor().fit(X, y)
    
    # compute SHAP values
    shap.initjs()
    explainer = shap.Explainer(model, X)
    shap_values = explainer(X)

     

     

    SHAP Feature Importance Plot

    각 Feature의 Shapley Value 절대값의 평균을 Plot 함으로써, 각 Feature가 예측값에 미치는 절대 영향도를 확인할 수 있습니다. SHAP에서 가장 직관적인 Plot입니다.

     

    shap.plots.bar(shap_values)

    All-data-Importance-plot-example
    SHAP-Feature-Importance-Plot

    SHAP Feature Importance Plot은 직관적이지만, 더 많은 정보를 주는 SHAP Summary Plot을 확인하면 예측값에 대한 Feature 영향도를 자세히 볼 수 있습니다.

     

     

    SHAP Summary Plot

    전체 Feature들에 대해 Shapley Value가 어떠한 분포를 미치는지 시각화합니다. Feature Importance와 Feature Effect를 결합한 Plot입니다. 여기서 빨간색은 Feature 값이 높다는 것을 의미하며, 파란색은 Feature 값이 낮다는 것을 의미합니다.

    • 빨간색 : Feature 값 높음
    • 파란색 : Feature 값 낮음

     

    또한, X축 0을 기준으로 음의 영역은 부정적 요인, 양의 영역은 긍정적 요인을 뜻합니다.

    • 음의 영역 : 부정적 요인
    • 양의 영역 : 긍정적 요인

     

    결론적으로, 양의 영역에 파란색 점이 찍혀있다면, Feature 작을수록 긍정적으로 작용한다는 것을 의미합니다. 아래 두 코드 중 하나를 사용하시면 됩니다.

     

    shap.plots.beeswarm(shap_values)
    shap.summary_plot(shap_values)

    All-data-summary-plot-example
    SHAP-Summary-Plot

    특정 Feature가 예측에 미치는 영향을 정확히 보고 싶다면 SHAP dependence Plot을 보아야 합니다.

     

     

    SHAP Waterfall Plot

    특정 데이터가 예측된 근거를 보여주는 Plot 입니다. 각 Feature들의 공헌도와 Shapley Value를 직관적으로 표현합니다. 긍정적 요인은 빨간색, 부정적 요인은 파란색입니다.

     

    간단하게 아래에서 설명할 Force Plot을 아래로 펼쳐놓은 것으로 이해하시면 됩니다. 비교적 직관적입니다.

    • 빨간색 : 긍정적 요인
    • 파란색 : 부정적 요인

     

    shap.plots.waterfall(shap_values[201])

    Boston-dataset-201data-waterfall-plot-example
    SHAP-Waterfall-Plot

     

     

    SHAP Force Plot

    Force Plot은 특정 데이터나 전체 데이터에 대한 Shapley Value를 평면에 출력합니다. Force Plot을 사용하면 특정 데이터나 전체 데이터를 해석할 수 있습니다.

     

    특정 데이터 해석

    예측 값에 긍정적 요인은 빨간색, 부정적 요인은 파란색으로 표현합니다. Bar의 크기가 큰 것이 큰 영향을 준 요인입니다.

    • 빨간색 : 긍정적 요인
    • 파란색 : 부정적 요인

     

    shap.force_plot(shap_values[1])

    Boston-201-data-force-plot-example
    SHAP-Force-Plot-of-Specific-data

     

    전체 데이터 해석

    전체 데이터 해석 시에는 각 열에 대한 Shapley Value를 누적하여 시각화합니다. 특정 데이터 Force Plot을 90도 회전해서 쌓는다고 생각하시면 됩니다.

     

    shap.plots.force(shap_values[0:1000, :])

    Boston-all-data-force-plot-example
    SHAP-Force-Plot-of-All-data

     

     

    SHAP Dependence Plot

    해당 Plot은 특정 Feature에 대한 Shapley Value를 시각화합니다. X축은 각 Feature의 값이며, Y축 값은 Shapley Value 값입니다.

     

    # without Contour
    shap.plots.scatter(shap_values[:,'RM'])
    
    # with Contour of Another Feature
    shap.plots.scatter(shap_values[:,'RM'], color=shap_values[:, 'DIS'])

    Boston-dataset-specific-feature-dependence-plot-example
    SHAP-Dependence-Plot

     

     

    SHAP Interaction Plot

    해당 Plot으로 두 Feature 사이의 영향력 또한 시각화할 수 있습니다. 해당 Plot은 순수 상호 작용 효과를 얻을 수 있도록 특성의 주효과를 제거합니다.

     

    # Calculation
    shap_interaction_values = explainer.shap_interaction_values(X)
    
    # All Features
    shap.summary_plot(shap_interaction_values, X)
    
    # Specific Features
    shap.dependence_plot(('RM', 'DIS'), shap_interaction_values, X)

    Boston-dataset-interactive-plot-example-of-all-data
    SHAP-Interaction-Plot-of-All-data
    Boston-dataset-specific-feature-dependence-plot-example
    SHAP-Interaction-Plot-of-specific-feature

     

     

    추천글

     

    댓글