このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
shapley
説明
クエリ点の特徴量のシャープレイ値は、クエリ点についての予測に関して特徴量が原因で生じた平均予測からの偏差を説明します。各クエリ点について、すべての特徴に関するシャープレイ値の合計は、予測の平均からの合計偏差に対応します。
1 つまたは複数のクエリ点 (queryPoints
) を指定して、機械学習モデル用の shapley
オブジェクトを作成できます。オブジェクトが作成され、それらのクエリ点についてすべての特徴量のシャープレイ値が計算されます。
シャープレイ値を使用して、指定した各クエリ点での予測に対する個々の特徴量の寄与を説明します。関数 plot
を使用して、1 つのクエリ点のシャープレイ値または複数のクエリ点で平均化した平均絶対シャープレイ値の棒グラフを表示します。クエリ点が複数の場合は、関数 boxchart
および swarmchart
を使用して、それぞれ箱ひげ図および粒子群散布図としてシャープレイ値を可視化できます。新しいクエリ点のシャープレイ値を計算するには、関数 fit
を使用します。
作成
構文
説明
は、クエリ点 explainer
= shapley(___,QueryPoints=queryPoints
)queryPoints
のシャープレイ値も計算し、計算したシャープレイ値を explainer
の ShapleyValues
プロパティに格納します。前の構文におけるいずれかの入力引数の組み合わせに加えて、queryPoints
を指定できます。
では、1 つ以上の名前と値の引数を使用して追加オプションを指定します。たとえば、explainer
= shapley(___,Name=Value
)UseParallel=true
と指定してシャープレイ値を並列計算します。
入力引数
blackbox
— 解釈される機械学習モデル
回帰モデル オブジェクト | 分類モデル オブジェクト | 関数ハンドル
解釈される機械学習モデル。完全またはコンパクトな回帰または分類モデル オブジェクトとして指定するか、関数ハンドルとして指定します。
完全またはコンパクトなモデル オブジェクト — オブジェクト関数
predict
をもつ、完全またはコンパクトな、回帰または分類モデル オブジェクトを指定できます。ソフトウェアは、関数predict
を使用してシャープレイ値を計算します。予測子データを含まないモデル オブジェクト (コンパクトなモデルなど) を指定する場合、
X
を使用して予測子データを提供しなければなりません。モデルに学習させる場合は、行が各観測値に対応する数値行列または table を予測子データに使用してください。
回帰モデル オブジェクト
サポートされているモデル 完全またはコンパクトな回帰モデル オブジェクト 回帰モデルのアンサンブル RegressionEnsemble
,RegressionBaggedEnsemble
,CompactRegressionEnsemble
ランダムな特徴量拡張を使用したガウス カーネル回帰モデル RegressionKernel
ガウス過程回帰 RegressionGP
,CompactRegressionGP
一般化加法モデル RegressionGAM
,CompactRegressionGAM
高次元データの線形回帰 RegressionLinear
ニューラル ネットワーク回帰モデル RegressionNeuralNetwork
,CompactRegressionNeuralNetwork
回帰木 RegressionTree
,CompactRegressionTree
サポート ベクター マシン回帰 RegressionSVM
,CompactRegressionSVM
分類モデル オブジェクト
サポートされているモデル 完全またはコンパクトな分類モデル オブジェクト 判別分析分類器 ClassificationDiscriminant
,CompactClassificationDiscriminant
サポート ベクター マシンまたはその他の分類器用のマルチクラス モデル ClassificationECOC
,CompactClassificationECOC
分類用のアンサンブル学習器 ClassificationEnsemble
,CompactClassificationEnsemble
,ClassificationBaggedEnsemble
ランダムな特徴量拡張を使用したガウス カーネル分類モデル ClassificationKernel
一般化加法モデル ClassificationGAM
,CompactClassificationGAM
k 最近傍分類器 ClassificationKNN
線形分類モデル ClassificationLinear
マルチクラス単純ベイズ モデル ClassificationNaiveBayes
,CompactClassificationNaiveBayes
ニューラル ネットワーク分類器 ClassificationNeuralNetwork
,CompactClassificationNeuralNetwork
1 クラスおよびバイナリ分類用のサポート ベクター マシン分類器 ClassificationSVM
,CompactClassificationSVM
マルチクラス分類用の二分決定木 ClassificationTree
,CompactClassificationTree
関数ハンドル — 予測子データを受け入れ、予測子データの各観測値についての予測が格納された列ベクトルを返す関数ハンドルを指定できます。予測は、回帰の場合は予測応答、分類の場合は単一クラスの予測スコアになります。
X
を使用して予測子データを提供しなければなりません。
X
— 予測子データ
数値行列 | テーブル
予測子データ。数値行列またはテーブルとして指定します。X
の各行は 1 つの観測値に対応し、各列は 1 つの変数に対応します。
数値行列の場合
X
の列を構成する変数の順序は、blackbox
に学習させてblackbox.X
に格納した予測子変数の順序と同じでなければなりません。table を使用して
blackbox
に学習をさせた場合、table に含まれている予測子変数がすべて数値変数であれば、X
を数値行列にすることができます。
テーブルの場合
table (たとえば
Tbl
) を使用してblackbox
に学習をさせた場合、X
内のすべての予測子変数は変数名およびデータ型がTbl
内の変数と同じでなければなりません。ただし、X
の列の順序がTbl
の列の順序に対応する必要はありません。数値行列を使用して
blackbox
に学習をさせた場合、blackbox.PredictorNames
内の予測子名とX
内の対応する予測子変数名が同じでなければなりません。学習時に予測子の名前を指定するには、名前と値の引数PredictorNames
を使用します。X
内の予測子変数はすべて数値ベクトルでなければなりません。X
に追加の変数 (応答変数や観測値の重みなど) を含めることができますが、shapley
はこれらを無視します。shapley
は、文字ベクトルの cell 配列ではない cell 配列や複数列の変数をサポートしません。
blackbox
が予測子データを含まないモデル オブジェクトまたは関数ハンドルである場合、X
を指定しなければなりません。blackbox
が完全な機械学習モデル オブジェクトであり、この引数を指定する場合、shapley
は blackbox
の予測子データを使用しません。指定した予測子データのみを使用します。
データ型: single
| double
queryPoints
— クエリ点
数値行列 | テーブル
shapley
が予測を説明するクエリ点。数値行列または table として指定します。queryPoints
の各行が 1 つのクエリ点に対応します。
数値行列の場合
テーブルの場合
table (たとえば
Tbl
) を使用してblackbox
に学習させた場合、queryPoints
内のすべての予測子変数は変数名およびデータ型がTbl
内の変数と同じでなければなりません。ただし、queryPoints
の列の順序がTbl
の列の順序に対応する必要はありません。数値行列を使用して
blackbox
に学習させた場合、blackbox.PredictorNames
内の予測子名とqueryPoints
内の対応する予測子変数名が同じでなければなりません。学習時に予測子の名前を指定するには、名前と値の引数PredictorNames
を使用します。queryPoints
内の予測子変数はすべて数値ベクトルでなければなりません。queryPoints
に追加の変数 (応答変数や観測値の重みなど) を含めることができますが、shapley
はこれらを無視します。shapley
は、文字ベクトルの cell 配列ではない cell 配列や複数列の変数をサポートしません。
連続予測子について queryPoints
に NaN
が含まれており、Method
が "conditional"
である場合、返されたオブジェクトに含まれているシャープレイ値 (ShapleyValues
) は NaN
になります。ガウス過程回帰 (GPR)、カーネル、線形、ニューラル ネットワーク、またはサポート ベクター マシン (SVM) のモデルである回帰モデルを使用する場合、欠損値がある予測子や学習時にはなかったカテゴリを含むクエリ点については、shapley
はシャープレイ値として NaN
を返します。それ以外のすべてのモデルについては、shapley
は queryPoints
内の欠損値を blackbox
(blackbox
のオブジェクト関数 predict
または blackbox
で指定された関数ハンドル) と同じ方法で処理します。
R2024a より前: クエリ点が 1 つだけの場合は QueryPoint=queryPoint
を使用して指定できます。queryPoint
は数値の行ベクトルまたは単一行 table です。
例: blackbox.X(1,:)
は、完全な機械学習モデル blackbox
の予測子データの最初の観測値としてクエリ点を指定します。
データ型: single
| double
| table
オプションの引数のペアを Name1=Value1,...,NameN=ValueN
として指定します。ここで Name
は引数名、Value
は対応する値です。名前と値の引数は他の引数の後ろにする必要がありますが、ペアの順序は関係ありません。
例: shapley(blackbox,QueryPoint=q,Method="conditional")
は、shapley
オブジェクトを作成し、Kernel SHAP アルゴリズムの拡張機能を使用してクエリ点 q
のシャープレイ値を計算します。
CategoricalPredictors
— カテゴリカル予測子のリスト
正の整数のベクトル | logical ベクトル | 文字行列 | string 配列 | 文字ベクトルの cell 配列 | "all"
カテゴリカル予測子のリスト。次の表のいずれかの値として指定します。
値 | 説明 |
---|---|
正の整数のベクトル | ベクトルの各エントリは、対応する予測子がカテゴリカルであることを示すインデックス値です。インデックス値の範囲は 1 ~
|
logical ベクトル |
|
文字行列 | 行列の各行は予測子変数の名前です。名前は、table 形式の予測子データの変数名と一致しなければなりません。文字行列の各行が同じ長さになるように、名前を余分な空白で埋めてください。 |
文字ベクトルの cell 配列または string 配列 | 配列の各要素は予測子変数の名前です。名前は、table 形式の予測子データの変数名と一致しなければなりません。 |
"all" | すべての予測子がカテゴリカルです。 |
blackbox
を関数ハンドルとして指定する場合、shapley
は予測子データX
からカテゴリカル予測子を識別します。予測子データが table 内にある場合、shapley
は、その変数が logical ベクトル、順序付けのない categorical ベクトル、文字配列、string 配列または文字ベクトルの cell 配列のいずれかである場合に、変数を categorical であると見なします。予測子データが行列である場合、shapley
はすべての予測子が連続的であると見なします。他の予測子をカテゴリカル予測子として指定するには、名前と値の引数CategoricalPredictors
を使用してそれらを指定します。blackbox
を回帰または分類モデル オブジェクトとして指定する場合、shapley
はモデル オブジェクトのCategoricalPredictors
プロパティを使用してカテゴリカル予測子を識別します。
blackbox
が順序付きのカテゴリカル予測子をサポートしている場合に Method
を "interventional"
として指定すると、shapley
で順序付きのカテゴリカル予測子がサポートされます。
例: CategoricalPredictors="all"
データ型: single
| double
| logical
| char
| string
| cell
MaxNumSubsets
— 予測子サブセットの最大数
min(2^M,1024)
(M
は予測子の数) (既定値) | 正の整数
シャープレイ値の計算に使用する予測子サブセットの最大数。正の整数として指定します。
shapley
が使用するサブセットを選択する方法の詳細については、計算コストを参照してください。
この引数は、関数 shapley
で Kernel SHAP アルゴリズムまたは Kernel SHAP アルゴリズムの拡張機能を使用する場合のみ有効です。Method
が "interventional"
の場合に引数 MaxNumSubsets
を設定すると、Kernel SHAP アルゴリズムが使用されます。詳細については、アルゴリズムを参照してください。
例: MaxNumSubsets=100
データ型: single
| double
Method
— シャープレイ値の計算アルゴリズム
"interventional"
(既定値) | "conditional"
シャープレイ値の計算アルゴリズム。"interventional"
または "conditional"
として指定します。
選択されたアルゴリズムの名前が Method
プロパティに格納されます。詳細については、アルゴリズムを参照してください。
R2023a より前: この引数は "interventional-kernel"
または "conditional-kernel"
として指定できます。shapley
は、Kernel SHAP アルゴリズムと Kernel SHAP アルゴリズムの拡張機能をサポートしています。
例: Method="conditional"
データ型: char
| string
OutputFcn
— 各クエリ点の評価後に呼び出される関数
[]
(既定値) | 関数ハンドル
R2024a 以降
各クエリ点の評価後に呼び出される関数。関数ハンドルとして指定します。シャープレイ値の計算の停止、変数の作成、結果のプロットなど、さまざまなタスクを出力関数で実行できます。独自の出力関数を記述する方法の詳細と例については、Shapley Output Functionsを参照してください。
この引数は、関数 shapley
で複数のクエリ点のシャープレイ値を計算する場合で、UseParallel
の値が false
の場合のみ有効です。
データ型: function_handle
UseParallel
— 並列実行のフラグ
false
(既定値) | true
並列実行のフラグ。数値または logical の 1
(true
) または 0
(false
) として指定します。UseParallel=true
を指定した場合、関数 shapley
は parfor
を使用して for
ループの反復を実行します。Parallel Computing Toolbox™ がある場合、ループが並列に実行されます。
この引数は、関数 shapley
で複数のクエリ点のシャープレイ値を計算する場合、または木のアンサンブル用の Tree SHAP アルゴリズム、Kernel SHAP アルゴリズム、または Kernel SHAP アルゴリズムの拡張機能を使用して 1 つのクエリ点のシャープレイ値を計算する場合のみ有効です。
例: UseParallel=true
データ型: logical
プロパティ
BlackboxModel
— 解釈される機械学習モデル
回帰モデル オブジェクト | 分類モデル オブジェクト | 関数ハンドル
この プロパティ は読み取り専用です。
解釈される機械学習モデル。回帰または分類モデル オブジェクトとして指定するか、関数ハンドルとして指定します。
blackbox
引数によってこのプロパティが設定されます。
BlackboxFitted
— 機械学習モデルによって計算されたクエリ点の予測
ベクトル | []
この プロパティ は読み取り専用です。
機械学習モデル (BlackboxModel
) によって計算されたクエリ点の予測。ベクトルとして指定します。
BlackboxModel
がモデル オブジェクトの場合、BlackboxFitted
には、回帰の場合は予測された応答、分類の場合は分類されたラベルが格納されます。BlackboxModel
が関数ハンドルの場合、BlackboxFitted
には、関数ハンドルで返された値 (回帰の場合は予測された応答、分類の場合は予測されたスコア) が格納されます。
BlackboxFitted
プロパティは、クエリ点を指定しない場合は空になります。
CategoricalPredictors
— カテゴリカル予測子のインデックス
正の整数のベクトル | []
この プロパティ は読み取り専用です。
カテゴリカル予測子のインデックス。正の整数のベクトルとして指定します。CategoricalPredictors
には、対応する予測子がカテゴリカルであることを示すインデックス値が格納されます。インデックス値の範囲は 1 ~ p
です。p
はモデルの学習に使用した予測子の数です。どの予測子もカテゴリカルではない場合、このプロパティは空 ([]
) になります。
関数ハンドルを使用して
blackbox
を指定した場合、shapley
は予測子データX
からカテゴリカル予測子を識別します。名前と値の引数CategoricalPredictors
を指定した場合にこのプロパティが設定されます。blackbox
を回帰または分類モデル オブジェクトとして指定した場合、shapley
はモデル オブジェクトのCategoricalPredictors
プロパティを使用してこのプロパティを決定します。
blackbox
が順序付きのカテゴリカル予測子をサポートしている場合に Method
を "interventional"
として指定すると、shapley
で順序付きのカテゴリカル予測子がサポートされます。
Intercept
— 平均予測
数値ベクトル | 数値スカラー
この プロパティ は読み取り専用です。
予測子データ X
に対して平均化した平均予測。数値ベクトルまたは数値スカラーを指定します。
BlackboxModel
が分類モデル オブジェクトの場合、Intercept
は各クラスの平均分類スコアのベクトルになります。BlackboxModel
が回帰モデル オブジェクトの場合、Intercept
は平均応答のスカラーになります。BlackboxModel
が関数ハンドルの場合、Intercept
は平均関数評価のスカラーになります。
クエリ点について、すべての特徴量に関するシャープレイ値の合計は、予測の平均 (Intercept
) からの合計偏差に対応します。
MeanAbsoluteShapley
— 平均絶対シャープレイ値
テーブル | []
R2024a 以降
この プロパティ は読み取り専用です。
平均絶対シャープレイ値。table として指定します。平均はすべてのクエリ点 (QueryPoints
) から取得されます。
回帰の場合、table には 2 つの列があります。1 列目に予測子変数名が格納され、2 列目に予測子の平均絶対シャープレイ値が格納されます。
分類の場合、table には
BlackboxModel
内のクラス数に応じて 2 つ以上の列があります。1 列目に予測子変数名が格納され、残りの列に各クラスの予測子の平均絶対シャープレイ値が格納されます。
MeanAbsoluteShapley
プロパティは、クエリ点を指定しない場合は空になります。
Method
— シャープレイ値の計算アルゴリズム
"interventional-linear"
| "interventional-tree"
| "interventional-kernel"
| "interventional-mix"
| "conditional-kernel"
この プロパティ は読み取り専用です。
シャープレイ値の計算アルゴリズム。"interventional-linear"
、"interventional-tree"
、"interventional-kernel"
、"interventional-mix"
、または "conditional-kernel"
として指定します。
"interventional-linear"
—shapley
は、介入型の価値関数を伴う Linear SHAP アルゴリズム[1]を使用します。つまり、線形モデルについて、shapley
は推定係数を使用して介入型のシャープレイ値を計算します。"interventional-tree"
—shapley
は、介入型の価値関数を伴う Tree SHAP アルゴリズム[2]を使用します。"interventional-kernel"
—shapley
は、介入型の価値関数を伴う Kernel SHAP アルゴリズム[1]を使用します。"interventional-mix"
—shapley
が使用するシャープレイ値の計算アルゴリズムがすべてのクエリ点で同じにならない場合があります。つまり、shapley
において、一部のクエリ点のシャープレイ値の計算には介入型の価値関数を伴う Tree SHAP アルゴリズムが使用され、他のクエリ点のシャープレイ値の計算には介入型の価値関数を伴う Kernel SHAP アルゴリズムが使用されることがあります。 (R2024a 以降)特定のクエリ点に対する手法の情報の確認方法を示す例については、Find Method Used for Individual Shapley Value Computationsを参照してください。
"conditional-kernel"
—shapley
は、条件付きの価値関数を伴う Kernel SHAP アルゴリズムの拡張機能[3]を使用します。
shapley
の Method
引数、または fit
の Method
引数によってこのプロパティが設定されます。
詳細については、アルゴリズムを参照してください。
NumSubsets
— 予測子サブセットの数
正の整数
この プロパティ は読み取り専用です。
シャープレイ値の計算に使用する予測子サブセットの数。正の整数として指定します。
shapley
の MaxNumSubsets
引数、または fit
の MaxNumSubsets
引数によってこのプロパティが設定されます。
shapley
が使用するサブセットを選択する方法の詳細については、計算コストを参照してください。
QueryPoints
— クエリ点
数値行列 | テーブル | []
この プロパティ は読み取り専用です。
shapley
がシャープレイ値 (ShapleyValues
) を使用して予測を説明するクエリ点。数値行列または table として指定します。
このプロパティは、shapley
の名前と値の引数 QueryPoints=
、または queryPoints
fit
の引数 queryPoints
によって設定されます。
ShapleyValues
— クエリ点のシャープレイ値
テーブル | []
この プロパティ は読み取り専用です。
クエリ点 (QueryPoints
) のシャープレイ値。table として指定します。
回帰の場合、table には 2 つの列があります。1 列目には予測子変数名が、2 列目には予測子のシャープレイ値が含まれています。
分類の場合、table には
BlackboxModel
内のクラス数に応じて 2 つ以上の列があります。1 列目には予測子変数名が、残りの列には各クラスの予測子のシャープレイ値が含まれています。
ShapleyValues
プロパティは、クエリ点を指定しない場合は空になります。
複数のクエリ点を当てはめた後に 1 つのクエリ点のシャープレイ値を確認する方法を示す例については、複数のクエリ点を当てはめた後の 1 つのクエリ点の調査を参照してください。
X
— 予測子データ
数値行列 | テーブル
この プロパティ は読み取り専用です。
予測子データ。数値行列またはテーブルとして指定します。
X
の各行は 1 つの観測値に対応し、各列は 1 つの変数に対応します。
連続予測子について観測値に NaN
が含まれており、Method
が "conditional-kernel"
である場合、shapley
はシャープレイ値の計算にその観測値を使用しません。同様に、欠損値がある予測子や学習時にはなかったカテゴリが観測値に含まれており、BlackboxModel
が GPR、カーネル、線形、ニューラル ネットワーク、または SVM のタイプの回帰モデルである場合、shapley
はシャープレイ値の計算でその観測値を省略します。それ以外の場合、shapley
は X
内の欠損値を BlackboxModel
(BlackboxModel
のオブジェクト関数 predict
または BlackboxModel
で指定された関数ハンドル) と同じ方法で処理します。
shapley
は、欠損値をもつ行を含むすべての観測値をこのプロパティに格納します。
オブジェクト関数
fit | クエリ点のシャープレイ値の計算 |
plot | 棒グラフを使用したシャープレイ値のプロット |
boxchart | Visualize Shapley values using box charts (box plots) |
swarmchart | Visualize Shapley values using swarm scatter charts |
例
shapley
オブジェクトを作成する際のシャープレイ値の計算
分類モデルの学習を行い、shapley
オブジェクトを作成します。shapley
オブジェクトを作成するときに、クエリ点を指定して、クエリ点のシャープレイ値が計算されるようにします。次に、オブジェクト関数 plot
を使用して、シャープレイ値の棒グラフを作成します。
CreditRating_Historical
データ セットを読み込みます。データ セットには、顧客 ID、顧客の財務比率、業種ラベル、および信用格付けが格納されています。
tbl = readtable("CreditRating_Historical.dat");
テーブルの最初の 3 行を表示します。
head(tbl,3)
ID WC_TA RE_TA EBIT_TA MVE_BVTD S_TA Industry Rating _____ _____ _____ _______ ________ _____ ________ ______ 62394 0.013 0.104 0.036 0.447 0.142 3 {'BB'} 48608 0.232 0.335 0.062 1.969 0.281 8 {'A' } 42444 0.311 0.367 0.074 1.935 0.366 1 {'A' }
関数fitcecoc
を使用して、信用格付けの blackbox モデルに学習させます。tbl
内の 2 ~ 7 列目の変数を予測子変数として使用します。クラス名を指定してクラスの順序を設定することが推奨されます。
blackbox = fitcecoc(tbl,"Rating", ... PredictorNames=tbl.Properties.VariableNames(2:7), ... CategoricalPredictors="Industry", ... ClassNames={'AAA','AA','A','BBB','BB','B','CCC'});
最後の観測値の予測を説明する shapley
オブジェクトを作成します。クエリ点を指定して、シャープレイ値が計算されて ShapleyValues
プロパティに格納されるようにします。
R2024a より前: QueryPoints
の代わりに、名前と値の引数 QueryPoint
を使用してクエリ点を指定します。
queryPoint = tbl(end,:)
queryPoint=1×8 table
ID WC_TA RE_TA EBIT_TA MVE_BVTD S_TA Industry Rating
_____ _____ _____ _______ ________ ____ ________ ______
73104 0.239 0.463 0.065 2.924 0.34 2 {'AA'}
explainer = shapley(blackbox,QueryPoints=queryPoint)
Warning: Computation can be slow because the predictor data has over 1000 observations. Use a smaller sample of the training set or specify 'UseParallel' as true for faster computation.
explainer = shapley explainer with the following local Shapley values: Predictor AAA AA A BBB BB B CCC __________ _________ __________ ___________ __________ ___________ __________ __________ "WC_TA" 0.051503 0.022532 0.0093463 0.0017109 -0.027655 -0.041443 -0.039881 "RE_TA" 0.16771 0.09421 0.051629 -0.011019 -0.087919 -0.20974 -0.29463 "EBIT_TA" 0.0011995 0.00052588 0.00041919 0.00011866 -0.00066237 -0.0013347 -0.0011824 "MVE_BVTD" 1.3417 1.3082 0.61472 -0.11247 -0.6555 -0.86908 -0.68546 "S_TA" -0.013056 -0.0091039 -0.00031099 -0.0028624 -0.00019227 0.0016759 -0.0024149 "Industry" -0.10141 -0.048672 0.0036522 0.081542 0.092657 0.10464 0.15889 Properties, Methods
警告メッセージが示すように、予測子データに 1000 個を超える観測値があるため、計算が遅くなる場合があります。計算速度を向上するには、学習セットの標本を小さくするか、UseParallel
に true
を指定してください。
分類モデルの場合、shapley
は各クラスの予測クラス スコアを使用してシャープレイ値を計算します。ShapleyValues
プロパティの値を表示します。
explainer.ShapleyValues
ans=6×8 table
Predictor AAA AA A BBB BB B CCC
__________ _________ __________ ___________ __________ ___________ __________ __________
"WC_TA" 0.051503 0.022532 0.0093463 0.0017109 -0.027655 -0.041443 -0.039881
"RE_TA" 0.16771 0.09421 0.051629 -0.011019 -0.087919 -0.20974 -0.29463
"EBIT_TA" 0.0011995 0.00052588 0.00041919 0.00011866 -0.00066237 -0.0013347 -0.0011824
"MVE_BVTD" 1.3417 1.3082 0.61472 -0.11247 -0.6555 -0.86908 -0.68546
"S_TA" -0.013056 -0.0091039 -0.00031099 -0.0028624 -0.00019227 0.0016759 -0.0024149
"Industry" -0.10141 -0.048672 0.0036522 0.081542 0.092657 0.10464 0.15889
ShapleyValues
プロパティには、クラスごとにすべての特徴量のシャープレイ値が格納されています。
関数 plot
を使用して予測クラスのシャープレイ値をプロットします。
plot(explainer)
横棒グラフは、絶対値で並べ替えられた、すべての変数のシャープレイ値を示します。各シャープレイ値は、クエリ点についてのスコアに関して対応する変数が原因で生じた予測クラスの平均スコアからの偏差を説明します。
shapley
オブジェクトの作成と fit
を使用したシャープレイ値の計算
回帰モデルの学習を行い、shapley
オブジェクトを作成します。shapley
オブジェクトを作成するときに、クエリ点を指定しなかった場合、シャープレイ値は計算されません。オブジェクト関数 fit
を使用して、指定したクエリ点のシャープレイ値を計算します。次に、オブジェクト関数 plot
を使用して、シャープレイ値の棒グラフを作成します。
carbig
データ セットを読み込みます。このデータ セットには、1970 年代と 1980 年代初期に製造された自動車の測定値が格納されています。
load carbig
Acceleration
、Cylinders
などの予測子変数と応答変数 MPG
が格納された table を作成します。
tbl = table(Acceleration,Cylinders,Displacement, ...
Horsepower,Model_Year,Weight,MPG);
学習セットの欠損値を削除すると、メモリ消費量を減らして関数 fitrkernel
の学習速度を向上させることができます。tbl
の欠損値を削除します。
tbl = rmmissing(tbl);
関数fitrkernel
を使用して MPG
の blackbox モデルの学習を行います。変数 Cylinders
と Model_Year
をカテゴリカル予測子として指定します。残りの予測子を標準化します。
rng("default") % For reproducibility mdl = fitrkernel(tbl,"MPG",CategoricalPredictors=[2 5], ... Standardize=true);
shapley
オブジェクトを作成します。mdl
には学習データが含まれないため、データ セット tbl
を指定します。
explainer = shapley(mdl,tbl)
explainer = BlackboxModel: [1x1 RegressionKernel] QueryPoints: [] BlackboxFitted: [] ShapleyValues: [] X: [392x7 table] CategoricalPredictors: [2 5] Method: "interventional-kernel" Intercept: 22.7326 NumSubsets: 64
explainer
は、学習データ tbl
を X
プロパティに格納します。
tbl
の最初の観測値についてすべての予測子変数のシャープレイ値を計算します。
queryPoint = tbl(1,:)
queryPoint=1×7 table
Acceleration Cylinders Displacement Horsepower Model_Year Weight MPG
____________ _________ ____________ __________ __________ ______ ___
12 8 307 130 70 3504 18
explainer = fit(explainer,queryPoint);
回帰モデルの場合、shapley
は予測応答を使用してシャープレイ値を計算し、ShapleyValues
プロパティに格納します。ShapleyValues
プロパティの値を表示します。
explainer.ShapleyValues
ans=6×2 table
Predictor ShapleyValue
______________ ____________
"Acceleration" -0.23731
"Cylinders" -0.87423
"Displacement" -1.0224
"Horsepower" -0.56975
"Model_Year" -0.055414
"Weight" -0.86088
関数 plot
を使用して、クエリ点のシャープレイ値をプロットします。
plot(explainer)
横棒グラフは、絶対値で並べ替えられた、すべての変数のシャープレイ値を示します。各シャープレイ値は、クエリ点についての予測に関して対応する変数が原因で生じた平均からの偏差を説明します。
複数のクエリ点を当てはめた後の 1 つのクエリ点の調査
分類モデルに学習させ、shapley オブジェクトを作成します。オブジェクト関数 swarmchart
を使用して複数のクエリ点のシャープレイ値を可視化します。いずれかの目的のクエリ点のシャープレイ値を調べます。
150 本のアヤメについての測定値が格納された fisheriris
データ セットを読み込み、table を作成します。SepalLength
、SepalWidth
、PetalLength
、および PetalWidth
は予測子変数、Species
は応答変数です。
fisheriris = readtable("fisheriris.csv");
データを学習セットとテスト セットに分割します。観測値の 75% を学習セットの作成に使用し、観測値の 25% をテスト セットの作成に使用します。
rng("default") c = cvpartition(fisheriris.Species,"Holdout",0.25); trainTbl = fisheriris(training(c),:); testTbl = fisheriris(test(c),:);
関数 fitcnet
を使用して分類モデルに学習させます。予測子変数を標準化し、クラスの順序を指定します。
mdl = fitcnet(trainTbl,"Species",Standardize=true, ... ClassNames={'setosa','versicolor','virginica'});
複数のクエリ点の予測を説明する shapley オブジェクトを作成します。テスト セットのデータを使用してシャープレイ値を計算し、テスト セットの観測値をクエリ点として指定します。
explainer = shapley(mdl,testTbl,QueryPoints=testTbl)
explainer = shapley explainer with the following mean absolute Shapley values: Predictor setosa versicolor virginica _____________ ________ __________ _________ "SepalLength" 0.12466 0.12539 0.066055 "SepalWidth" 0.027488 0.03004 0.016665 "PetalLength" 0.17226 0.14164 0.18777 "PetalWidth" 0.11795 0.17135 0.23687 Properties, Methods
分類モデルの場合、shapley
は予測クラス スコアを使用してシャープレイ値を計算し、それらを ShapleyValues
プロパティに格納します。explainer
に複数のクエリ点のシャープレイ値が格納されているため、既定では平均絶対シャープレイ値がオブジェクト表示に表示されます。
それぞれの予測子とクラスについて、すべてのクエリ点で平均化したシャープレイ値の絶対値が平均絶対シャープレイ値になります。
オブジェクト関数 swarmchart
を使用して、既定のクラス (setosa
) のシャープレイ値の分布を可視化します。
swarmchart(explainer)
それぞれの予測子について、クエリ点のシャープレイ値が関数によって表示されます。対応する粒子群チャートにシャープレイ値の分布が表示されます。予測子の順序は、平均絶対シャープレイ値を使用して関数で決定されます。
クラス setosa
について、SepalWidth
のシャープレイ値が最も低い観測値を見つけます。データ ヒントを使用して、クエリ点のセットにおける観測値のインデックスを確認します。
クエリ点は、クエリ点のセット内の 17 番目の観測値です。
explainer
の ShapleyValues
プロパティで観測値のシャープレイ値を調べます。
最初に、指定した shapley
オブジェクト (explainer
) から指定したクエリ点インデックス (queryPointIndex
) をもつ観測値についてのシャープレイ値の table を返す localShapley
という名前のカスタム関数を定義します。
function queryPointTbl= localShapley(explainer,queryPointIndex) tbl = explainer.ShapleyValues(:,2:end); queryPointTbl = varfun(@(x)x(:,queryPointIndex),tbl); queryPointTbl.Properties.VariableNames = tbl.Properties.VariableNames; queryPointTbl = [explainer.ShapleyValues(:,1) queryPointTbl]; end
インデックス 17
のクエリ点のシャープレイ値を返します。
results = localShapley(explainer,17)
results=4×4 table
Predictor setosa versicolor virginica
_____________ ________ __________ _________
"SepalLength" 0.06193 -0.028438 -0.033492
"SepalWidth" -0.1135 0.088441 0.02506
"PetalLength" -0.1543 0.31506 -0.16076
"PetalWidth" -0.11846 0.35579 -0.23734
オブジェクト関数 plot
を使用して、クエリ点のシャープレイ値をプロットします。
plot(explainer,QueryPointIndices=17)
既定では、クエリ点の予測クラスが versicolor
であるため、そのクラスのシャープレイ値が関数でプロットされます。
関数ハンドルを使用した Blackbox モデルの指定
回帰モデルの学習を行い、モデルの関数 predict
の関数ハンドルを使用する shapley
オブジェクトを作成します。オブジェクト関数 fit
を使用して、指定したクエリ点のシャープレイ値を計算します。次に、オブジェクト関数 plot
を使用して、シャープレイ値をプロットします。
carbig
データ セットを読み込みます。このデータ セットには、1970 年代と 1980 年代初期に製造された自動車の測定値が格納されています。
load carbig
予測子変数 Acceleration
、Cylinders
などを格納する table を作成します。
tbl = table(Acceleration,Cylinders,Displacement, ...
Horsepower,Model_Year,Weight);
関数 TreeBagger
を使用して MPG
の blackbox モデルの学習を行います。
rng("default") % For reproducibility Mdl = TreeBagger(100,tbl,MPG,Method="regression", ... CategoricalPredictors=[2 5]);
shapley
は TreeBagger
オブジェクトを直接はサポートしないため、shapley
の最初の入力引数 (blackbox モデル) を TreeBagger
オブジェクトとして指定することはできません。代わりに、関数 predict
の関数ハンドルを使用できます。関数 predict
のオプションも関数の名前と値の引数を使用して指定できます。
TreeBagger
オブジェクト Mdl
の関数 predict
の関数ハンドルを作成します。使用する木のインデックスの配列を 1:50
と指定します。
f = @(tbl) predict(Mdl,tbl,Trees=1:50);
関数ハンドル f
を使用して shapley
オブジェクトを作成します。blackbox モデルを関数ハンドルとして指定する場合、予測子データを提供しなければなりません。tbl
には、double
データ型のカテゴリカル予測子 (Cylinder
および Model_Year
) が含まれています。既定では、shapley
は double
データ型の変数をカテゴリカル予測子として扱いません。2 番目 (Cylinder
) と 5 番目 (Model_Year
) の変数をカテゴリカル予測子として指定します。
explainer = shapley(f,tbl,CategoricalPredictors=[2 5]); explainer = fit(explainer,tbl(1,:));
シャープレイ値をプロットします。
plot(explainer)
詳細
シャープレイ値
ゲーム理論におけるプレーヤーのシャープレイ値とは、協力ゲームでのプレーヤーの平均限界貢献度です。機械学習予測のコンテキストでは、クエリ点の特徴量のシャープレイ値は、指定したクエリ点での予測 (回帰の場合は応答、分類の場合は各クラスのスコア) に対する特徴量の寄与を説明します。
クエリ点の特徴量のシャープレイ値は、平均予測からの偏差に対する特徴量の寄与です。クエリ点について、すべての特徴量に関するシャープレイ値の合計は、予測の平均からの合計偏差に対応します。つまり、平均予測とすべての特徴量に関するシャープレイ値の合計は、クエリ点についての予測に対応します。
詳細については、機械学習モデルのシャープレイ値を参照してください。
参照
[1] Lundberg, Scott M., and S. Lee. "A Unified Approach to Interpreting Model Predictions." Advances in Neural Information Processing Systems 30 (2017): 4765–774.
[2] Lundberg, Scott M., G. Erion, H. Chen, et al. "From Local Explanations to Global Understanding with Explainable AI for Trees." Nature Machine Intelligence 2 (January 2020): 56–67.
[3] Aas, Kjersti, Martin Jullum, and Anders Løland. "Explaining Individual Predictions When Features Are Dependent: More Accurate Approximations to Shapley Values." Artificial Intelligence 298 (September 2021).
拡張機能
自動並列サポート
Parallel Computing Toolbox™ を使用して自動的に並列計算を実行することで、コードを高速化します。
並列実行するには、この関数を呼び出すときに名前と値の引数 UseParallel
を true
に設定します。
並列計算の全般的な情報については、自動並列サポートを使用した MATLAB 関数の実行 (Parallel Computing Toolbox)を参照してください。
バージョン履歴
R2021a で導入R2024a: 複数のクエリ点のシャープレイ値の計算
名前と値の引数 QueryPoints=
を使用して複数のクエリ点のシャープレイ値を計算できるようになりました。R2024a より前は、queryPoints
QueryPoint=queryPoint
を使用してクエリ点を 1 つだけ指定できました。queryPoint
は数値の行ベクトルまたは単一行 table です。
shapley
オブジェクトに、新しいプロパティ MeanAbsoluteShapley
が追加されています。これには、すべてのクエリ点で平均化した絶対シャープレイ値が格納されます。さらに、Method
プロパティの値に "interventional-mix"
が追加されました。この値は、使用するシャープレイ値の計算アルゴリズムがすべてのクエリ点で同じにならない場合があることを示します。
複数のクエリ点のシャープレイ値を計算するときは、シャープレイ値の計算の停止、変数の作成、結果のプロットなど、さまざまなタスクを出力関数を使用して実行できます。これを行うには、名前と値の引数 OutputFcn
を使用します。
R2023b: 介入型の Tree SHAP アルゴリズムで予測子に欠損値があるデータをサポート
入力予測子データ (
または blackbox
.XX
) の観測値またはクエリ点 (queryPoint
) の値に欠損値があり、Method
の値が "interventional"
の場合、関数 shapley
では、木モデルおよび木学習器のアンサンブル モデル用の Tree SHAP アルゴリズムを使用できます。以前のリリースでは、このような条件の場合、関数 shapley
では常に木ベースのモデル用の Kernel SHAP アルゴリズムが使用されていました。木ベースのモデル用に Tree SHAP ではなく Kernel SHAP が引き続き使用される場合を含む詳細については、介入型アルゴリズムを参照してください。
R2023b: 木ベースのモデル用の Tree SHAP アルゴリズムのパフォーマンスが向上
関数 shapley
で、介入型の価値関数 (Method
を参照) を伴う Tree SHAP アルゴリズムを使用して木モデルおよび木学習器のアンサンブル モデルのシャープレイ値を計算する際のパフォーマンスが向上しています。このパフォーマンスの向上は、shapley
の入力引数 (予測子データ、機械学習モデル、クエリ点など) の値に影響されます。たとえば、次のコードにおけるシャープレイ値の計算は、以前のリリースと比較して約 36 倍速くなっています。
function timingTest % Generate data set rng("default") numObservations = 1e5; numPredictors = 10; X = rand(numObservations,numPredictors); Y = rand(numObservations,1); % Train model mdl = fitrensemble(X,Y,Learners="tree"); % Compute Shapley value tic shapley(mdl,"QueryPoint",X(50,:),Method="interventional"); toc end
おおよその実行時間は次のとおりです。
R2023b: 3 秒
R2023a: 107 秒
コードは、Windows® 10、Intel® Xeon® CPU E5-1650 v4 (3.60 GHz) のテスト システム上で関数 timingTest
を呼び出して時間測定されました。
R2023a: shapley
で Linear SHAP アルゴリズムと Tree SHAP アルゴリズムをサポート
R2023a: 名前と値の引数 Method
の値の変更
名前と値の引数 Method
のサポートされる値が、'interventional-kernel'
と 'conditional-kernel'
から 'interventional'
と 'conditional'
にそれぞれ変更されました。
MATLAB コマンド
次の MATLAB コマンドに対応するリンクがクリックされました。
コマンドを MATLAB コマンド ウィンドウに入力して実行してください。Web ブラウザーは MATLAB コマンドをサポートしていません。
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)