跳到内容

KenSciResearch/fairMLHealth

fairMLHealth公司

医疗保健机器学习中变异分析的工具和教程。

1.0.0版中的新增功能!

我们重新组织了库,使其更加直观,并添加了一些有用的功能:

  • 评估回归分析的措施
  • 按队列组堆叠分层表
  • 应用单个比较评估一个或多个模型的功能

工具内容

安装

用pip安装:

python-m pip安装fairmlhealth

直接从GitHub安装:

python-m pip安装git+https://github.com/KenSciResearch/fairMLHealth

从repo的本地副本安装:

pip安装<path_to_fairMLHealth_dir>

安装问题疑难解答

安装有问题吗?-步骤1:验证您使用的是兼容版本的python。-步骤2:如果步骤1无法解决问题,请验证是否正确安装了所有必需的软件包。-步骤3:对于某些指标,FairMLHealth依赖AIF360,它有几个已知的安装难题。如果安装有问题,请首先检查AIF360的故障排除技巧.

如果您无法通过上述故障排除提示解决问题,请通过讨论板或使用提交问题问题模板在我们的文档文件夹.

FairMLHealth使用

以下是我们最受欢迎的功能的一些快速启动示例。有关这些示例和其他示例的更多信息,请参阅示例与教程文件夹!这些具体示例基于我们的ToolUsage笔记本,我们通过以下链接在Jupyter的nbviewer中为其提供了在线访问:

请注意,虽然下面的示例使用熊猫,但库的设计是为了接受熊猫对象或numpy数组。

示例设置

 公平卫生 进口 报告,测量
进口 熊猫 作为 
 sklearn公司.型号选择 进口 列车_测试_拆分
 sklearn公司.天真的孩子 进口 伯努利NB
 sklearn公司. 进口 决策树分类程序


#首先,我们将为感兴趣的属性创建一个带有特定列的半随机数据帧
天然气 = 净现值.随机的,随机的.随机状态(506)N个 = 240
X(X) = .数据帧({“列1”:天然气.兰丁(1,4,N个),“列2”:天然气.兰丁(1,75,N个),“列3”:天然气.兰丁(0,2,N个),“性别”: [0,1]*整数(N个/2),“种族”: [1,1,0,0]*整数(N个/4),“其他”: [1,0,1,0,1,1,0,1]*整数(N个/8)})

通用报告-report.py

与以前的版本一样,最新版本的fairMLHealth具有创建模型偏差和性能的通用报告的工具。从1.0.0版开始的一个重要更新是,所有这些功能现在都包含在报告.py模块(以前称为modelcomparison.py)。

比较二进制分类

现在主要的报告工具是比较函数,可用于为任意数量的模型、二进制分类或回归问题生成并排比较。还提供了模型性能指标,如准确性和精确度(或回归问题的MAE和RSquared),以便于比较。下面是比较上面定义的两个示例模型的示例输出。

默认情况下,应用标记协议来突出显示值超出范围的任何单元格。这可以通过以下方式关闭flag_oor=假报告.compare()。

#终止随机目标变量
 = .系列(X(X)[“列3”]. + 天然气.兰丁(0,2,N个),名称='示例_目标').削减(上面的=1)#第三,我们将分割数据并使用它训练两个通用模型
拆分 = 列车_测试_拆分(X(X),,分层=,测试_大小=0.5,随机状态=60)X_火车,X测试(_T),y_列车,y_测试 = 拆分

型号1 = 伯努利NB().适合(X_火车,y_列车)型号2 = 决策树分类程序().适合(X_火车,y_列车)#生成报告
公平性_度量 = 报告.比较(X测试(_T),y_测试,X测试(_T)[“性别”,型号1)

请注意,等比比已从以下示例中删除。这是因为整个数据集和特权类的误报率都近似为零,导致误报率比率的分母为零。因此,结果未定义,无法在等奇数比中进行比较。

单个模型比较示例

这个比较该工具还可以用于测量两个不同的模型或两个不同受保护的属性。受保护的属性是单独测量的,不能与比较工具,尽管它们可以在分层表中分组为队列如下所示.

#多个模型的示例
报告.比较(测试_数据 = X测试(_T),目标 = y_测试,受保护属性 = X测试(_T)[“性别”],模型 ={'任意名称1':型号1,“型号2”:型号2})

两种模型比较示例

#具有不同受保护属性的示例。
#请注意,传递同一模型时使用了两个不同的键,以澄清列名。
报告.比较(X测试(_T),y_测试,[X测试(_T)[“性别”],X测试(_T)[“种族”]],{“性别”:型号1,“种族”:型号1})

多属性比较示例

比较回归

下面是一个对回归模型应用相同函数的示例。请注意,用于评估回归指标的“公平”范围确实需要用户作出判断。比率的默认范围设置为[0.8,1.2],可用目标范围的10%平均预测差和可用MAE范围的10%MAE差异。如果默认标志不满足您的需要,可以通过传递flag_oor=假以报告.compare()。更多信息可在我们的评估公平性文件.

 sklearn公司.线性模型 进口 线性回归

#创建随机目标变量。在这种情况下,我们将添加一些与现有变量的相关性
 = .系列((X(X)[“列3”]+X(X)[“性别”]). + 天然气.制服(0,6,N个),名称='示例_连续_目标')#分割数据并使用它训练回归模型
拆分 = 列车_测试_拆分(X(X),,测试_大小=0.5,随机状态=42)X_火车,X测试(_T),y_列车,y_测试 = 拆分
回归模型 = 线性回归().适合(X_火车,y_列车)#生成报告。
#注意,对于回归模型,必须声明预测类型(pred_type)。
报告.比较(X测试(_T),y_测试,X测试(_T)[“性别”],回归模型,pred_type(前类型)=“回归”)

回归比较示例

#显示同一个报告,不带标志,也没有模型性能
报告.比较(X测试(_T),y_测试,X测试(_T)[“性别”],回归模型,pred_type(前类型)=“回归”,标志或(_O)=False(错误),跳过_性能=真的))

