主要内容

去除偏见缓解信贷评分由不同的影响

差别性影响去除是一个预处理技术偏见减轻。使用这种方法,您修改初始的信用评分数据增加组公平,同时仍然保留组内排序。使用不同的影响去除技术降低了信用评分模型引入的偏差超过如果使用原始数据训练信用评分模型。你执行清除技术使用不同的影响disparateImpactRemover类的统计和机器学习工具箱™。这个类返回一个包含新预测对象和表值。然而,您需要使用变换方法与对象在使用安装前测试数据可以预测信用评分模型。

差别性影响去除技术与分布的数据只能在每个子群的数值预测的敏感属性。的disparateImpactRemover类没有的知识,或者关系,响应变量。在这个例子中,你把所有的数字预测,在地址(TmAtAddress)、客户收入(CustIncome),时间与银行(TmWBank),平均每月余额(AMBalance)和利用率(UtilRate),对敏感属性、客户年龄(的伙伴)。

原始的信用评分模型

这个示例使用信用评分工作流。加载CreditCardData.mat并使用“数据”数据集。

负载CreditCardData.mat伙伴=离散化(data.CustAge[45分钟(data.CustAge) 30 60马克斯(data.CustAge)],“分类”,{“< 30岁”,“30 < = < 45岁”,“< = 45年龄< 60岁”,“年龄> = 60岁”});data = addvars(数据、伙伴,“后”,“CustAge”);头(数据)
CustID CustAge伙伴TmAtAddress ResStatus EmpStatus CustIncome TmWBank OtherCC AMBalance UtilRate地位______是_____________ ___________ _____ _____ __________ ________ ______ 1 53 45 < = ____ ____ ____年龄< 60 62租户未知50000 55是的1055.9 - 0.22 0 2 61年龄> = 60 22家老板雇用了52000名25是的1161.6 - 0.24 0 3 45 < = 47年龄< 60岁30租户使用45 37000 61没有877.23 - 0.29 0 4 50 < =年龄< 60 75业主雇用了53000名20是的157.37 - 0.08 0 5 68年龄> = 60 56家老板雇用了53000名14是的561.84 - 0.11 0 6 65年龄> = 60 13家老板雇用了48000名59岁是的968.18 - 0.15 0 7 34 30 < =年龄< 45 32房主未知32000 26是的717.82 0.02 1 8 50 45 < =年龄< 60岁57其他雇佣了51000 33没有3041.2 - 0.13 0
rng (“默认”)

将数据集分为训练和测试数据。

c = cvpartition(大小(数据,1),“坚持”,0.3);:data_Train =数据(c.training ());:data_Test =数据(让());头(data_Train)
CustID CustAge伙伴TmAtAddress ResStatus EmpStatus CustIncome TmWBank OtherCC AMBalance UtilRate地位______是_____________ ___________ _____ _____ __________ ________ ______ 1 53 45 < = ____ ____ ____年龄< 60 62租户未知50000 55是的1055.9 - 0.22 0 2 61年龄> = 60 22家老板雇用了52000名25是的1161.6 - 0.24 0 3 45 < = 47年龄< 60岁30租户使用45 37000 61没有877.23 - 0.29 0 4 50 < =年龄< 60 75业主雇用了53000名20是的157.37 - 0.08 0 7 34 30 < =年龄< 45 32房主未知32000 26是的717.82 0.02 1 8 50 45 < =年龄< 60岁57其他雇佣了51000 33没有3041.2 - 0.13 0 9 50 45 < =年龄< 60岁10租户未知52000 25是的115.56 0.02 1 49 45 < =年龄< 60 53000房主未知23是的718.5 0.17 1

使用creditscorecard创建一个creditscorecard对象和使用fitmodel适合的信用评分模型的训练数据(data_Train)。

