- home
- python
- machine_learning
: 2024年5月3日
: 2024年5月3日
線形回帰や決定木単体は予測に至る過程が解釈しやすい。線形回帰であれば、回帰係数(標準回帰係数)によって各特徴量の影響力を理解することができる。決定木は、どの条件分岐を用いたかを確認することができる。これに対し、ニューラルネットワークや、決定木を重ね合わせたLightGBM1は中身がブラックボックスで解釈をするのが難しい。ビジネスの現場では、モデルの精度が求められることもあれば、上司を説得して統計的知見を活かすため、解釈性が求められることもある。
解釈性が低いアルゴリズムにおいて、どの特徴量がどの程度重要か根拠を与えるのが、説明可能なAI
- SHAP : レコード一件ごとの予測値と平均的な予測値の差分を計算し、差分を特徴量ごとに分解することで、どの特徴量が予測値に貢献するかを教えてくれる。
- もともと、協調ゲーム理論の解として提案されたShapley値を機械学習の分野で扱えるようにしたのがSHAP値
Shapley値を用いた協調ゲームの解
A、B、C、の三人がいたとする。
| 誰が働くか |
どれだけの金を得られるか |
| Aだけで働く |
100 |
| Bだけで働く |
70 |
| Cだけで働く |
0 |
| AとBだけで働く |
200 |
| AとCだけで働く |
230 |
| BとCだけで働く |
150 |
| AとBとCだけで働く |
300 |
というような状態だとする。このとき、AとBとCで働いた場合、報酬の300はどのようにして分解するべきかというのが、協調ゲームの内容。
簡単な解として、個人で働く能力を比較してみる。
A単体で得られる金 : B単体で得られる金 : C単体で得られる金 = 10 : 7 : 0
であるので、
Aには\(300 \times \frac{7}{10} = 210\),Bには\(300 \times \frac{3}{10} = 90\),Cには\(300 \times \frac{0}{10} = 0\)
配分するというのが考えられるが、AとBだけで働いた時に得られる金200と比べて、Cが仕事に参加すると金が100だけ増加する。よってCに報酬を与えないのは不当とも考えられる。
ここでAにのみフォーカスして考える。
- A単体 : 100
- Bが働くことが確定したとき、Aが働くことで、200 - 70 = 130だけ金が増加する
- Cが働くことが確定したとき、Aが働くことで、230 - 0 = 230 だけ金が増加する
- BとCが働くことが確定したとき、Aが働くことで、300 - 150 = 150 だけ金が増加する。このように、Aが働くことによって増える報酬はAの貢献度として解釈できるだろう。貢献度の平均値\(\frac{100+130+230+150}{4} \quad = 152.5\)をAの貢献度として計算する。同様に、
- B単体 : 100
- Aが働くことが確定したとき、Bが働くことで、200 - 100 = 100だけ金が増加する
- Cが働くことが確定したとき、Bが働くことで、150 - 70 = 80 だけ金が増加する
- AとCが働くことが確定したとき、Bが働くことで、300 - 230 = 70 だけ金が増加する。よってBの貢献度は\(\frac{100+100+230+70}{4} \quad= 125\)
- C単体 : 0
- Aが働くことが確定したとき、Cが働くことで、230 - 100 = 130だけ金が増加する
- Bが働くことが確定したとき、Cが働くことで、150 - 0 = 230 だけ金が増加する
- AとBが働くことが確定したとき、Cが働くことで、300 - 200 = 100 だけ金が増加する。よってCの貢献度は\(\frac{0 + 130 + 230 + 100}{4}\quad=115\)
この貢献度の比率で報酬を分配すればよい。貢献度をShapley値という。
Shapley値を回帰のためのSHAPに対応させる
学習データとして、n個の特徴量を持つm個のデータがあるとする。m個のデータをそれぞれ
\[\boldsymbol{x}_1,\boldsymbol{x}_2, \cdots, \boldsymbol{x}_m\]
とする。このときある回帰モデルfとレコード\(\boldsymbol{x}_i\)によって予測値\(\hat{y}_i = f(\boldsymbol{x}_i)\)が求められたとする。このとき、\(\boldsymbol{x}_i\)のどの特徴量がどれくらい\(f(\boldsymbol{x}_i)\)という値に貢献したかを算出したものがSHAP
先ほどの協調ゲームの話に対応させると、n個の特徴量がn人に対応し、予測値\(f(\boldsymbol{x}_i)\)がn人全員で働いたときの報酬に対応する。例えば、以下のようなデータがあったとする。
MEDVが住宅の価格で目的変数。他は説明変数。

