tidymodels+DALEXによる解釈可能な機械学習 / Tokyo.R83

tidymodels+DALEXによる解釈可能な機械学習 / Tokyo.R83

2020年1月25日に行われた第83回Japan.Rでの発表資料です
https://tokyor.connpass.com/event/161709/

資料で使われたコードは以下になります
https://github.com/dropout009/tokyoR83

7a0892afffbcbd35fd84d46508b3a914?s=128

Mitsunosuke Morishita

January 25, 2020
Tweet

Transcript

  1. tidymodels+DALEXによる 解釈可能な機械学習 森下光之助(@dropout009)

  2. 1. 機械学習の解釈⼿法 2. tidymodelsとDALEX 3. 特徴量の重要度が知りたい PFI (Permutation Feature Importance)

    4. 特徴量と予測値の関係が知りたい PD (Partial Dependence) 5. インスタンス毎の異質性を捉えたい ICE (Individual Conditional Expectation) 6. なぜこの予測値が出たか理由が知りたい SHAP (SHapley Additive exPlanations)
  3. 機械学習の解釈⼿法

  4. モチベーション︓なぜ機械学習の解釈⼿法が必要なのか 線形回帰は解釈性が極めて⾼い⼀⽅で、予測精度は必ずしも⾼くない 予測精度が求められるタスクにはRF/GBDT/NNなどの 複雑なブラックボックスモデルを使いたいが、今度は解釈性が低い 「ブラックボックスモデル+機械学習の解釈⼿法」で 予測精度と解釈性を両⽴したい

  5. 解釈⼿法をグローバル/ローカルの視点でマッピング PFI PD ICE SHAP SHAP SHAP グローバルな 解釈⼿法 ローカルな

    解釈⼿法
  6. 解釈⼿法をどう使うか︖ どこまでのことがわかるのか︖ モデルのデバッグ 事前知識と整合的か、想定外の挙動はないか → ⽐較的安全な使い⽅ モデルの振る舞いを解釈 モデルは特徴量Aを重視している、特徴量Aが⼤きくなると予測 値が⼤きくなる →

    モデルの⼀側⾯を捉えているだけなので間違った解釈をする 可能性 因果関係の探索 モデルの振る舞いを因果関係として解釈 → 実験やより厳密な因果推論の⼿法をあわせて使うべき 「弱い」使い⽅ ⽐較的安全 「強い」使い⽅ 注意が必要
  7. tidymodels + DALEX

  8. tidymodelsでモデルを作成、DALEXで解釈 https://github.com/tidymodels/tidymodels データの分割、前処理、モデルの作成、 学習、精度評価からハイパーパラメー タのチューニングに⾄るまで、機械学 習の⼀連の作業を効率よく統⼀的に⾏ うことを可能にするパッケージ群。 tidyverseとの親和性も⾼い。 https://modeloriented.github.io/DALEX/ PFI、PD、ICE、SHAPなど、機械学習

    モデルの解釈⼿法を簡潔で統⼀的なシ ンタックスで⾏うことを可能にする パッケージ群。 tidymodelsのparsnipで作成したモデ ルをシームレスに受け取ることが可能。
  9. diamondデータセットをtidymodelsとDALEXで分析する df = diamonds %>% mutate(log_price = log(price)) %>% select(log_price,

    carat, cut, color, clarity, depth, table) > df # A tibble: 53,940 x 7 log_price carat cut color clarity depth table <dbl> <dbl> <ord> <ord> <ord> <dbl> <dbl> 1 5.79 0.23 Ideal E SI2 61.5 55 2 5.79 0.21 Premium E SI1 59.8 61 3 5.79 0.23 Good E VS1 56.9 65 4 5.81 0.290 Premium I VS2 62.4 58 5 5.81 0.31 Good J SI2 63.3 58 ⽬的変数の対数をとっておく
  10. parsnipでモデルを作成と学習を⾏う model = parsnip::rand_forest(mode = "regression", trees = 500, min_n

    = 5) %>% parsnip::set_engine(engine = "ranger", num.threads = parallel::detectCores(), seed = 42) model_trained = model %>% parsnip::fit(log_price ~ ., data = df) ※データ分割、前処理、ハイパーパラメータのチューニングなど、 tidymodelsの詳細な使い⽅は「tidymodelsによるtidyな機械学習」をご確認下さい https://speakerdeck.com/dropout009/tidymodelsniyorutidynaji-jie-xue-xi モデルを作成 ハイパーパラメータは 決め打ち 学習
  11. DALEXでexplainerを作成する explainer = model_trained %>% DALEX::explain(data = df %>% select(-log_price),

    y = df %>% pull(log_price), label = "Random Forest") Preparation of a new explainer is initiated -> model label : Random Forest -> data : 53940 rows 6 cols -> data : tibbble converted into a data.frame -> target variable : 53940 values -> predict function : yhat.model_fit will be used ( default ) -> predicted values : numerical, min = 5.945424 , mean = 7.786629 , max = 9.784551 -> residual function : difference between y and yhat ( default ) -> residuals : numerical, min = -0.3707432 , mean = 0.0001399497 , max = 0.718558 -> model_info : package parsnip , ver. 0.0.5 , task regression ( default ) A new explainer has been created! 解釈⼿法を使うための準備
  12. 特徴量の重要度が知りたい Permutation Feature Importance

  13. モチベーション︓特徴量の重要度が知りたい モデルのデバッグ • 特徴量の重要度がドメイン知識に沿っているか • 予期せぬ特徴量の重要度が⾼くなっていないか 因果関係の探索 • 例︓マーケティング 操作可能な変数の中で重要度の⾼いものを優先的に動かす

  14. 重要度をどう定義する︖PFIのアイデア • 各特徴量をシャッフルして予測精度の減少率を計算する • 予測精度が⼤きく落ちる → モデルとって重要な特徴量︕ 予測精度を計算 予測精度を計算 予測精度を⽐較

    シャッフル 特徴量の重要度の求め⽅(caratの場合) 元データ シャッフル後データ carat cut color clarity 1.04 Ideal G VS2 0.59 Very Good E SI2 0.53 Ideal G VVS1 1.51 Premium H VS2 carat cut color clarity 0.59 Ideal G VS2 1.51 Very Good E SI2 1.04 Ideal G VVS1 0.53 Premium H VS2
  15. 特徴量ごとに誤差の増加率を可視化して、重要な変数を調べる 各特徴量の重要度 pfi = explainer %>% ingredients::feature_importance(type = "ratio", B

    = 1) plot(pfi) ダイヤの価格には ⼤きさが極めて強く影響 ※Dropout Lossはシャッフルで 何%精度が落ちるかを⽤いて定義
  16. PFIの注意点と対処 • 相関する特徴量をモデルに投⼊すると重要度の「⾷い合い」が⽣じる → グループ化して同時にシャッフル︕ • 緯度経度など、同グループの変数を個別にシャッフルする意味は︖ → グループ化して同時にシャッフル︕ •

    ⽋落変数による「疑似相関」の問題 → そもそも因果的解釈は危険だが、必要な変数を全て含めるなどで対処。 ドメイン知識が必要。 • PFIをtrainとtestのどっちで計算するべきか︖ → trainならモデルが重視しているか、testなら予測に効くか • 特徴量の重要度はわかるが特徴量と予測値の関係はわからない → PDを使う︕
  17. 特徴量と予測値の関係が知りたい Partial Dependence

  18. モチベーション︓特徴量と予測値の関係が知りたい モデルのデバッグ • 特徴量と予測値の関係に違和感はないか 因果関係の探索 • 例︓マーケティング KPIにプラスに働く変数を突き⽌め、施策を打つ

  19. どうやって関係を単純化する︖ PDのアイデア ブラックボックスモデルは⼊出⼒の関係が複雑 → ターゲットの特徴量以外の影響を消して単純化したい → 他の特徴量の影響を周辺化して消してしまう︕ " " =

    ' " , ) = * " , ) () )) • (⋅)は学習済みモデル • " はターゲットになる特徴量 • ) はその他の特徴量
  20. carat cut color clarity ICE 0.5 Ideal G VS2 23435,6

    (0.5) 0.5 Very Good E SI2 23435,: (0.5) 0.5 Ideal G VVS1 23435,; (0.5) 0.5 Premium H VS2 23435,< (0.5) ' " , ) を推定するには︖ 具体例で確認。 予測結果を平均 ̅ 23435 (0.5) 元データ carat cut color clarity 1.04 Ideal G VS2 0.59 Very Good E SI2 0.53 Ideal G VVS1 1.51 Premium H VS2 carat cut color clarity ICE 1 Ideal G VS2 23435,6 (1.0) 1 Very Good E SI2 23435,: (1.0) 1 Ideal G VVS1 23435,; (1.0) 1 Premium H VS2 23435,< (1.0) carat cut color clarity ICE 1.5 Ideal G VS2 23435,6 (1.5) 1.5 Very Good E SI2 23435,: (1.5) 1.5 Ideal G VVS1 23435,; (1.5) 1.5 Premium H VS2 23435,< (1.5) 予測結果を平均 ̅ 23435 (1.0) 予測結果を平均 ̅ 23435 (1.5) ̅ " " = 1 @ AB6 C (" , )A ) PDの推定式
  21. 特徴量と予測値の関係を可視化(連続値の場合) 各特徴量と予測値の関係(連続値) pd_num = explainer %>% ingredients::partial_dependency(variable_type = "numerical") plot(pd_num)

  22. 特徴量と予測値の関係を可視化(離散値の場合) 各特徴量と予測値の関係(離散値) pd_cat = explainer %>% ingredients::partial_dependency(variable_type = "categorical") plot(pd_cat)

  23. 単変数同⼠の可視化とPDの違いは︖ 箱ひげ図による可視化 PDによる可視化 • 箱ひげ図による可視化では、透明度が⾼くなるほどダイヤが安くなる傾向 • ⼀⽅で、PDでは透明度が⾼くなるほど価格は⾼くなる傾向

  24. 単変数同⼠の可視化では相関する他の特徴量の影響を除外できない ダイヤが⼤きいほど 価格は⾼くなる 透明度の⾼いダイヤは サイズが⼩さい傾向 透明度と価格に負の関係が あるように⾒えてしまう

  25. PDを因果関係の「探索」に使うことができる 箱ひげ図による可視化 PDによる可視化 • 変数同⼠の関係がモデルに組み込まているので、PDでは単変数同⼠の可視 化では⾒えなかった関係を⾒ることができる • あくまで因果関係の探索に⽤い、改めてより厳密な⼿法で確認するべき ※「ブラックボックスモデルとPartial Dependence

    Plotで因果関係を探索する」でも議論しています https://speakerdeck.com/dropout009/buratukubotukusumoderutopartial-dependence-plotdeyin-guo-guan-xi-wotan-suo-suru
  26. PDの注意点と対処 • PDは因果関係として解釈できるか︖ → 因果関係の仮説を⽴てるための探索⼿法として利⽤するのが安全。仮説はよ くデザインされたABテストやより厳密な因果推論の⼿法を併⽤し、信頼性を⾼ めていく必要。 • ⼊出⼒の関係を単純化していることに注意。⼊出⼒の平均的な関係はわかるが、 グループごとに異質性がある場合は間違った解釈をする可能性

    → ICEやConditional PDを使う • あるインスタンスに対して「もし〜だったら︖」を知りたい → ICEを使う
  27. インスタンス毎の異質性を捉えたい Individual Conditional Expectation

  28. モチベーション︓各インスタンスで変数が動いたときの効果が知りたい モデルの振る舞いを解釈 • 平均的な振る舞いではなく、インスタンスごとの予測値と変数の関係を ⾒たい 因果関係の探索 • 例︓マーケティング 施策が特に有効な個⼈/グループを突き⽌め、ターゲティングを⾏う

  29. インスタンスレベルの解釈をするには︖ ICEのアイデア PDは全データで平均をとるため インスタンス/グループごとの異質性をキャプチャーできなかった 各インスタンスに対する「もしある特徴量が〜だったら︖」という What if?として解釈︕ ̅ " "

    = 1 @ AB6 C (", )A) 平均前のインスタンスごとの予測値は 他の変数を固定してターゲットの特徴量だけを動かした場合の予測値 PDの推定式︓
  30. carat cut color clarity ICE 0.5 Ideal G VS2 23435,6

    (0.5) 0.5 Very Good E SI2 23435,: (0.5) 0.5 Ideal G VVS1 23435,; (0.5) 0.5 Premium H VS2 23435,< (0.5) ICEの計算⽅法は︖ PDの推定に使った予測値を平均せずに使⽤ 元データ carat cut color clarity 1.04 Ideal G VS2 0.59 Very Good E SI2 0.53 Ideal G VVS1 1.51 Premium H VS2 carat cut color clarity ICE 1 Ideal G VS2 23435,6 (1.0) 1 Very Good E SI2 23435,: (1.0) 1 Ideal G VVS1 23435,; (1.0) 1 Premium H VS2 23435,< (1.0) carat cut color clarity ICE 1.5 Ideal G VS2 23435,6 (1.5) 1.5 Very Good E SI2 23435,: (1.5) 1.5 Ideal G VVS1 23435,; (1.5) 1.5 Premium H VS2 23435,< (1.5) ",A " = (", )A) ICEの推定式
  31. あるインスタンスで「もしダイヤのサイズが変わったら」を可視化 あるインスタンスのcaratに関するICE ice = explainer %>% ingredients::ceteris_paribus(new_observation = df_instance) plot(ice,

    variables = "carat") + show_observations(ice, variables = "carat") > df_instance log_price carat cut color clarity depth table 1 8.178358 1.01 Very Good F SI2 63.4 60 ダイヤのサイズが1.01から 変化した場合の予測値を可視化 実際の値
  32. PDと複数のICEを同時に描くことでより情報量の多い可視化が可能 PDとICEを同時に可視化 ices = explainer %>% ingredients::ceteris_paribus(new_observation = df_subset, variables

    = "carat") pd_carat = explainer %>% ingredients::partial_dependency(variables = "carat") plot(ices) + show_aggregated_profiles(pd_carat) ⼀部に例外あり 特徴量を確認してみる ほとんどのインスタンス では似た影響
  33. PDでは捉えられない交互作⽤をICEやConditional PDで浮き彫りに PDによる可視化 ICEによる可視化 C-PDによる可視化 = 6 − 5: +

    10:; + , 6, : ∼ −1, 1 , ; ∼ 0.5 , ~ (0, 0.1:) シミュレーション設定
  34. ICEの注意点と対処 • 特に強く相関する変数がモデルに含まれている場合、特徴量を⼤きく動かすと 現実でありえないデータでの予測値となる危険性が⾼まる → What if?の解釈は特定インスタンスの元の特徴量からあまり⼤きく動かさな い範囲で⾏うほうが安全 例︓ 夏に気温が0℃になったらアイスの売上はどうなる︖

    • ICEはインスタンスレベルの解釈なので値の信頼性はPDより低い → 同質なグループごとにPDを計算するConditional PDを使う • 特定インスタンスに対して、「もし〜だったら︖」という解釈は可能だが、「な ぜモデルがこの予測値を出したのか︖」はわからない → SHAPを使う
  35. なぜこの予測値が出たか理由が知りたい Shapley Additive exPlanations

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

  37. どうやって予測値の理由付けを⾏う︖ SHAPのアイデア = 6, … , U Vを特徴量とした機械学習モデル について考える →

    あるインスタンスの予測値 に対して、なぜモデルはそんな予測をした かを知りたい → モデルの平均的な予測結果[ ]と、あるインスタンスに対する予測 の差分を各特徴量の貢献度 に分解するといいのでは︖ − = @ \B6 U \ = ^ + @ \B6 U \ ^ ≔ [()] Additive Feature Attribution Method
  38. 専⾨︓CS 貢献度による分解の具体例 モデルの平均的な予測結果[ ]と、あるインスタンスに対する予測 の 差分を各特徴量の貢献度で分解する 例︓年収予測 予測の平均値は年収500万なのにこの個⼈は年収1000万と予測された → 500万の差分はどこから⽣まれている︖

    0 500 1000 学歴︓修⼠ 役職︓課⻑ 英語︓話せない +200 +200 +300 -200
  39. モデルに投⼊した特徴量 = 6, … , U Vをゲームのプレイヤーと⾒⽴てて、 あるインスタンスの予測値への特徴量の貢献度\ をShapley Valueで測る

    貢献度をどうやって求める︖ 協⼒ゲーム理論のShapley Valueを応⽤ ※SHAPの詳細は「SHapley Additive exPlanationsで機械学習モデルを解釈する」をご確認下さい https://speakerdeck.com/dropout009/shapley-additive-explanationsdeji-jie-xue-xi-moderuwojie-shi-suru \ = @ ⊆ℳ∖{\} ||! |ℳ| − || − 1 ! |ℳ|! ∪ − () 組み合わせの出現しやすさ 特徴量のありなしでの予測値の差分 予測値の差分を全ての組み合わせで平均 = Shapley Value
  40. インスタンスの予測値を貢献度で分解 あるインスタンスに対する各特徴量の貢献度 shap = explainer %>% iBreakDown::shap(new_observation = df_instance, B

    = 5) plot(shap)
  41. SHAPの注意点と対処 • 特定インスタンスに対して、「なぜモデルがこの予測値を出したのか」はわかる が「特徴量を動かしたときに予測値がどう変化するか」はわからない → ICEを使う • 計算コストが⾮常に⾼い → データセットの⼀部をサンプリングして計算する

    • 理論⾯が相対的にややこしく、クライアントへの説明が困難 → SHAPは適切な粒度で集計・可視化することで変数重要度やPDとしても使え るが、⾮専⾨家への説明が求められる場合はより直感的なPFIやPDを使う
  42. まとめ

  43. まとめ • 機械学習の解釈⼿法は様々で、それぞれ異なる側⾯から解釈を⾏っている。 求められる解釈性に応じて適切に使い分けることが重要。 • 解釈⼿法をには⽐較的安全な使い⽅と注意が必要な使い⽅がある。特に因 果関係としての解釈は、因果推論の知⾒を併⽤することが望ましい。 • PFI/PD/ICEは⽐較的直感的だが、SHAPの理解は難しい。誰かに説明する 必要がある場合はより直感的な⼿法を使うことも考えるべき。

    • ブラックボックスモデル+解釈⼿法は強⼒だが、線形回帰で事⾜りる問題は 線形回帰を使った⽅が実践的。ブラックボックスモデル+解釈⼿法をEDA として⽤いて、最後に線形モデルに落とし込むという使い⽅もある。
  44. 機械学習の解釈⼿法を もっと学びたい⼈へ

  45. 参考⽂献︓機械学習の解釈性全般 https://pbiecek.github.io/ema/ https://compstat- lmu.github.io/iml_metho ds_limitations/ https://christophm.github. io/interpretable-ml-book/

  46. 参考⽂献︓機械学習の解釈性全般 • Exploratory data analysis using xgboost package in R

    https://www.slideshare.net/kato_kohaku/exploratory-data-analysis-using-xgboost- package-in-r-146048320 • How to use in R model-agnostic data explanation with DALEX & iml https://www.slideshare.net/kato_kohaku/how-to-use-in-r-modelagnostic-data- explanation-with-dalex-iml • 機械学習と解釈可能性 / Machine Learning and Interpretability https://speakerdeck.com/line_developers/machine-learning-and-interpretability • 機械学習モデルの判断根拠の説明 https://www.slideshare.net/SatoshiHara3/ss-126157179 • BlackBox モデルの説明性・解釈性技術の実装 https://www.slideshare.net/DeepLearningLab/blackbox-198324328
  47. 参考⽂献︓PFI • Fisher, Aaron, Cynthia Rudin, and Francesca Dominici. "All

    models are wrong, but many are useful: Learning a variable's importance by studying an entire class of prediction models simultaneously." arXiv preprint arXiv:1801.01489 (2018). • Hooker, Giles, and Lucas Mentch. "Please Stop Permuting Features: An Explanation and Alternatives." arXiv preprint arXiv:1905.03151 (2019). • Beware Default Random Forest Importances https://explained.ai/rf-importance/index.html • 特徴量重要度にバイアスが⽣じる状況ご存知ですか︖ https://aotamasaki.hatenablog.com/entry/bias_in_feature_importances
  48. 参考⽂献︓PD/ICE • Friedman, Jerome H. "Greedy function approximation: a gradient

    boosting machine." Annals of statistics (2001): 1189-1232. • Goldstein, Alex, et al. "Peeking inside the black box: Visualizing statistical learning with plots of individual conditional expectation." Journal of Computational and Graphical Statistics 24.1 (2015): 44-65. • Hastie, Trevor, et al. "The elements of statistical learning: data mining, inference and prediction." The Mathematical Intelligencer 27.2 (2005): 83-85. • Zhao, Qingyuan, and Trevor Hastie. "Causal interpretations of black-box models." Journal of Business & Economic Statistics just-accepted (2019): 1-19. • Zhao, Xilei, Xiang Yan, and Pascal Van Hentenryck. "Modeling heterogeneity in mode- switching behavior under a mobility-on-demand transit system: An interpretable machine learning approach." arXiv preprint arXiv:1902.02904 (2019).
  49. 参考⽂献︓SHAP • 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. • 岡⽥ 卓. "ゲーム理論 新版. " 有斐閣. (2011).