PredictorVars = setdiff (data_Train.Properties.VariableNames,{“CustAge”,“伙伴”,“CustID”,“状态”});那么= creditscorecard (data_Train,“IDVar”,“CustID”,“PredictorVars”PredictorVars,“ResponseVar”,“状态”);那么= autobinning(那么);那么= fitmodel(那么,“VariableSelection”,“fullmodel”);
广义线性回归模型:分对数(状态)~ 1 + TmAtAddress + ResStatus + EmpStatus + CustIncome + TmWBank + OtherCC + AMBalance + UtilRate =二项分布估计系数:估计SE tStat pValue ________说__________(拦截)0.73924 0.077237 9.5711 1.058 e-21 TmAtAddress EmpStatus ResStatus 0.20448 1.2577 0.99118 1.2689 1.755 1.295 1.3552 0.17535 0.88652 0.32232 2.7504 0.0059516 CustIncome 0.95991 0.19645 4.8862 1.0281 e-06 TmWBank AMBalance OtherCC 0.00033637 1.132 0.3157 3.5856 0.85227 2.1198 0.40204 0.68765 1.0773 0.31969 3.3698 0.00075232 UtilRate -0.19784 0.59565 -0.33214 0.73978 840年观察,831错误自由度色散:1 x ^ 2-statistic与常数模型:66.5,p = 2.44 e-11

使用displaypoints计算分每本的预测creditscorecard模型(那么)。

pointsinfo1 = displaypoints(那么)
pointsinfo1 =38×3表预测本点售予_________________ _____ {‘TmAtAddress}{[负9)的-0.17538}{‘TmAtAddress}{[9、16)的0.05434}{‘TmAtAddress}{[16日,23)的0.096897}{‘TmAtAddress}{[23岁,正]的}0.13984 {‘TmAtAddress}{' <失踪>}南{‘ResStatus}{“租户”}-0.017688 {‘ResStatus}{‘业主’}0.11681 {‘ResStatus}{‘其他’}0.29011 {‘ResStatus}{' <失踪>}南{‘EmpStatus}{‘未知’}-0.097582 {‘EmpStatus}{“雇佣”}0.33162 {‘EmpStatus}{' <失踪>}南{‘CustIncome}{[无穷,30000)的-0.61962}{‘CustIncome}{[30000、36000)的-0.10695}{‘CustIncome}{[36000、40000)的0.0010845}{‘CustIncome}{[40000、42000)的0.065532⋮}

使用probdefault确定违约的可能性的data_Test数据集和creditscorecard模型(那么)。

pd1 = probdefault(那么,data_Test);阈值= 0.35;predictions1 =双(pd1 >阈值);

使用fairnessMetrics计算公平指标在模型作为基准水平。使用报告生成公平性指标报告。

modelMetrics1 = fairnessMetrics (data_Test,“状态”,“预测”predictions1,“SensitiveAttributeNames”,“伙伴”);mmReport1 =报告(modelMetrics1,“GroupMetrics”,“GroupCount”)
mmReport1 =4×8表ModelNames SensitiveAttributeNames组StatisticalParityDifference DisparateImpact EqualOpportunityDifference AverageAbsoluteOddsDifference GroupCount __________ ___________________________ _______________________ * * *售予__________________________ _____________________________ __________ Model1伙伴年龄< 30 0.54312 2.6945 0.47391 0.5362 22 Model1伙伴30 < =年龄< 45 0.19922 1.6216 0.35645 0.22138 152 Model1伙伴45 < =年龄< 60 0 1 0 0 156 Model1伙伴年龄> = 30 60 -0.15385 0.52 -0.18323 0.16375

使用情节可视化统计平价差异(“社会民主党”)和不同的影响(“迪”)偏差指标。

图tiledlayout (2, 1) nexttile情节(modelMetrics1,“社会民主党”)nexttile情节(modelMetrics1“迪”)

图包含2轴对象。坐标轴对象1标题统计平价差异,包含公平度量值,ylabel伙伴包含一个对象类型的酒吧。坐标轴对象2与标题完全不同的影响,包含公平度量值,ylabel伙伴包含一个对象类型的酒吧。

去除偏见减轻由不同的影响

每个五个连续的预测,TmAtAddress””,CustIncome”,“TmWBank”,“AMBalance”,“UtilRate”情节的原始分布数据在每一个年龄组。

选择一个数值预测情节。

预测=“CustIncome”;[f1,ξ1]= ksdensity (data_Train。(预测)(data_Train.AgeGroup = =“< 30岁”));(f2,ξ2))= ksdensity (data_Train。(预测)(data_Train.AgeGroup = =“30 < = < 45岁”));[f3, xi3] = ksdensity (data_Train。(预测)(data_Train.AgeGroup = =“< = 45年龄< 60岁”));[f4, xi4] = ksdensity (data_Train。(预测)(data_Train.AgeGroup = =“年龄> = 60岁”));

