$30 off During Our Annual Pro Sale. View Details »

SHapley Additive exPlanationsで機械学習モデルを解釈する / dgtalk5

SHapley Additive exPlanationsで機械学習モデルを解釈する / dgtalk5

2020年1月16日に行われたData Gateway Talk vol.5での発表資料です。
https://data-gateway-talk.connpass.com/event/155457/

この発表をログミーさんに記事化して頂きました。
こちらには資料の口頭での補足も入っています。
https://logmi.jp/tech/articles/322738

森下光之助

January 16, 2020
Tweet

More Decks by 森下光之助

Other Decks in Science

Transcript

  1. SHapley Additive exPlanationsで
    機械学習モデルを解釈する
    2020/1/16
    Data Gateway Talk vol.5
    森下光之助(@dropout009)

    View Slide

  2. 1.モチベーション
    2.協⼒ゲーム理論とShapley Value
    3.Shapley Valueを機械学習へ応⽤
    4.実際の分析例
    5.まとめ

    View Slide

  3. 2
    モチベーション

    View Slide

  4. モチベーション︓予測値の「理由付け」
    例︓ローン審査
    ローンの審査を機械学習モデルを⽤いて⾏っているとする
    モデルは申込者がきちんとローンを返しそうかどうかを予測する
    → モデルはAさんはローンの返済確率が低いと予測
    → なぜ「返済確率が低い」と予測したか、理由が知りたい

    View Slide

  5. もうちょっと抽象化すると
    𝑿 = 𝑋!, … , 𝑋"
    #を特徴量とした機械学習モデル𝑓 𝑿 について考える
    → あるインスタンスの予測値𝑓 𝒙 に対して、なぜモデルはそんな予測をした
    かを知りたい
    → モデルの平均的な予測結果𝔼[𝑓 𝑿 ]と、あるインスタンスに対する予測𝑓 𝒙
    の差分を各特徴量の貢献度𝝓𝒋
    に分解するといいのでは︖
    𝑓 𝒙 − 𝔼 𝑓 𝑿 = -
    %&!
    "
    𝜙%
    𝑓 𝒙 = 𝜙'
    + -
    %&!
    "
    𝜙%
    𝜙! ≔ 𝔼[𝑓(𝑿)]
    Additive Feature Attribution Method

    View Slide

  6. 貢献度による差分の分解
    モデルの平均的な予測結果𝔼[𝑓 𝑿 ]と、あるインスタンスに対する予測𝑓 𝒙 の
    差分を各特徴量の貢献度で分解する
    例︓年収予測
    予測の平均値は年収500万なのにこの個⼈は年収1000万と予測された
    → 500万の差分はどこから⽣まれている︖
    0 500 1000
    学歴︓修⼠
    専⾨︓CS
    役職︓課⻑
    英語︓話せない
    +200
    +200
    +300
    -200

    View Slide

  7. どうやって効果を分解する︖線形モデルの場合
    𝔼[𝑓 𝑿 ]と𝑓 𝒙 の差分を各特徴量の貢献度で分解する
    → 線形モデル 𝑓 𝑿 = 𝛼 + ∑%&!
    " 𝛽%𝑋%
    だと簡単に分解できそう
    𝜙'
    = 𝔼 𝑓 𝑿 = 𝛼 + ∑%&!
    " 𝛽%
    𝔼[𝑋%
    ] なので
    𝑓 𝑥 − 𝔼 𝑓 𝑿
    = 𝛼 + -
    %&!
    "
    𝛽%
    𝑥%
    − 𝛼 + -
    %&!
    "
    𝛽%
    𝔼 𝑋%
    = 𝛽!
    𝑥!
    − 𝔼 𝑋!
    + ⋯ + 𝛽"
    𝑥"
    − 𝔼 𝑋"
    𝜙!
    𝜙"

    View Slide

  8. ⾮線形モデルを分解するには︖
    線形モデルは分解できそうだが、
    モデルが複雑だとどう分解すればいいか明らかでない
    協⼒ゲーム理論のShapley Valueから考え⽅を借りてくる
    = SHapley Additive exPlanations (SHAP)

    View Slide

  9. 8
    協⼒ゲーム理論と
    Shapley Value

    View Slide

  10. アルバイトゲーム
    A君、B君、C君の3⼈がアルバイトをする
    • アルバイトは単独でやってもいいし、チームを組んでやってもいい
    • 1⼈で働いた場合
    • A君が1⼈でやると6万円
    • B君が1⼈でやると4万円
    • C君が1⼈でやると2万円
    • 2⼈で働いた場合
    • A君とB君が2⼈でやると合計で20万円
    • A君とC君が2⼈でやると合計で15万円
    • B君とC君が2⼈でやると合計で10万円
    • 3⼈で働いた場合
    • 合計で24万円がもらえる
    参加者 報酬
    A君 6
    B君 4
    C君 2
    A君B君 20
    A君C君 15
    B君C君 10
    A君B君C君 24

    View Slide

  11. 報酬をフェアに配分するには︖
    A君B君C君の3⼈全員で働いて得た報酬24万円をどうやって配分する︖
    → より貢献度の⾼い⼈に多くの報酬を分配するのがフェアな分配のひとつに
    なりそう
    → 各⼈の貢献度をどうやって計る︖
    → 限界貢献度という概念を導⼊︕
    参加者 報酬
    A君 6
    B君 4
    C君 2
    A君B君 20
    A君C君 15
    B君C君 10
    A君B君C君 24

    View Slide

  12. A君の限界貢献度 = A君が参加したときの報酬の増加分
    A君についての限界貢献度を考える
    • 「誰もいない」→「A君のみ」
    • 6 - 0 = 6万円
    • 「B君のみ」→「A君とB君」
    • 20 - 4 = 16万円
    • 「C君のみ」→「A君とC君」
    • 15 - 2 = 13万円
    • 「B君とC君」→「A君とB君とC君」
    • 24 - 10 = 14万円
    A君の限界貢献度はA君が参加する順番に依存する
    参加者 報酬
    A君 6
    B君 4
    C君 2
    A君B君 20
    A君C君 15
    B君C君 10
    A君B君C君 24

    View Slide

  13. 参加順の効果を打ち消すため限界貢献度を平均
    参加順は3!=6通りなので、各⼈の平均的な限界貢献度は
    A君︓(6 + 6 + 16 + 14 + 13 + 14) / 6 = 11.5万円
    B君︓(14 + 9 + 4 + 4 + 9 + 8) / 6 = 8万円
    C君︓(4 + 9 + 4 + 6 + 2 + 2) / 6 = 4.5万円
    参加順
    A君の
    限界貢献度
    B君の
    限界貢献度
    C君の
    限界貢献度
    A君→B君→C君 6 14 4
    A君→C君→B君 6 9 9
    B君→A君→C君 16 4 4
    B君→C君→A君 14 4 6
    C君→A君→B君 13 9 2
    C君→B君→A君 14 8 2

    View Slide

  14. 平均的な限界貢献度 = Shapley Value
    平均的な限界貢献度のことをShapley Valueと⾔う
    Shapley Valueを⽤いた報酬を分配が尤もらしい分配のひとつとなっている
    • 11.5 + 8 + 4.5 = 24万円できれいに分配ができている
    • より貢献度が⾼い⼈により多くの報酬が渡る
    参加者 Shapley Value
    A君 11.5
    B君 8
    C君 4.5

    View Slide

  15. Shapley Valueの⼀般的な求め⽅
    𝜙*
    = #
    𝒮⊆ℳ∖{*}
    |𝒮|! |ℳ| − |𝒮| − 1 !
    |ℳ|!
    𝑣 𝒮 ∪ 𝑗 − 𝑣(𝒮)
    • 𝑀⼈のプレイヤー ℳ = {1, 2, … , 𝑀} がゲームに参加する
    • 𝒮はℳからプレイヤー𝑗を除いた参加者の組み合わせ
    • たとえばA君B君C君3⼈のケースで、A君のShapley Valueを考える場合
    ∅ , 𝐵 , 𝐶 , 𝐵, 𝐶 が該当
    組み合わせの出現しやすさ 𝒮にプレイヤー𝑗が参加したときの限界貢献度
    ※ 𝑣 ⋅ は報酬を表す関数
    限界効果を全ての組み合わせで平均 = Shapley Value

    View Slide

  16. 15
    Shapley Valueを
    機械学習へ応⽤

    View Slide

  17. モデルに投⼊した特徴量𝑿 = 𝑋!, … , 𝑋"
    #をゲームのプレイヤーと⾒⽴てて、
    あるインスタンスの予測値への特徴量𝑗の貢献度𝜙%
    をShapley Valueで測る
    Shapley Valueを機械学習に応⽤する = SHAP
    𝜙*
    = #
    𝒮⊆ℳ∖{*}
    |𝒮|! |ℳ| − |𝒮| − 1 !
    |ℳ|!
    𝑣 𝒮 ∪ 𝑗 − 𝑣(𝒮)
    特徴量𝑗のありなしでの予測の差分
    → 特徴量が「ない」ときの予測値をどう作る︖

    View Slide

  18. 例︓
    • 特徴量は (𝑋!, 𝑋-, 𝑋.) の3つ
    • あるインスタンスではそれぞれ 𝑥!
    , 𝑥-
    , 𝑥.
    という値をとっている
    問題︓
    • 全変数が「ある」ときの予測値︓ 𝑣 1, 2, 3 = 𝑓(𝑥!, 𝑥-, 𝑥.)
    • 全変数が「ない」ときの予測値︓ 𝑣 ∅ = 𝔼[𝑓(𝑋!, 𝑋-, 𝑋.)]
    • 𝑥!
    以外が「ない」ときの予測値︓ 𝑣 1 = ? ? ?
    特徴量が「ない」ときの予測値をどう作る︖
    𝑣 1 = 𝔼 𝑓 𝑥!
    , 𝑋-
    , 𝑋.
    = E 𝑓 𝑥!
    , 𝑥-
    , 𝑥.
    𝑝 𝑥-
    , 𝑥.
    𝑑𝑥-
    𝑑𝑥.
    → 「ない」変数は周辺化して消してしまう

    View Slide

  19. 平均的な予測値𝔼[𝑓(𝑋!, 𝑋-, 𝑋.)] から𝑥!, 𝑥-, 𝑥.
    の順で変数を追加していく
    特徴量を順次追加していき限界貢献度を計算
    𝔼[𝑓 𝑋!, 𝑋-, 𝑋. ] 𝔼[𝑓 𝑥!, 𝑥-, 𝑋. ]
    𝔼 𝑓 𝑥!, 𝑥-, 𝑥.
    = 𝑓(𝑥!
    , 𝑥-
    , 𝑥.
    )
    Δ!
    𝔼[𝑓 𝑥!, 𝑋-, 𝑋. ]
    0
    Δ-
    Δ.
    𝜙'
    特徴量の追加が予測値に与える影響 = 限界貢献度
    限界貢献度Δ%
    は特徴量追加の順番によって変わる
    → 全ての順序で限界貢献度を計算し平均 = SHAP Value

    View Slide

  20. 19
    実際の分析例

    View Slide

  21. ボストンの不動産価格予測モデルをSHAPで解釈する
    import shap
    X, y = shap.datasets.boston()
    MEDV CRIM ZN INDUS CHAS NOX RM AGE DIS RAD TAX
    PT
    RATIO
    B LSTAT
    24.0 0.0063 18.0 2.31 0.0 0.538 6.575 65.2 4.0900 1.0 296.0 15.3 396.90 4.98
    21.6 0.0273 0.0 7.07 0.0 0.469 6.421 78.9 4.9671 2.0 242.0 17.8 396.90 9.14
    34.7 0.0272 0.0 7.07 0.0 0.469 7.185 61.1 4.9671 2.0 242.0 17.8 392.83 4.03
    33.4 0.0323 0.0 2.18 0.0 0.458 6.998 45.8 6.0622 3.0 222.0 18.7 394.63 2.94
    36.2 0.0690 0.0 2.18 0.0 0.458 7.147 54.2 6.0622 3.0 222.0 18.7 396.90 5.33
    ターゲット 特徴量

    View Slide

  22. 学習済みモデルからSHAP valueを計算
    model = RandomForestRegressor(n_estimators=100,
    n_jobs=-1,
    random_state=42)
    model.fit(X_train, y_train)
    explainer = shap.TreeExplainer(model, X)
    shap_values = explainer.shap_values(X)
    モデルを学習
    学習済みモデルとデータからSHAP Valueを計算

    View Slide

  23. Waterfall Plot︓「なぜモデルはこの予測値を出したか」を可視化する
    shap.waterfall_plot(explainer.expected_valu
    e,
    shap_values[0,:],
    X.iloc[0,:])

    View Slide

  24. Dependence Plot︓特徴量と貢献度の関係を可視化する
    shap.dependence_plot("LSTAT", shap_values,
    X)

    View Slide

  25. Summary Plot︓特徴量の重要度を可視化する
    shap.summary_plot(shap_values, X) Feature Importance/ =
    1
    𝑁
    -
    0&!
    1
    𝜙%
    0

    View Slide

  26. 25
    まとめ

    View Slide

  27. まとめ
    26
    • SHAPを⽤いることで、機械学習モデルが「なぜその予測値を出したのか」
    を各特徴量の貢献度に分解して解釈することができる。
    • SHAPは協⼒ゲーム理論のShapley Valueの考え⽅を応⽤している。貢献度
    の分解において、Shapley Valueはいくつかの望ましい性質を持っている。
    • SHAPは各インスタンスに対して使えるlocalな解釈⼿法だが、適切な粒度
    で集計・可視化することで、Partial Dependenceや変数重要度のように
    globalな解釈⼿法としても⽤いることができる。
    • データそのものではなくモデルの振る舞いを解釈していること、あくまで
    モデルの⼀側⾯を解釈しているに過ぎないことには注意が必要。

    View Slide

  28. 参考⽂献
    • Lundberg, Scott M., and Su-In Lee. "A unified approach to interpreting model predictions." Advances in Neural
    Information Processing Systems. 2017.
    • Lundberg, Scott M., Gabriel G. Erion, and Su-In Lee. "Consistent individualized feature attribution for tree
    ensembles." arXiv preprint arXiv:1802.03888 (2018).
    • Lundberg, Scott M., et al. "Explainable AI for Trees: From Local Explanations to Global Understanding." arXiv
    preprint arXiv:1905.04610 (2019).
    • Sundararajan, Mukund, and Amir Najmi. "The many Shapley values for model explanation." arXiv preprint
    arXiv:1908.08474 (2019).
    • Janzing, Dominik, Lenon Minorics, and Patrick Blöbaum. "Feature relevance quantification in explainable AI: A
    causality problem." arXiv preprint arXiv:1910.13413 (2019).
    • GitHub - slundberg/shap: A game theoretic approach to explain the output of any machine learning model.
    https://github.com/slundberg/shap.
    • Molnar, Christoph. "Interpretable machine learning. A Guide for Making Black Box Models Explainable.” (2019).
    https://christophm.github.io/interpretable-ml-book/.
    • Biecek, Przemyslaw, and Tomasz Burzykowski. "Predictive Models: Explore, Explain, and Debug." (2019).
    https://pbiecek.github.io/PM_VEE/.
    • SHAP(SHapley Additive exPlanations)で機械学習モデルを解釈する
    https://dropout009.hatenablog.com/entry/2019/11/20/091450.
    • 岡⽥ 卓. "ゲーム理論 新版. " 有斐閣. (2011).

    View Slide