Press "Enter" to skip to content

在信用卡违约数据集中检测和发现偏见

在机器学习中存在许多偏见的来源。这些偏见源于数据所代表的真相,如系统性和结构性的偏见,会导致数据中的偏见。还有一些以数据为根源的偏见,如样本、排除、关联和测量偏见。最后,对于我们从数据或模型中得出的见解,也存在一些需要小心的偏见,如保守主义偏见、显著性偏见和基本属性错误。

本节摘自我的最新书籍《使用Python进行可解释的机器学习,第二版》。你可以在这里找到本节的代码。

在这个例子中,为了正确解决这么多层次的偏见,我们应该将我们的数据与人口普查数据(《比较数据挖掘技术的预测信用卡客户违约概率的准确性》Expert Systems with Applications,36(2),2473-2480),以及按人口统计拆分的历史借贷数据进行连接。然后,使用这些外部数据集,控制信用卡合同条件以及性别,收入和其他人口统计数据,以确定特定情况下,年轻人是否被针对高利息的信用卡,而他们本不应该有资格获得。我们还需要追踪数据集的作者,并与他们和领域专家咨询,以检查数据集中与偏见相关的数据质量问题。理想情况下,验证这个假设需要类似于数个章节长度的解释,这将是一项艰巨的任务。

因此,出于迅捷的考量,我们将本章的前提作为事实。也就是说,由于掠夺性借贷行为,某些年龄组在信用卡违约方面更容易受到伤害,这并不是他们自己的过错。我们也将毫无保留地接受数据集的质量。在这些条件下,这意味着如果我们在数据或由此数据衍生的任何模型中发现不同年龄组之间的差异,可以完全归因于掠夺性借贷行为。

还有两种公平性类型,如下所述:

  • 程序公平性:这涉及公平或平等待遇。法律上很难对这个术语进行明确定义,因为它非常依赖于环境。
  • 结果公平性:这仅仅是衡量公平结果。

这两个概念并不互斥,因为过程可能是公平的,但结果却不公平,反之亦然。在这个例子中,不公平的过程是向不合格的客户提供高利息信用卡。然而,在本章中,我们将专注于结果公平性。

当谈论机器学习中的偏见时,会影响到受保护群体,而在这些群体中,会存在有特权和非特权的群体。后者是受偏见的不利影响的群体。偏见还有很多表现方式,因此也有了不同的解决方法,如下所示:

  • 代表性:可能存在对非特权群体的代表性不足或过度代表。模型将对这个群体相对于其他群体了解得太少或太多。
  • 分布:群体之间特征分布的差异可能会导致模型建立有偏见的关联,直接或间接地影响模型的结果。
  • 概率:对于分类问题,群体之间类别平衡的差异可能会导致模型学习到一个群体更有可能属于一个类别或另一个类别的偏见。这可以通过混淆矩阵或比较其分类指标,如假阳性率或假阴性率来观察。
  • 混合:以上任何一种表现方式的组合。

有关任何偏见表现方式的策略将在《该书》的第11章中讨论,但我们在本节中要讨论的是与概率的不平等相关的偏见表现方式,针对我们的主要受保护属性(_AGE),我们将通过可视化来观察受保护特征中的不平等。

言归正传,让我们继续本节的实践部分。

可视化数据集的偏差

数据本身展示了一个群体属于积极类别与其他类别之间的概率差异。如果是一个分类特征,可以通过将积极类别的value_counts()函数除以所有类别的数量来获得这些概率。例如,对于性别,我们可以这样做:

上述代码产生了以下输出,显示了男性在信用卡违约方面的概率平均较高:

对于连续特征,执行此操作的代码稍微复杂一些。建议使用pandasqcut将特征分成四分之一,然后使用相同的方法处理分类特征。幸运的是,plot_prob_progression函数已经为您执行了这些操作,并绘制了每个四分之一概率的变化。第一个属性是一个 pandas series、数组或列表,含有受保护特征(_AGE),第二个属性也是相同的,只不过是目标特征(IS_DEFAULT)。我们可以选择设置的间隔数量(x_intervals),设为四分之一(use_quartiles=True)。其余的属性是美观方面的,比如标签、标题和添加一个mean_line。代码可以在以下代码段中看到:

上述代码产生了以下输出,显示了年龄最小组(21-25)和年龄最大组(47-79)最有可能违约。其他所有组与均值相差不到一个标准差:

图1:根据_AGE的信用卡违约概率

我们可以将最年轻和最年长的四分之一称为劣势群体,将其他所有群体称为特权群体。为了检测和减轻不公平,最好将它们编码为二元特征,并且我们已经用AGE_GROUP这样做了。我们可以再次利用plot_prob_progression,但这次使用AGE_GROUP而不是AGE,并且我们将使用更易解释的标签替换数字。代码可以在以下代码段中看到:

上述代码产生了以下输出,两个群体之间的差异非常明显:

图2:根据AGE_GROUP的信用卡违约概率

接下来,让我们再次将GENDER加入进来。我们可以使用plot_prob_contour_map,它类似于plot_prob_progression,但是在二维空间中进行,通过颜色编码概率而不是绘制一条线。因此,前两个属性是我们想要放在X轴(GENDER)和Y轴(AGE_GROUP)上的特征,第三个属性是目标(IS_DEFAULT)。由于我们的两个特征都是二进制的,最好使用plot_type='grid',而不是等高线。代码可以在以下代码段中看到:

上述代码生成了以下输出。很明显,最特权的群体是26-47岁的女性,其次是与其男性同类别的人,差距约为3-4%。在劣势年龄组也是如此:

图3:根据GENDERAGE_GROUP的信用卡违约概率网格

性别的差异是一个有趣的观察结果,我们可以提出许多假设,解释女性违约较少的原因。他们是否更擅长管理债务?是否与婚姻状况或教育程度有关?我们不会深入探讨这些问题。鉴于我们只知道基于年龄的歧视,我们只会在特权组中使用AGE_GROUP,而将GENDER作为保护属性。

结论

在这个分析中,我们发现了年轻和老年信用卡持有者遭受偏见的明显证据,他们更有可能违约。这很可能是由于针对这些群体的高利息信用贷款的掠夺性放贷行为。在使用概率图和公平性指标可视化偏见后,可以采取缓解策略,以创建一个更公平的机器学习模型。然而,仍然需要更多工作来解决根本原因,并防止这样的带有偏见的数据集首先被创建出来。在书籍《Python可解释机器学习第二版》中进一步探索这个主题。

Leave a Reply

Your email address will not be published. Required fields are marked *