创建一个disparateImpactRemover对象,并返回newTrainTbl表与新预测的值。

[剂,newTrainTbl] = disparateImpactRemover (data_Train,“伙伴”,“PredictorNames”,{“TmAtAddress”,“CustIncome”,“TmWBank”,“AMBalance”,“UtilRate”})
剂= disparateImpactRemover属性:RepairFraction: 1 PredictorNames: {“TmAtAddress”“CustIncome”“TmWBank”“AMBalance”“UtilRate”} SensitiveAttribute:“伙伴”
newTrainTbl =840×12表CustID CustAge伙伴TmAtAddress ResStatus EmpStatus CustIncome TmWBank OtherCC AMBalance UtilRate地位______是_____________ ___________ _____ _____ __________ ________ ______ 1 53 45 < = ____ ____ ____年龄< 60 58.599租户未知47000 51.733对1009.4 - 0.20099 0 2 61年龄> = 60 24业主雇佣了41500 24.5对1203.9 - 0.25 0 3 47 45 < =年龄< 60岁30.5租户使用33500 57.686 817.9 0.29 0 4 50 45 < =年龄< 60岁68.622业主雇佣了49401 19.07对120.54 - 0.077267 0 7 34 30 < =年龄< 45 30.5业主未知35500 26.657对638.88 - 0.02 1 8 50 45 < =年龄< 60岁53.39没有其他雇佣了47000 27.971 2172.7 - 0.12 0 9 45 < = 50年龄< 60岁9租户未知49401 22.541对120.54 - 0.02 1 10 45 < = 49年龄< 60岁30.5业主未知49401 22是的664.51 0.14715 1 11 52 45 < =年龄< 60岁24租户未知30500 38.779对120.54 - 0.065 12 48 45 < =年龄< 60岁77.291其他未知40500 14.5对405.81 - 0.03 0 14 44 30 < =年龄< 45其它未知44500 34.791 378.88 - 0.15657 68.622 0 17 39 30 < =年龄< 45 9租户使用37500 38.779是的664.51 0.25 - 1 20 52 45 < =年龄< 60岁51.442其他未知38500 12.297对1157.5 - 0.19273 0 21 37 30 < =年龄< 45 10.343租户未知36500 23.314 732.28 0.065 - 1 22 51 45 < =年龄< 60岁12.087业主雇佣了31500 27.971对437.95 - 0.01 0 24 43 30 < = 45年龄< 40租户雇佣了33500 0⋮11.18是263.13 - 0.077267
[nf1, nxi1] = ksdensity (newTrainTbl。(预测)(newTrainTbl.AgeGroup = =“< 30岁”));[nf2, nxi2] = ksdensity (newTrainTbl。(预测)(newTrainTbl.AgeGroup = =“30 < = < 45岁”));[nf3, nxi3] = ksdensity (newTrainTbl。(预测)(newTrainTbl.AgeGroup = =“< = 45年龄< 60岁”));[nf4, nxi4] = ksdensity (newTrainTbl。(预测)(newTrainTbl.AgeGroup = =“年龄> = 60岁”));

原始的和修复分布的阴谋。

