Slide 1

Slide 1 text

tidymodels+DALEXによる 解釈可能な機械学習 2020/1/25 第83回R勉強会@東京(#TokyoR) 森下光之助(@dropout009)

Slide 2

Slide 2 text

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

Slide 3

Slide 3 text

機械学習の解釈⼿法

Slide 4

Slide 4 text

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

Slide 5

Slide 5 text

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

Slide 6

Slide 6 text

解釈⼿法をどう使うか︖ どこまでのことがわかるのか︖ モデルのデバッグ 事前知識と整合的か、想定外の挙動はないか → ⽐較的安全な使い⽅ モデルの振る舞いを解釈 モデルは特徴量Aを重視している、特徴量Aが⼤きくなると予測 値が⼤きくなる → モデルの⼀側⾯を捉えているだけなので間違った解釈をする 可能性 因果関係の探索 モデルの振る舞いを因果関係として解釈 → 実験やより厳密な因果推論の⼿法をあわせて使うべき 「弱い」使い⽅ ⽐較的安全 「強い」使い⽅ 注意が必要

Slide 7

Slide 7 text

tidymodels + DALEX

Slide 8

Slide 8 text

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

Slide 9

Slide 9 text

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 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 ⽬的変数の対数をとっておく

Slide 10

Slide 10 text

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 モデルを作成 ハイパーパラメータは 決め打ち 学習

Slide 11

Slide 11 text

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! 解釈⼿法を使うための準備

Slide 12

Slide 12 text

特徴量の重要度が知りたい Permutation Feature Importance

Slide 13

Slide 13 text

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

Slide 14

Slide 14 text

重要度をどう定義する︖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

Slide 15

Slide 15 text

特徴量ごとに誤差の増加率を可視化して、重要な変数を調べる 各特徴量の重要度 pfi = explainer %>% ingredients::feature_importance(type = "ratio", B = 1) plot(pfi) ダイヤの価格には ⼤きさが極めて強く影響 ※Dropout Lossはシャッフルで 何%精度が落ちるかを⽤いて定義

Slide 16

Slide 16 text

PFIの注意点と対処 • 相関する特徴量をモデルに投⼊すると重要度の「⾷い合い」が⽣じる → グループ化して同時にシャッフル︕ • 緯度経度など、同グループの変数を個別にシャッフルする意味は︖ → グループ化して同時にシャッフル︕ • ⽋落変数による「疑似相関」の問題 → そもそも因果的解釈は危険だが、必要な変数を全て含めるなどで対処。 ドメイン知識が必要。 • PFIをtrainとtestのどっちで計算するべきか︖ → trainならモデルが重視しているか、testなら予測に効くか • 特徴量の重要度はわかるが特徴量と予測値の関係はわからない → PDを使う︕

Slide 17

Slide 17 text

特徴量と予測値の関係が知りたい Partial Dependence

Slide 18

Slide 18 text

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

Slide 19

Slide 19 text

どうやって関係を単純化する︖ PDのアイデア ブラックボックスモデルは⼊出⼒の関係が複雑 → ターゲットの特徴量以外の影響を消して単純化したい → 他の特徴量の影響を周辺化して消してしまう︕ 𝑓! 𝑥! = 𝐸𝑿! 𝑓 𝑥! , 𝑿# = ' 𝑓 𝑥! , 𝒙# 𝑝(𝒙# )𝑑𝒙# • 𝑓(⋅)は学習済みモデル • 𝑋! はターゲットになる特徴量 • 𝑿# はその他の特徴量

Slide 20

Slide 20 text

carat cut color clarity ICE 0.5 Ideal G VS2 𝑓!"#"$,& (0.5) 0.5 Very Good E SI2 𝑓!"#"$,' (0.5) 0.5 Ideal G VVS1 𝑓!"#"$,( (0.5) 0.5 Premium H VS2 𝑓!"#"$,) (0.5) 𝐸𝑿! 𝑓 𝑥" , 𝑿# を推定するには︖ 具体例で確認。 予測結果を平均 ̅ 𝑓!"#"$ (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 𝑓!"#"$,& (1.0) 1 Very Good E SI2 𝑓!"#"$,' (1.0) 1 Ideal G VVS1 𝑓!"#"$,( (1.0) 1 Premium H VS2 𝑓!"#"$,) (1.0) carat cut color clarity ICE 1.5 Ideal G VS2 𝑓!"#"$,& (1.5) 1.5 Very Good E SI2 𝑓!"#"$,' (1.5) 1.5 Ideal G VVS1 𝑓!"#"$,( (1.5) 1.5 Premium H VS2 𝑓!"#"$,) (1.5) 予測結果を平均 ̅ 𝑓!"#"$ (1.0) 予測結果を平均 ̅ 𝑓!"#"$ (1.5) ̅ 𝑓! 𝑥! = 1 𝑁 2 ,-. / 𝑓(𝑥! , 𝑿#, ) PDの推定式

Slide 21

Slide 21 text

特徴量と予測値の関係を可視化(連続値の場合) 各特徴量と予測値の関係(連続値) pd_num = explainer %>% ingredients::partial_dependency(variable_type = "numerical") plot(pd_num)

Slide 22

Slide 22 text

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

Slide 23

Slide 23 text

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

Slide 24

Slide 24 text

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

Slide 25

Slide 25 text

PDを因果関係の「探索」に使うことができる 箱ひげ図による可視化 PDによる可視化 • 変数同⼠の関係がモデルに組み込まているので、PDでは単変数同⼠の可視 化では⾒えなかった関係を⾒ることができる • あくまで因果関係の探索に⽤い、改めてより厳密な⼿法で確認するべき ※「ブラックボックスモデルとPartial Dependence Plotで因果関係を探索する」でも議論しています https://speakerdeck.com/dropout009/buratukubotukusumoderutopartial-dependence-plotdeyin-guo-guan-xi-wotan-suo-suru

Slide 26

Slide 26 text

PDの注意点と対処 • PDは因果関係として解釈できるか︖ → 因果関係の仮説を⽴てるための探索⼿法として利⽤するのが安全。仮説はよ くデザインされたABテストやより厳密な因果推論の⼿法を併⽤し、信頼性を⾼ めていく必要。 • ⼊出⼒の関係を単純化していることに注意。⼊出⼒の平均的な関係はわかるが、 グループごとに異質性がある場合は間違った解釈をする可能性 → ICEやConditional PDを使う • あるインスタンスに対して「もし〜だったら︖」を知りたい → ICEを使う

Slide 27

Slide 27 text

インスタンス毎の異質性を捉えたい Individual Conditional Expectation

Slide 28

Slide 28 text

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

Slide 29

Slide 29 text

インスタンスレベルの解釈をするには︖ ICEのアイデア PDは全データで平均をとるため インスタンス/グループごとの異質性をキャプチャーできなかった 各インスタンスに対する「もしある特徴量が〜だったら︖」という What if?として解釈︕ ̅ 𝑓! 𝑥! = 1 𝑁 2 ,-. / 𝑓(𝑥!, 𝑿#,) 平均前のインスタンスごとの予測値は 他の変数を固定してターゲットの特徴量だけを動かした場合の予測値 PDの推定式︓

Slide 30

Slide 30 text

carat cut color clarity ICE 0.5 Ideal G VS2 𝑓!"#"$,& (0.5) 0.5 Very Good E SI2 𝑓!"#"$,' (0.5) 0.5 Ideal G VVS1 𝑓!"#"$,( (0.5) 0.5 Premium H VS2 𝑓!"#"$,) (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 𝑓!"#"$,& (1.0) 1 Very Good E SI2 𝑓!"#"$,' (1.0) 1 Ideal G VVS1 𝑓!"#"$,( (1.0) 1 Premium H VS2 𝑓!"#"$,) (1.0) carat cut color clarity ICE 1.5 Ideal G VS2 𝑓!"#"$,& (1.5) 1.5 Very Good E SI2 𝑓!"#"$,' (1.5) 1.5 Ideal G VVS1 𝑓!"#"$,( (1.5) 1.5 Premium H VS2 𝑓!"#"$,) (1.5) 𝑓!,, 𝑥! = 𝑓(𝑥!, 𝑿#,) ICEの推定式

Slide 31

Slide 31 text

あるインスタンスで「もしダイヤのサイズが変わったら」を可視化 あるインスタンスの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から 変化した場合の予測値を可視化 実際の値

Slide 32

Slide 32 text

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) ⼀部に例外あり 特徴量を確認してみる ほとんどのインスタンス では似た影響

Slide 33

Slide 33 text

PDでは捉えられない交互作⽤をICEやConditional PDで浮き彫りに PDによる可視化 ICEによる可視化 C-PDによる可視化 𝑌 = 𝑋. − 5𝑋1 + 10𝑋1𝑋2 + 𝜖, 𝑋., 𝑋1 ∼ 𝑈 −1, 1 , 𝑋2 ∼ 𝐵𝑒𝑟𝑛𝑜𝑢𝑙𝑖 0.5 , 𝜖 ~ 𝒩(0, 0.11) シミュレーション設定

Slide 34

Slide 34 text

ICEの注意点と対処 • 特に強く相関する変数がモデルに含まれている場合、特徴量を⼤きく動かすと 現実でありえないデータでの予測値となる危険性が⾼まる → What if?の解釈は特定インスタンスの元の特徴量からあまり⼤きく動かさな い範囲で⾏うほうが安全 例︓ 夏に気温が0℃になったらアイスの売上はどうなる︖ • ICEはインスタンスレベルの解釈なので値の信頼性はPDより低い → 同質なグループごとにPDを計算するConditional PDを使う • 特定インスタンスに対して、「もし〜だったら︖」という解釈は可能だが、「な ぜモデルがこの予測値を出したのか︖」はわからない → SHAPを使う

Slide 35

Slide 35 text

なぜこの予測値が出たか理由が知りたい Shapley Additive exPlanations

Slide 36

Slide 36 text

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

Slide 37

Slide 37 text

どうやって予測値の理由付けを⾏う︖ SHAPのアイデア 𝑿 = 𝑋., … , 𝑋3 4を特徴量とした機械学習モデル𝑓 𝑿 について考える → あるインスタンスの予測値𝑓 𝒙 に対して、なぜモデルはそんな予測をした かを知りたい → モデルの平均的な予測結果𝔼[𝑓 𝑿 ]と、あるインスタンスに対する予測𝑓 𝒙 の差分を各特徴量の貢献度𝝓𝒋 に分解するといいのでは︖ 𝑓 𝒙 − 𝔼 𝑓 𝑿 = 2 6-. 3 𝜙6 𝑓 𝒙 = 𝜙7 + 2 6-. 3 𝜙6 𝜙! ≔ 𝔼[𝑓(𝑿)] Additive Feature Attribution Method

Slide 38

Slide 38 text

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

Slide 39

Slide 39 text

モデルに投⼊した特徴量𝑿 = 𝑋., … , 𝑋3 4をゲームのプレイヤーと⾒⽴てて、 あるインスタンスの予測値への特徴量𝑗の貢献度𝜙6 をShapley Valueで測る 貢献度をどうやって求める︖ 協⼒ゲーム理論のShapley Valueを応⽤ ※SHAPの詳細は「SHapley Additive exPlanationsで機械学習モデルを解釈する」をご確認下さい https://speakerdeck.com/dropout009/shapley-additive-explanationsdeji-jie-xue-xi-moderuwojie-shi-suru 𝜙, = ( 𝒮⊆ℳ∖{,} |𝒮|! |ℳ| − |𝒮| − 1 ! |ℳ|! 𝑣 𝒮 ∪ 𝑗 − 𝑣(𝒮) 組み合わせの出現しやすさ 特徴量𝑗のありなしでの予測値の差分 予測値の差分を全ての組み合わせで平均 = Shapley Value

Slide 40

Slide 40 text

インスタンスの予測値を貢献度で分解 あるインスタンスに対する各特徴量の貢献度 shap = explainer %>% iBreakDown::shap(new_observation = df_instance, B = 5) plot(shap)

Slide 41

Slide 41 text

SHAPの注意点と対処 • 特定インスタンスに対して、「なぜモデルがこの予測値を出したのか」はわかる が「特徴量を動かしたときに予測値がどう変化するか」はわからない → ICEを使う • 計算コストが⾮常に⾼い → データセットの⼀部をサンプリングして計算する • 理論⾯が相対的にややこしく、クライアントへの説明が困難 → SHAPは適切な粒度で集計・可視化することで変数重要度やPDとしても使え るが、⾮専⾨家への説明が求められる場合はより直感的なPFIやPDを使う

Slide 42

Slide 42 text

まとめ

Slide 43

Slide 43 text

まとめ • 機械学習の解釈⼿法は様々で、それぞれ異なる側⾯から解釈を⾏っている。 求められる解釈性に応じて適切に使い分けることが重要。 • 解釈⼿法をには⽐較的安全な使い⽅と注意が必要な使い⽅がある。特に因 果関係としての解釈は、因果推論の知⾒を併⽤することが望ましい。 • PFI/PD/ICEは⽐較的直感的だが、SHAPの理解は難しい。誰かに説明する 必要がある場合はより直感的な⼿法を使うことも考えるべき。 • ブラックボックスモデル+解釈⼿法は強⼒だが、線形回帰で事⾜りる問題は 線形回帰を使った⽅が実践的。ブラックボックスモデル+解釈⼿法をEDA として⽤いて、最後に線形モデルに落とし込むという使い⽅もある。

Slide 44

Slide 44 text

機械学習の解釈⼿法を もっと学びたい⼈へ

Slide 45

Slide 45 text

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

Slide 46

Slide 46 text

参考⽂献︓機械学習の解釈性全般 • 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

Slide 47

Slide 47 text

参考⽂献︓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

Slide 48

Slide 48 text

参考⽂献︓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).

Slide 49

Slide 49 text

参考⽂献︓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).