使用 YAML 和 Python 生成负责任 AI 见解

适用范围:Azure CLI ml 扩展 v2(最新版)Python SDK azure-ai-ml v2(最新版)

可使用负责任 AI 组件通过管道作业生成负责任 AI 仪表板和记分卡。 有六个用于创建负责任 AI 仪表板的核心组件以及几个帮助程序组件。 示例试验图如下所示:

示例试验图的屏幕截图。

负责任 AI 组件

用于在 Azure 机器学习中构建负责任 AI 仪表板的核心组件包括:

  • RAI Insights dashboard constructor
  • 工具组件:
    • Add Explanation to RAI Insights dashboard
    • Add Causal to RAI Insights dashboard
    • Add Counterfactuals to RAI Insights dashboard
    • Add Error Analysis to RAI Insights dashboard
    • Gather RAI Insights dashboard
    • Gather RAI Insights score card

始终需要 RAI Insights dashboard constructorGather RAI Insights dashboard 组件,以及至少一个工具组件。 但是,不需要在每个负责任 AI 仪表板中使用所有工具。

以下部分是 YAML 和 Python 中负责任 AI 组件和代码片段示例的规范。

重要

本文中标记了“(预览版)”的项目目前为公共预览版。 该预览版在提供时没有附带服务级别协议,建议不要将其用于生产工作负载。 某些功能可能不受支持或者受限。 有关详细信息,请参阅适用于 Azure 预览版的补充使用条款

限制

当前的组件集在使用上有很多限制:

  • 所有模型都必须在 Azure 机器学习中以 MLflow 格式注册,并采用 sklearn (scikit-learn) 风格。
  • 模型在组件环境中必须可加载。
  • 模型必须可选取。
  • 必须使用我们提供的 Fetch Registered Model 组件将模型提供给负责任 AI 组件。
  • 数据集输入必须采用 mltable 格式。
  • 即使只对数据执行因果分析,也必须提供模型。 你可以使用 scikit-learn 中的 DummyClassifierDummyRegressor 估算器来实现此目的。

RAI 见解仪表板构造函数

此组件有三个输入端口:

  • 机器学习模型
  • 训练数据集
  • 测试数据集

若要使用错误分析和模型说明等组件生成模型调试见解,请使用训练模型时使用的训练数据集和测试数据集。 对于不需要模型的因果分析等组件,可使用训练数据集训练因果模型来生成因果见解。 使用测试数据集来填充负责任 AI 仪表板的可视化效果。

提供模型的最简单方法是注册输入模型,并在 RAI Insight Constructor 组件的模型输入端口中引用同一模型,本文稍后将对此进行讨论。

注意

目前仅支持采用 MLFlow 格式且采用 sklearn 风格的模型。

两个数据集应当采用 mltable 格式。 提供的训练数据集和测试数据集不必与用于训练模型的数据集相同(但它们也可以相同)。 默认情况下,出于性能原因,测试数据集限制为可视化 UI 的 5,000 行。

构造函数组件还接受以下参数:

参数名称 说明 类型
title 仪表板的简要说明。 字符串
task_type 指定模型是分类模型、回归模型还是预测模型。 字符串,classificationregressionforecasting
target_column_name 输入数据集中列的名称,模型正尝试预测该列的名称。 字符串
maximum_rows_for_test_dataset 出于性能方面的原因,测试数据集中允许的最大行数。 整数,默认为 5,000
categorical_column_names 数据集中的列,表示分类数据。 字符串的可选列表1
classes 训练数据集中类标签的完整列表。 字符串的可选列表1
feature_metadata 根据任务类型指定仪表板可能需要的其他信息。 对于预测,这包括指定哪个列是 datetime 列,而哪个列是 time_series_id 列。 对于视觉,这可能包括图像的平均像素值或位置数据。 字符串的可选列表1
use_model_dependency 指定由于与 RAI 仪表板的依赖关系冲突,模型是否需要单独的 docker 容器来提供服务。 对于预测,必须启用此功能。 通常,对于其他方案,未启用此功能。 布尔

