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 には、カテゴリカル予測子が含まれている予測子データの列に対応するインデックス値を格納します。どの予測子もカテゴリカルではない場合、このプロパティは空 ([]) になります。

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

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

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

    データ型: 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 table
         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 プロパティに格納されるようにします。

    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,'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'
    
    

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

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

    explainer.ShapleyValues
    ans=6×8 table
        Predictor        AAA            AA             A             BBB            BB              B             CCC    
        __________    __________    __________    ___________    ___________    ___________    ___________    ___________
    
        "WC_TA"         0.014716     0.0064376      0.0026704     0.00048884     -0.0079014      -0.011841      -0.011395
        "RE_TA"         0.047919      0.026918       0.014751     -0.0031481       -0.02512      -0.059926       -0.08418
        "EBIT_TA"     0.00034271    0.00015025     0.00011977     3.3903e-05    -0.00018924    -0.00038136    -0.00033784
        "MVE_BVTD"       0.38333       0.37376        0.17563      -0.032136       -0.18729       -0.24829       -0.19584
        "S_TA"        -0.0037304    -0.0026011    -8.8854e-05    -0.00081781    -5.4964e-05     0.00047888    -0.00068999
        "Industry"     -0.028972     -0.013906      0.0010435       0.023298       0.026474       0.029895       0.045394
    
    

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

    関数 plot を使用して予測クラスのシャープレイ値をプロットします。予測子名に含まれるアンダースコアを表示するには、座標軸の TickLabelInterpreter 値を 'none' に変更します。

    f = figure;
    plot(explainer)
    f.CurrentAxes.TickLabelInterpreter = 'none';

    Figure contains an axes. The axes contains an object of type bar. This object represents AA.

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

    回帰モデルの学習を行い、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 モデルの学習を行います。

    rng('default') % For reproducibility
    mdl = fitrkernel(tbl,'MPG','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'
    
    

    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.1561  
        "Cylinders"         -0.18306  
        "Displacement"      -0.34203  
        "Horsepower"        -0.27291  
        "Model_Year"         -0.2926  
        "Weight"            -0.32402  
    
    

    クエリ点についての予測応答を表示し、関数 plot を使用してクエリ点のシャープレイ値をプロットします。予測子名に含まれるアンダースコアを表示するには、座標軸の TickLabelInterpreter 値を 'none' に変更します。

    explainer.BlackboxFitted
    ans = 21.0495
    
    f = figure; 
    plot(explainer)
    f.CurrentAxes.TickLabelInterpreter = 'none';

    Figure contains an axes. The axes contains an object of type bar.

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

    回帰モデルの学習を行い、モデルの関数 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)

    Figure contains an axes. The axes contains an object of type bar.

    予測子名を重要度の順序で表示します。

    tbl.Properties.VariableNames([3 2 6 4 5 1])
    ans = 1x6 cell
      Columns 1 through 4
    
        {'Displacement'}    {'Cylinders'}    {'Weight'}    {'Horsepower'}
    
      Columns 5 through 6
    
        {'Model_Year'}    {'Acceleration'}
    
    

    詳細

    すべて展開する

    参照

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

    拡張機能

    R2021a で導入