跳过性能的回归比较示例

详细分析-measure.py

FairMLHealth还提供了通过分层数据、性能和偏差表对模型方差进行详细分析的工具。除了评估公平性之外,这些工具还可以灵活地用于模型bai的任何通用评估,以一次性评估多个特征。从1.0.0版开始的一个重要更新是,所有这些功能现在都包含在测量.py模块(以前称为reports.py)。

所有表都显示“所有功能,所有值”的摘要行。可以通过传递以下命令关闭此摘要add_overview=错误测量.data()。

分层数据表

分层数据表可用于针对一个或多个目标评估数据。有两种方法可用于确定要评估的特征,如下面的第一个示例所示。

#以下两个函数调用将生成如下所示的相同输出表

#参数选项1:传递完整的数据集,使用*features*参数进行子集设置
测量.数据(X测试(_T),y_测试,特征=[“性别”])#参数选项2:传递感兴趣的数据子集,而不使用*features*参数
测量.数据(X测试(_T)[[“性别”]],y_测试)

数据表示例

#显示多个目标的类似报告,删除摘要行
测量.数据(X(X)=X测试(_T),#用于定义行
             Y(Y)=X测试(_T),#用于定义列
             特征=[“性别”,“列1”],#X的可选子集
             目标=[“列2”,“列3”],#Y的可选子集
             添加概述(_O)=False(错误) #关闭“所有功能,所有值”行)

多目标数据表示例

分层性能表

分层性能表评估特定于每个特征值子集的模型性能。这些表与分类和回归模型都兼容。对于具有预测_proba()方法,如果可能,将包括额外的ROC_AUC和PR_AUC值。

#包含概率的二进制分类性能表
测量.性能(X测试(_T)[[“性别”]],y_真=y_测试,y_pred(预测)=型号1.预测(X测试(_T)),y_问题=型号1.预测机器人(X测试(_T))[:,1])

性能表示例,二进制分类

#回归示例
测量.性能(X测试(_T)[[“性别”]],y_真=y_测试,y_pred(预测)=回归模型.预测(X测试(_T)),pred_type(前类型)=“回归”)

性能表示例,回归

分层偏差表

分层偏差分析表对每个特征值对应用与公平性相关的度量。它假设给定的特征值是相对于特征的所有其他可能值的“特权”组。例如,行2下表中显示了“列1”值为"2"。对于此行,“2”被视为特权组,而所有其他非空值(即“1”和“3”)被视为无特权。

为了简化表格,公平性措施被简化为其组成部分。例如,等奇数比已降低为真阳性率(TPR)比和假阳性率(FPR)比。

#二进制分类示例
#请注意,此功能的flag_or默认设置为False
测量.偏差(X测试(_T)[[“性别”,“列1”]],y_测试,型号1.预测(X测试(_T)))

偏差表示例,二进制分类

请注意旗帜功能与两者兼容测量偏差()measure.summary()(将在下一节中演示)。然而,要启用彩色单元格,该工具将返回pandas Styler而不是DataTable。因此,标志(_O)默认设置为False(如上例所示)。通过传递可以打开标记flag_oor=真至任一功能。作为新增功能,可选自定义范围可以传递给测量偏差()measure.summary()以便于进行回归评估,如下例所示。

#自定义“公平”范围可以作为元组的字典传递,元组的键是不区分大小写的度量值名称
我的范围(_R) ={“MAE差异”:(-0.1,0.1),'平均预测差异':(-2,2)}#请注意,此功能的flag_or默认设置为False
测量.偏差(X测试(_T)[[“性别”,“列1”]],y_测试,回归模型.预测(X测试(_T)),pred_type(前类型)=“回归”,标志或(_O)=真的,自定义范围(_R)=我的范围(_R))

偏差表示例,回归

汇总表

这个测量该模块还包含一个summary函数,其工作原理类似于report.compare()。虽然它一次只能应用于一个模型,但它可以接受自定义的“公平”范围,并按原样接受队列组如下一节所示.

#带有自定义范围的回归模型的示例摘要输出
测量.总结(X测试(_T)[[“性别”,“列1”]],y_测试,回归模型.预测(X测试(_T)),prtc属性=X测试(_T)[“性别”],pred_type(前类型)=“回归”,标志或(_O)=真的,自定义范围(_R)={'平均预测差异':(-0.5,2)})

摘要示例

按队列分析

可以向measure.py生成的所有表传递一个可选的队列标签为每个观察值指定附加标签的参数,根据这些标签对分析进行分组。没有足够数据来运行分析的队列被简单地跳过。

#应用于偏差函数的队列示例
队列标签 = X测试(_T)[“性别”]测量.偏差(X测试(_T)[“列3”],y_测试,型号1.预测(X测试(_T)),标志或(_O)=真的,队列标签=队列标签)

单队列偏差表示例

#应用于汇总函数的队列示例
#请注意,性能度量和标记已关闭
测量.总结(X测试(_T)[[“列2”]],y_测试,型号1.预测(X测试(_T)),prtc属性=X测试(_T)[“性别”],pred_type(前类型)=“分类”,标志或(_O)=False(错误),跳过_性能=真的,队列标签=X测试(_T)[[“种族”,“列3”]])

具有多个队列的摘要示例

其他库资源

有关这些示例和其他示例的更多信息,请参阅示例与教程文件夹!这些具体示例基于我们的ToolUsage笔记本,我们通过以下链接在Jupyter的nbviewer中为其提供了在线访问:

有关公平性评估的深入讨论,请参阅评估公平性在我们的文档和资源第节。在同一文件夹中,您会发现度量快速参考,加上其他参考资料和资源

有关演示公平性评估过程的活动笔记本,请参阅二进制分类公平性评估教程回归公平性评估教程(nbviewer链接),其笔记本位于我们的示例与教程。这些最好与我们的ICHI2021 FairnessInHealthcareML幻灯片.pdf,可在[出版物]((./docs/Publications/)文件夹中找到。

模板位于模板文件夹:

联系我们!

这是一项正在进行的工作。通过使这些信息尽可能容易获得,我们希望促进一个基于公平和同理心的行业。但建立这个行业需要时间,也需要社区的支持。请与我们联系,以便我们能够相互支持,以推进机器学习和医疗保健!

引文

存储库

Allen,C.、Ahmad,M.A.、Eckert,C.、Hu,J.、Kumar,V.和Teredesai,A.(2020年)。fairML-Health:医疗机器学习中公平性评估的工具和教程。 https://github.com/KenSciResearch/fairMLHealth.

@杂项{fairMLHealth,title={fairMLHealth:healthcare机器学习中公平性评估的工具和教程。},作者={Allen,C.和Ahmad,M.A.和Eckert,C.以及Hu,J.和Kumar,V.和Teredesai,A.},年份={2020年},publisher={GitHub},日志={GitHub存储库},howpublished={\url{https://github.com/KenSciResearch/fairMLHealth}}}

KDD2020教程演示

Ahmad,M.A.、Patel,A.、Eckert,C.、Kumar,V.、Allen,C.和Teredesai,A.(2020年8月)。医疗保健机器学习的公平性。第26届ACM SIGKDD知识发现与数据挖掘国际会议论文集(第3529-3530页)。

另请参见:出版物

@集合{FMLH_KDD2020,title={医疗保健机器学习中的公平性},作者={Ahmad,M.A.和Eckert,C.,Kumar,V.和Patel,A.和Allen,C.和Teredesai,A.},年=2020年,月={八月},booktitle={第26届ACM SIGKDD知识发现与数据挖掘国际会议论文集},页数={3529-3530}}

使用FairMLHealth的课程

  • BEE 520标准:从数据中预测学习2022年冬季华盛顿大学波特尔分校电气工程系
  • CSS 581:机器学习2021年秋季华盛顿大学计算机科学系
  • TCSS 593:数据科学研究研讨会2021年春季华盛顿大学塔科马分校计算机科学系
  • BEE 520标准:从数据中预测学习2021年春,华盛顿大学波特尔分校电气工程系
  • CSS 581:机器学习2020年秋季华盛顿大学计算机科学系

主要贡献者