1 列表应以单个 JSON 编码字符串的形式提供给 categorical_column_namesclassesfeature_metadata 输入。

构造函数组件有一个名为 rai_insights_dashboard 的输出。 这是一个空仪表板,各个工具组件都在其上运行。 所有结果都由末尾的 Gather RAI Insights dashboard 组件进行组合。

 create_rai_job: 

    type: command 
    component: azureml://registries/azureml/components/microsoft_azureml_rai_tabular_insight_constructor/versions/<get current version>
    inputs: 
      title: From YAML snippet 
      task_type: regression
      type: mlflow_model
      path: azureml:<registered_model_name>:<registered model version> 
      train_dataset: ${{parent.inputs.my_training_data}} 
      test_dataset: ${{parent.inputs.my_test_data}} 
      target_column_name: ${{parent.inputs.target_column_name}} 
      categorical_column_names: '["location", "style", "job title", "OS", "Employer", "IDE", "Programming language"]' 

将因果关系添加到 RAI 见解仪表板

此组件对提供的数据集执行因果分析。 它具有一个输入端口,该端口接受 RAI Insights dashboard constructor 的输出。 也接受以下参数:

参数名称 说明 键入
treatment_features 数据集中的特征名称列表,可能“可处理”这些特征来获取不同的结果。 字符串列表2
heterogeneity_features 数据集中的特征名称列表,可能会影响“可处理”特征的行为方式。 默认情况下,将考虑所有特征。 字符串的可选列表2
nuisance_model 用于估计更改处理特征的结果的模型。 可选的字符串。 必须为 linearAutoML,默认为 linear
heterogeneity_model 用于估计异质性特征对结果的影响的模型。 可选的字符串。 必须为 linearforest,默认为 linear
alpha 置信区间的置信度。 可选浮点数,默认值为 0.05。
upper_bound_on_cat_expansion 分类特征的最大扩展数。 可选整数,默认值为 50。
treatment_cost 处理成本。 如果为 0,则没有任何处理成本。 如果传递列表,每个元素将应用于其中一个 treatment_features

每个元素可以是一个标量值,表示应用该处理的固定成本,也可以是一个数组,表示每个样本的成本。 如果是离散处理,该特征的数组应该是二维的,第一维代表样本,第二维代表非默认值和默认值之间的成本差异。
可选整数或列表2
min_tree_leaf_samples 策略树中每片叶子的最小样本数。 可选整数,默认值为 2。
max_tree_depth 策略树的最大深度。 可选整数,默认值为 2。
skip_cat_limit_checks 默认情况下,分类特征需要具有每个类别的多个实例,以便模型能够稳健地拟合。 将此值设置为 True 可跳过这些检查。 可选布尔值,默认值为 False
categories 用于分类列的类别。 如果为 auto,会为所有分类列推断类别。 否则,此参数应具有与分类列一样多的条目。

每个条目都应为 auto 以推断该列的值或列的值列表。 如果提供了显式值,则第一个值被视为该列的“control”值,而其他值将与之进行比较。
可选 auto 或列表2
n_jobs 要使用的并行度。 可选整数,默认值为 1。
verbose 表示是否在计算期间提供详细的输出。 可选整数,默认值为 1。
random_state 伪随机数生成器 (PRNG) 的种子。 可选整数。

2 对于 list 参数:一些参数接受其他类型的列表(字符串、数字,甚至其他列表)。 要将这些字符串传递到组件中,必须先使用 JSON 将其编码为单个字符串。