\(E[f(X)]\)を予測値の期待値とする。下の図は\(f(\boldsymbol{x}_i)=24.338\)という出力が得られたとき、予測値からの平均からの変位の要因となった特徴量とその量を表した表
- LSTATによって+2.63だけ期待値から予測値が増加
- RMによって2.27だけ期待値から予測値が減少
- PTRATIoによって0.9だけ期待値から予測値が増加…
のように、特徴量の貢献度がわかる。7.34=LSTATのような式は、\(\boldsymbol{x}_i\)のLSTATという特徴量の値が7.34であったことを表している。

このような貢献度がSHAP値.SHAP値はアルゴリズムの種類によらず(決定木や線形回帰)求められる値で、人気が高い手法.
上の図は一つのレコード\(\boldsymbol{x}_i\)の貢献度の表だが、全てのレコードの貢献度を求め、その平均値を求めれば、特徴量自体に貢献度がわかったりする
SHAP値の実例
- 説明変数の生のデータと、目的変数の値で散布図を書いたとしても、不合理な結論が導かれることがある
- 説明変数のSHAP値と目的変数の値で散布図を書くと、理にかなった結論が導かれる。
これは、それぞれのデータの特徴を考慮しているからである
SHAP値の求め方
SHAP値を求めるには回帰モデルfを用いれば良い。いま一つのレコードにはn個の特徴量がある状況を考える。\(\boldsymbol{x}_1\)というレコードに対する目的変数の予測値は\(f(\boldsymbol{x}_1)\)である。このときShapley値を求めるとき用いた報酬(金)を\(f(\boldsymbol{x}_1)\)で代用する。しかし、Shapley値を求めるときは、ある人が参加しないということが可能であったが、回帰モデルfへの入力はn個の値が必要であり、欠けることは許されない。よって、欠ける特徴量はその特徴量の平均値で代用する。例えば、n=2,m=2と仮定して、以下のように式を定義する。(第一特徴量、第二特徴量)のように表す。
\[
\boldsymbol{x}_1 = (x_{11}, x_{12}),\\
\boldsymbol{x}_2 = (x_{21}, x_{22}),\\
\bar{x}_1 = \frac{1}{2} \sum_{i=1}^2 x_{i1}\\
\bar{x}_2 = \frac{1}{2} \sum_{i=1}^2 x_{i2}\\
\]
このとき、求めるべき値は
- \(f(x_{11}, x_{12})\)
- \(f(x_{11}, \bar{x}_1)\)
- \(f(\bar{x}_2, x_{12})\)
- \(f(\bar{x}_1, \bar{x}_2)\)
- \(f(x_{21}, x_{22})\)
- \(f(x_{21}, \bar{x}_1)\)
- \(f(\bar{x}_2, x_{22})\)
の7通り。欠ける特徴量はその平均値で代用する。
SHAP値の定義
まず、文字を設定する。
n個の特徴量を持つm個のレコードがあるとする。m個のレコードをそれぞれ
\[
\boldsymbol{x}_1,\boldsymbol{x}_2, \cdots,\boldsymbol{x}_i,\cdots, \boldsymbol{x}_m
\]
とおく。添字はiを用いる。また、一つのレコードは
\[
\boldsymbol{x}_i=
\left( \begin{array}{cc}
x_{i1} \\
x_{i2} \\
\vdots \\
x_{ij} \\
\vdots \\
x_{in} \\
\end{array} \right)
\]
と表し、添字jで特徴量の種類を区別するものとする。また、目的変数(教師データ)として
\[
y_1, y_2, \cdots, y_i, \cdots, y_m
\]
を用いる。
回帰モデルとしてfが得られたとき、\(f(\boldsymbol{x}_i)\)は\(\boldsymbol{x}_i\)の予測値である。
先ほど、ある特徴量をかけさせ、平均値で代用するという手法を用いたので、それを表すための評価を説明する。例えば、
\(S = \{x_{i1},x_{in}\}\)としたとき、\(f(S)\)は\(f(x_{i1},\bar{x}_2, \bar{x}_3, \cdots,\bar{x}_j, \cdots x_{in})\)のように、一番目とn番目の特徴量を用い、他は平均で代用させるとする。
以下に、i番目のレコードの、j番目の特徴量のSHAP値(貢献度)の式を示す
\[
\phi_{ij}
=
\sum_{S \in N/\{j\}}
\frac{|S|!(|N|-|S|-1)!}{|N|!}
(f(S\cup\{j\}) - f(S))
\]
この式の解釈としてはjが固定で、\(N/\{j\}\)の全ての部分集合に関して和をとる。\(f(S\cup\{j\}) - f(S)\)について、
j番目の特徴量を使用したときと使用していないときの回帰による予測値の差であり、j番目の特徴量の貢献度を表している。
これを全ての\(S \in N /\{j\}\)について足し合わせることで、j番目の特徴量の貢献度がわかる。引き算の前の係数は、
n個の特徴量のうち、j番目の特徴量は欠けずに参加することは確定し、他の\(|S|\)個の特徴量をランダムに一つ選ぶ場合の確率である。