plot
説明
plot( は、metricsResults,metric)fairnessMetrics オブジェクト (metricsResults) の BiasMetrics プロパティまたは GroupMetrics プロパティのいずれかに格納されている指定されたメトリクス (metric) の棒グラフを作成します。既定では、この関数は metricsResults の SensitiveAttributeNames プロパティに格納されている最初の属性のグラフを作成します。
metricsResults の作成時に複数のモデルの予測クラス ラベルを指定した場合、モデル別に色分けされた異なる色の棒がグラフに含まれます。
plot( は、1 つ以上の名前と値の引数を使用して追加オプションを指定します。たとえば、名前と値の引数 metricsResults,metric,Name=Value)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 から削除し、変数 Industry を categorical 変数に変換します。
creditrating.ID = []; creditrating.Industry = categorical(creditrating.Industry);
応答変数 Rating について、AAA、AA、A、および BBB の格付けを "good" の格付けのカテゴリに結合し、BB、B、および 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 についての公平性メトリクスを計算します。
metricsResults = fairnessMetrics(creditrating,"Rating", ... SensitiveAttributeNames="Industry");
fairnessMetrics でサポートされているすべてのバイアス メトリクスとグループ メトリクスのメトリクスが計算されます。BiasMetrics プロパティと GroupMetrics プロパティに格納されているメトリクスの名前を表示します。
metricsResults.BiasMetrics.Properties.VariableNames(3:end)'
ans = 2×1 cell
    {'StatisticalParityDifference'}
    {'DisparateImpact'            }
metricsResults.GroupMetrics.Properties.VariableNames(3:end)'
ans = 2×1 cell
    {'GroupCount'    }
    {'GroupSizeRatio'}
差異の影響の値の棒グラフを作成します。
plot(metricsResults,"DisparateImpact")
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 人の人口統計情報が格納されています。age、marital_status、relationship、race、sex などのセンシティブ属性の情報が含まれます。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 についての公平性メトリクスを計算します。
metricsResults = fairnessMetrics(adulttest,"salary", ... SensitiveAttributeNames=["age_group","marital_status"], ... Predictions="predictions",Weights="fnlwgt")
metricsResults = 
  fairnessMetrics with properties:
    SensitiveAttributeNames: {'age_group'  'marital_status'}
             ReferenceGroup: {'30<=Age<45'  'Married-civ-spouse'}
               ResponseName: 'salary'
              PositiveClass: >50K
                BiasMetrics: [11×7 table]
               GroupMetrics: [11×20 table]
                 ModelNames: 'predictions'
  Properties, Methods
センシティブ属性 marital_status の真陽性率 (TPR)、偽陽性率 (FPR)、機会均等差 (EOD)、および平均絶対オッズ差 (AAOD) の値の棒グラフを作成します。引数 SensitiveAttributeName の既定値は、fairnessMetrics オブジェクトの SensitiveAttributeNames プロパティの最初の要素です。この例では、最初の要素は age_group です。SensitiveAttributeName として marital_status を指定します。
t = tiledlayout(2,2); nexttile plot(metricsResults,"tpr",SensitiveAttributeName="marital_status") xlabel("") ylabel("") nexttile plot(metricsResults,"fpr",SensitiveAttributeName="marital_status") yticklabels("") xlabel("") ylabel("") nexttile plot(metricsResults,"eod",SensitiveAttributeName="marital_status") xlabel("") ylabel("") title("EOD") nexttile plot(metricsResults,"aaod",SensitiveAttributeName="marital_status") yticklabels("") xlabel("") ylabel("") title("AAOD") xlabel(t,"Fairness Metric Value") ylabel(t,"Marital Status")

2 つの分類モデルに学習させ、公平性メトリクスを使用してモデル予測を比較します。
標本ファイル CreditRating_Historical.dat を table に読み取ります。予測子データは、法人顧客リストの財務比率と業種の情報で構成されます。応答変数は、格付機関が割り当てた格付けから構成されます。
creditrating = readtable("CreditRating_Historical.dat");変数 ID の各値は一意の顧客 ID であるため (つまり、length(unique(creditrating.ID)) は creditrating に含まれる観測値の数に等しい)、変数 ID は予測子としては適切ではありません。変数 ID を table から削除し、変数 Industry を categorical 変数に変換します。
creditrating.ID = []; creditrating.Industry = categorical(creditrating.Industry);
応答変数 Rating について、AAA、AA、A、および BBB の格付けを "good" の格付けのカテゴリに結合し、BB、B、および 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]; metricsResults = fairnessMetrics(creditrating,"Rating", ... SensitiveAttributeNames="Industry",Predictions=predictions, ... ModelNames=["SVM","GAM"]);
関数 report を使用してバイアス メトリクスを表示します。
report(metricsResults)
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(metricsResults,"eod"); b(1).FaceAlpha = 0.2; b(2).FaceAlpha = 0.2; legend(Location="southwest")

EOD の値の分布が理解しやすくなるように、箱ひげ図を使用して値をプロットします。
boxchart(metricsResults.BiasMetrics.EqualOpportunityDifference, ... GroupByColor=metricsResults.BiasMetrics.ModelNames) ax = gca; ax.XTick = []; ylabel("Equal Opportunity Difference") legend