此组件有一个输出端口,可连接到 Gather RAI Insights Dashboard 组件的 insight_[n] 输入端口之一。

  causal_01: 
    type: command 
    component: azureml://registries/azureml/components/microsoft_azureml_rai_tabular_causal/versions/<version>
    inputs: 
      rai_insights_dashboard: ${{parent.jobs.create_rai_job.outputs.rai_insights_dashboard}} 
      treatment_features: `["Number of GitHub repos contributed to", "YOE"]' 

向 RAI 见解仪表板添加反事实

此组件为提供的测试数据集生成反事实点。 它具有单个输入端口,该端口接受 RAI 见解仪表板构造函数的输出。 也接受以下参数:

参数名称 说明 类型
total_CFs 测试数据集中每行要生成的反事实点数。 可选整数,默认值为 10。
method 可使用的 dice-ml 解释器。 可选的字符串。 randomgenetickdtree。 默认为 random
desired_class 标识所需反事实类的索引。 对于二进制分类,应将其设置为 opposite 可选字符串或整数。 默认值为 0。
desired_range 要解决回归问题,请确定所需的结果范围。 两个数字的可选列表3
permitted_range 将特征名称作为键,将列表中的允许范围作为值的字典。 默认为根据训练数据推断的范围。 可选字符串或列表3
features_to_vary 字符串 all 或特征名称有所不同的列表。 可选字符串或列表3
feature_importance 通过使用 dice-ml 启用特征重要性计算的标志。 可选的布尔值。 默认为 True

3 对于非标量参数:属于列表或字典的参数应作为单个 JSON 编码字符串传递。

此组件有一个输出端口,可连接到 Gather RAI Insights dashboard 组件的 insight_[n] 输入端口之一。

 counterfactual_01: 
    type: command 
    component: azureml://registries/azureml/components/microsoft_azureml_rai_tabular_counterfactual/versions/<version>
    inputs: 
      rai_insights_dashboard: ${{parent.jobs.create_rai_job.outputs.rai_insights_dashboard}} 
      total_CFs: 10 
      desired_range: "[5, 10]" 

向 RAI 见解仪表板添加错误分析

此组件为模型生成错误分析。 它具有一个输入端口,该端口接受 RAI Insights Dashboard Constructor 的输出。 也接受以下参数:

参数名称 说明 类型
max_depth 错误分析树的最大深度。 可选整数。 默认值为 3。
num_leaves 错误树中最大叶数。 可选整数。 默认值为 31。
min_child_samples 生成叶所需的最小数据点数。 可选整数。 默认为“20”。
filter_features 用于矩阵筛选器的一个或两个特征的列表。 可选列表,作为单个 JSON 编码字符串传递。

此组件有一个输出端口,可连接到 Gather RAI Insights Dashboard 组件的 insight_[n] 输入端口之一。

  error_analysis_01: 
    type: command 
    component: azureml://registries/azureml/components/microsoft_azureml_rai_tabular_erroranalysis/versions/<version>
    inputs: 
      rai_insights_dashboard: ${{parent.jobs.create_rai_job.outputs.rai_insights_dashboard}} 
      filter_features: `["style", "Employer"]' 

向 RAI 见解仪表板添加说明

此组件为模板生成解释。 它具有一个输入端口,该端口接受 RAI Insights Dashboard Constructor 的输出。 它接受单个可选注释字符串作为参数。

此组件有一个输出端口,可连接到“收集 RAI 见解”仪表板组件的 insight_[n] 输入端口之一。

  explain_01: 
    type: command 
    component: azureml://registries/azureml/components/microsoft_azureml_rai_tabular_explanation/versions/<version>
    inputs: 
      comment: My comment 
      rai_insights_dashboard: ${{parent.jobs.create_rai_job.outputs.rai_insights_dashboard}} 

“收集 RAI 见解”仪表板

此组件可将生成的见解汇总到单个负责任 AI 仪表板。 它有五个输入端口:

  • 必须连接到 RAI 见解仪表板构造函数组件的 constructor 端口。
  • 四个 insight_[n] 端口,可连接到工具组件的输出。 必须至少连接其中一个端口。

