Main Content

disparateImpactRemover

センシティブ属性による差異の影響を除去

R2022b 以降

    説明

    バイナリ分類の公平性を確立するために、関数 disparateImpactRemover を使用してセンシティブ属性による差異の影響を除去または軽減できます。モデルに学習させる前に、センシティブ属性を使用して学習データ セット内の連続予測子を変換します。変換されたデータ セットと変換が格納された disparateImpactRemover オブジェクトが関数から返されます。変換されたデータ セットを fitcsvm などの適切な学習関数に渡し、オブジェクトをオブジェクト関数 transform に渡して、テスト データ セットなどの新しいデータ セットに変換を適用します。

    メモ

    テスト データなどの新しいデータは、モデルに学習させた後に disparateImpactRemover を使用して変換しなければなりません。そうしないと、予測結果が不正確になります。

    作成

    説明

    remover = disparateImpactRemover(Tbl,AttributeName) は、table Tbl 内のセンシティブ属性 AttributeName による差異の影響をデータ セット Tbl 内の連続予測子を変換することで除去します。返される disparateImpactRemover オブジェクト (remover) には、新しいデータに適用できる変換が格納されます。詳細については、アルゴリズムを参照してください。

    [remover,transformedData] = disparateImpactRemover(Tbl,AttributeName) は、Tbl のデータに対応する変換後の予測子データ transformedData も返します。

    この構文では、transformedData にセンシティブ属性が含まれることに注意してください。disparateImpactRemover を使用した後は、モデルに学習させるときにセンシティブ属性を個別の予測子として使用しないようにしてください。

    [remover,transformedData] = disparateImpactRemover(X,attribute) は、数値予測子データ Xattribute で指定されたセンシティブ属性を使用して予測子を変換します。

    [remover,transformedData] = disparateImpactRemover(___,Name=Value) では、前の構文におけるいずれかの入力引数の組み合わせに加えて、1 つ以上の名前と値の引数を使用してオプションを指定します。たとえば、名前と値の引数 RepairFraction を使用してデータ変換の範囲を指定できます。値 1 は完全な変換を示し、値 0 は変換なしを示します。

    入力引数

    すべて展開する

    データ セット。table として指定します。Tbl の各行は 1 つの観測値に対応し、各列は 1 つの変数に対応します。disparateImpactRemover で table を使用するときは、table にセンシティブ属性を含める必要があります。応答変数などの追加の変数も table に含めることができます。文字ベクトルの cell 配列ではない cell 配列と複数列の変数は使用できません。

    Tbl に含まれている一部の数値変数 (観測値の重みなど) を disparateImpactRemover で無視する場合は、変換する連続数値変数を名前と値の引数 PredictorNames を使用して指定できます。

    データ型: table

    センシティブ属性の名前。Tbl 内の変数の名前として指定します。AttributeName は文字ベクトルまたは string スカラーとして指定しなければなりません。たとえば、センシティブ属性が Tbl.Attribute として格納されている場合、"Attribute" として指定します。

    センシティブ属性は、数値ベクトル、logical ベクトル、文字配列、string 配列、文字ベクトルの cell 配列、または categorical ベクトルでなければなりません。

    データ型: char | string

    予測子データ。数値行列として指定します。X の各行は 1 つの観測値に対応し、各列は 1 つの予測子変数に対応します。Xattribute の行数は同じでなければなりません。

    予測子の名前を X に表示される順序で指定するには、名前と値の引数 PredictorNames を使用します。

    データ型: single | double

    センシティブ属性。数値列ベクトル、logical 列ベクトル、文字配列、string 配列、文字ベクトルの cell 配列、または categorical 列ベクトルとして指定します。

    • attribute が配列の場合、配列の各行がセンシティブ属性のグループに対応していなければなりません。

    • attributeX の行数は同じでなければなりません。

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

    名前と値の引数

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

    例: disparateImpactRemover(Tbl,"Age",PredictorNames=["Diastolic","Systolic"]) は、table Tbl 内の変数 DiastolicSystolicTbl 内のセンシティブ属性 Age を使用して変換するように指定します。

    変換する予測子変数の名前。一意な名前の string 配列または一意な文字ベクトルの cell 配列として指定します。

    • Tbl を指定した場合、PredictorNames を使用して変換する数値予測子変数を指定できます。

    • X を指定した場合、PredictorNames を使用して X 内の予測子変数に名前を割り当てることができます。

    例: PredictorNames=["SepalLength","SepalWidth","PetalLength","PetalWidth"]

    データ型: string | cell

    データ変換の比率。範囲 [0,1] の数値スカラーとして指定します。値 1 は完全な変換を示し、値 0 は変換なしを示します。

    修復率が大きいほど、モデル予測の精度が低下する可能性があります。詳細については、[1]を参照してください。

    例: RepairFraction=0.5

    データ型: single | double

    出力引数

    すべて展開する

    予測子データの変換器。disparateImpactRemover オブジェクトとして返されます。remover には、変数 remover.SensitiveAttribute を基準とする予測子変数 remover.PredictorNames の変換が格納されます。

    Tbl または X のデータに対応する変換後の予測子データ。table または数値行列として返されます。transformedData にセンシティブ属性が含まれる場合があることに注意してください。関数 disparateImpactRemover を使用した後は、モデルに学習させるときにセンシティブ属性を個別の予測子として使用しないようにしてください。

    プロパティ

    すべて展開する

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

    データ変換の比率。範囲 [0,1] の数値スカラーとして返されます。値 1 は完全な変換を示し、値 0 は変換なしを示します。

    disparateImpactRemover オブジェクトの作成後に修復率を調整する場合は、オブジェクト関数 transform の名前と値の引数 RepairFraction を指定します。

    データ型: single | double

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

    変換された予測子変数の名前。一意な文字ベクトルの cell 配列として返されます。PredictorNames の要素の順序は、Tbl または X のデータにおける予測子名の順序に対応します。

    データ型: cell

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

    センシティブ属性。変数名、数値列ベクトル、logical 列ベクトル、文字配列、文字ベクトルの cell 配列、または categorical 列ベクトルとして返されます。

    • table を使用して disparateImpactRemover オブジェクトを作成する場合、SensitiveAttribute はセンシティブ属性の名前になります。名前は文字ベクトルとして格納されます。

    • 行列を使用して disparateImpactRemover オブジェクトを作成する場合、SensitiveAttribute のサイズとデータ型はオブジェクトの作成に使用されるセンシティブ属性と同じになります。(string 配列は文字ベクトルの cell 配列として扱われます)。

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

    オブジェクト関数

    transform新しい予測子データを変換して差異の影響を除去

    すべて折りたたむ

    バイナリ分類器に学習させ、モデルを使用してテスト データを分類し、センシティブ属性の各グループについての差異の影響を計算します。差異の影響の値を小さくするために、disparateImpactRemover を使用してからバイナリ分類器に再学習させます。テスト データ セットを変換し、観測値を再分類して、差異の影響の値を計算します。

    学習データ 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 人の人口統計情報が格納されています。最後の列 salary は個人の年収が $50,000 以下か、$50,000 を超えるかどうかを示します。

    adultdataadulttest から欠損値を含む観測値を削除します。

    adultdata = rmmissing(adultdata);
    adulttest = rmmissing(adulttest);

    モデルの学習に使用する連続数値予測子を指定します。

    predictors = ["age","education_num","capital_gain","capital_loss", ...
        "hours_per_week"];

    学習セット adultdata を使用してアンサンブル分類器に学習させます。応答変数として salary、観測値の重みとして fnlwgt を指定します。学習セットが不均衡であるため、RUSBoost アルゴリズムを使用します。モデルに学習させた後、テスト セット adulttest の観測値の給与 (クラス ラベル) を予測します。

    rng("default") % For reproducibility
    mdl = fitcensemble(adultdata,"salary",Weights="fnlwgt", ...
        PredictorNames=predictors,Method="RUSBoost");
    labels = predict(mdl,adulttest);

    センシティブ属性 race を使用して学習セットの予測子を変換します。

    [remover,newadultdata] = disparateImpactRemover(adultdata, ...
        "race",PredictorNames=predictors);
    remover
    remover = 
      disparateImpactRemover with properties:
    
            RepairFraction: 1
            PredictorNames: {'age'  'education_num'  'capital_gain'  'capital_loss'  'hours_per_week'}
        SensitiveAttribute: 'race'
    
    

    removerdisparateImpactRemover オブジェクトであり、変数 remover.SensitiveAttribute を基準とする予測子 remover.PredictorNames の変換が格納されます。

    remover に格納された同じ変換をテスト セットの予測子に適用します。メモ: 学習データ セットとテスト データ セットは、どちらも分類器に渡す前に変換する必要があります。

    newadulttest = transform(remover,adulttest, ...
        PredictorNames=predictors);

    mdl と同じタイプのアンサンブル分類器に今度は変換後の予測子データを使用して学習させます。前と同じように、テスト セット adulttest の観測値の給与 (クラス ラベル) を予測します。

    rng("default") % For reproducibility
    newMdl = fitcensemble(newadultdata,"salary",Weights="fnlwgt", ...
        PredictorNames=predictors,Method="RUSBoost");
    newLabels = predict(newMdl,newadulttest);

    元のモデル (mdl) による予測と変換後のデータで学習させたモデル (newMdl) による予測について、差異の影響の値を比較します。差異の影響の値は、センシティブ属性のグループごとに、そのグループの陽性クラスの値をもつ予測の比率 (pg+) を参照グループの陽性クラスの値をもつ予測の比率 (pr+) で除算したものです。理想的な分類器による予測では、各グループの pg+pr+ に近くなります (つまり、差異の影響の値が 1 に近くなります)。

    fairnessMetrics を使用して、mdl による予測と newMdl による予測の差異の影響の値を計算します。観測値の重みを含めます。オブジェクト関数 report を使用して、evaluator オブジェクトに格納された差異の影響などのバイアス メトリクスを表示できます。

    evaluator = fairnessMetrics(adulttest,"salary", ...
        SensitiveAttributeNames="race",Predictions=[labels,newLabels], ...
        Weights="fnlwgt",ModelNames=["Original Model","New Model"]);
    evaluator.PositiveClass
    ans = categorical
         >50K 
    
    
    evaluator.ReferenceGroup
    ans = 
    'White'
    
    report(evaluator,BiasMetrics="DisparateImpact")
    ans=5×5 table
            Metrics        SensitiveAttributeNames          Groups          Original Model    New Model
        _______________    _______________________    __________________    ______________    _________
    
        DisparateImpact             race              Amer-Indian-Eskimo       0.41702         0.92804 
        DisparateImpact             race              Asian-Pac-Islander         1.719          0.9697 
        DisparateImpact             race              Black                    0.60571         0.66629 
        DisparateImpact             race              Other                    0.66958         0.86039 
        DisparateImpact             race              White                          1               1 
    
    

    mdl による予測について、いくつかの差異の影響の値が業界標準の 0.8 を下回っており、1.25 を超える値も 1 つあります。これらの値は、陽性クラス >50K とセンシティブ属性 race を基準とする予測のバイアスを示しています。

    mdl による予測の差異の影響の値に比べ、newMdl による予測の差異の影響の値は 1 に近くなっています。0.8 を下回る値もまだ 1 つあります。

    オブジェクト関数 plot で返される棒グラフを使用して、差異の影響の値を視覚的に比較します。

    plot(evaluator,"DisparateImpact")

    Figure contains an axes object. The axes object with title Disparate Impact, xlabel Fairness Metric Value, ylabel race contains 2 objects of type bar. These objects represent Original Model, New Model.

    関数 disparateImpactRemover により、差異の影響のメトリクスに関しては、テスト セットに対するモデル予測が改善しているように見えます。

    変換後の予測子がモデル予測の精度にマイナスの影響を与えていないかどうかをチェックします。2 つのモデル mdlnewMdl について、テスト セットの予測の精度を計算します。

    accuracy = 1-loss(mdl,adulttest,"salary")
    accuracy = 0.8024
    
    newAccuracy = 1-loss(newMdl,newadulttest,"salary")
    newAccuracy = 0.7955
    

    テスト セットの精度について、変換後の予測子を使用して学習させたモデル (newMdl) でも元の予測子で学習させたモデル (mdl) と同等の精度になっています。

    連続数値予測子を調整してセンシティブ属性による差異の影響の除去を試みます。元の予測子と調整後の予測子の値の違いを可視化します。

    患者の拡張期および収縮期の血圧の値に基づいて患者が喫煙者であるかどうかを予測するバイナリ分類器を作成するとします。さらに、モデル予測に対する患者の性別による差異の影響を除去します。モデルに学習させる前に、disparateImpactRemover を使用してデータ セット内の連続予測子変数を変換できます。

    100 人の患者の医療情報を含む patients データ セットを読み込みます。変数 GenderSmokercategorical 変数に変換します。10 の代わりに、SmokerNonsmoker というわかりやすいカテゴリ名を指定します。

    load patients
    Gender = categorical(Gender);
    Smoker = categorical(Smoker,logical([1 0]), ...
        ["Smoker","Nonsmoker"]);

    連続予測子 DiastolicSystolic を含む行列を作成します。

    X = [Diastolic,Systolic];

    センシティブ属性 Gender の 2 つのグループの観測値を調べます。

    femaleIdx = Gender=="Female";
    maleIdx = Gender=="Male";
    femaleX = X(femaleIdx,:);
    maleX = X(maleIdx,:);

    センシティブ属性の 2 つのグループの DiastolicSystolic の分位数を計算します。分位数は、センシティブ属性の全グループで、観測値が最も少ないグループの観測値数が 100 より小さければその値にするように指定します。

    t = tabulate(Gender);
    t = array2table(t,VariableNames=["Value","Count","Percent"])
    t=2×3 table
          Value       Count     Percent
        __________    ______    _______
    
        {'Female'}    {[53]}    {[53]} 
        {'Male'  }    {[47]}    {[47]} 
    
    
    numQuantiles = min(100,min(t.Count{:}))
    numQuantiles = 47
    
    femaleQuantiles = quantile(femaleX,numQuantiles,1);
    maleQuantiles = quantile(maleX,numQuantiles,1);

    2 つのグループの分位数の中央値を計算します。

    Q(:,:,1) = femaleQuantiles;
    Q(:,:,2) = maleQuantiles;
    medianQuantiles = median(Q,3);

    結果をプロットします。左側のプロットに Diastolic の分位数、右側のプロットに Systolic の分位数を表示します。

    tiledlayout(1,2)
    
    nexttile % Diastolic
    plot(femaleQuantiles(:,1),1:numQuantiles)
    hold on
    plot(maleQuantiles(:,1),1:numQuantiles)
    plot(medianQuantiles(:,1),1:numQuantiles)
    hold off
    xlabel("Diastolic")
    ylabel("Quantile")
    legend(["Female","Male","Median"],Location="southeast")
    
    nexttile % Systolic
    plot(femaleQuantiles(:,2),1:numQuantiles)
    hold on
    plot(maleQuantiles(:,2),1:numQuantiles)
    plot(medianQuantiles(:,2),1:numQuantiles)
    hold off
    xlabel("Systolic")
    ylabel("Quantile")
    legend(["Female","Male","Median"],Location="southeast")

    Figure contains 2 axes objects. Axes object 1 with xlabel Diastolic, ylabel Quantile contains 3 objects of type line. These objects represent Female, Male, Median. Axes object 2 with xlabel Systolic, ylabel Quantile contains 3 objects of type line. These objects represent Female, Male, Median.

    各予測子で FemaleMale の分位数が異なっています。この違いを関数 disparateImpactRemover で分位数の中央値を使用して調整します。

    センシティブ属性 Gender を使用して X の予測子 DiastolicSystolic を変換します。

    [remover,newX] = disparateImpactRemover(X,Gender);
    femaleNewX = newX(femaleIdx,:);
    maleNewX = newX(maleIdx,:);

    X の元の値と newX の変換後の値での Diastolic の分布の違いを可視化します。関数 ksdensity を使用して、確率密度推定を計算して表示します。

    tiledlayout(1,2)
    
    nexttile
    ksdensity(femaleX(:,1))
    hold on
    ksdensity(maleX(:,1))
    hold off
    xlabel("Diastolic")
    ylabel("Probability Density Estimate")
    title("Original")
    legend(["Female","Male"])
    ylim([0,0.07])
    
    nexttile
    ksdensity(femaleNewX{:,1})
    hold on
    ksdensity(maleNewX{:,1})
    hold off
    xlabel("Diastolic")
    ylabel("Probability Density Estimate")
    title("Transformed")
    legend(["Female","Male"])
    ylim([0,0.07])

    Figure contains 2 axes objects. Axes object 1 with title Original, xlabel Diastolic, ylabel Probability Density Estimate contains 2 objects of type line. These objects represent Female, Male. Axes object 2 with title Transformed, xlabel Diastolic, ylabel Probability Density Estimate contains 2 objects of type line. These objects represent Female, Male.

    関数 disparateImpactRemover によって予測子変数 Diastolic の値が変換され、Female の値の分布と Male の値の分布が似たような分布になっています。

    これで、調整後の予測子データを使用してバイナリ分類器に学習させることができます。この例では、木分類器に学習させます。

    tree = fitctree(newX,Smoker)
    tree = 
      ClassificationTree
               PredictorNames: {'x1'  'x2'}
                 ResponseName: 'Y'
        CategoricalPredictors: []
                   ClassNames: [Smoker    Nonsmoker]
               ScoreTransform: 'none'
              NumObservations: 100
    
    
    

    メモ: 新しいデータ セットは、予測用に分類器に渡す前に変換する必要があります。

    X から 10 個の観測値を無作為に抽出します。remover オブジェクトとオブジェクト関数 transform を使用して値を変換します。その後、観測値について喫煙状況を予測します。

    rng("default") % For reproducibility
    testIdx = randsample(size(X,1),10,1);
    testX = transform(remover,X(testIdx,:),Gender(testIdx));
    label = predict(tree,testX)
    label = 10x1 categorical
         Nonsmoker 
         Smoker 
         Nonsmoker 
         Nonsmoker 
         Nonsmoker 
         Nonsmoker 
         Nonsmoker 
         Smoker 
         Smoker 
         Smoker 
    
    

    センシティブ属性を基準とする連続数値予測子の変換の範囲を指定します。関数 disparateImpactRemover の名前と値の引数 RepairFraction を使用します。

    100 人の患者の医療情報を含む patients データ セットを読み込みます。変数 GenderSmoker をカテゴリカル変数に変換します。10 の代わりに、SmokerNonsmoker というわかりやすいカテゴリ名を指定します。

    load patients
    Gender = categorical(Gender);
    Smoker = categorical(Smoker,logical([1 0]), ...
        ["Smoker","Nonsmoker"]);

    連続予測子 DiastolicSystolic を含む行列を作成します。

    X = [Diastolic,Systolic];

    センシティブ属性 Gender の 2 つのグループの観測値を調べます。

    femaleIdx = Gender=="Female";
    maleIdx = Gender=="Male";
    femaleX = X(femaleIdx,:);
    maleX = X(maleIdx,:);

    センシティブ属性 Gender を使用して X の予測子 DiastolicSystolic を変換します。修復率を 0.5 と指定します。値 1 は完全な変換を示し、値 0 は変換なしを示すことに注意してください。

    [remover,newX50] = disparateImpactRemover(X,Gender, ...
        RepairFraction=0.5);
    femaleNewX50 = newX50(femaleIdx,:);
    maleNewX50 = newX50(maleIdx,:);

    remover オブジェクトのオブジェクト関数 transform を使用して、予測子変数を完全に変換します。

    newX100 = transform(remover,X,Gender,RepairFraction=1);
    femaleNewX100 = newX100(femaleIdx,:);
    maleNewX100 = newX100(maleIdx,:);

    X の元の値、newX50 の部分的に修復した値、および newX100 の完全に変換した値での Diastolic の分布の違いを可視化します。関数 ksdensity を使用して、確率密度推定を計算して表示します。

    t = tiledlayout(1,3);
    title(t,"Diastolic Distributions with Different " + ...
        "Repair Fractions")
    xlabel(t,"Diastolic")
    ylabel(t,"Density Estimate")
    
    nexttile
    ksdensity(femaleX(:,1))
    hold on
    ksdensity(maleX(:,1))
    hold off
    title("Fraction=0")
    ylim([0,0.07])
    
    nexttile
    ksdensity(femaleNewX50{:,1})
    hold on
    ksdensity(maleNewX50{:,1})
    hold off
    title("Fraction=0.5")
    ylim([0,0.07])
    
    nexttile
    ksdensity(femaleNewX100{:,1})
    hold on
    ksdensity(maleNewX100{:,1})
    hold off
    title("Fraction=1")
    ylim([0,0.07])
    legend(["Female","Male"],Location="eastoutside")

    Figure contains 3 axes objects. Axes object 1 with title Fraction=0 contains 2 objects of type line. Axes object 2 with title Fraction=0.5 contains 2 objects of type line. Axes object 3 with title Fraction=1 contains 2 objects of type line. These objects represent Female, Male.

    関数 disparateImpactRemover によって予測子変数 Diastolic の値が変換され、修復率が大きくなるほど、Female の値の分布と Male の値の分布がより似たような分布になっています。

    詳細

    すべて展開する

    ヒント

    • disparateImpactRemover を使用した後、モデルの学習には連続する順序予測子のみを使用することを検討してください。モデルに学習させるときにセンシティブ属性を個別の予測子として使用しないようにしてください。詳細については、[1]を参照してください。

    • テスト データなどの新しいデータは、モデルに学習させた後に disparateImpactRemover を使用して変換しなければなりません。そうしないと、予測結果が不正確になります。オブジェクト関数 transform を使用してください。

    アルゴリズム

    disparateImpactRemover は、Tbl または X の連続予測子を次のように変換します。

    1. センシティブ属性のグループを使用して予測子の値を分割します。それぞれのグループ g について、関数 quantile を使用して予測子の値の分位数 q を計算します。分位数 q は、100 か、センシティブ属性の全グループで観測値が最も少ないグループの観測値数の、いずれか小さい方になります。関数 discretize を使用して、対応するビン化関数 Fg を作成します。分位数の値がビンのエッジとして使用されます。

    2. 次に、センシティブ属性の全グループの分位数の中央値を求め、関連する分位数関数 Fm-1 を形成します。この計算では欠損値 (NaN) は省略されます。

    3. 最後に、変換 λFm-1(Fg(x)) + (1 – λ)x を使用して、センシティブ属性のグループ g の予測子の値 x を変換します。ここで、λ は修復率 RepairFraction です。予測子の欠損値 (NaN) は保持されます。

    新しい予測子データに適用できる変換が関数によって格納されます。

    詳細については、[1]を参照してください。

    参照

    [1] Feldman, Michael, Sorelle A. Friedler, John Moeller, Carlos Scheidegger, and Suresh Venkatasubramanian. “Certifying and Removing Disparate Impact.” In Proceedings of the 21th ACM SIGKDD International Conference on Knowledge Discovery and Data Mining, 259–68. Sydney NSW Australia: ACM, 2015. https://doi.org/10.1145/2783258.2783311.

    バージョン履歴

    R2022b で導入