fairnessMetrics
説明
fairnessMetrics
は、データ セットまたはバイナリ分類モデルのセンシティブ属性についての公平性メトリクス (バイアス メトリクスとグループ メトリクス) を計算します。データレベルの評価では、データの真のバイナリ ラベルを調べます。モデルレベルの評価では、1 つ以上のバイナリ分類モデルによって返される予測ラベルを真のラベルと予測ラベルの両方を使用して調べます。
バイアス メトリクスでグループ間の差異が測定され、グループ メトリクスでグループ内に情報が格納されます。これらのメトリクスを使用して、データまたはモデルについて、各センシティブ属性のグループに対するバイアスがないかどうかを判別できます。
fairnessMetrics
オブジェクトを作成した後、関数 report
を使用して公平性メトリクス レポートを生成したり、関数 plot
を使用してメトリクスの棒グラフを作成したりできます。
作成
構文
説明
は、ベクトル evaluator
= fairnessMetrics(SensitiveAttributes
,Y
)Y
の真のバイナリ クラス ラベルについて、行列 SensitiveAttributes
のセンシティブ属性についての公平性メトリクスを計算します。関数 fairnessMetrics
は fairnessMetrics
オブジェクト evaluator
を返します。このオブジェクトの BiasMetrics
プロパティと GroupMetrics
プロパティにバイアス メトリクスとグループ メトリクスがそれぞれ格納されます。
は、table evaluator
= fairnessMetrics(Tbl
,ResponseName
)Tbl
のセンシティブ属性と応答変数を使用して公平性メトリクスを計算します。入力引数 ResponseName
で、クラス ラベルが格納されている Tbl
内の変数の名前を指定します。
は、evaluator
= fairnessMetrics(___,SensitiveAttributeNames=sensitiveAttributeNames
)Tbl
内の変数のサブセット (名前が sensitiveAttributeNames
に対応) をセンシティブ属性として指定するか、sensitiveAttributeNames
内のセンシティブ属性に名前を割り当てます。この引数は、前の構文におけるいずれかの入力引数の組み合わせに加えて指定できます。
は、引数 evaluator
= fairnessMetrics(___,Predictions=predictions
)predictions
を使用して各モデルの予測ラベルを指定した場合に、1 つ以上のバイナリ分類モデルの公平性メトリクスを計算します。fairnessMetrics
は、モデルレベルの評価に真のラベルと予測ラベルの両方を使用します。
では、1 つ以上の名前と値の引数を使用して追加オプションを指定します。たとえば、基準年齢グループ evaluator
= fairnessMetrics(___,Name=Value
)30
に対する変数 age
の各グループのバイアス メトリクスを計算するには、SensitiveAttributeNames="age",ReferenceGroup=30
と指定します。
入力引数
SensitiveAttributes
— センシティブ属性
ベクトル | 行列
センシティブ属性。ベクトルまたは行列として指定します。SensitiveAttributes
を行列として指定する場合、SensitiveAttributes
の各行は 1 つの観測値に対応し、各列は 1 つのセンシティブ属性に対応します。
引数 sensitiveAttributeNames
を使用して SensitiveAttributes
内の変数に名前を割り当てることができます。
データ型: single
| double
| logical
| char
| string
| cell
| categorical
Y
— 真のバイナリ クラス ラベル
categorical 配列 | 文字配列 | string 配列 | logical ベクトル | 数値ベクトル | 文字ベクトルの cell 配列
真のバイナリ クラス ラベル。categorical 配列、文字配列、string 配列、logical ベクトル、数値ベクトル、または文字ベクトルの cell 配列として指定します。
fairnessMetrics
はバイナリ分類のみをサポートします。Y
には厳密に 2 つの異なるクラスが含まれていなければなりません。名前と値の引数
PositiveClass
を使用して、2 つのクラスのいずれかを陽性クラスとして指定できます。Y
の長さはSensitiveAttributes
またはTbl
の観測値の数と等しくなければなりません。Y
が文字配列の場合、各ラベルは配列の 1 つの行に対応しなければなりません。
データ型: single
| double
| logical
| char
| string
| cell
| categorical
Tbl
— 標本データ
テーブル
標本データ。テーブルとして指定します。Tbl
の各行は 1 つの観測値に対応し、各列は 1 つのセンシティブ属性に対応します。文字ベクトルの cell 配列ではない cell 配列と複数列の変数は使用できません。
必要に応じて、Tbl
に真のクラス ラベル、予測クラス ラベル、および観測値の重みの各列を含めることができます。
真のクラス ラベルの変数は
ResponseName
、予測クラス ラベルの変数はPredictions
、観測値の重みの変数はWeights
を使用して指定する必要があります。fairnessMetrics
は残りの変数をセンシティブ属性として使用します。Tbl
内の残りの変数のサブセットをセンシティブ属性として使用するには、sensitiveAttributeNames
を使用して変数を指定します。真のクラス ラベルの変数は、categorical 配列、文字配列、string 配列、logical ベクトル、数値ベクトル、または文字ベクトルの cell 配列でなければなりません。
fairnessMetrics
はバイナリ分類のみをサポートします。真のクラス ラベルの変数には厳密に 2 つの異なるクラスが含まれていなければなりません。名前と値の引数
PositiveClass
を使用して、2 つのクラスのいずれかを陽性クラスとして指定できます。
重みの列は数値ベクトルでなければなりません。
Tbl
に真のクラス ラベルの変数が含まれていない場合は、Y
を使用して変数を指定します。応答変数 Y
の長さと Tbl
の行数は等しくなければなりません。Tbl
内の変数のサブセットをセンシティブ属性として使用するには、sensitiveAttributeNames
を使用して変数を指定します。
データ型: table
ResponseName
— 真のクラス ラベルの変数の名前
Tbl
内の変数の名前
真のクラス ラベルの変数の名前。Tbl
内の応答変数の名前を含む文字ベクトルまたは string スカラーとして指定します。
例: "trueLabel"
は、Tbl
の変数 trueLabel
(Tbl.trueLabel
) が真のクラス ラベルの変数であることを示します。
データ型: char
| string
sensitiveAttributeNames
— センシティブ属性の変数の名前
文字ベクトル | 一意な名前の string 配列 | 一意な文字ベクトルの cell 配列
センシティブ属性の変数の名前。文字ベクトル、一意な名前の string 配列、または一意な文字ベクトルの cell 配列として指定します。sensitiveAttributeNames
の機能は、標本データの提供方法によって決まります。
SensitiveAttributes
とY
を指定した場合、sensitiveAttributeNames
を使用してSensitiveAttributes
内の変数に名前を割り当てることができます。sensitiveAttributeNames
内の名前の順序は、SensitiveAttributes
の列の順序に一致しなければなりません。つまり、sensitiveAttributeNames{1}
はSensitiveAttributes(:,1)
の名前、sensitiveAttributeNames{2}
はSensitiveAttributes(:,2)
の名前であり、他も同様です。また、size(SensitiveAttributes,2)
とnumel(sensitiveAttributeNames)
は等しくなければなりません。既定では
sensitiveAttributeNames
は{'x1','x2',...}
です。
Tbl
を指定した場合、sensitiveAttributeNames
を使用してセンシティブ属性として使用する変数を指定できます。つまり、fairnessMetrics
は、公平性メトリクスの計算にsensitiveAttributeNames
の変数のみを使用します。sensitiveAttributeNames
はTbl.Properties.VariableNames
のサブセットでなければならず、クラス ラベルの変数や観測値の重みの変数の名前を含めることはできません。既定では、
sensitiveAttributeNames
は、ResponseName
、Predictions
、およびWeights
で指定された変数を除くTbl
内のすべての変数名のセットです。
例: SensitiveAttributeNames="Gender"
例: SensitiveAttributeNames=["age","marital_status"]
データ型: char
| string
| cell
predictions
— 予測クラス ラベル
[]
(既定値) | Tbl
内の変数の名前 | 行列
予測クラス ラベル (モデル予測)。[]
、Tbl
内の変数の名前、または行列として指定します。
R2023a より前: 最大 1 つのバイナリ分類器の予測ラベルを Tbl
内の変数の名前またはベクトルを使用して指定します。
[]
—fairnessMetrics
は、真のクラス ラベルの変数 (Y
またはTbl
内のResponseName
の変数) の公平性メトリクスを計算します。Tbl
内の変数の名前 — 入力データを tableTbl
として指定した場合、各変数に 1 つのモデルの予測クラス ラベルが格納されているTbl
内の 1 つ以上の変数の名前をpredictions
で指定できます。この場合、predictions
は、文字ベクトル、string 配列、または文字ベクトルの cell 配列として指定しなければなりません。たとえば、クラス ラベルの 1 つのベクトルが table にTbl.Pred
として格納されている場合、predictions
を"Pred"
として指定します。行列 — 行列の各行が標本に対応し、各列が 1 つのモデルの予測クラス ラベルに対応します。
predictions
の行数はY
またはTbl
の標本数と等しくなければなりません。predictions
の予測クラス ラベルは真のクラス ラベルの変数の要素でなければならず、predictions
のデータ型は真のクラス ラベルの変数と同じでなければなりません。
メモ
1 つ以上のバイナリ分類モデルの予測ラベルを指定した場合、fairnessMetrics
は予測ラベルを返した各モデルの公平性メトリクスを計算します。
例: Predictions="Pred"
例: Predictions=["SVMPred","TreePred"]
データ型: single
| double
| logical
| char
| string
| cell
| categorical
オプションの引数のペアを Name1=Value1,...,NameN=ValueN
として指定します。ここで Name
は引数名、Value
は対応する値です。名前と値の引数は他の引数の後ろにする必要がありますが、ペアの順序は関係ありません。
例: Predictions="P",Weights="W"
は、Tbl
内の変数 P
および W
をモデル予測および観測値の重みとしてそれぞれ指定します。
ModelNames
— モデルの名前
文字ベクトル | 一意な名前の string 配列 | 一意な文字ベクトルの cell 配列
R2023a 以降
予測クラス ラベル predictions
をもつモデルの名前。文字ベクトル、一意な名前の string 配列、または一意な文字ベクトルの cell 配列として指定します。
predictions
がTbl
内の名前の配列の場合、ModelNames
内の名前の順序はpredictions
内の名前の順序に対応していなければなりません。つまり、ModelNames{1}
は table 変数predictions{1}
内の予測ラベルをもつモデルの名前、ModelNames{2}
は table 変数predictions{2}
内の予測ラベルをもつモデルの名前であり、他も同様です。numel(ModelNames)
とnumel(predictions)
は等しくなければなりません。既定では、ModelNames
の値はpredictions
と等しくなります。predictions
が行列の場合、ModelNames
内の名前の順序はpredictions
の列の順序に対応していなければなりません。つまり、ModelNames{1}
は予測ラベルpredictions(:,1)
をもつモデルの名前、ModelNames{2}
は予測ラベルpredictions(:,2)
をもつモデルの名前であり、他も同様です。numel(ModelNames)
とsize(predictions,2)
は等しくなければなりません。既定では、ModelNames
の値は{'Model1','Model2',...}
になります。predictions
が[]
の場合、ModelNames
の値は'Model1'
になります。メモ
predictions
の値が[]
の場合、ModelNames
の値は指定できません。
例: ModelNames="Ensemble"
例: ModelNames=["SVM","Tree"]
データ型: char
| string
| cell
PositiveClass
— 陽性クラスのラベル
スカラー
陽性クラスのラベル。スカラーとして指定します。PositiveClass
のデータ型は真のクラス ラベルの変数と同じでなければなりません。
PositiveClass
の既定値は、バイナリ ラベルの 2 番目のクラスです。クラスの順序は、真のクラス ラベルの変数に対して関数 unique
で "sorted"
オプションを指定して返される順序になります。
例: PositiveClass=categorical(">50K")
データ型: categorical
| char
| string
| logical
| single
| double
| cell
ReferenceGroup
— 参照グループ
各センシティブ属性の最頻値を格納するベクトル (既定値) | 数値ベクトル | string 配列 | cell 配列
各センシティブ属性の参照グループ。数値ベクトル、string 配列、または cell 配列として指定します。ReferenceGroup
値の各要素は、対応するセンシティブ属性と同じデータ型でなければなりません。センシティブ属性の型が混在している場合は、ReferenceGroup
を cell 配列として指定してください。ReferenceGroup
値の要素数は、センシティブ属性の数と一致しなければなりません。
ReferenceGroup
の既定値は、各センシティブ属性の最頻値を格納するベクトルです。最頻値は、観測値の重みは考慮せずに最も頻繁に出現する値です。
例: ReferenceGroup={30,categorical("Married-civ-spouse")}
データ型: single
| double
| string
| cell
Weights
— 観測値の重み
1
のベクトル (既定値) | スカラー値のベクトル | Tbl
内の変数の名前
観測値の重み。スカラー値のベクトルまたは Tbl
内の変数の名前として指定します。SensitiveAttributes
または Tbl
の各行に含まれている観測値には、Weights
の対応する値で重みが付けられます。Weights
のサイズは、SensitiveAttributes
または Tbl
の行数と同じでなければなりません。
入力データをテーブル Tbl
として指定した場合、Weights
は数値ベクトルが含まれている Tbl
内の変数の名前にすることができます。この場合、Weights
には文字ベクトルまたは string スカラーを指定しなければなりません。たとえば、重みのベクトル W
が Tbl.W
に格納されている場合、Weights
を "W"
として指定します。
例: Weights="W"
データ型: single
| double
| char
| string
プロパティ
BiasMetrics
— バイアス メトリクス
テーブル
この プロパティ は読み取り専用です。
バイアス メトリクス。table として指定します。
fairnessMetrics
は、各センシティブ属性の各グループのバイアス メトリクスを属性の参照グループとの比較から計算します。
BiasMetrics
の各行にセンシティブ属性のグループのバイアス メトリクスが格納されます。
データレベルの評価では、
BiasMetrics
の 1 番目と 2 番目の変数がセンシティブ属性の名前 (SensitiveAttributeNames
列) とグループの名前 (Groups
列) にそれぞれ対応します。モデルレベルの評価では、1 番目の変数がモデルの名前 (
ModelNames
列) に対応します。2 番目と 3 番目の変数がセンシティブ属性の名前とグループの名前にそれぞれ対応します。
残りの変数は次の表のバイアス メトリクスに対応します。
メトリクス名 | 説明 | 評価タイプ |
---|---|---|
StatisticalParityDifference | 統計的均一性差 (SPD) | データレベルまたはモデルレベルの評価 |
DisparateImpact | 差異の影響 (DI) | データレベルまたはモデルレベルの評価 |
EqualOpportunityDifference | 機会均等差 (EOD) | モデルレベルの評価 |
AverageAbsoluteOddsDifference | 平均絶対オッズ差 (AAOD) | モデルレベルの評価 |
サポートされるバイアス メトリクスは、fairnessMetrics
オブジェクトの作成時に引数 Predictions
を使用して予測ラベルを指定するかどうかによって異なります。
データレベルの評価 — 真のラベルを指定して予測ラベルを指定しなかった場合、
StatisticalParityDifference
とDisparateImpact
のみがBiasMetrics
プロパティに格納されます。モデルレベルの評価 — 真のラベルと予測ラベルの両方を指定した場合、この表のすべてのメトリクスが
BiasMetrics
プロパティに格納されます。
バイアス メトリクスの定義については、バイアス メトリクスを参照してください。
データ型: table
GroupMetrics
— グループ メトリクス
テーブル
この プロパティ は読み取り専用です。
グループ メトリクス。table として指定します。
関数 fairnessMetrics
は、各センシティブ属性の各グループのグループ メトリクスを計算します。観測値の重み (名前と値の引数 Weights
で指定) は、各グループの標本数 (GroupCount
値) のカウントには使用されないことに注意してください。Weights
は他のメトリクスの計算に使用されます。
GroupMetrics
の各行にセンシティブ属性のグループのグループ メトリクスが格納されます。
データレベルの評価では、
GroupMetrics
の 1 番目と 2 番目の変数がセンシティブ属性の名前 (SensitiveAttributeNames
列) とグループの名前 (Groups
列) にそれぞれ対応します。モデルレベルの評価では、1 番目の変数がモデルの名前 (
ModelNames
列) に対応します。2 番目と 3 番目の変数がセンシティブ属性の名前とグループの名前にそれぞれ対応します。
残りの変数は次の表のグループ メトリクスに対応します。
メトリクス名 | 説明 | 評価タイプ |
---|---|---|
GroupCount | グループ カウント (グループの標本数) | データレベルまたはモデルレベルの評価 |
GroupSizeRatio | グループ カウントを合計標本数で除算した値 | データレベルまたはモデルレベルの評価 |
TruePositives | 真陽性の数 (TP) | モデルレベルの評価 |
TrueNegatives | 真陰性の数 (TN) | モデルレベルの評価 |
FalsePositives | 偽陽性の数 (FP) | モデルレベルの評価 |
FalseNegatives | 偽陰性の数 (FN) | モデルレベルの評価 |
TruePositiveRate | 真陽性率 (TPR) (再現率または感度とも呼ばれる)、TP/(TP+FN) | モデルレベルの評価 |
TrueNegativeRate | 真陰性率 (TNR)、特異度、TN/(TN+FP) | モデルレベルの評価 |
FalsePositiveRate | 偽陽性率 (FPR) (フォールアウトまたは 1 - 特異度とも呼ばれる)、FP/(TN+FP) | モデルレベルの評価 |
FalseNegativeRate | 偽陰性率 (FNR)、失敗率、FN/(TP+FN) | モデルレベルの評価 |
FalseDiscoveryRate | 偽発見率 (FDR)、FP/(TP+FP) | モデルレベルの評価 |
FalseOmissionRate | 偽省略率 (FOR)、FN/(TN+FN) | モデルレベルの評価 |
PositivePredictiveValue | 陽性予測値 (PPV)、適合率、TP/(TP+FP) | モデルレベルの評価 |
NegativePredictiveValue | 陰性予測値 (NPV)、TN/(TN+FN) | モデルレベルの評価 |
RateOfPositivePredictions | 陽性予測率 (RPP)、(TP+FP)/(TP+FN+FP+TN) | モデルレベルの評価 |
RateOfNegativePredictions | 陰性予測率 (RNP)、(TN+FN)/(TP+FN+FP+TN) | モデルレベルの評価 |
Accuracy | 精度、(TP+TN)/(TP+FN+FP+TN) | モデルレベルの評価 |
サポートされるグループ メトリクスは、fairnessMetrics
オブジェクトの作成時に引数 Predictions
を使用して予測ラベルを指定するかどうかによって異なります。
データレベルの評価 — 真のラベルを指定して予測ラベルを指定しなかった場合、
GroupCount
とGroupSizeRatio
のみがGroupMetrics
プロパティに格納されます。モデルレベルの評価 — 真のラベルと予測ラベルの両方を指定した場合、この表のすべてのメトリクスが
GroupMetrics
プロパティに格納されます。
データ型: table
ModelNames
— モデルの名前
文字ベクトル | 一意な文字ベクトルの cell 配列
R2023a 以降
この プロパティ は読み取り専用です。
予測クラス ラベル predictions
をもつモデルの名前。文字ベクトルまたは一意な文字ベクトルの cell 配列として指定します。(string 配列は文字ベクトルの cell 配列として扱われます)。
名前と値の引数 ModelNames
によってこのプロパティが設定されます。
データ型: char
| cell
PositiveClass
— 陽性クラスのラベル
スカラー
この プロパティ は読み取り専用です。
陽性クラスのラベル。スカラーとして指定します。(string スカラーは文字ベクトルとして扱われます。)
名前と値の引数 PositiveClass
によってこのプロパティが設定されます。
データ型: categorical
| char
| logical
| single
| double
| cell
ReferenceGroup
— 参照グループ
数値ベクトル | cell 配列
この プロパティ は読み取り専用です。
基準ベクトル。数値ベクトルまたは cell 配列として指定します。(string 配列は文字ベクトルの cell 配列として扱われます)。
名前と値の引数 ReferenceGroup
によってこのプロパティが設定されます。
データ型: single
| double
| cell
ResponseName
— 真のクラス ラベルの変数の名前
文字ベクトル
この プロパティ は読み取り専用です。
真のクラス ラベルの変数の名前。応答変数の名前を含む文字ベクトルとして指定します。(string スカラーは文字ベクトルとして扱われます。)
ResponseName
引数を指定した場合、指定した値に応じてこのプロパティが決まります。Y
を指定した場合、このプロパティの値は'Y'
になります。
データ型: char
SensitiveAttributeNames
— センシティブ属性の変数の名前
文字ベクトル | 一意な文字ベクトルの cell 配列
この プロパティ は読み取り専用です。
センシティブ属性の変数の名前。文字ベクトルまたは一意な文字ベクトルの cell 配列として指定します。(string 配列は文字ベクトルの cell 配列として扱われます)。
sensitiveAttributeNames
引数によってこのプロパティが設定されます。
データ型: char
| cell
例
データの公平性の評価
fairnessMetrics
オブジェクトを作成して、真のラベルのセンシティブ属性についての公平性メトリクスを計算します。その後、関数 report
を使用して公平性メトリクスの table を作成し、関数 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
) かを示します。
この例では、変数 salary
の年齢についての公平性を評価します。変数 age
を 4 つのビンにグループ化します。
ageGroups = ["Age<30","30<=Age<45","45<=Age<60","Age>=60"]; adultdata.age_group = discretize(adultdata.age, ... [min(adultdata.age) 30 45 60 max(adultdata.age)], ... categorical=ageGroups);
それぞれのクラス (<=50K
と >50K
) の個体のカウントを年齢別にプロットします。
figure gc = groupcounts(adultdata,["age_group","salary"]); bar([gc.GroupCount(1:2:end),gc.GroupCount(2:2:end)]) xticklabels(ageGroups) xlabel("Age Group") ylabel("Group Count") legend(["<=50K",">50K"]) grid on
fairnessMetrics
を使用して、変数 salary
の変数 age_group
についての公平性メトリクスを計算します。
evaluator = fairnessMetrics(adultdata,"salary", ... SensitiveAttributeNames="age_group",Weights="fnlwgt")
evaluator = fairnessMetrics with properties: SensitiveAttributeNames: 'age_group' ReferenceGroup: '30<=Age<45' ResponseName: 'salary' PositiveClass: >50K BiasMetrics: [4x4 table] GroupMetrics: [4x4 table]
evaluator
は、fairnessMetrics
オブジェクトです。既定では、関数 fairnessMetrics
は、センシティブ属性の多数派グループ (個体数が最も多いグループ) を属性の参照グループとして選択します。さらに、関数 fairnessMetrics
は、関数unique
で "sorted"
オプションを使用してラベルを並べ替え、ラベルの 2 番目のクラスを陽性クラスとして指定します。このデータ セットでは、age_group
の参照グループはグループ 30<=Age<45
、陽性クラスは >50K
になります。evaluator
の BiasMetrics
プロパティと GroupMetrics
プロパティにバイアス メトリクスとグループ メトリクスがそれぞれ格納されます。プロパティを表示します。
evaluator.BiasMetrics
ans=4×4 table
SensitiveAttributeNames Groups StatisticalParityDifference DisparateImpact
_______________________ __________ ___________________________ _______________
age_group Age<30 -0.24365 0.17661
age_group 30<=Age<45 0 1
age_group 45<=Age<60 0.098497 1.3329
age_group Age>=60 -0.05041 0.82965
evaluator.GroupMetrics
ans=4×4 table
SensitiveAttributeNames Groups GroupCount GroupSizeRatio
_______________________ __________ __________ ______________
age_group Age<30 9711 0.29824
age_group 30<=Age<45 12489 0.38356
age_group 45<=Age<60 7717 0.237
age_group Age>=60 2644 0.081201
バイアス メトリクスから、変数 salary
には、参照グループ (30<=Age<45
) と比較して 45 ~ 60 歳の年齢グループに正のバイアスがあり、30 歳未満の年齢グループに負のバイアスがあります。
関数 report
を使用して、バイアス メトリクスとグループ メトリクスの両方を格納する table を作成できます。GroupMetrics
を "all"
と指定して、すべてのグループ メトリクスを含めます。"all"
が既定値であるため、名前と値の引数 BiasMetrics
を指定する必要はありません。
metricsTbl = report(evaluator,GroupMetrics="all")
metricsTbl=4×6 table
SensitiveAttributeNames Groups StatisticalParityDifference DisparateImpact GroupCount GroupSizeRatio
_______________________ __________ ___________________________ _______________ __________ ______________
age_group Age<30 -0.24365 0.17661 9711 0.29824
age_group 30<=Age<45 0 1 12489 0.38356
age_group 45<=Age<60 0.098497 1.3329 7717 0.237
age_group Age>=60 -0.05041 0.82965 2644 0.081201
関数 plot
を使用してバイアス メトリクスを可視化します。
figure t = tiledlayout(2,1); nexttile plot(evaluator,"spd") xlabel("") ylabel("") nexttile plot(evaluator,"di") xlabel("") ylabel("") xlabel(t,"Fairness Metric Value") ylabel(t,"Age Group")
各プロットの垂直線 (統計的均一性差の 、差異の影響の ) は、参照グループのメトリクス値を示します。ラベルに参照グループと比較してターゲット グループに対するバイアスがなければ、ターゲット グループのメトリクス値は参照グループのメトリクス値と同じになります。
分類器の公平性の評価
fairnessMetrics
オブジェクトを作成して、予測ラベルのセンシティブ属性についての公平性メトリクスを計算します。その後、関数 report
を使用して公平性メトリクスの table を作成し、関数 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
を使用して、テスト標本のラベルを予測します。
labels = 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);
それぞれの予測クラス (<=50K
と >50K
) の個体のカウントを年齢別にプロットします。
figure gs_age = groupcounts({adulttest.age_group,labels}); b_age = bar([gs_age(1:2:end),gs_age(2:2:end)]); xticklabels(ageGroups) xlabel("Age Group") ylabel("Group Count") legend(["<=50K",">50K"]) grid minor
個体のカウントを婚姻区分別にプロットします。カウント値が 100 より小さい場合はバーの先端付近に値を表示します。
figure gs_status = groupcounts({adulttest.marital_status,labels}); b_status = bar([gs_status(1:2:end),gs_status(2:2:end)]); xticklabels(unique(adulttest.marital_status)) xlabel("Marital Status") ylabel("Group Count") legend(["<=50K",">50K"]) grid minor xtips1 = b_status(1).XEndPoints; ytips1 = b_status(1).YEndPoints; labels1 = string(b_status(1).YData); ind1 = ytips1 < 100; text(xtips1(ind1),ytips1(ind1),labels1(ind1), ... HorizontalAlignment="center",VerticalAlignment="bottom", ... Color=b_status(1).FaceColor) xtips2 = b_status(2).XEndPoints; ytips2 = b_status(2).YEndPoints; labels2 = string(b_status(2).YData); ind2 = ytips2 < 100; text(xtips2(ind2),ytips2(ind2),labels2(ind2), ... HorizontalAlignment="center",VerticalAlignment="bottom", ... Color=b_status(2).FaceColor)
fairnessMetrics
を使用して、予測 (labels
) の変数 age_group
および marital_status
についての公平性メトリクスを計算します。
MdlEvaluator = fairnessMetrics(adulttest,"salary", ... SensitiveAttributeNames=["age_group","marital_status"], ... Predictions=labels,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: 'Model1'
MdlEvaluator
は、fairnessMetrics
オブジェクトです。既定では、関数 fairnessMetrics
は、各センシティブ属性の多数派グループ (個体数が最も多いグループ) を属性の参照グループとして選択します。さらに、関数 fairnessMetrics
は、関数unique
で "sorted"
オプションを使用してラベルを並べ替え、ラベルの 2 番目のクラスを陽性クラスとして指定します。このデータ セットでは、age_group
および marital_status
の参照グループはそれぞれグループ 30<=Age<45
および Married-civ-spouse
、陽性クラスは >50K
になります。MdlEvaluator
の BiasMetrics
プロパティと GroupMetrics
プロパティにバイアス メトリクスとグループ メトリクスがそれぞれ格納されます。
関数 report
を使用して公平性メトリクスの table を作成します。BiasMetrics
を ["eod","aaod"]
と指定して、機会均等差 (EOD) と平均絶対オッズ差 (AAOD) のメトリクスをレポートの table に含めます。関数 fairnessMetrics
では、これらの 2 つのメトリクスの計算に真陽性率 (TPR) と偽陽性率 (FPR) を使用します。GroupMetrics
を ["tpr","fpr"]
と指定して、TPR と FPR の値を table に含めます。
metricsTbl = report(MdlEvaluator, ... BiasMetrics=["eod","aaod"],GroupMetrics=["tpr","fpr"])
metricsTbl=11×7 table
ModelNames SensitiveAttributeNames Groups EqualOpportunityDifference AverageAbsoluteOddsDifference TruePositiveRate FalsePositiveRate
__________ _______________________ _____________________ __________________________ _____________________________ ________________ _________________
Model1 age_group Age<30 -0.041586 0.044576 0.41333 0.041053
Model1 age_group 30<=Age<45 0 0 0.45491 0.088618
Model1 age_group 45<=Age<60 0.061227 0.031446 0.51614 0.086954
Model1 age_group Age>=60 0.001949 0.0099106 0.45686 0.070746
Model1 marital_status Divorced 0.078378 0.043429 0.54262 0.075653
Model1 marital_status Married-AF-spouse 0.073013 0.078573 0.53726 0
Model1 marital_status Married-civ-spouse 0 0 0.46424 0.084133
Model1 marital_status Married-spouse-absent -0.06725 0.048036 0.39699 0.055311
Model1 marital_status Never-married 0.083467 0.054954 0.54771 0.057692
Model1 marital_status Separated 0.027103 0.026543 0.49135 0.058151
Model1 marital_status Widowed 0.12427 0.079864 0.58851 0.048675
センシティブ属性 age_group
の EOD と AAOD の値をプロットします。age_group
は MdlEvaluator
の SensitiveAttributeNames
プロパティの最初の要素であるため、プロパティの既定値です。そのため、plot
の引数 SensitiveAttributeName
を指定する必要はありません。
figure t = tiledlayout(1,2); nexttile plot(MdlEvaluator,"eod") title("EOD") xlabel("") ylabel("") nexttile plot(MdlEvaluator,"aaod") title("AAOD") xlabel("") ylabel("") yticklabels("") xlabel(t,"Fairness Metric Value") ylabel(t,"Age Group")
の垂直線は、参照グループ (30<=Age<45
) のメトリクス値を示します。ラベルに参照グループと比較してターゲット グループに対するバイアスがなければ、ターゲット グループのメトリクス値は参照グループのメトリクス値と同じになります。EOD の値 (TPR の差) では、変数 salary
の予測の参照グループと比較したバイアスがグループ 45<=Age<60
で最も大きくなっています。AAOD の値 (TPR と FPR の差の平均) では、予測のバイアスがグループ Age<30
で最も大きくなっています。
関数 plot
の引数 SensitiveAttributeName
を marital_status
と指定して、センシティブ属性 marital_status
の EOD と AAOD の値をプロットします。
figure t = tiledlayout(1,2); nexttile plot(MdlEvaluator,"eod",SensitiveAttributeName="marital_status") title("EOD") xlabel("") ylabel("") nexttile plot(MdlEvaluator,"aaod",SensitiveAttributeName="marital_status") title("AAOD") xlabel("") ylabel("") yticklabels("") xlabel(t,"Fairness Metric Value") ylabel(t,"Marital Status")
の垂直線は、参照グループ (Married-civ-spouse
) のメトリクス値を示します。EOD の値では、変数 salary
の予測の参照グループと比較したバイアスがグループ Widowed
で最も大きくなっています。AAOD の値では、予測のバイアスがグループ Widowed
とMarried-AF-spouse
で同様になっています。
公平性メトリクスを使用したモデル予測の比較
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 に近くなっています。
詳細
バイアス メトリクス
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 の差がないものと仮定されます。
アルゴリズム
fairnessMetrics
は、Tbl
、Y
、および SensitiveAttributes
に含まれている NaN
、''
(空の文字ベクトル)、""
(空の string)、<missing>
、および <undefined>
の値を欠損値と見なします。fairnessMetrics
は、欠損値がある観測値を使用しません。
参照
[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 で導入R2023a: モデル間での公平性メトリクスの比較
関数 fairnessMetrics
を使用して、複数のバイナリ分類器の公平性メトリクスを比較できます。関数の呼び出しで、引数 predictions
を使用して各モデルの予測クラス ラベルを指定します。モデルの名前の指定には、名前と値の引数 ModelNames
を使用できます。モデルの名前の情報は、fairnessMetrics
オブジェクトの BiasMetrics
、GroupMetrics
、および ModelNames
の各プロパティに格納されます。
fairnessMetrics
オブジェクトを作成した後、オブジェクト関数 report
または plot
を使用します。
オブジェクト関数
report
は、公平性メトリクスの table を返します。その形式は、名前と値の引数DisplayMetricsInRows
の値に応じて異なります。(詳細については、metricsTbl
を参照してください。) 名前と値の引数ModelNames
を使用して、レポートの table に含めるモデルのサブセットを指定できます。オブジェクト関数
plot
は、棒グラフをBar
オブジェクトの配列として返します。指定されたメトリクスの計算に予測ラベルが使用されたモデルがバーの色で示されます。名前と値の引数ModelNames
を使用して、プロットに含めるモデルのサブセットを指定できます。
以前のリリースでは、fairnessMetrics
オブジェクトの BiasMetrics
プロパティおよび GroupMetrics
プロパティの 1 番目と 2 番目の変数は、常にセンシティブ属性の名前 (SensitiveAttributeNames
列) とグループの名前 (Groups
列) にそれぞれ対応していました。現在の動作の詳細については、BiasMetrics
および GroupMetrics
を参照してください。
参考
トピック
- バイナリ分類の公平性の紹介
- Explore Fairness Metrics for Credit Scoring Model (Risk Management Toolbox)
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)