有两个输出端口:

  • dashboard 端口包含已完成的 RAIInsights 对象。
  • ux_json 端口包含显示最小仪表板所需的数据。
  gather_01: 
    type: command 
    component: azureml://registries/azureml/components/microsoft_azureml_rai_tabular_insight_gather/versions/<version>
    inputs: 
      constructor: ${{parent.jobs.create_rai_job.outputs.rai_insights_dashboard}} 
      insight_1: ${{parent.jobs.causal_01.outputs.causal}} 
      insight_2: ${{parent.jobs.counterfactual_01.outputs.counterfactual}} 
      insight_3: ${{parent.jobs.error_analysis_01.outputs.error_analysis}} 
      insight_4: ${{parent.jobs.explain_01.outputs.explanation}} 

如何生成负责任 AI 记分卡(预览版)

在配置阶段,你需要利用关于该问题的领域专业知识,来设置模型性能和公平性指标的所需目标值。

与 YAML 管道中配置的其他负责任 AI 仪表板组件一样,你可以添加组件以在 YAML 管道中生成记分卡:

scorecard_01: 

   type: command 
   component: azureml:rai_score_card@latest 
   inputs: 
     dashboard: ${{parent.jobs.gather_01.outputs.dashboard}} 
     pdf_generation_config: 
       type: uri_file 
       path: ./pdf_gen.json 
       mode: download 

     predefined_cohorts_json: 
       type: uri_file 
       path: ./cohorts.json 
       mode: download 

其中,pdf_gen.json 是记分卡生成配置 json 文件,predifined_cohorts_json 是预生成队列定义 json 文件。

下面是队列定义和记分卡生成配置的示例 JSON 文件:

队列定义:

[ 
  { 
    "name": "High Yoe", 
    "cohort_filter_list": [ 
      { 
        "method": "greater", 
        "arg": [ 
          5 
        ], 
        "column": "YOE" 
      } 
    ] 
  }, 
  { 
    "name": "Low Yoe", 
    "cohort_filter_list": [ 
      { 
        "method": "less", 
        "arg": [ 
          6.5 
        ], 
        "column": "YOE" 
      } 
    ] 
  } 
] 

下面是记分卡生成配置文件的回归示例:

{ 
  "Model": { 
    "ModelName": "GPT-2 Access", 
    "ModelType": "Regression", 
    "ModelSummary": "This is a regression model to analyze how likely a programmer is given access to GPT-2" 
  }, 
  "Metrics": { 
    "mean_absolute_error": { 
      "threshold": "<=20" 
    }, 
    "mean_squared_error": {} 
  }, 
  "FeatureImportance": { 
    "top_n": 6 
  }, 
  "DataExplorer": { 
    "features": [ 
      "YOE", 
      "age" 
    ] 
  }, 
  "Fairness": {
    "metric": ["mean_squared_error"],
    "sensitive_features": ["YOUR SENSITIVE ATTRIBUTE"],
    "fairness_evaluation_kind": "difference OR ratio"
  },
  "Cohorts": [ 
    "High Yoe", 
    "Low Yoe" 
  ]  
} 

下面是记分卡生成配置文件的分类示例:

{
  "Model": {
    "ModelName": "Housing Price Range Prediction",
    "ModelType": "Classification",
    "ModelSummary": "This model is a classifier that predicts whether the house will sell for more than the median price."
  },
  "Metrics" :{
    "accuracy_score": {
        "threshold": ">=0.85"
    },
  }
  "FeatureImportance": { 
    "top_n": 6 
  }, 
  "DataExplorer": { 
    "features": [ 
      "YearBuilt", 
      "OverallQual", 
      "GarageCars"
    ] 
  },
  "Fairness": {
    "metric": ["accuracy_score", "selection_rate"],
    "sensitive_features": ["YOUR SENSITIVE ATTRIBUTE"],
    "fairness_evaluation_kind": "difference OR ratio"
  }
}

负责任 AI 记分卡组件的输入定义

本部分列出并定义了配置负责任 AI 记分卡组件所需的参数。

型号

