Main Content

shapley

シャープレイ値

R2021a 以降

    説明

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

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

    シャープレイ値を使用して、指定した各クエリ点での予測に対する個々の特徴量の寄与を説明します。関数 plot を使用して、1 つのクエリ点のシャープレイ値または複数のクエリ点で平均化した平均絶対シャープレイ値の棒グラフを表示します。クエリ点が複数の場合は、関数 boxchart および swarmchart を使用して、それぞれ箱ひげ図および粒子群散布図としてシャープレイ値を可視化できます。新しいクエリ点のシャープレイ値を計算するには、関数 fit を使用します。

    作成

    説明

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

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

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

    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 として指定します。queryPoints の各行が 1 つのクエリ点に対応します。

    • 数値行列の場合

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

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

    • テーブルの場合

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

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

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

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

    連続予測子について queryPointsNaN が含まれており、Method"conditional" である場合、返されたオブジェクトに含まれているシャープレイ値 (ShapleyValues) は NaN になります。ガウス過程回帰 (GPR)、カーネル、線形、ニューラル ネットワーク、またはサポート ベクター マシン (SVM) のモデルである回帰モデルを使用する場合、欠損値がある予測子や学習時にはなかったカテゴリを含むクエリ点については、shapley はシャープレイ値として NaN を返します。それ以外のすべてのモデルについては、shapleyqueryPoints 内の欠損値を 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 のシャープレイ値を計算します。

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

    説明
    正の整数のベクトル

    ベクトルの各エントリは、対応する予測子がカテゴリカルであることを示すインデックス値です。インデックス値の範囲は 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" として指定すると、shapley で順序付きのカテゴリカル予測子がサポートされます。

    例: CategoricalPredictors="all"

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

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

    shapley が使用するサブセットを選択する方法の詳細については、計算コストを参照してください。

    この引数は、関数 shapley で Kernel SHAP アルゴリズムまたは Kernel SHAP アルゴリズムの拡張機能を使用する場合のみ有効です。Method"interventional" の場合に引数 MaxNumSubsets を設定すると、Kernel SHAP アルゴリズムが使用されます。詳細については、アルゴリズムを参照してください。

    例: MaxNumSubsets=100

    データ型: single | double

    シャープレイ値の計算アルゴリズム。"interventional" または "conditional" として指定します。

    • "interventional" (既定) — shapley は、介入型の価値関数でシャープレイ値を計算します。

      shapley には介入型のアルゴリズムが 3 つあります。Kernel SHAP [1]、Linear SHAP [1]、および Tree SHAP [2]です。機械学習モデル blackbox とその他のオプションの指定に基づいてアルゴリズムが選択されます。詳細については、介入型アルゴリズムを参照してください。

    • "conditional"shapley は、条件付きの価値関数を伴う Kernel SHAP アルゴリズムの拡張機能[3]を使用します。

    選択されたアルゴリズムの名前が Method プロパティに格納されます。詳細については、アルゴリズムを参照してください。

    R2023a より前: この引数は "interventional-kernel" または "conditional-kernel" として指定できます。shapley は、Kernel SHAP アルゴリズムと Kernel SHAP アルゴリズムの拡張機能をサポートしています。

    例: Method="conditional"

    データ型: char | string

    R2024a 以降

    各クエリ点の評価後に呼び出される関数。関数ハンドルとして指定します。シャープレイ値の計算の停止、変数の作成、結果のプロットなど、さまざまなタスクを出力関数で実行できます。独自の出力関数を記述する方法の詳細と例については、Shapley Output Functionsを参照してください。

    この引数は、関数 shapley で複数のクエリ点のシャープレイ値を計算する場合で、UseParallel の値が false の場合のみ有効です。

    データ型: function_handle

    並列実行のフラグ。数値または logical の 1 (true) または 0 (false) として指定します。UseParallel=true を指定した場合、関数 shapleyparfor を使用して for ループの反復を実行します。Parallel Computing Toolbox™ がある場合、ループが並列に実行されます。

    この引数は、関数 shapley で複数のクエリ点のシャープレイ値を計算する場合、または木のアンサンブル用の Tree SHAP アルゴリズム、Kernel SHAP アルゴリズム、または Kernel SHAP アルゴリズムの拡張機能を使用して 1 つのクエリ点のシャープレイ値を計算する場合のみ有効です。

    例: UseParallel=true

    データ型: logical

    プロパティ

    すべて展開する

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

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

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

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

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

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

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

    BlackboxFitted プロパティは、クエリ点を指定しない場合は空になります。

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

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

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

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

    blackbox が順序付きのカテゴリカル予測子をサポートしている場合に Method"interventional" として指定すると、shapley で順序付きのカテゴリカル予測子がサポートされます。

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

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

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

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

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

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

    R2024a 以降

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

    平均絶対シャープレイ値。table として指定します。平均はすべてのクエリ点 (QueryPoints) から取得されます。

    • 回帰の場合、table には 2 つの列があります。1 列目に予測子変数名が格納され、2 列目に予測子の平均絶対シャープレイ値が格納されます。

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

    MeanAbsoluteShapley プロパティは、クエリ点を指定しない場合は空になります。

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

    シャープレイ値の計算アルゴリズム。"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]を使用します。

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

    詳細については、アルゴリズムを参照してください。

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

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

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

    shapley が使用するサブセットを選択する方法の詳細については、計算コストを参照してください。

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

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

    このプロパティは、shapley の名前と値の引数 QueryPoints=queryPoints、または fit の引数 queryPoints によって設定されます。

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

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

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

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

    ShapleyValues プロパティは、クエリ点を指定しない場合は空になります。

    複数のクエリ点を当てはめた後に 1 つのクエリ点のシャープレイ値を確認する方法を示す例については、複数のクエリ点を当てはめた後の 1 つのクエリ点の調査を参照してください。

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

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

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

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

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

    連続予測子について観測値に NaN が含まれており、Method"conditional-kernel" である場合、shapley はシャープレイ値の計算にその観測値を使用しません。同様に、欠損値がある予測子や学習時にはなかったカテゴリが観測値に含まれており、BlackboxModel が GPR、カーネル、線形、ニューラル ネットワーク、または SVM のタイプの回帰モデルである場合、shapley はシャープレイ値の計算でその観測値を省略します。それ以外の場合、shapleyX 内の欠損値を BlackboxModel (BlackboxModel のオブジェクト関数 predict または BlackboxModel で指定された関数ハンドル) と同じ方法で処理します。

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

    オブジェクト関数

    fitクエリ点のシャープレイ値の計算
    plot棒グラフを使用したシャープレイ値のプロット
    boxchartVisualize Shapley values using box charts (box plots)
    swarmchartVisualize Shapley values using swarm scatter charts

    すべて折りたたむ

    分類モデルの学習を行い、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 個を超える観測値があるため、計算が遅くなる場合があります。計算速度を向上するには、学習セットの標本を小さくするか、UseParalleltrue を指定してください。

    分類モデルの場合、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 オブジェクトを作成します。shapley オブジェクトを作成するときに、クエリ点を指定しなかった場合、シャープレイ値は計算されません。オブジェクト関数 fit を使用して、指定したクエリ点のシャープレイ値を計算します。次に、オブジェクト関数 plot を使用して、シャープレイ値の棒グラフを作成します。

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

    load carbig

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

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

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

    tbl = rmmissing(tbl);

    関数fitrkernelを使用して MPG の blackbox モデルの学習を行います。変数 CylindersModel_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 は、学習データ tblX プロパティに格納します。

    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)

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

    分類モデルに学習させ、shapley オブジェクトを作成します。オブジェクト関数 swarmchart を使用して複数のクエリ点のシャープレイ値を可視化します。いずれかの目的のクエリ点のシャープレイ値を調べます。

    150 本のアヤメについての測定値が格納された fisheriris データ セットを読み込み、table を作成します。SepalLengthSepalWidthPetalLength、および 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 のシャープレイ値が最も低い観測値を見つけます。データ ヒントを使用して、クエリ点のセットにおける観測値のインデックスを確認します。

    iris-data-tip.png

    クエリ点は、クエリ点のセット内の 17 番目の観測値です。

    explainerShapleyValues プロパティで観測値のシャープレイ値を調べます。

    最初に、指定した 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 であるため、そのクラスのシャープレイ値が関数でプロットされます。

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

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

    load carbig

    予測子変数 AccelerationCylinders などを格納する 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]);

    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)

    詳細

    すべて展開する

    参照

    [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).

    拡張機能

    バージョン履歴

    R2021a で導入

    すべて展開する