Shapについて調べたこと備忘録
Tree explainerでShap値を求めるとき、データに比例して時間がかかるのですべてのデータを渡さずサンプリングすることが推奨されていいる。(以下URLのfeature_perturbationの説明参照)
https://shap-lrjball.readthedocs.io/en/docs_update/generated/shap.TreeExplainer.html
またShap値の計算でBackgroundデータを使用しない方法もあり、それはTree explainerのfeature_perturbation="tree_path_dependent"でできる。
この計算はBackgroundデータを使う"interventional"よりかなり早い。(試したら29,597行×108列のデータで8倍くらいの差はあった。指数的に増えるならもっと差が出るかも。)
ただ、機械学習を解釈する技術( www.amazon.co.jp/dp/429712226X )のP197には特徴量同士に相関がある場合、"tree_path_dependent"はモデルが実際に使用していない特徴量に対しても貢献度がついてしまう恐れがあるので"interventional"推奨と書かれていたりもする。
一方、特徴量同士に相関があっても、"tree_path_dependent"は実際に使用していない特徴量に対しては貢献度がつかなかったという実験もある。
https://pacmedhealth.medium.com/explainability-for-tree-based-models-which-shap-approximation-is-best-6df78bc5d086
なので"tree_path_dependent"を活用するのも悪くない可能性がある。
少なくとも決定木系アルゴリズムのFeature Importanceだけを示すよりも、計算が遅いからとあきらめずShap値を計算した方がなにかしら示唆が得られやすいかも。
一つ疑問、機械学習を解釈する技術では、"interventional"指定なら使用していない特徴量に対して貢献度がつかない、と逆説的に言っているので、共線性を気にする必要はないのか??