Cohort Shapleyなるものを見つけた
長かった夏休みも今日で終わり、明日から大学が始まってしまうわけですが、その前に見つけたものを共有しておこうと思います。
紹介
タイトルにもあるのですが、いろいろとネットを見ていると「Cohort Shapley」なるものを発見したので紹介します。日立製作所の間瀬氏により2021年に発表されました。
以下にリンクを貼っておきます。貼ったリンクは日立製作所のブログでCohort Shapleyについて解説しています。論文やGitHubにコードも公開されていたので詳しくはそれらを見るのがいいかもしれません。
Shapley
早速中身に入っていきたいと思います。といっても僕は英語疎いので論文よくわからなかったんですけどね。
簡単に言うと機械学習におけるShapley値の新たな計算方法です。まずゲーム理論におけるShapley値は以下の式で表されます。
$$
\phi_i(v):=\sum_{A \subset X \backslash{i}} \frac{(n-|A|-1) !|A| !}{n !} (v(A \cup{i})-v(A))
$$
係数はとりあえず置いておいて、$${v(A \cup{i})-v(A)}$$ を見ればわかるようにプレイヤーiが加わる前と後の差分をとっているわけです。では機械学習においてはどうやってこの差分をとるのかを見ていきます。
一般的なShapley
一般的なShapleyでは、あるインスタンスxの特徴量xiの貢献度を出すにはそれとランダムなインスタンスzとの合成インスタンスを生成する必要があります。xiを含める場合の合成インスタンス(x1, x2, ,,, xi, ,,, zn-1, zn)と、xiを含めない場合の合成インスタンス(x1, x2, ,,, zi, ,,, zn-1, zn)との予測値の差をとる、これを繰り返して差分の平均をとることでShapleyを出しているようです。
Cohort Shapley
ではCohort Shapleyではどうするのか。合成インスタンスなんか作りません。観測されたデータと予測値のみを用います。注目している特徴量xiを含める場合の値は、i番目の特徴量がxiと近いインスタンスをデータ集合の中から選び、その予測値の平均を用います。逆に含めない場合の値はそれ以外のインスタンスの予測値の平均を用います。そしてこれらの値の差分をとることによって貢献度を算出します。たぶん。
間違った理解をしている部分はあると思います。ですが、要は合成データなんか使うのって信頼性どうなの?って話で、Cohort Shapleyでは観測データと予測値のみから算出するから、それらの因果関係を変に壊したりはしてないと保証できるぜってことだと思います。
終わりに
僕の所属している研究室でもShapley値はよく使っています。なので共有の意味を込めて記事を作成しました。
うちの研究室では今回話したどちらとも異なる方法、ファジィ測度からShapley値を計算しています。モデルの重みなどを用いて算出するので、観測されたデータと予測値のみから導こうとするCohort Shapleyとは相性が悪いかもしれませんが、まあ誰かの新しい発見とかに繋がればと思います。