ModelName 模型的名称
ModelType ['classification', 'regression'] 中的值。
ModelSummary 输入汇总模型用途的文本。

注意

对于多类分类,应首先使用“一对多”策略来选择引用类,然后将多类分类模型拆分为所选引用类与其余类的二元分类问题。

指标

性能指标 定义 模型类型
accuracy_score 正确分类的数据点的分数。 分类
precision_score 分类为 1 的数据中正确分类的数据点的分数。 分类
recall_score 真实标签为 1 的数据中正确分类的数据点的分数。 可选名称:真正率、敏感度。 分类
f1_score F1 分数是精准率和召回率的调和平均值。 分类
error_rate 在整个实例集中错误分类的实例比例。 分类
mean_absolute_error 绝对误差值的平均值。 与 mean_squared_error 相比,离群值更可靠。 回归
mean_squared_error 平方误差的平均值。 回归
median_absolute_error 平方误差的中值。 回归
r2_score 模型解释的标签差异的分数。 回归

阈值:所选指标的所需阈值。 允许的数学标记是 >、<、>= 和 <=m(后跟一个实数)。 例如,>= 0.75 表示所选指标的目标大于或等于 0.75。

功能重要性

top_n:最多显示 10 个特征数。 允许的最大正整数为 10。

公平性

指标 定义
metric 评估公平性的主要指标。
sensitive_features 输入数据集中的特征名称列表,指定为公平性报告的敏感特征。
fairness_evaluation_kind ['difference', 'ratio'] 中的值。
threshold 公平性评估的所需目标值。 允许的数学标记是 >、<、>= 和 <=(后跟一个实数)。
例如,metric="accuracy"、fairness_evaluation_kind="difference"。
<= 0.05 表示准确度差异的目标小于等于 0.05。

注意

所选 fairness_evaluation_kind(选择“差异”与“比率”)会影响目标值的规模。 在选择中,请务必选择有意义的目标值。

可以通过以下指标进行选择,并搭配 fairness_evaluation_kind 来配置记分卡的公平性评估组件:

指标 fairness_evaluation_kind 定义 模型类型
accuracy_score 差异 任意两组之间准确度得分的最大差异。 分类
accuracy_score 比率 任意两组之间准确度得分的最小比率。 分类
precision_score 差异 任意两组之间精准率得分的最大差异。 分类
precision_score 比率 任意两组之间精确率得分的最大比率。 分类
recall_score 差异 任何两组之间召回分数的最大差异。 分类
recall_score 比率 任意两组之间召回分数的最大比率。 分类
f1_score 差异 任意两组之间 f1 分数的最大差异。 分类
f1_score 比率 任意两组之间 f1 得分的最大比率。 分类
error_rate 差异 任意两组之间错误率的最大差异。 分类
error_rate 比率 任意两组之间错误率的最大比率。 分类
Selection_rate 差异 任意两组之间选择率的最大差异。 分类
Selection_rate 比率 任意两组之间选择率的最大比率。 分类
mean_absolute_error 差异 任意两组之间平均绝对误差的最大差异。 回归
mean_absolute_error 比率 任意两组之间平均绝对误差的最大比率。 回归
mean_squared_error 差异 任意两组之间均方误差的最大差异。 回归
mean_squared_error 比率 任意两组之间均方误差的最大比率。 回归
median_absolute_error 差异 任意两组之间中值绝对误差的最大差异。 回归
median_absolute_error 比率 任意两组之间中值绝对误差的最大比率。 回归
r2_score 差异 任意两组之间 R2 得分的最大差异。 回归
r2_Score 比率 任意两组之间 R2 得分的最大比率。 回归

输入约束

支持哪些模型格式和风格?

该模型必须位于提供 sklearn 风格的 MLflow 目录中。 此外,需要能够在负责任 AI 组件使用的环境中加载该模型。

支持哪些数据格式?

提供的数据集应当是包含表格数据的 mltable

后续步骤