plot
説明
plot(
は、evaluator
,metric
)fairnessMetrics
オブジェクト (evaluator
) の BiasMetrics
プロパティまたは GroupMetrics
プロパティのいずれかに格納されている指定されたメトリクス (metric
) の棒グラフを作成します。既定では、この関数は evaluator
の SensitiveAttributeNames
プロパティに格納されている最初の属性のグラフを作成します。
evaluator
の作成時に複数のモデルの予測クラス ラベルを指定した場合、モデル別に色分けされた異なる色の棒がグラフに含まれます。
plot(
では、1 つ以上の名前と値の引数を使用して追加オプションを指定します。たとえば、名前と値の引数 evaluator
,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
についての公平性メトリクスを計算します。
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")
プロットするセンシティブ属性の指定
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
についての公平性メトリクスを計算します。
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")
公平性メトリクスを使用したモデル予測の比較
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]; 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")
EOD の値の分布が理解しやすくなるように、箱ひげ図を使用して値をプロットします。
boxchart(evaluator.BiasMetrics.EqualOpportunityDifference, ... GroupByColor=evaluator.BiasMetrics.ModelNames) ax = gca; ax.XTick = []; ylabel("Equal Opportunity Difference") legend
EOD の値は、SVM の値に比べて GAM の方が 0 に近くなっています。
入力引数
evaluator
— 公平性メトリクスを含むオブジェクト
fairnessMetrics
オブジェクト
公平性メトリクスを含むオブジェクト。fairnessMetrics
オブジェクトとして指定します。
metric
— プロットする公平性メトリクス
string スカラー | 文字ベクトル
プロットする公平性メトリクス。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
プロパティにはStatisticalParityDifference
とDisparateImpact
のみが格納され、GroupMetrics
プロパティにはGroupCount
とGroupSizeRatio
のみが格納されます。モデルレベルの評価 — 真のラベルと予測ラベルの両方を指定した場合、
BiasMetrics
とGroupMetrics
に表のすべてのメトリクスが格納されます。
データ型: char
| string
ax
— プロットの座標軸
Axes
オブジェクト
R2023b 以降
プロットの座標軸。Axes
オブジェクトとして指定します。ax
を指定しない場合、plot
は、現在の座標軸を使用してプロットを作成します。Axes
オブジェクトを作成する方法の詳細については、axes
を参照してください。
名前と値の引数
オプションの引数のペアを Name1=Value1,...,NameN=ValueN
として指定します。ここで Name
は引数名、Value
は対応する値です。名前と値の引数は他の引数の後ろにする必要がありますが、ペアの順序は関係ありません。
例: SensitiveAttributeName="Age",ModelNames="Tree"
は、センシティブ属性 Age
の公平性メトリクスについて、Tree
モデルの予測ラベルを使用して計算した値をプロットするように指定します。
SensitiveAttributeName
— プロットするセンシティブ属性の名前
evaluator
.SensitiveAttributeNames{1}
(既定値) | 文字ベクトル | string スカラー
evaluator
.SensitiveAttributeNames{1}プロットするセンシティブ属性の名前。文字ベクトルまたは string スカラーとして指定します。センシティブ属性の名前は、evaluator
の SensitiveAttributeNames
プロパティに含まれる名前でなければなりません。
例: SensitiveAttributeName="race"
データ型: char
| string
ModelNames
— プロットするモデルの名前
"all"
(既定値) | 文字ベクトル | string 配列 | 文字ベクトルの cell 配列
R2023a 以降
プロットするモデルの名前。"all"
、文字ベクトル、string 配列、または文字ベクトルの cell 配列として指定します。ModelNames
の値に含める名前は、evaluator
の ModelNames
プロパティに含まれている名前でなければなりません。値 "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 の値は、次のように定義されます。
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 で導入R2023b: plot
で指定したターゲットの座標軸を使用
オブジェクト関数 plot
でターゲットの座標軸を指定できるようになりました。関数の最初の入力引数として Axes
オブジェクトを指定します。
R2023a: モデル間での公平性メトリクスの比較
関数 fairnessMetrics
を使用して、複数のバイナリ分類器の公平性メトリクスを比較できます。関数の呼び出しで、引数 predictions
を使用して各モデルの予測クラス ラベルを指定します。モデルの名前の指定には、名前と値の引数 ModelNames
を使用できます。モデルの名前の情報は、fairnessMetrics
オブジェクトの BiasMetrics
、GroupMetrics
、および ModelNames
の各プロパティに格納されます。
fairnessMetrics
オブジェクトを作成した後、オブジェクト関数 report
または plot
を使用します。
オブジェクト関数
report
は、公平性メトリクスの table を返します。その形式は、名前と値の引数DisplayMetricsInRows
の値に応じて異なります。(詳細については、metricsTbl
を参照してください。) 名前と値の引数ModelNames
を使用して、レポートの table に含めるモデルのサブセットを指定できます。オブジェクト関数
plot
は、棒グラフをBar
オブジェクトの配列として返します。指定されたメトリクスの計算に予測ラベルが使用されたモデルがバーの色で示されます。名前と値の引数ModelNames
を使用して、プロットに含めるモデルのサブセットを指定できます。
以前のリリースでは、b = plot(__)
構文で常に単一の Bar
オブジェクトが返されていました。plot
は、メトリクス値を黒のエッジの青いバーで表示し、ベースライン値を実線で表示していました。現在は、各バーのエッジの色がそのバーの色と一致し、ベースライン値はプロットに破線で表示されます。
MATLAB コマンド
次の MATLAB コマンドに対応するリンクがクリックされました。
コマンドを MATLAB コマンド ウィンドウに入力して実行してください。Web ブラウザーは MATLAB コマンドをサポートしていません。
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- 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)