Main Content

plot

公平性メトリクスの棒グラフをプロット

R2022b 以降

    説明

    plot(evaluator,metric) は、fairnessMetrics オブジェクト (evaluator) の BiasMetrics プロパティまたは GroupMetrics プロパティのいずれかに格納されている指定されたメトリクス (metric) の棒グラフを作成します。既定では、この関数は evaluatorSensitiveAttributeNames プロパティに格納されている最初の属性のグラフを作成します。

    evaluator の作成時に複数のモデルの予測クラス ラベルを指定した場合、モデル別に色分けされた異なる色の棒がグラフに含まれます。

    plot(evaluator,metric,Name=Value) では、1 つ以上の名前と値の引数を使用して追加オプションを指定します。たとえば、名前と値の引数 SensitiveAttributeName を使用して、プロットするセンシティブ属性を指定できます。

    plot(ax,___) は、ターゲットの座標軸 ax にプロットを表示します。前述の任意の構文で、最初の引数として座標軸を指定します。 (R2023b 以降)

    b = plot(___) は、Bar オブジェクトまたは Bar オブジェクトの配列を返します。b は、棒グラフを表示した後にBar のプロパティをクエリまたは変更するのに使用します。

    すべて折りたたむ

    fairnessMetrics オブジェクトを作成して、真のラベルのセンシティブ属性についての公平性メトリクスを計算します。その後、関数 plot を使用して、指定したメトリクスの棒グラフをプロットします。

    標本ファイル CreditRating_Historical.dat を table に読み取ります。予測子データは、法人顧客リストの財務比率と業種の情報で構成されます。応答変数は、格付機関が割り当てた格付けから構成されます。

    creditrating = readtable("CreditRating_Historical.dat");

    変数 ID の各値は一意の顧客 ID であるため (つまり、length(unique(creditrating.ID))creditrating に含まれる観測値の数に等しい)、変数 ID は予測子としては適切ではありません。変数 ID を table から削除し、変数 Industrycategorical 変数に変換します。

    creditrating.ID = [];
    creditrating.Industry = categorical(creditrating.Industry);

    応答変数 Rating について、AAAAAA、および BBB の格付けを "good" の格付けのカテゴリに結合し、BBB、および CCC の格付けを "poor" の格付けのカテゴリに結合します。

    Rating = categorical(creditrating.Rating);
    Rating = mergecats(Rating,["AAA","AA","A","BBB"],"good");
    Rating = mergecats(Rating,["BB","B","CCC"],"poor");
    creditrating.Rating = Rating;

    変数 Rating のラベルのセンシティブ属性 Industry についての公平性メトリクスを計算します。

    evaluator = fairnessMetrics(creditrating,"Rating", ...
        SensitiveAttributeNames="Industry");

    fairnessMetrics でサポートされているすべてのバイアス メトリクスとグループ メトリクスのメトリクスが計算されます。BiasMetrics プロパティと GroupMetrics プロパティに格納されているメトリクスの名前を表示します。

    evaluator.BiasMetrics.Properties.VariableNames(3:end)'
    ans = 2x1 cell
        {'StatisticalParityDifference'}
        {'DisparateImpact'            }
    
    
    evaluator.GroupMetrics.Properties.VariableNames(3:end)'
    ans = 2x1 cell
        {'GroupCount'    }
        {'GroupSizeRatio'}
    
    

    差異の影響の値の棒グラフを作成します。

    plot(evaluator,"DisparateImpact")

    Figure contains an axes object. The axes object with title Disparate Impact, xlabel Fairness Metric Value, ylabel Industry contains an object of type bar.

    fairnessMetrics オブジェクトを作成して、予測ラベルのセンシティブ属性についての公平性メトリクスを計算します。その後、関数 plot を使用して、指定したメトリクスとセンシティブ属性の棒グラフをプロットします。

    学習データ adultdata およびテスト データ adulttest を含む、標本データ census1994 を読み込みます。このデータ セットは、個人の年収が $50,000 を超えるかどうかを予測するために使用できる、米国国勢調査局の人口統計情報から構成されています。学習データ セットの最初の数行をプレビューします。

    load census1994
    head(adultdata)
        age       workClass          fnlwgt      education    education_num       marital_status           occupation        relationship     race      sex      capital_gain    capital_loss    hours_per_week    native_country    salary
        ___    ________________    __________    _________    _____________    _____________________    _________________    _____________    _____    ______    ____________    ____________    ______________    ______________    ______
    
        39     State-gov                77516    Bachelors         13          Never-married            Adm-clerical         Not-in-family    White    Male          2174             0                40          United-States     <=50K 
        50     Self-emp-not-inc         83311    Bachelors         13          Married-civ-spouse       Exec-managerial      Husband          White    Male             0             0                13          United-States     <=50K 
        38     Private             2.1565e+05    HS-grad            9          Divorced                 Handlers-cleaners    Not-in-family    White    Male             0             0                40          United-States     <=50K 
        53     Private             2.3472e+05    11th               7          Married-civ-spouse       Handlers-cleaners    Husband          Black    Male             0             0                40          United-States     <=50K 
        28     Private             3.3841e+05    Bachelors         13          Married-civ-spouse       Prof-specialty       Wife             Black    Female           0             0                40          Cuba              <=50K 
        37     Private             2.8458e+05    Masters           14          Married-civ-spouse       Exec-managerial      Wife             White    Female           0             0                40          United-States     <=50K 
        49     Private             1.6019e+05    9th                5          Married-spouse-absent    Other-service        Not-in-family    Black    Female           0             0                16          Jamaica           <=50K 
        52     Self-emp-not-inc    2.0964e+05    HS-grad            9          Married-civ-spouse       Exec-managerial      Husband          White    Male             0             0                45          United-States     >50K  
    

    各行には、成人 1 人の人口統計情報が格納されています。agemarital_statusrelationshipracesex などのセンシティブ属性の情報が含まれます。3 列目の flnwgt に観測値の重みが格納されており、最後の列 salary は個人の年収が $50,000 以下 (<=50K) か $50,000 を超える (>50K) かを示します。

    学習データ セット adultdata を使用して分類木に学習させます。table adultdata 内の変数名を使用して、応答変数、予測子変数、および観測値の重みを指定します。

    predictorNames = ["capital_gain","capital_loss","education", ...
        "education_num","hours_per_week","occupation","workClass"];
    Mdl = fitctree(adultdata,"salary", ...
        PredictorNames=predictorNames,Weights="fnlwgt");

    学習させた木 Mdl を使用して、テスト標本のラベルを予測します。

    adulttest.predictions = predict(Mdl,adulttest);

    この例では、予測ラベルの年齢および婚姻区分についての公平性を評価します。変数 age を 4 つのビンにグループ化します。

    ageGroups = ["Age<30","30<=Age<45","45<=Age<60","Age>=60"];
    adulttest.age_group = discretize(adulttest.age, ...
        [min(adulttest.age) 30 45 60 max(adulttest.age)], ...
        categorical=ageGroups);

    fairnessMetrics を使用して、予測の変数 age_group および marital_status についての公平性メトリクスを計算します。

    MdlEvaluator = fairnessMetrics(adulttest,"salary", ...
        SensitiveAttributeNames=["age_group","marital_status"], ...
        Predictions="predictions",Weights="fnlwgt")
    MdlEvaluator = 
      fairnessMetrics with properties:
    
        SensitiveAttributeNames: {'age_group'  'marital_status'}
                 ReferenceGroup: {'30<=Age<45'  'Married-civ-spouse'}
                   ResponseName: 'salary'
                  PositiveClass: >50K
                    BiasMetrics: [11x7 table]
                   GroupMetrics: [11x20 table]
                     ModelNames: 'predictions'
    
    
    

    センシティブ属性 marital_status の真陽性率 (TPR)、偽陽性率 (FPR)、機会均等差 (EOD)、および平均絶対オッズ差 (AAOD) の値の棒グラフを作成します。引数 SensitiveAttributeName の既定値は、fairnessMetrics オブジェクトの SensitiveAttributeNames プロパティの最初の要素です。この例では、最初の要素は age_group です。SensitiveAttributeName として marital_status を指定します。

    t = tiledlayout(2,2);
    nexttile
    plot(MdlEvaluator,"tpr",SensitiveAttributeName="marital_status")
    xlabel("")
    ylabel("")
    nexttile
    plot(MdlEvaluator,"fpr",SensitiveAttributeName="marital_status")
    yticklabels("")
    xlabel("")
    ylabel("")
    nexttile
    plot(MdlEvaluator,"eod",SensitiveAttributeName="marital_status")
    xlabel("")
    ylabel("")
    title("EOD")
    nexttile
    plot(MdlEvaluator,"aaod",SensitiveAttributeName="marital_status")
    yticklabels("")
    xlabel("")
    ylabel("")
    title("AAOD")
    xlabel(t,"Fairness Metric Value")
    ylabel(t,"Marital Status")

    Figure contains 4 axes objects. Axes object 1 with title True Positive Rate contains 2 objects of type bar, constantline. Axes object 2 with title False Positive Rate contains 2 objects of type bar, constantline. Axes object 3 with title EOD contains an object of type bar. Axes object 4 with title AAOD contains 2 objects of type bar, constantline.

    2 つの分類モデルに学習させ、公平性メトリクスを使用してモデル予測を比較します。

    標本ファイル CreditRating_Historical.dat を table に読み取ります。予測子データは、法人顧客リストの財務比率と業種の情報で構成されます。応答変数は、格付機関が割り当てた格付けから構成されます。

    creditrating = readtable("CreditRating_Historical.dat");

    変数 ID の各値は一意の顧客 ID であるため (つまり、length(unique(creditrating.ID))creditrating に含まれる観測値の数に等しい)、変数 ID は予測子としては適切ではありません。変数 ID を table から削除し、変数 Industrycategorical 変数に変換します。

    creditrating.ID = [];
    creditrating.Industry = categorical(creditrating.Industry);

    応答変数 Rating について、AAAAAA、および BBB の格付けを "good" の格付けのカテゴリに結合し、BBB、および CCC の格付けを "poor" の格付けのカテゴリに結合します。

    Rating = categorical(creditrating.Rating);
    Rating = mergecats(Rating,["AAA","AA","A","BBB"],"good");
    Rating = mergecats(Rating,["BB","B","CCC"],"poor");
    creditrating.Rating = Rating;

    サポート ベクター マシン (SVM) モデルに creditrating データで学習させます。より良い結果を得るために、モデルを当てはめる前に予測子を標準化します。学習させたモデルを使用してラベルを予測し、学習データ セットの誤分類率を計算します。

    predictorNames = ["WC_TA","RE_TA","EBIT_TA","MVE_BVTD","S_TA"];
    SVMMdl = fitcsvm(creditrating,"Rating", ...
        PredictorNames=predictorNames,Standardize=true);
    SVMPredictions = resubPredict(SVMMdl);
    resubLoss(SVMMdl)
    ans = 0.0872
    

    一般化加法モデル (GAM) に学習させます。

    GAMMdl = fitcgam(creditrating,"Rating", ...
        PredictorNames=predictorNames);
    GAMPredictions = resubPredict(GAMMdl);
    resubLoss(GAMMdl)
    ans = 0.0542
    

    学習データ セットに対する精度は GAMMdl の方が高くなっています。

    両方のモデルのモデル予測を使用して、センシティブ属性 Industry についての公平性メトリクスを計算します。

    predictions = [SVMPredictions,GAMPredictions];
    evaluator = fairnessMetrics(creditrating,"Rating", ...
        SensitiveAttributeNames="Industry",Predictions=predictions, ...
        ModelNames=["SVM","GAM"]);

    関数 report を使用してバイアス メトリクスを表示します。

    report(evaluator)
    ans=48×5 table
                  Metrics              SensitiveAttributeNames    Groups       SVM          GAM    
        ___________________________    _______________________    ______    _________    __________
    
        StatisticalParityDifference           Industry              1       -0.028441     0.0058208
        StatisticalParityDifference           Industry              2        -0.04014     0.0063339
        StatisticalParityDifference           Industry              3               0             0
        StatisticalParityDifference           Industry              4        -0.04905    -0.0043007
        StatisticalParityDifference           Industry              5       -0.015615     0.0041607
        StatisticalParityDifference           Industry              6        -0.03818     -0.024515
        StatisticalParityDifference           Industry              7        -0.01514      0.007326
        StatisticalParityDifference           Industry              8       0.0078632      0.036581
        StatisticalParityDifference           Industry              9       -0.013863      0.042266
        StatisticalParityDifference           Industry              10      0.0090218      0.050095
        StatisticalParityDifference           Industry              11      -0.004188      0.001453
        StatisticalParityDifference           Industry              12      -0.041572     -0.028589
        DisparateImpact                       Industry              1         0.92261         1.017
        DisparateImpact                       Industry              2         0.89078        1.0185
        DisparateImpact                       Industry              3               1             1
        DisparateImpact                       Industry              4         0.86654       0.98742
          ⋮
    
    

    バイアス メトリクスのうち、機会均等差 (EOD) の値を比較します。関数 plot を使用して、EOD の値の棒グラフを作成します。

    b = plot(evaluator,"eod");
    b(1).FaceAlpha = 0.2;
    b(2).FaceAlpha = 0.2;
    legend(Location="southwest")

    Figure contains an axes object. The axes object with title Equal Opportunity Difference, xlabel Fairness Metric Value, ylabel Industry contains 3 objects of type bar, constantline. These objects represent SVM, GAM.

    EOD の値の分布が理解しやすくなるように、箱ひげ図を使用して値をプロットします。

    boxchart(evaluator.BiasMetrics.EqualOpportunityDifference, ...
        GroupByColor=evaluator.BiasMetrics.ModelNames)
    ax = gca;
    ax.XTick = [];
    ylabel("Equal Opportunity Difference")
    legend

    Figure contains an axes object. The axes object with ylabel Equal Opportunity Difference contains 2 objects of type boxchart. These objects represent SVM, GAM.

    EOD の値は、SVM の値に比べて GAM の方が 0 に近くなっています。

    入力引数

    すべて折りたたむ

    公平性メトリクスを含むオブジェクト。fairnessMetrics オブジェクトとして指定します。

    プロットする公平性メトリクス。fairnessMetrics オブジェクト (evaluator) の BiasMetrics プロパティまたは GroupMetrics プロパティのいずれかに格納されているバイアス メトリクスまたはグループ メトリクスとして指定します。evaluator のプロパティでは、table 変数名に完全名が使用されます。ただし、引数 metric の指定には、次の表に示す完全名または省略名のいずれかを使用できます。

    • バイアス メトリクス

      メトリクス名説明評価タイプ
      "StatisticalParityDifference" または "spd"統計的均一性差 (SPD)データレベルまたはモデルレベルの評価
      "DisparateImpact" または "di"差異の影響 (DI)データレベルまたはモデルレベルの評価
      "EqualOpportunityDifference" または "eod"機会均等差 (EOD)モデルレベルの評価
      "AverageAbsoluteOddsDifference" または "aaod"平均絶対オッズ差 (AAOD)モデルレベルの評価

      バイアス メトリクスの定義については、バイアス メトリクスを参照してください。

    • グループ メトリクス

      メトリクス名説明評価タイプ
      "GroupCount"グループ カウント (グループの標本数)データレベルまたはモデルレベルの評価
      "GroupSizeRatio"グループ カウントを合計標本数で除算した値データレベルまたはモデルレベルの評価
      "TruePositives" または "tp"真陽性の数 (TP)モデルレベルの評価
      "TrueNegatives" または "tn"真陰性の数 (TN)モデルレベルの評価
      "FalsePositives" または "fp"偽陽性の数 (FP)モデルレベルの評価
      "FalseNegatives" または "fn"偽陰性の数 (FN)モデルレベルの評価
      "TruePositiveRate" または "tpr"真陽性率 (TPR) (再現率または感度とも呼ばれる)、TP/(TP+FN)モデルレベルの評価
      "TrueNegativeRate""tnr"、または "spec"真陰性率 (TNR)、特異度、TN/(TN+FP)モデルレベルの評価
      "FalsePositiveRate" または "fpr"偽陽性率 (FPR) (フォールアウトまたは 1 - 特異度とも呼ばれる)、FP/(TN+FP)モデルレベルの評価
      "FalseNegativeRate""fnr"、または "miss"偽陰性率 (FNR)、失敗率、FN/(TP+FN)モデルレベルの評価
      "FalseDiscoveryRate" または "fdr"偽発見率 (FDR)、FP/(TP+FP)モデルレベルの評価
      "FalseOmissionRate" または "for"偽省略率 (FOR)、FN/(TN+FN)モデルレベルの評価
      "PositivePredictiveValue""ppv"、または "prec"陽性予測値 (PPV)、適合率、TP/(TP+FP)モデルレベルの評価
      "NegativePredictiveValue" または "npv"陰性予測値 (NPV)、TN/(TN+FN)モデルレベルの評価
      "RateOfPositivePredictions" または "rpp"陽性予測率 (RPP)、(TP+FP)/(TP+FN+FP+TN)モデルレベルの評価
      "RateOfNegativePredictions" または "rnp"陰性予測率 (RNP)、(TN+FN)/(TP+FN+FP+TN)モデルレベルの評価
      "Accuracy" または "accu"精度、(TP+TN)/(TP+FN+FP+TN)モデルレベルの評価

    fairnessMetrics オブジェクトの BiasMetrics プロパティと GroupMetrics プロパティにバイアス メトリクスとグループ メトリクスがそれぞれ格納されます。サポートされるメトリクスは、fairnessMetrics オブジェクトの作成時に引数 Predictions を使用して予測ラベルを指定するかどうかによって異なります。

    • データレベルの評価 — 真のラベルを指定して予測ラベルを指定しなかった場合、BiasMetrics プロパティには StatisticalParityDifferenceDisparateImpact のみが格納され、GroupMetrics プロパティには GroupCountGroupSizeRatio のみが格納されます。

    • モデルレベルの評価 — 真のラベルと予測ラベルの両方を指定した場合、BiasMetricsGroupMetrics に表のすべてのメトリクスが格納されます。

    データ型: char | string

    R2023b 以降

    プロットの座標軸。Axes オブジェクトとして指定します。ax を指定しない場合、plot は、現在の座標軸を使用してプロットを作成します。Axes オブジェクトを作成する方法の詳細については、axes を参照してください。

    名前と値の引数

    オプションの引数のペアを Name1=Value1,...,NameN=ValueN として指定します。ここで Name は引数名、Value は対応する値です。名前と値の引数は他の引数の後ろにする必要がありますが、ペアの順序は関係ありません。

    例: SensitiveAttributeName="Age",ModelNames="Tree" は、センシティブ属性 Age の公平性メトリクスについて、Tree モデルの予測ラベルを使用して計算した値をプロットするように指定します。

    プロットするセンシティブ属性の名前。文字ベクトルまたは string スカラーとして指定します。センシティブ属性の名前は、evaluatorSensitiveAttributeNames プロパティに含まれる名前でなければなりません。

    例: SensitiveAttributeName="race"

    データ型: char | string

    R2023a 以降

    プロットするモデルの名前。"all"、文字ベクトル、string 配列、または文字ベクトルの cell 配列として指定します。ModelNames の値に含める名前は、evaluatorModelNames プロパティに含まれている名前でなければなりません。値 "all" の使用は evaluator.ModelNames を指定することと等価です。

    例: ModelNames="Tree"

    例: ModelNames=["SVM","Neural Network"]

    データ型: char | string | cell

    詳細

    すべて折りたたむ

    バイアス メトリクス

    fairnessMetrics オブジェクトは、統計的均一性差 (SPD)、差異の影響 (DI)、機会均等差 (EOD)、および平均絶対オッズ差 (AAOD) の 4 つのバイアス メトリクスをサポートします。オブジェクトは EOD と AAOD はモデル予測の評価でのみサポートされます。

    fairnessMetrics オブジェクトは、各センシティブ属性の各グループのバイアス メトリクスを属性の参照グループに基づいて計算します。

    • 統計的均一性 (デモグラフィック パリティ) 差 (SPD)

      グループ sij の i 番目のセンシティブ属性 (Si) の参照グループ sir に対する SPD の値は、次のように定義されます。

      SPDij=P(Y=+|Si=sij)P(Y=+|Si=sir).

      SPD の値は、センシティブ属性の値が sij の場合に陽性クラスになる確率とセンシティブ属性の値が sir (参照グループ) の場合に陽性クラスになる確率の差です。このメトリクスでは、ラベルにセンシティブ属性によるバイアスがない場合に 2 つの確率 (統計的パリティ) が等しくなるものと仮定されます。

      引数 Predictions を指定した場合、真のラベル Y の代わりに、モデル予測 Y^ の確率についての SPD が計算されます。

    • 差異の影響 (DI)

      グループ sij の i 番目のセンシティブ属性 (Si) の参照グループ sir に対する DI の値は、次のように定義されます。

      DIij=P(Y=+|Si=sij)P(Y=+|Si=sir).

      DI の値は、センシティブ属性の値が sij の場合に陽性クラスになる確率とセンシティブ属性の値が sir (参照グループ) の場合に陽性クラスになる確率の比です。このメトリクスでは、ラベルにセンシティブ属性によるバイアスがない場合に 2 つの確率が等しくなるものと仮定されます。一般に、DI の値が 0.8 より小さいか 1.25 より大きいと、参照グループに対してバイアスがあることを示します[2]

      引数 Predictions を指定した場合、真のラベル Y の代わりに、モデル予測 Y^ の確率についての DI が計算されます。

    • 機会均等差 (EOD)

      グループ sij の i 番目のセンシティブ属性 (Si) の参照グループ sir に対する EOD の値は、次のように定義されます。

      EODij=TPR(Si=sij)TPR(Si=sir)=P(Y^=+|Y=+,Si=sij)P(Y^=+|Y=+,Si=sir).

      EOD の値は、グループ sij と参照グループ sir の間の真陽性率 (TPR) の差です。このメトリクスでは、予測ラベルにセンシティブ属性によるバイアスがない場合に 2 つの率が等しくなるものと仮定されます。

    • 平均絶対オッズ差 (AAOD)

      グループ sij の i 番目のセンシティブ属性 (Si) の参照グループ sir に対する AAOD の値は、次のように定義されます。

      AAODij=12(|FPR(Si=sij)FPR(Si=sir)|+|TPR(Si=sij)TPR(Si=sir)|).

      AAOD の値は、グループ sij と参照グループ sir の間の真陽性率 (TPR) と偽陽性率 (FPR) の差を表します。このメトリクスでは、予測ラベルにセンシティブ属性によるバイアスがない場合に TPR と FPR の差がないものと仮定されます。

    参照

    [1] Mehrabi, Ninareh, et al. “A Survey on Bias and Fairness in Machine Learning.” ArXiv:1908.09635 [cs.LG], Sept. 2019. arXiv.org.

    [2] Saleiro, Pedro, et al. “Aequitas: A Bias and Fairness Audit Toolkit.” ArXiv:1811.05577 [cs.LG], April 2019. arXiv.org.

    バージョン履歴

    R2022b で導入

    すべて展開する