图;tiledlayout (2, 1) ax₁= nexttile;情节(ξ1,f1,“线宽”,1.5)图(2),f2,“线宽”1.5)情节(xi3 f3,“线宽”1.5)情节(xi4 f4,“线宽”传说,1.5)([“< 30岁”;“30 < =年龄< 45”;“< = 45年龄< 60岁”;“年龄> = 60岁”),“位置”,“西北”)ax1.Title。字符串=“原始分布”+预测;包含(预测)ylabel (“pdf”网格)ax2 = nexttile;情节(nf1 nxi1,“线宽”,1.5)情节(nf2 nxi2,“线宽”1.5)情节(nxi3 nf3。“线宽”1.5)情节(nxi4 nf4,“线宽”传说,1.5)([“< 30岁”;“30 < =年龄< 45”;“< = 45年龄< 60岁”;“年龄> = 60岁”),“位置”,“西北”)ax2.Title。字符串=“修复分布”+预测;包含(预测)ylabel (“pdf”网格)linkaxes ([ax₁, ax2],“xy”)

图包含2轴对象。轴CustIncome原分布对象1标题,包含CustIncome, ylabel pdf包含4线类型的对象。这些对象代表年龄< 30、30 < =年龄< 45岁,45 < =年龄< 60岁,年龄> = 60岁。坐标轴对象2标题修复CustIncome分布,包含CustIncome, ylabel pdf包含4线类型的对象。这些对象代表年龄< 30、30 < =年龄< 45岁,45 < =年龄< 60岁,年龄> = 60岁。

这表明初始分布的阴谋CustIncome每一组的的伙伴预测是不同的。年轻人似乎更低的收入平均比老年人更变。这种差异引入了偏差,然后拟合模型反映了。的disparateImpactRemover函数修改数据的分布的所有子组更相似。你看到这个分布在第二次要情节修复CustIncome分布。使用这些新数据,可以适应一个逻辑回归模型,然后测量模型级指标和比较这些模型级指标从原来的creditscorecard模型(那么)。

新的信用评分模型

使用creditscorecard创建一个creditscorecard对象和使用fitmodel适合信用评分模型与新数据(newTrainTbl)。然后,您可以计算模型级偏差指标使用fairnessMetrics

星际2 = creditscorecard (newTrainTbl,“IDVar”,“CustID”,“PredictorVars”PredictorVars,“ResponseVar”,“状态”);星际2 = autobinning(星际2);星际2 = fitmodel(星际2,“VariableSelection”,“fullmodel”);
广义线性回归模型:分对数(状态)~ 1 + TmAtAddress + ResStatus + EmpStatus + CustIncome + TmWBank + OtherCC + AMBalance + UtilRate =二项分布估计系数:估计SE tStat pValue _____和_____(拦截)0.74041 0.07641 9.6899 3.327 e-22 TmAtAddress EmpStatus ResStatus 0.18308 1.1658 0.87564 1.3313 1.8719 1.2848 1.4569 0.14513 0.88699 0.31991 2.7727 0.00556 CustIncome OtherCC TmWBank 0.00062396 0.98269 0.28725 3.421 1.1392 0.30677 3.7135 0.00020442 0.55005 2.0969 0.26231 0.79308 UtilRate AMBalance 1.0478 0.3607 2.9049 0.0036734 -0.071972 - 0.58704 -0.1226 - 0.90242 840年观察,831错误自由度色散:1 x ^ 2-statistic与常数模型:50.4,p = 3.36 e-08

使用displaypoints计算分每本的预测creditscorecard模型(星际2)。

