勉強の記録

機械学習、情報処理について勉強した事柄など

Microsoft/InterpretMLの中身

一言でいうと

ある一つの特徴量のみのdecision treeを作って残差を予測というのをcyclicに加えていくモデル

知ったきっかけ

upura.hatenablog.com

解釈可能性が高くモデルの修正も容易な新たなboosting machineとして話題のInterpretML。

本家githubによると、

  • EBM is a fast implementation of GA2M. Details on the algorithm can be found here.

ということらしいので、まずはhereのリンクされている論文から。

Intelligible Models for HealthCare: Predicting Pneumonia Risk and Hospital 30-day Readmission (Rich C, KDD'15)

この論文自体にアルゴリズムの詳細はあまり載っていなかった。

書いてあるのは、以下のように二次の交互作用まで加味した一般化加法的モデルを用いていることと、baggingして100個のモデルを作ってから平均したよ、ということくらい。加法的モデルの中身であるfについては[5]の論文を読め、とのこと。gradient boosting of bagging of shallow regression treesらしい。[5]に比べると、二次の交互作用項を考慮してその数KをCVで求め、モデルに組み込んでいる部分が新しい点。

f:id:tmitani-tky:20190706220543p:plain
R Caruana+, 2015

あとは、肺炎データセットにおいて、いかにintelligibleなモデルが構築できたかの実例が提示されているので気になる方は論文を見て欲しい。

(introductionではいわゆるuntreatedな場合のdisease risk scoreを推定するような論調で書かれているのに、求めているのはtreatmentを一切考慮しない説明変数のみの周辺確率なのはちょっとどうなの、という印象)

Intelligible Models for Classification and Regression (Yin L+, KDD'12)

二次の交互作用を加えていないboosted bagged treesによるgeneralized additive model (GAM)を他のsplineなどによるGAMや単純なLogistic regressionなどと比較している。結局、boosted bagged treesによるGAMが一番良かったとのこと。

f:id:tmitani-tky:20190706225548p:plain
(Y Lou+, KDD'12)

boosted bagged treesによるGAM構築のアルゴリズム

  • 各特徴量を一周するのを1 iterationとして、M iteration繰り返す
  • 各特徴量については、その時点での残差を予測する一変数からのdecision treeを構築、これをfunctionに加える(boosting)
  • この残差を予測するdecision treeをbaggingしてensembleしたものにする(bagging)
  • これをある一定の収束条件を満たすまで繰り返す。

あくまで相関であることに注意

最初の論文の5.7でも協調されているが、あくまで変数間の相関をとらえており原則として因果推論に用いるモデルではないことに注意。

これSHAPやLIMEあたりも求められるようになっているのだけど、特徴量を計算していく順番に大きく依存するのでは。順番に一巡する代わりに一斉に求めて1/K倍にするなどすると、収束は遅くなるけどその分特徴量の重要性については順序のバイアスなく求められそうな気もしなくもない。

精度が出るdatasetは限定されるかも(私見

あくまで二次の交互作用までしかとらえていないので、精度がでるdatasetは限定されるかもしれない。githubページに載っている精度は交互作用を加味していないEBMの精度っぽい。いずれも交互作用のない1次のlogistic regressionでAUROCが0.9前後となるような比較的単純なdatasetで、random forestよりもlogistic regressionが有効なものも多い。より複雑なdatasetではXGBoostなどが予測性能として上回ることもあるのでは。

個々の特徴量に対するfunctionだけみてそれを落とすことの妥当性は?

主張のひとつに、一般化加法的モデルで各特徴量についてのfunctionは平均0になるようにモデル化しているので、明らかにおかしな推定式になったものは取り除ける=操作できるのがメリットというのがあった。例としては肺炎予測モデルにおいて、喘息があるとかえって死亡率が低い(とモデル化される)といった特徴量。筆者は喘息ありだと最初からICUに入って集中治療を受けるからでは?と推察しており、この項目のfunctionを加法的モデルから取り除くことを提案していた。

これ喘息だから良いけど、他の項目と交絡があるような因子だと、マイナスになったものを取り除くだけでは逆のバイアスを生みかねない気がする。

まとめ

医療系のデータでは割とうまくいきそうな気もする。Microsoftからなのに比較対象がなんでXGBoostなんですかね.