EOD の値は、SVM の値に比べて GAM の方が 0 に近くなっています。
入力引数
公平性メトリクスの結果。fairnessMetrics オブジェクトとして指定します。
プロットする公平性メトリクス。fairnessMetrics オブジェクト (metricsResults) の BiasMetrics プロパティまたは GroupMetrics プロパティのいずれかに格納されているバイアス メトリクスまたはグループ メトリクスとして指定します。metricsResults のプロパティでは、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プロパティには- StatisticalParityDifferenceと- DisparateImpactのみが格納され、- GroupMetricsプロパティには- GroupCountと- GroupSizeRatioのみが格納されます。
- モデルレベルの評価 — 真のラベルと予測ラベルの両方を指定した場合、 - BiasMetricsと- GroupMetricsに表のすべてのメトリクスが格納されます。
データ型: char | string
R2023b 以降
プロットの座標軸。Axes オブジェクトとして指定します。ax を指定しない場合、plot は、現在の座標軸を使用してプロットを作成します。Axes オブジェクトを作成する方法の詳細については、axes を参照してください。
名前と値の引数
オプションの引数のペアを Name1=Value1,...,NameN=ValueN として指定します。ここで、Name は引数名で、Value は対応する値です。名前と値の引数は他の引数の後に指定しなければなりませんが、ペアの順序は重要ではありません。 
例: SensitiveAttributeName="Age",ModelNames="Tree" は、センシティブ属性 Age の公平性メトリクスについて、Tree モデルの予測ラベルを使用して計算した値をプロットするように指定します。
プロットするセンシティブ属性の名前。文字ベクトルまたは string スカラーとして指定します。センシティブ属性の名前は、metricsResults の SensitiveAttributeNames プロパティに含まれる名前でなければなりません。
例: SensitiveAttributeName="race"
データ型: char | string
R2023a 以降
プロットするモデルの名前。"all"、文字ベクトル、string 配列、または文字ベクトルの cell 配列として指定します。ModelNames の値に含める名前は、metricsResults の ModelNames プロパティに含まれている名前でなければなりません。値 "all" の使用は metricsResults.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 の値は、次のように定義されます。 - SPD の値は、センシティブ属性の値が sij の場合に陽性クラスになる確率とセンシティブ属性の値が sir (参照グループ) の場合に陽性クラスになる確率の差です。このメトリクスでは、ラベルにセンシティブ属性によるバイアスがない場合に 2 つの確率 (統計的パリティ) が等しくなるものと仮定されます。 - 引数 - Predictionsを指定した場合、真のラベル Y の代わりに、モデル予測 の確率についての SPD が計算されます。
- 差異の影響 (DI) - グループ sij の i 番目のセンシティブ属性 (Si) の参照グループ sir に対する DI の値は、次のように定義されます。 - DI の値は、センシティブ属性の値が sij の場合に陽性クラスになる確率とセンシティブ属性の値が sir (参照グループ) の場合に陽性クラスになる確率の比です。このメトリクスでは、ラベルにセンシティブ属性によるバイアスがない場合に 2 つの確率が等しくなるものと仮定されます。一般に、DI の値が - 0.8より小さいか- 1.25より大きいと、参照グループに対してバイアスがあることを示します[2]。- 引数 - Predictionsを指定した場合、真のラベル Y の代わりに、モデル予測 の確率についての DI が計算されます。
- 機会均等差 (EOD) - グループ sij の i 番目のセンシティブ属性 (Si) の参照グループ sir に対する EOD の値は、次のように定義されます。 - EOD の値は、グループ sij と参照グループ sir の間の真陽性率 (TPR) の差です。このメトリクスでは、予測ラベルにセンシティブ属性によるバイアスがない場合に 2 つの率が等しくなるものと仮定されます。 
- 平均絶対オッズ差 (AAOD) - グループ sij の i 番目のセンシティブ属性 (Si) の参照グループ sir に対する AAOD の値は、次のように定義されます。 - 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 で導入オブジェクト関数 plot でターゲットの座標軸を指定できるようになりました。関数の最初の入力引数として Axes オブジェクトを指定します。
関数 fairnessMetrics を使用して、複数のバイナリ分類器の公平性メトリクスを比較できます。関数の呼び出しで、引数 predictions を使用して各モデルの予測クラス ラベルを指定します。モデルの名前の指定には、名前と値の引数 ModelNames を使用できます。モデルの名前の情報は、fairnessMetrics オブジェクトの BiasMetrics、GroupMetrics、および ModelNames の各プロパティに格納されます。
fairnessMetrics オブジェクトを作成した後、オブジェクト関数 report または plot を使用します。
- オブジェクト関数 - reportは、公平性メトリクスの table を返します。その形式は、名前と値の引数- DisplayMetricsInRowsの値に応じて異なります。(詳細については、- metricsTblを参照してください。) 名前と値の引数- ModelNamesを使用して、レポートの table に含めるモデルのサブセットを指定できます。
- オブジェクト関数 - plotは、棒グラフを- Barオブジェクトの配列として返します。指定されたメトリクスの計算に予測ラベルが使用されたモデルがバーの色で示されます。名前と値の引数- ModelNamesを使用して、プロットに含めるモデルのサブセットを指定できます。
以前のリリースでは、b = plot(__) 構文で常に単一の Bar オブジェクトが返されていました。plot は、メトリクス値を黒のエッジの青いバーで表示し、ベースライン値を実線で表示していました。現在は、各バーのエッジの色がそのバーの色と一致し、ベースライン値はプロットに破線で表示されます。
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
Web サイトの選択
Web サイトを選択すると、翻訳されたコンテンツにアクセスし、地域のイベントやサービスを確認できます。現在の位置情報に基づき、次のサイトの選択を推奨します:
また、以下のリストから Web サイトを選択することもできます。
最適なサイトパフォーマンスの取得方法
中国のサイト (中国語または英語) を選択することで、最適なサイトパフォーマンスが得られます。その他の国の MathWorks のサイトは、お客様の地域からのアクセスが最適化されていません。
南北アメリカ
- América Latina (Español)
- Canada (English)
- United States (English)
ヨーロッパ
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)