星际2 pointsinfo2 = displaypoints ()
pointsinfo2 =35×3表预测本点售予_________________ _____ {‘TmAtAddress}{[负9)的-0.11003}{‘TmAtAddress}{-0.091424的15.1453(9日)}{‘TmAtAddress}{'[15.1453,正]}0.14546 {‘TmAtAddress}{' <失踪>}南{‘ResStatus}{“租户”}-0.024878 {‘ResStatus}{‘业主’}0.11858 {‘ResStatus}{‘其他’}0.30343 {‘ResStatus}{' <失踪>}南{‘EmpStatus}{‘未知’}-0.097539 {‘EmpStatus}{“雇佣”}0.3319 {‘EmpStatus}{' <失踪>}南{‘CustIncome}{[无穷,31500)的-0.30942}{‘CustIncome}{[31500、38500)的-0.09789}{‘CustIncome}{[38500、45000)的0.21233}{‘CustIncome}{”(45000年,正)}0.494 {‘CustIncome}{' <失踪>}南⋮

计算违约概率与测试数据之前,您需要将测试数据使用相同的变换训练数据。这个变换,利用变换的方法对象,并通过它data_Test数据集,然后使用probdefault计算的违约的可能性data_Test数据集。

data_Test newTestTbl =变换(剂);pd2 = probdefault(星际2,newTestTbl);predictions2 =双(pd2 >阈值);

使用fairnessMetrics计算公平指标在模型层次和使用报告生成一个公平指标报告。

modelMetrics2 = fairnessMetrics (newTestTbl,“状态”,“预测”predictions2,“SensitiveAttributeNames”,“伙伴”);mmReport2 =报告(modelMetrics2,“GroupMetrics”,“GroupCount”)
mmReport2 =4×8表ModelNames SensitiveAttributeNames组StatisticalParityDifference DisparateImpact EqualOpportunityDifference AverageAbsoluteOddsDifference GroupCount __________ ___________________________ _______________________ * * *售予__________________________ _____________________________ __________ Model1伙伴年龄< 30 0.082751 1.2226 0.18696 0.10408 22 Model1伙伴30 < =年龄< 45 -0.0033738 0.99093 0.07902 0.076333 152 Model1伙伴45 < =年龄< 60 0 1 0 0 156 Model1伙伴年龄> = 30 60 0.028205 1.0759 0.015528 0.026143

使用情节可视化统计平价差异(“社会民主党”)和不同的影响(“迪”)偏差指标。

图tiledlayout (2, 1) nexttile情节(modelMetrics2,“社会民主党”)nexttile情节(modelMetrics2“迪”)

图包含2轴对象。坐标轴对象1标题统计平价差异,包含公平度量值,ylabel伙伴包含一个对象类型的酒吧。坐标轴对象2与标题完全不同的影响,包含公平度量值,ylabel伙伴包含一个对象类型的酒吧。

情节不同的影响和不同修复分数值的准确性

在这个例子中,偏见减排进程使用disparateImpactRemover设置RepairFraction= 1为了减少偏见。然而,它是有用的,看看不同的影响和精度随的变化RepairFraction价值。例如,使用的伙伴预测和情节的影响,不同的子组为不同值的准确性RepairFraction

子群=4;r = 0:0.1:1;精度= 0(11日1);di = 0(11日1);我= 0:1:10 rmvr, trainTbl = disparateImpactRemover (data_Train,“伙伴”,“PredictorNames”,{“TmAtAddress”,“CustIncome”,“TmWBank”,“AMBalance”,“UtilRate”},“RepairFraction”,我/ 10);testTbl =变换(rmvr data_Test);sc = creditscorecard (trainTbl,“IDVar”,“CustID”,“PredictorVars”PredictorVars,“ResponseVar”,“状态”);sc = autobinning (sc);sc = fitmodel (sc,“VariableSelection”,“fullmodel”,“显示”,“关闭”);pd = probdefault (sc, testTbl);预测=双(pd >阈值);modelMetrics = fairnessMetrics (newTestTbl,“状态”,“预测”预测,“SensitiveAttributeNames”,“伙伴”);mmReport =报告(modelMetrics,“BiasMetrics”,“迪”,“GroupMetrics”,“准确性”);di (i + 1) = mmReport.DisparateImpact(群);准确性(i + 1) = mmReport.Accuracy(群);结束图yyaxis情节(r, di,“线宽”,1.5)标题(“伙伴偏见减轻”)包含(“修复分数”)ylabel (的不同影响)yyaxis正确的情节(r,准确性,“线宽”1.5)ylabel (“准确性”网格)

图包含一个坐标轴对象。坐标轴对象与标题偏见减轻伙伴,包含修复分数,ylabel精度包含2线类型的对象。

如果你选择子群“< 30岁”从这个图中,您可以看到,精度提高的RepairFraction价值增加。虽然这似乎是违反直觉的,进一步的在GroupCount这个年龄段的人们mmReport2表,这一组只有22的观察。这个小数量的观察这个阴谋的异常解释道。

缓解这一问题的一个方法没有足够的数据的子群是将所有贫穷的团体和一组对特权组进行比较。下面的代码显示了如何通过设置多数集团(45 < =年龄< 60岁)作为特权集团,然后通过结合其他组分成一个组作为unprivliged组和设置。

privilegedGroup =“< = 45年龄< 60岁”;twoAgeGroups_TrainTbl = data_Train;twoAgeGroups_TrainTbl。的伙伴= addcats(twoAgeGroups_TrainTbl.AgeGroup,“其他”,“后”,“年龄> = 60岁”);twoAgeGroups_TrainTbl.AgeGroup (twoAgeGroups_TrainTbl。的伙伴~ = privilegedGroup) =“其他”;twoAgeGroups_TestTbl = data_Test;twoAgeGroups_TestTbl。的伙伴= addcats(twoAgeGroups_TestTbl.AgeGroup,“其他”,“后”,“年龄> = 60岁”);twoAgeGroups_TestTbl.AgeGroup (twoAgeGroups_TestTbl。的伙伴~ = privilegedGroup) =“其他”;r = 0:0.1:1;精度= 0(11日1);di = 0(11日1);我= 0:1:10 rmvr, trainTbl = disparateImpactRemover (twoAgeGroups_TrainTbl,“伙伴”,“PredictorNames”,{“TmAtAddress”,“CustIncome”,“TmWBank”,“AMBalance”,“UtilRate”},“RepairFraction”,我/ 10);testTbl =变换(rmvr twoAgeGroups_TestTbl);sc = creditscorecard (trainTbl,“IDVar”,“CustID”,“PredictorVars”PredictorVars,“ResponseVar”,“状态”);sc = autobinning (sc);sc = fitmodel (sc,“VariableSelection”,“fullmodel”,“显示”,“关闭”);pd = probdefault (sc, testTbl);预测=双(pd >阈值);modelMetrics = fairnessMetrics (twoAgeGroups_TestTbl,“状态”,“预测”预测,“SensitiveAttributeNames”,“伙伴”,“ReferenceGroup”,“< = 45年龄< 60岁”);mmReport =报告(modelMetrics,“BiasMetrics”,“迪”,“GroupMetrics”,“准确性”);di (i + 1) = mmReport.DisparateImpact (2);准确性(i + 1) = mmReport.Accuracy (2);结束图yyaxis情节(r, di,“线宽”,1.5)标题(“伙伴偏见减轻”)包含(“修复分数”)ylabel (的不同影响)yyaxis正确的情节(r,准确性,“线宽”1.5)ylabel (“准确性”网格)

图包含一个坐标轴对象。坐标轴对象与标题偏见减轻伙伴,包含修复分数,ylabel精度包含2线类型的对象。

您可以使用这个特权组和unprivliged组方法如果目标不是衡量每个组的偏见反对特权集团,而是衡量所有顾客的整体公平不是特权集团的一部分。

引用

[1]尼尔森,艾琳。“第四章。公平预处理。”实际的公平。O ' reilly Media, Inc ., 2020年12月。

[2]Mehrabi Ninareh, et al。”一个调查偏差和机器学习是公平的。”ArXiv: 1908.09635 (Cs)2019年9月。arXiv.org,https://arxiv.org/abs/1908.09635

[3]韦希特尔,桑德拉,et al。偏见保存在机器学习:公平指标根据欧盟的合法性不歧视的法律。SSRN学术论文,ID 3792772,社会科学研究网络,2021年1月15日。papers.ssrn.com,https://papers.ssrn.com/sol3/papers.cfm?abstract_id=3792772

另请参阅

||||

相关的话题