Main Content

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

plot

シャープレイ値のプロット

    説明

    plot(explainer) は、shapley オブジェクト explainer のシャープレイ値の横棒グラフを作成します。これらの値はオブジェクトの ShapleyValues プロパティに格納されています。各棒グラフは、クエリ点 (explainer.QueryPoint) について blackbox モデル (explainer.BlackboxModel) 内の各特徴量のシャープレイ値を示します。

    plot(explainer,Name,Value) では、1 つ以上の名前と値の引数を使用して追加オプションを指定します。たとえば、'NumImportantPredictors',5 と指定して、絶対シャープレイ値が上位の特徴量のうち 5 つの特徴量のシャープレイ値をプロットします。

    b = plot(___) は、前の構文におけるいずれかの入力引数の組み合わせを使用して、棒グラフ オブジェクト b を返します。b を使用して、作成後の棒グラフの Bar のプロパティ をクエリまたは変更します。

    すべて折りたたむ

    分類モデルの学習を行い、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 オブジェクトを作成します。計算速度を向上するには、tbl の観測値の 25% を階層的にサブサンプリングし、その標本を使用してシャープレイ値を計算します。

    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'}
    
    
    rng('default') % For reproducibility
    c = cvpartition(tbl.Rating,'Holdout',0.25);
    tbl_s = tbl(test(c),:);
    explainer = shapley(blackbox,tbl_s,'QueryPoint',queryPoint);

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

    explainer.ShapleyValues
    ans=6×8 table
        Predictor        AAA            AA             A            BBB            BB              B             CCC    
        __________    __________    __________    ___________    __________    ___________    ___________    ___________
    
        "WC_TA"         0.014584     0.0064698      0.0027468    0.00045585      -0.007959      -0.011812      -0.011279
        "RE_TA"         0.047797      0.027083       0.015166    -0.0031936      -0.025054      -0.059563       -0.08344
        "EBIT_TA"     0.00034326     0.0001524     0.00012384    3.5202e-05    -0.00019141    -0.00038252    -0.00033693
        "MVE_BVTD"       0.38221       0.38229        0.19383     -0.007901       -0.15755        -0.2152       -0.17022
        "S_TA"        -0.0035663    -0.0025991    -0.00021177    -0.0010166    -2.1005e-05     0.00041421    -0.00058884
        "Industry"     -0.028313     -0.013392     0.00089644      0.022877       0.025636       0.028482       0.044832
    
    

    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.

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

    explainer.BlackboxModel ですべてのクラス名を指定して、すべてのクラスのシャープレイ値をプロットします。

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

    Figure contains an axes. The axes contains 7 objects of type bar. These objects represent AAA, AA, A, BBB, BB, B, CCC.

    回帰モデルの学習を行い、shapley オブジェクトを作成します。オブジェクト関数 fit を使用して、指定したクエリ点のシャープレイ値を計算します。次に、オブジェクト関数 plot を使用して、予測子のシャープレイ値をプロットします。関数 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' に変更します。'NumImportantPredictors',5 を指定して、予測応答について最も重要な 5 つの予測子のみをプロットします。

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

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

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

    入力引数

    すべて折りたたむ

    blackbox モデルを説明するオブジェクト。shapley オブジェクトとして指定します。

    名前と値のペアの引数

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

    例: plot(explainer,'NumImportantPredictors',5,'ClassNames',c) は、クラス c について 5 つの最も重要な予測子のシャープレイ値を示す棒グラフを作成します。

    プロットする重要な予測子の数。正の整数を指定します。関数 plot は、絶対シャープレイ値が上位の予測子のうち指定された数の予測子のシャープレイ値をプロットします。

    例: 'NumImportantPredictors',5 は、上位 5 つの重要な予測子をプロットするように指定します。関数 plot は、絶対シャープレイ値を使用して重要度の順序を決定します。

    データ型: single | double

    プロットするクラス ラベル。categorical 配列、文字配列、logical ベクトル、数値ベクトル、または文字ベクトルの cell 配列を指定します。'ClassNames' 値の値とデータ型は、explainer における機械学習モデルの ClassNames プロパティ (explainer.BlackboxModel.ClassNames) のクラス名のものと一致しなければなりません。

    1 つ以上のラベルを指定できます。複数のクラス ラベルを指定した場合は、各特徴量の複数の棒グラフが異なる色でプロットされます。

    既定値は、クエリ点についての予測クラス (explainerBlackboxFitted プロパティ) です。

    この引数は、explainer の機械学習モデル (BlackboxModel) が分類モデルである場合のみ有効です。

    例: 'ClassNames',{'red','blue'}

    例: 'ClassNames',explainer.BlackboxModel.ClassNames は、'ClassNames' として BlackboxModel 内のすべてのクラスを指定します。

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

    詳細

    すべて折りたたむ

    シャープレイ値

    ゲーム理論におけるプレイヤーのシャープレイ値とは、協力ゲームでのプレイヤーの平均限界貢献度です。機械学習予測のコンテキストでは、クエリ点の特徴量のシャープレイ値は、指定したクエリ点での予測 (回帰の場合は応答、分類の場合は各クラスのスコア) に対する特徴量の寄与を説明します。

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

    詳細については、機械学習モデルのシャープレイ値を参照してください。

    参照

    [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 で導入