Main Content

このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。

shapley

    説明

    クエリ点の特徴量のシャープレイ値は、クエリ点についての予測に関して特徴量が原因で生じた平均予測からの偏差を説明します。各クエリ点について、すべての特徴に関するシャープレイ値の合計は、予測の平均からの合計偏差に対応します。

    クエリ点 (queryPoint) を指定して、機械学習モデル用のshapleyオブジェクトを作成できます。オブジェクトが作成され、そのクエリ点についてすべての特徴量のシャープレイ値が計算されます。

    シャープレイ値を使用して、指定したクエリ点での予測に対する個々の特徴量の寄与を説明します。関数plotを使用して、シャープレイ値の棒グラフを作成します。別のクエリ点のシャープレイ値を計算するには、関数fitを使用します。

    作成

    説明

    explainer= shapley(blackbox)は、予測子データを含む機械学習モデル オブジェクトblackboxを使用して、shapleyオブジェクトを作成します。シャープレイ値を計算するには、関数fitexplainerと共に使用します。

    explainer= shapley(blackbox,X)は、X内の予測子データを使用してshapleyオブジェクトを作成します。

    explainer= shapley(___,'QueryPoint',queryPoint)は、クエリ点queryPointのシャープレイ値も計算し、計算したシャープレイ値をexplainerShapleyValuesプロパティに格納します。前の構文におけるいずれかの入力引数の組み合わせに加えて、queryPointを指定できます。

    explainer= shapley(___,Name,Value)では、1 つ以上の名前と値の引数を使用して追加オプションを指定します。たとえば、'UseParallel',trueと指定してシャープレイ値を並列計算します。

    入力引数

    すべて展開する

    解釈される機械学習モデル。完全またはコンパクトな回帰または分類モデル オブジェクトとして指定するか、関数ハンドルとして指定します。

    予測子データ。数値行列またはテーブルとして指定します。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が完全な機械学習モデル オブジェクトであり、この引数を指定する場合、shapleyblackboxの予測子データを使用しません。指定した予測子データのみを使用します。

    データ型:single|double

    shapleyが予測を説明するクエリ点。数値の行ベクトルまたは単一行 table として指定します。

    • 数値の行ベクトルの場合:

      • queryPointの列を構成する変数の順序は、Xの順序、またはblackboxに学習させてblackbox.Xに格納した予測子変数の順序と同じでなければなりません。

      • table を使用してblackboxに学習をさせた場合、table に含まれている変数がすべて数値変数であれば、queryPointを数値ベクトルにすることができます。

    • 単一行 table の場合:

      • table (たとえばTbl) を使用してblackboxに学習をさせた場合、queryPoint内のすべての予測子変数は変数名およびデータ型がTbl内の変数と同じでなければなりません。ただし、queryPointの列の順序がTblの列の順序に対応する必要はありません。

      • 数値行列を使用してblackboxに学習をさせた場合、blackbox.PredictorNames内の予測子名とqueryPoint内の対応する予測子変数名が同じでなければなりません。学習時に予測子の名前を指定するには、名前と値の引数'PredictorNames'を使用します。queryPoint内の予測子変数はすべて数値ベクトルでなければなりません。

      • queryPointに追加の変数 (応答変数や観測値の重みなど) を含めることができますが、shapleyはこれらを無視します。

      • shapleyは、文字ベクトルの cell 配列ではない cell 配列や複数列の変数をサポートしません。

    連続予測子についてqueryPointNaNが含まれており、'Method''conditional-kernel'である場合、返されたオブジェクトに含まれているシャープレイ値 (ShapleyValues) はNaNになります。それ以外の場合、shapleyqueryPoint内のNaNblackbox(blackboxのオブジェクト関数predictまたはblackboxで指定された関数ハンドル) と同じ方法で処理します。

    例:blackbox.X(1,:)は、完全な機械学習モデルblackboxの予測子データの最初の観測値としてクエリ点を指定します。

    データ型:single|double|table

    名前と値の引数

    オプションのName,Value引数のコンマ区切りペアを指定します。Nameは引数名で、Valueは対応する値です。Nameは引用符で囲まなければなりません。Name1,Value1,...,NameN,ValueNのように、複数の名前と値のペアの引数を、任意の順番で指定できます。

    例:shapley(blackbox,'QueryPoint',q,'Method','conditional-kernel')は、shapleyオブジェクトを作成し、kernelSHAP アルゴリズムの拡張機能を使用してクエリ点qのシャープレイ値を計算します。

    カテゴリカル予測子のリスト。次の表のいずれかの値として指定します。

    説明
    正の整数のベクトル

    ベクトルの各エントリは、対応する予測子がカテゴリカルであることを示すインデックス値です。インデックス値の範囲は 1 ~pです。pはモデルの学習に使用した予測子の数です。

    blackboxが入力変数のサブセットを予測子として使用する場合、ソフトウェアはサブセットのみを使用して予測子にインデックスを作成します。応答変数、観測値の重み変数、および関数で使用されないその他の変数は、'CategoricalPredictors'値でカウントされません。

    logical ベクトル

    trueというエントリは、対応する予測子がカテゴリカルであることを意味します。ベクトルの長さはpです。

    文字行列 行列の各行は予測子変数の名前です。名前は、table 形式の予測子データの変数名と一致しなければなりません。文字行列の各行が同じ長さになるように、名前を余分な空白で埋めてください。
    文字ベクトルの cell 配列または string 配列 配列の各要素は予測子変数の名前です。名前は、table 形式の予測子データの変数名と一致しなければなりません。
    'all' すべての予測子がカテゴリカルです。

    • blackboxを関数ハンドルとして指定する場合、shapleyは予測子データXからカテゴリカル予測子を識別します。予測子データが table 内にある場合、shapleyは、その変数が logical ベクトル、順序付けのない categorical ベクトル、文字配列、string 配列または文字ベクトルの cell 配列のいずれかである場合に、変数を categorical であると見なします。予測子データが行列である場合、shapleyはすべての予測子が連続的であると見なします。他の予測子をカテゴリカル予測子として指定するには,名前と値の引数'CategoricalPredictors'を使用してそれらを指定します。

    • blackboxを回帰または分類モデル オブジェクトとして指定する場合、shapleyはモデル オブジェクトのCategoricalPredictorsプロパティを使用してカテゴリカル予測子を識別します。

    blackboxが順序付きのカテゴリカル予測子をサポートしており、'Method''interventional-kernel'である場合に、shapleyは順序付きのカテゴリカル予測子をサポートします。

    例:'CategoricalPredictors','all'

    データ型:single|double|logical|char|string|cell

    シャープレイ値の計算に使用する予測子サブセットの最大数。正の整数を指定します。

    shapleyが使用するサブセットを選択する方法の詳細については、シャープレイ値の計算の複雑度を参照してください。

    例:'MaxNumSubsets',100

    データ型:single|double

    シャープレイ値の計算アルゴリズム。'interventional-kernel'または'conditional-kernel'を指定します。

    • 'interventional-kernel'(既定) —shapleyは、介入型の価値関数を伴う kernelSHAP アルゴリズム[1]を使用します。

    • 'conditional-kernel'shapleyは、条件付きの価値関数を伴う kernelSHAP アルゴリズムの拡張機能[2]を使用します。

    これらのアルゴリズムの詳細については、シャープレイ値の計算アルゴリズムを参照してください。

    例:'Method','conditional-kernel'

    データ型:char|string

    並列実行のフラグ。trueまたはfalseとして指定します。'UseParallel',trueを指定した場合、関数shapleyparforを使用して for ループの反復を並列実行します。このオプションには Parallel Computing Toolbox™ が必要です。

    例:'UseParallel',true

    データ型:logical

    プロパティ

    すべて展開する

    このプロパティは読み取り専用です。

    解釈される機械学習モデル。回帰または分類モデル オブジェクトとして指定するか、関数ハンドルとして指定します。

    blackbox引数によってこのプロパティが設定されます。

    このプロパティは読み取り専用です。

    機械学習モデル (BlackboxModel) によって計算されたクエリ点の予測。スカラーとして指定します。

    • BlackboxModelがモデル オブジェクトの場合、BlackboxFittedは、回帰の場合は予測応答、分類の場合は分類されたラベルになります。

    • BlackboxModelが関数ハンドルの場合、BlackboxFittedは関数ハンドルで返された値 (回帰の場合は予測応答、分類の場合は単一クラスの予測スコア) になります。

    データ型:single|double|categorical|logical|char|string|cell

    このプロパティは読み取り専用です。

    カテゴリカル予測子のインデックス。正の整数のベクトルとして指定します。CategoricalPredictorsには、対応する予測子がカテゴリカルであることを示すインデックス値が格納されます。インデックス値の範囲は 1 ~pです。pはモデルの学習に使用した予測子の数です。どの予測子もカテゴリカルではない場合、このプロパティは空 ([]) になります。

    • 関数ハンドルを使用してblackboxを指定した場合、shapleyは予測子データXからカテゴリカル予測子を識別します。名前と値の引数'CategoricalPredictors'を指定した場合にこのプロパティが設定されます。

    • blackboxを回帰または分類モデル オブジェクトとして指定した場合、shapleyはモデル オブジェクトのCategoricalPredictorsプロパティを使用してこのプロパティを決定します。

    blackboxが順序付きのカテゴリカル予測子をサポートしており、'Method''interventional-kernel'である場合に、shapleyは順序付きのカテゴリカル予測子をサポートします。

    データ型:single|double

    予測子データXに対して平均化した平均予測。数値ベクトルまたは数値スカラーを指定します。

    • BlackboxModelが分類モデル オブジェクトの場合、Interceptは各クラスの平均分類スコアのベクトルになります。

    • BlackboxModelが回帰モデル オブジェクトの場合、Interceptは平均応答のスカラーになります。

    • BlackboxModelが関数ハンドルの場合、Interceptは平均関数評価のスカラーになります。

    クエリ点について、すべての特徴量に関するシャープレイ値の合計は、予測の平均 (Intercept) からの合計偏差に対応します。

    データ型:single|double

    このプロパティは読み取り専用です。

    シャープレイ値の計算アルゴリズム。'interventional-kernel'または'conditional-kernel'を指定します。

    • 'interventional-kernel'shapleyは、介入型の価値関数を伴う kernelSHAP アルゴリズム[1]を使用します。

    • 'conditional-kernel'shapleyは、条件付きの価値関数を伴う kernelSHAP アルゴリズムの拡張機能[2]を使用します。

    shapley'Method'引数、またはfit'Method'引数によってこのプロパティが設定されます。

    これらのアルゴリズムの詳細については、シャープレイ値の計算アルゴリズムを参照してください。

    データ型:char|string

    このプロパティは読み取り専用です。

    シャープレイ値の計算に使用する予測子サブセットの数。正の整数を指定します。

    shapley'MaxNumSubsets'引数、またはfit'MaxNumSubsets'引数によってこのプロパティが設定されます。

    shapleyが使用するサブセットを選択する方法の詳細については、シャープレイ値の計算の複雑度を参照してください。

    データ型:single|double

    このプロパティは読み取り専用です。

    shapleyがシャープレイ値 (ShapleyValues) を使用して予測を説明するクエリ点。数値の行ベクトルまたは単一行 table として指定します。

    shapleyqueryPoint引数、またはfitqueryPoint引数によってこのプロパティが設定されます。

    データ型:single|double|table

    このプロパティは読み取り専用です。

    クエリ点 (QueryPoint) のシャープレイ値。table を指定します。

    • 回帰の場合、table には 2 つの列があります。1 列目には予測子変数名が、2 列目には予測子のシャープレイ値が含まれています。

    • 分類の場合、table にはBlackboxModel内のクラス数に応じて 2 つ以上の列があります。1 列目には予測子変数名が、残りの列には各クラスの予測子のシャープレイ値が含まれています。

    データ型:table

    このプロパティは読み取り専用です。

    予測子データ。数値行列またはテーブルとして指定します。

    Xの各行は 1 つの観測値に対応し、各列は 1 つの変数に対応します。

    • X引数を指定した場合にこのプロパティが設定されます。

    • blackboxを完全な機械学習モデル オブジェクトとして指定し、Xを指定しなかった場合、このプロパティ値がblackboxの学習に使用される予測子データになります。

    連続予測子について観測値にNaNが含まれており、Method'conditional-kernel'である場合、shapleyはシャープレイ値の計算にその観測値を使用しません。それ以外の場合、shapleyX内のNaNBlackboxModel(BlackboxModelのオブジェクト関数predictまたはBlackboxModelで指定された関数ハンドル) と同じ方法で処理します。

    shapleyは、欠損値をもつ行を含むすべての観測値をこのプロパティに格納します。

    データ型:single|double|table

    オブジェクト関数

    fit クエリ点のシャープレイ値の計算
    plot シャープレイ値のプロット

    すべて折りたたむ

    分類モデルの学習を行い、shapleyオブジェクトを作成します。shapleyオブジェクトを作成するときに、クエリ点を指定して、クエリ点のシャープレイ値が計算されるようにします。次に、オブジェクト関数plotを使用して、シャープレイ値の棒グラフを作成します。

    CreditRating_Historicalデータセットを読み込みます。データ セットには、顧客 ID、顧客の財務比率、業種ラベル、および信用格付けが格納されています。

    tbl = readtable('CreditRating_Historical.dat');

    テーブルの最初の 3 行を表示します。

    head(tbl,3)
    ans=3×8 tableID 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プロパティに格納されるようにします。

    queryPoint = tbl(end,:)
    queryPoint=1×8 tableID 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,'QueryPoint',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 with properties: BlackboxModel: [1x1 ClassificationECOC] QueryPoint: [1x8 table] BlackboxFitted: {'AA'} ShapleyValues: [6x8 table] NumSubsets: 64 X: [3932x6 table] CategoricalPredictors: 6 Method: 'interventional-kernel' Intercept: [-0.5041 -0.3908 -0.3137 -0.3042 -0.4217 ... ]

    警告メッセージが示すように、予測子データに 1000 個を超える観測値があるため、計算が遅くなる場合があります。計算速度を向上するには、学習セットの標本を小さくするか、'UseParallel'trueを指定してください。

    分類モデルの場合、shapleyは各クラスの予測クラス スコアを使用してシャープレイ値を計算します。ShapleyValuesプロパティの値を表示します。

    explainer.ShapleyValues
    ans=6×8 tablePredictor AAA AA A BBB BB B CCC __________ __________ __________ ___________ ___________ ___________ ___________ ___________ "WC_TA" 0.014715 0.0064376 0.0026704 0.00048882 -0.0079015 -0.011841 -0.011395 "RE_TA" 0.047918 0.026917 0.014751 -0.0031481 -0.02512 -0.059926 -0.08418 "EBIT_TA" 0.0003427 0.00015025 0.00011977 3.3904e-05 -0.00018925 -0.00038135 -0.00033783 "MVE_BVTD" 0.38334 0.37376 0.17563 -0.032136 -0.18728 -0.24831 -0.19585 "S_TA" -0.0037304 -0.0026011 -8.8854e-05 -0.00081782 -5.4936e-05 0.00047882 -0.00068998 "Industry" -0.028974 -0.013906 0.0010435 0.023298 0.026473 0.029898 0.045396

    ShapleyValuesプロパティには、クラスごとにすべての特徴量のシャープレイ値が格納されています。

    関数plotを使用して予測クラスのシャープレイ値をプロットします。

    plot(explainer)

    Figure contains an axes object. The axes object with title Shapley Explanation contains an object of type bar.

    横棒グラフは,絶対値で並べ替えられた,すべての変数のシャープレイ値を示します。各シャープレイ値は,クエリ点についてのスコアに関して対応する変数が原因で生じた予測クラスの平均スコアからの偏差を説明します。

    回帰モデルの学習を行い、shapleyオブジェクトを作成します。shapleyオブジェクトを作成するときに、クエリ点を指定しなかった場合、シャープレイ値は計算されません。オブジェクト関数fitを使用して、指定したクエリ点のシャープレイ値を計算します。次に、オブジェクト関数plotを使用して、シャープレイ値の棒グラフを作成します。

    carbigデータセットを読み込みます。このデータセットには、1970 年代と 1980 年代初期に製造された自動車の測定値が格納されています。

    loadcarbig

    AccelerationCylindersなどの予測子変数と応答変数MPGが格納された table を作成します。

    tbl = table(Acceleration,Cylinders,Displacement,Horsepower,Model_Year,Weight,MPG);

    学習セットの欠損値を削除すると、メモリ消費量を減らして関数fitrkernelの学習速度を向上させることができます。tblの欠損値を削除します。

    台= rmmissing(台);

    関数fitrkernelを使用してMPGの blackbox モデルの学習を行います。

    rng('default')% For reproducibilitymdl = fitrkernel(tbl,“英里”,'CategoricalPredictors',[2 5]);

    shapleyオブジェクトを作成します。mdlには学習データが含まれないため、データ セットtblを指定します。

    explainer = shapley(mdl,tbl)
    explainer = shapley with properties: BlackboxModel: [1x1 RegressionKernel] QueryPoint: [] BlackboxFitted: [] ShapleyValues: [] NumSubsets: 64 X: [392x7 table] CategoricalPredictors: [2 5] Method: 'interventional-kernel' Intercept: 22.6202

    explainerは、学習データtblXプロパティに格納します。

    tblの最初の観測値についてすべての予測子変数のシャープレイ値を計算します。

    queryPoint = tbl(1,:)
    queryPoint=1×7 tableAcceleration 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 tablePredictor ShapleyValue ______________ ____________ "Acceleration" -0.1561 "Cylinders" -0.18306 "Displacement" -0.34203 "Horsepower" -0.27291 "Model_Year" -0.2926 "Weight" -0.32402

    関数plotを使用して、クエリ点のシャープレイ値をプロットします。

    plot(explainer)

    Figure contains an axes object. The axes object with title Shapley Explanation contains an object of type bar.

    横棒グラフは,絶対値で並べ替えられた,すべての変数のシャープレイ値を示します。各シャープレイ値は,クエリ点についての予測に関して対応する変数が原因で生じた平均からの偏差を説明します。

    回帰モデルの学習を行い、モデルの関数predictの関数ハンドルを使用するshapleyオブジェクトを作成します。オブジェクト関数fitを使用して、指定したクエリ点のシャープレイ値を計算します。次に、オブジェクト関数plotを使用して、シャープレイ値をプロットします。

    carbigデータセットを読み込みます。このデータセットには、1970 年代と 1980 年代初期に製造された自動車の測定値が格納されています。

    loadcarbig

    予測子変数AccelerationCylindersなどを格納する table を作成します。

    tbl = table(Acceleration,Cylinders,Displacement,Horsepower,Model_Year,Weight);

    関数TreeBaggerを使用してMPGの blackbox モデルの学習を行います。

    rng('default')% For reproducibilityMdl = TreeBagger(100,tbl,MPG,'Method','regression','CategoricalPredictors',[2 5]);

    shapleyTreeBaggerオブジェクトを直接はサポートしないため、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) が含まれています。既定では、shapleydoubleデータ型の変数をカテゴリカル予測子として扱いません。2 番目 (Cylinder) と 5 番目 (Model_Year) の変数をカテゴリカル予測子として指定します。

    explainer = shapley(f,tbl,'CategoricalPredictors',[2 5]); explainer = fit(explainer,tbl(1,:));

    シャープレイ値をプロットします。

    plot(explainer)

    Figure contains an axes object. The axes object with title Shapley Explanation contains an object of type bar.

    詳細

    すべて展開する

    参照

    [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] Aas, Kjersti,马丁。Jullum, and Anders Løland. "Explaining Individual Predictions When Features Are Dependent: More Accurate Approximations to Shapley Values." arXiv:1903.10464 (2019).

    拡張機能

    バージョン履歴

    R2021a で導入