Main Content

fairnessMetrics

データ セットまたは分類モデルのバイアス メトリクスとグループ メトリクス

R2022b 以降

    説明

    fairnessMetrics は、データ セットまたはバイナリ分類モデルのセンシティブ属性についての公平性メトリクス (バイアス メトリクスとグループ メトリクス) を計算します。データレベルの評価では、データの真のバイナリ ラベルを調べます。モデルレベルの評価では、1 つ以上のバイナリ分類モデルによって返される予測ラベルを真のラベルと予測ラベルの両方を使用して調べます。

    バイアス メトリクスでグループ間の差異が測定され、グループ メトリクスでグループ内に情報が格納されます。これらのメトリクスを使用して、データまたはモデルについて、各センシティブ属性のグループに対するバイアスがないかどうかを判別できます。

    fairnessMetrics オブジェクトを作成した後、関数 report を使用して公平性メトリクス レポートを生成したり、関数 plot を使用してメトリクスの棒グラフを作成したりできます。

    作成

    説明

    evaluator = fairnessMetrics(SensitiveAttributes,Y) は、ベクトル Y の真のバイナリ クラス ラベルについて、行列 SensitiveAttributes のセンシティブ属性についての公平性メトリクスを計算します。関数 fairnessMetricsfairnessMetrics オブジェクト evaluator を返します。このオブジェクトの BiasMetrics プロパティと GroupMetrics プロパティにバイアス メトリクスとグループ メトリクスがそれぞれ格納されます。

    evaluator = fairnessMetrics(Tbl,Y) は、table Tbl のセンシティブ属性とベクトル Y のクラス ラベルを使用して公平性メトリクスを計算します。

    evaluator = fairnessMetrics(Tbl,ResponseName) は、table Tbl のセンシティブ属性と応答変数を使用して公平性メトリクスを計算します。入力引数 ResponseName で、クラス ラベルが格納されている Tbl 内の変数の名前を指定します。

    evaluator = fairnessMetrics(___,SensitiveAttributeNames=sensitiveAttributeNames) は、Tbl 内の変数のサブセット (名前が sensitiveAttributeNames に対応) をセンシティブ属性として指定するか、sensitiveAttributeNames 内のセンシティブ属性に名前を割り当てます。この引数は、前の構文におけるいずれかの入力引数の組み合わせに加えて指定できます。

    evaluator = fairnessMetrics(___,Predictions=predictions) は、引数 predictions を使用して各モデルの予測ラベルを指定した場合に、1 つ以上のバイナリ分類モデルの公平性メトリクスを計算します。fairnessMetrics は、モデルレベルの評価に真のラベルと予測ラベルの両方を使用します。

    evaluator = fairnessMetrics(___,Name=Value) では、1 つ以上の名前と値の引数を使用して追加オプションを指定します。たとえば、基準年齢グループ 30 に対する変数 age の各グループのバイアス メトリクスを計算するには、SensitiveAttributeNames="age",ReferenceGroup=30 と指定します。

    入力引数

    すべて展開する

    センシティブ属性。ベクトルまたは行列として指定します。SensitiveAttributes を行列として指定する場合、SensitiveAttributes の各行は 1 つの観測値に対応し、各列は 1 つのセンシティブ属性に対応します。

    引数 sensitiveAttributeNames を使用して SensitiveAttributes 内の変数に名前を割り当てることができます。

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

    真のバイナリ クラス ラベル。categorical 配列、文字配列、string 配列、logical ベクトル、数値ベクトル、または文字ベクトルの cell 配列として指定します。

    • fairnessMetrics はバイナリ分類のみをサポートします。Y には厳密に 2 つの異なるクラスが含まれていなければなりません。

    • 名前と値の引数 PositiveClass を使用して、2 つのクラスのいずれかを陽性クラスとして指定できます。

    • Y の長さは SensitiveAttributes または Tbl の観測値の数と等しくなければなりません。

    • Y が文字配列の場合、各ラベルは配列の 1 つの行に対応しなければなりません。

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

    標本データ。テーブルとして指定します。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

    真のクラス ラベルの変数の名前。Tbl 内の応答変数の名前を含む文字ベクトルまたは string スカラーとして指定します。

    例: "trueLabel" は、Tbl の変数 trueLabel (Tbl.trueLabel) が真のクラス ラベルの変数であることを示します。

    データ型: char | string

    センシティブ属性の変数の名前。文字ベクトル、一意な名前の string 配列、または一意な文字ベクトルの cell 配列として指定します。sensitiveAttributeNames の機能は、標本データの提供方法によって決まります。

    • SensitiveAttributesY を指定した場合、sensitiveAttributeNames を使用して SensitiveAttributes 内の変数に名前を割り当てることができます。

      • sensitiveAttributeNames 内の名前の順序は、SensitiveAttributes の列の順序に一致しなければなりません。つまり、sensitiveAttributeNames{1}SensitiveAttributes(:,1) の名前、sensitiveAttributeNames{2}SensitiveAttributes(:,2) の名前であり、他も同様です。また、size(SensitiveAttributes,2)numel(sensitiveAttributeNames) は等しくなければなりません。

      • 既定では sensitiveAttributeNames{'x1','x2',...} です。

    • Tbl を指定した場合、sensitiveAttributeNames を使用してセンシティブ属性として使用する変数を指定できます。つまり、fairnessMetrics は、公平性メトリクスの計算に sensitiveAttributeNames の変数のみを使用します。

      • sensitiveAttributeNamesTbl.Properties.VariableNames のサブセットでなければならず、クラス ラベルの変数や観測値の重みの変数の名前を含めることはできません。

      • 既定では、sensitiveAttributeNames は、ResponseNamePredictions、および Weights で指定された変数を除く Tbl 内のすべての変数名のセットです。

    例: SensitiveAttributeNames="Gender"

    例: SensitiveAttributeNames=["age","marital_status"]

    データ型: char | string | cell

    予測クラス ラベル (モデル予測)。[]Tbl 内の変数の名前、または行列として指定します。

    R2023a より前: 最大 1 つのバイナリ分類器の予測ラベルを Tbl 内の変数の名前またはベクトルを使用して指定します。

    • []fairnessMetrics は、真のクラス ラベルの変数 (Y または Tbl 内の ResponseName の変数) の公平性メトリクスを計算します。

    • Tbl 内の変数の名前 — 入力データを table Tbl として指定した場合、各変数に 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 をモデル予測および観測値の重みとしてそれぞれ指定します。

    R2023a 以降

    予測クラス ラベル predictions をもつモデルの名前。文字ベクトル、一意な名前の string 配列、または一意な文字ベクトルの cell 配列として指定します。

    • predictionsTbl 内の名前の配列の場合、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 の既定値は、バイナリ ラベルの 2 番目のクラスです。クラスの順序は、真のクラス ラベルの変数に対して関数 unique"sorted" オプションを指定して返される順序になります。

    例: PositiveClass=categorical(">50K")

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

    各センシティブ属性の参照グループ。数値ベクトル、string 配列、または cell 配列として指定します。ReferenceGroup 値の各要素は、対応するセンシティブ属性と同じデータ型でなければなりません。センシティブ属性の型が混在している場合は、ReferenceGroup を cell 配列として指定してください。ReferenceGroup 値の要素数は、センシティブ属性の数と一致しなければなりません。

    ReferenceGroup の既定値は、各センシティブ属性の最頻値を格納するベクトルです。最頻値は、観測値の重みは考慮せずに最も頻繁に出現する値です。

    例: ReferenceGroup={30,categorical("Married-civ-spouse")}

    データ型: single | double | string | cell

    観測値の重み。スカラー値のベクトルまたは Tbl 内の変数の名前として指定します。SensitiveAttributes または Tbl の各行に含まれている観測値には、Weights の対応する値で重みが付けられます。Weights のサイズは、SensitiveAttributes または Tbl の行数と同じでなければなりません。

    入力データをテーブル Tbl として指定した場合、Weights は数値ベクトルが含まれている Tbl 内の変数の名前にすることができます。この場合、Weights には文字ベクトルまたは string スカラーを指定しなければなりません。たとえば、重みのベクトル WTbl.W に格納されている場合、Weights"W" として指定します。

    例: Weights="W"

    データ型: single | double | char | string

    プロパティ

    すべて展開する

    この プロパティ は読み取り専用です。

    バイアス メトリクス。table として指定します。

    fairnessMetrics は、各センシティブ属性の各グループのバイアス メトリクスを属性の参照グループとの比較から計算します。

    BiasMetrics の各行にセンシティブ属性のグループのバイアス メトリクスが格納されます。

    • データレベルの評価では、BiasMetrics の 1 番目と 2 番目の変数がセンシティブ属性の名前 (SensitiveAttributeNames 列) とグループの名前 (Groups 列) にそれぞれ対応します。

    • モデルレベルの評価では、1 番目の変数がモデルの名前 (ModelNames 列) に対応します。2 番目と 3 番目の変数がセンシティブ属性の名前とグループの名前にそれぞれ対応します。

    残りの変数は次の表のバイアス メトリクスに対応します。

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

    サポートされるバイアス メトリクスは、fairnessMetrics オブジェクトの作成時に引数 Predictions を使用して予測ラベルを指定するかどうかによって異なります。

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

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

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

    データ型: table

    この プロパティ は読み取り専用です。

    グループ メトリクス。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 を使用して予測ラベルを指定するかどうかによって異なります。

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

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

    データ型: table

    R2023a 以降

    この プロパティ は読み取り専用です。

    予測クラス ラベル predictions をもつモデルの名前。文字ベクトルまたは一意な文字ベクトルの cell 配列として指定します。(string 配列は文字ベクトルの cell 配列として扱われます)。

    名前と値の引数 ModelNames によってこのプロパティが設定されます。

    データ型: char | cell

    この プロパティ は読み取り専用です。

    陽性クラスのラベル。スカラーとして指定します。(string スカラーは文字ベクトルとして扱われます。)

    名前と値の引数 PositiveClass によってこのプロパティが設定されます。

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

    この プロパティ は読み取り専用です。

    基準ベクトル。数値ベクトルまたは cell 配列として指定します。(string 配列は文字ベクトルの cell 配列として扱われます)。

    名前と値の引数 ReferenceGroup によってこのプロパティが設定されます。

    データ型: single | double | cell

    この プロパティ は読み取り専用です。

    真のクラス ラベルの変数の名前。応答変数の名前を含む文字ベクトルとして指定します。(string スカラーは文字ベクトルとして扱われます。)

    • ResponseName 引数を指定した場合、指定した値に応じてこのプロパティが決まります。

    • Y を指定した場合、このプロパティの値は 'Y' になります。

    データ型: char

    この プロパティ は読み取り専用です。

    センシティブ属性の変数の名前。文字ベクトルまたは一意な文字ベクトルの cell 配列として指定します。(string 配列は文字ベクトルの cell 配列として扱われます)。

    sensitiveAttributeNames 引数によってこのプロパティが設定されます。

    データ型: char | cell

    オブジェクト関数

    report公平性メトリクス レポートを生成
    plot公平性メトリクスの棒グラフをプロット

    すべて折りたたむ

    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 人の人口統計情報が格納されています。agemarital_statusrelationshipracesex などのセンシティブ属性の情報が含まれます。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

    Figure contains an axes object. The axes object with xlabel Age Group, ylabel Group Count contains 2 objects of type bar. These objects represent <=50K, >50K.

    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 になります。evaluatorBiasMetrics プロパティと 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")

    Figure contains 2 axes objects. Axes object 1 with title Statistical Parity Difference contains an object of type bar. Axes object 2 with title Disparate Impact contains an object of type bar.

    各プロットの垂直線 (統計的均一性差の x=0、差異の影響の x=1) は、参照グループのメトリクス値を示します。ラベルに参照グループと比較してターゲット グループに対するバイアスがなければ、ターゲット グループのメトリクス値は参照グループのメトリクス値と同じになります。

    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 人の人口統計情報が格納されています。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 を使用して、テスト標本のラベルを予測します。

    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

    Figure contains an axes object. The axes object with xlabel Age Group, ylabel Group Count contains 2 objects of type bar. These objects represent <=50K, >50K.

    個体のカウントを婚姻区分別にプロットします。カウント値が 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)

    Figure contains an axes object. The axes object with xlabel Marital Status, ylabel Group Count contains 7 objects of type bar, text. These objects represent <=50K, >50K.

    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 になります。MdlEvaluatorBiasMetrics プロパティと 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_groupMdlEvaluatorSensitiveAttributeNames プロパティの最初の要素であるため、プロパティの既定値です。そのため、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")

    Figure contains 2 axes objects. Axes object 1 with title EOD contains an object of type bar. Axes object 2 with title AAOD contains 2 objects of type bar, constantline.

    x=0 の垂直線は、参照グループ (30<=Age<45) のメトリクス値を示します。ラベルに参照グループと比較してターゲット グループに対するバイアスがなければ、ターゲット グループのメトリクス値は参照グループのメトリクス値と同じになります。EOD の値 (TPR の差) では、変数 salary の予測の参照グループと比較したバイアスがグループ 45<=Age<60 で最も大きくなっています。AAOD の値 (TPR と FPR の差の平均) では、予測のバイアスがグループ Age<30 で最も大きくなっています。

    関数 plot の引数 SensitiveAttributeNamemarital_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")

    Figure contains 2 axes objects. Axes object 1 with title EOD contains an object of type bar. Axes object 2 with title AAOD contains 2 objects of type bar, constantline.

    x=0 の垂直線は、参照グループ (Married-civ-spouse) のメトリクス値を示します。EOD の値では、変数 salary の予測の参照グループと比較したバイアスがグループ Widowed で最も大きくなっています。AAOD の値では、予測のバイアスがグループ WidowedMarried-AF-spouse で同様になっています。

    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 は、TblY、および 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 で導入

    すべて展開する