Gerar insights da IA responsável com o YAML e o Python

APLICA-SE A:Extensão de ML da CLI do Azure v2 (atual)SDK do Python azure-ai-ml v2 (atual)

Você pode gerar um painel de IA Responsável e um scorecard por meio de um trabalho de pipeline usando componentes de IA Responsável. Há seis componentes principais para criar painéis de IA responsável, juntamente com alguns componentes auxiliares. Veja abaixo o grafo de um experimento de exemplo:

Captura de tela de um gráfico de experimento de amostra.

Componentes da IA Responsável

Os principais componentes para construir o painel de IA Responsável no Azure Machine Learning são:

  • RAI Insights dashboard constructor
  • Os componentes da ferramenta:
    • 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

Os componentes RAI Insights dashboard constructor e Gather RAI Insights dashboard são sempre necessários, além de pelo menos um dos componentes da ferramenta. No entanto, não é necessário usar todas as ferramentas em todos os painéis de IA Responsável.

Veja nas seções abaixo as especificações dos componentes de IA Responsável e os exemplos de snippets de código em YAML e Python.

Importante

Os itens marcados (versão prévia) neste artigo estão atualmente em versão prévia pública. A versão prévia é fornecida sem um contrato de nível de serviço e não é recomendada para cargas de trabalho de produção. Alguns recursos podem não ter suporte ou podem ter restrição de recursos. Para obter mais informações, consulte Termos de Uso Complementares de Versões Prévias do Microsoft Azure.

Limitações

O conjunto atual de componentes tem várias limitações de uso:

  • Todos os modelos devem ser registrados no Azure Machine Learning no formato MLflow com uma variante sklearn (scikit-learn).
  • Os modelos precisam ser carregáveis no ambiente do componente.
  • Os modelos precisam ser selecionáveis.
  • Os modelos precisam ser fornecidos aos componentes de IA Responsável usando o componente Fetch Registered Model que fornecemos.
  • As entradas do conjunto de dados precisam estar no formato mltable.
  • Um modelo deve ser fornecido mesmo que apenas uma análise de causa dos dados seja executada. Use os estimadores DummyClassifier e DummyRegressor do Scikit-learn para essa finalidade.

Construtor de painel do RAI Insights

Esse componente tem três portas de entrada:

  • O modelo de machine learning
  • O conjunto de dados de treinamento
  • O conjunto de dados de teste

Para gerar insights de depuração do modelo com componentes como análise de erros e Explicações de modelo, use o conjunto de dados de treinamento e de teste usado ao treinar o modelo. Para componentes como análise de causa, que não exigem um modelo, use o conjunto de dados de treinamento para treinar o modelo de causa para gerar os insights de causa. Use o conjunto de dados de teste para preencher as visualizações do painel de IA Responsável.

A maneira mais fácil de fornecer o modelo é registrar o modelo de entrada e referenciar o mesmo modelo na porta de entrada do modelo do componente RAI Insight Constructor, que discutiremos mais adiante neste artigo.

Observação

No momento, só há suporte para modelos no formato MLFlow e com uma variante sklearn.

Os dois conjuntos de dados devem estar no formato mltable. Os conjuntos de dados de treinamento e de teste fornecidos não precisam ser os mesmos conjuntos de dados usados no treinamento do modelo, mas podem ser os mesmos. Por padrão e por motivos de desempenho, o conjunto de dados de teste é restrito a 5.000 mil linhas da interface do usuário de visualização.

O componente construtor também aceita os seguintes parâmetros:

Nome do parâmetro Descrição Type
title Breve descrição do painel. String
task_type Especifica se o modelo é para classificação, regressão ou previsão. Cadeia de caracteres, classification, regression ou forecasting
target_column_name O nome da coluna nos conjuntos de dados de entrada, que o modelo está tentando prever. String
maximum_rows_for_test_dataset O número máximo de linhas permitidas no conjunto de dados de teste (por questões de desempenho). Inteiro, o padrão é 5.000
categorical_column_names As colunas dos conjuntos de dados, que representam dados de categoria. Lista opcional de cadeias de caracteres 1
classes A lista completa de rótulos de classe no conjunto de dados de treinamento. Lista opcional de cadeias de caracteres 1
feature_metadata Especifica informações adicionais de que o painel pode precisar dependendo do tipo de tarefa. Para previsão, isso inclui especificar qual coluna é a coluna datetime e qual é a coluna time_series_id. Para a visão, isso pode incluir dados médios de valor de pixel ou localização de uma imagem. Lista opcional de cadeias de caracteres 1
use_model_dependency Especifica se o modelo requer que um contêiner do Docker separado seja atendido devido a dependências conflitantes com o painel da RAI. Para previsão, isso deve ser habilitado. Normalmente, para outros cenários, isso não está habilitado. Booliano

1 As listas devem ser fornecidas como uma única cadeia de caracteres codificada em JSON para as entradas categorical_column_names, classes e feature_metadata.

O componente construtor tem uma única saída chamada rai_insights_dashboard. Esse é um painel vazio em que operam os componentes individuais da ferramenta. Todos os resultados são montados pelo componente Gather RAI Insights dashboard no final.

 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"]' 

Painel Adicionar Causa ao RAI Insights

Esse componente executa uma análise de causa nos conjuntos de dados fornecidos. Ele tem apenas uma porta de entrada, que aceita a saída do RAI Insights dashboard constructor. Ele também aceita os seguintes parâmetros:

Nome do parâmetro Descrição Digite
treatment_features Uma lista de nomes de recursos nos conjuntos de dados, que são possivelmente "tratáveis" para obter resultados diferentes. Lista de cadeias de caracteres2.
heterogeneity_features Uma lista de nomes de recursos nos conjuntos de dados, que pode afetar o comportamento dos recursos "tratáveis". Por padrão, todos os recursos serão considerados. Lista opcional de cadeias de caracteres2.
nuisance_model O modelo usado para estimar o resultado da alteração dos recursos de tratamento. Cadeia de caracteres opcional. Deve ser linear ou AutoML, o padrão é linear.
heterogeneity_model O modelo usado para estimar o efeito dos recursos de heterogeneidade no resultado. Cadeia de caracteres opcional. Deve ser linear ou forest, o padrão é linear.
alpha Nível de confiança dos intervalos de confiança. Número de ponto flutuante opcional, o padrão é 0,05.
upper_bound_on_cat_expansion A expansão máxima dos recursos de categoria. Inteiro opcional, o padrão é 50.
treatment_cost O custo dos tratamentos. Se for 0, todos os tratamentos terão custo zero. Se uma lista for passada, cada elemento será aplicado a um dos treatment_features.

Cada elemento poderá ser um valor escalar para indicar um custo constante da aplicação desse tratamento ou uma matriz que indica o custo de cada amostra. Se o tratamento for um tratamento discreto, a matriz desse recurso deverá ser bidimensional com a primeira dimensão representando amostras e a segunda representando a diferença de custo entre os valores não padrão e o valor padrão.
Inteiro opcional ou lista2.
min_tree_leaf_samples O número mínimo de exemplos por folha na árvore de políticas. Inteiro opcional, o padrão é 2.
max_tree_depth A profundidade máxima da árvore de políticas. Inteiro opcional, o padrão é 2.
skip_cat_limit_checks Por padrão, os recursos categóricos precisam ter várias instâncias de cada categoria para que um modelo se ajuste de maneira robusta. Definir isso como True ignorará essas verificações. Booliano opcional, o padrão é False.
categories As categorias a serem usadas nas colunas de categoria. Se auto, as categorias serão inferidas em todas as colunas de categoria. Caso contrário, esse argumento deverá a quantidade de entradas de acordo com as colunas categóricas.

Cada entrada deve ser auto para inferir os valores dessa coluna ou a lista de valores da coluna. Se forem fornecidos valores explícitos, o primeiro valor será tratado como o valor de "controle" dessa coluna e os outros valores serão comparados em relação ao controle.
Opcional, auto ou lista2.
n_jobs O grau de paralelismo a ser usado. Inteiro opcional, o padrão é 1.
verbose Expressa se é necessário fornecer uma saída detalhada durante a computação. Inteiro opcional, o padrão é 1.
random_state Semente do PRNG (pseudorandom number generator). Inteiro opcional.

2 Para os parâmetros list: vários dos parâmetros aceitam listas de outros tipos (cadeias de caracteres, números e até mesmo outras listas). Para passá-los para o componente, primeiro eles devem ser codificados em JSON em uma única cadeia de caracteres.

Esse componente tem uma só porta de saída, que pode ser conectada a uma das portas de entrada de insight_[n] do componente Gather RAI Insights Dashboard.

  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"]' 

Painel Adicionar Contrafactuais ao RAI Insights

Esse componente gera pontos contrafactuais para o conjunto de dados de teste fornecido. Ele tem uma única porta de entrada, que aceita a saída do construtor de porta do RAI Insights. Ele também aceita os seguintes parâmetros:

Nome do parâmetro Descrição Type
total_CFs O número de pontos de contrafactual a ser gerados para cada linha no conjunto de dados de teste. Inteiro opcional, o padrão é 10.
method O explicador dice-ml a ser usado. Cadeia de caracteres opcional. random, genetic ou kdtree. Assume o padrão de random.
desired_class Índice que identifica a classe contrafactual desejada. Para classificação binária, este deve ser definido como opposite. Cadeia de caracteres ou inteiro opcional. Assume o padrão de 0.
desired_range Para problemas de regressão, identifique o intervalo desejado de resultados. Lista opcional de dois números3.
permitted_range Dicionário com nomes de recursos como chaves e o intervalo permitido em uma lista como valores. O padrão é o intervalo inferido dos dados de treinamento. Cadeia de caracteres opcional ou lista3.
features_to_vary Uma cadeia de caracteres all ou uma lista de nomes de recursos a serem alternados. Cadeia de caracteres opcional ou lista3.
feature_importance Sinalizador para habilitar a computação das importâncias de recursos usando dice-ml. Booliano opcional. Assume o padrão de True.

3 Para os parâmetros não escalares: os parâmetros que são listas ou dicionários devem ser passados como cadeias de caracteres individuais codificadas em JSON.

Esse componente tem uma só porta de saída, que pode ser conectada a uma das portas de entrada de insight_[n] do componente Gather RAI Insights dashboard.

 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]" 

Painel Adicionar Análise de Erros ao RAI Insights

Esse componente gera uma análise de erro para o modelo. Ele tem apenas uma porta de entrada, que aceita a saída do RAI Insights Dashboard Constructor. Ele também aceita os seguintes parâmetros:

Nome do parâmetro Descrição Type
max_depth A profundidade máxima da árvore de análise de erros. Inteiro opcional. O valor padrão é 3.
num_leaves O número máximo de folhas na árvore de erros. Inteiro opcional. O valor padrão é 31.
min_child_samples O número mínimo de pontos de dados necessários para produzir uma folha. Inteiro opcional. Assume 20 como valor padrão.
filter_features Uma lista de um ou dois recursos a serem usados para o filtro de matriz. Lista opcional a ser passada como uma cadeia de caracteres individual codificada em JSON.

Esse componente tem uma só porta de saída, que pode ser conectada a uma das portas de entrada de insight_[n] do componente Gather RAI Insights Dashboard.

  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"]' 

Painel Adicionar Explicação ao RAI Insights

Esse componente gera uma explicação para o modelo. Ele tem apenas uma porta de entrada, que aceita a saída do RAI Insights Dashboard Constructor. Ele aceita uma única cadeia de caracteres de comentário opcional como parâmetro.

Esse componente tem uma única porta de saída, que pode ser conectada a uma das portas de entrada insight_[n] do componente do painel Coletar RAI Insightss.

  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}} 

Painel Coletar RAI Insights

Esse componente monta os insights gerados em um único painel de IA Responsável. Ele tem cinco portas de entrada:

  • A porta constructor que deve ser conectada ao componente do construtor de painel do RAI Insights.
  • Quatro portas insight_[n] que podem ser conectadas à saída dos componentes da ferramenta. Pelo menos uma dessas portas deve estar conectada.

Existem duas portas de saída:

  • A porta dashboard contém o objeto RAIInsights concluído.
  • A porta ux_json contém os dados necessários para exibir um painel mínimo.
  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}} 

Como gerar um scorecard de IA Responsável (versão prévia)

A fase de configuração exige que você use sua experiência com domínios nesse problema para definir os valores de destino desejados nas métricas de desempenho e imparcialidade do modelo.

Assim como os outros componentes do painel de IA Responsável configurados no pipeline do YAML, você pode adicionar um componente para gerar o scorecard no pipeline do 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 

Em que pdf_gen.json é o arquivo JSON de configuração de geração de scorecard, e predifined_cohorts_json é a ID do arquivo JSON de definição de coorte predefinido.

Esse é um arquivo JSON de exemplo para definição de coortes e configuração de geração de scorecard:

Definição de coortes:

[ 
  { 
    "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" 
      } 
    ] 
  } 
] 

Esse é um arquivo de configuração de geração de scorecard como um exemplo de regressão:

{ 
  "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" 
  ]  
} 

Esse é um arquivo de configuração de geração de scorecard como um exemplo de classificação:

{
  "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"
  }
}

Definição de entradas do componente do scorecard de IA responsável

Esta seção lista e define os parâmetros necessários para configurar o componente do scorecard de IA responsável.

Modelar

ModelName Nome do modelo
ModelType Valores em [‘classification’, ‘regression’].
ModelSummary Insira um texto que resume para que serve o modelo.

Observação

Para classificação de várias classes, primeiro você deve usar a estratégia One-vs-Rest para escolher sua classe de referência e, portanto, dividir seu modelo de classificação de várias classes em um problema de classificação binária para sua classe de referência selecionada em comparação com o restante das classes.

Métricas

Métrica de desempenho Definição Tipo de modelo
accuracy_score A fração de pontos de dados classificados corretamente. classificação
precision_score A fração de pontos de dados classificados corretamente entre aqueles classificados como 1. classificação
recall_score A fração de pontos de dados classificados corretamente entre aqueles cujo rótulo verdadeiro é 1. Nomes alternativos: taxa de verdadeiro positivo, confidencialidade. classificação
f1_score A medida f é a média harmônica de precisão e recuperação. classificação
error_rate A proporção de instâncias classificadas incorretamente em todo o conjunto de instâncias. classificação
mean_absolute_error A média de valores absolutos de erros. Mais robusto para exceções do que mean_squared_error. Regressão
mean_squared_error A média de erros quadráticos. Regressão
median_absolute_error A mediana dos erros quadráticos. Regressão
r2_score A fração de variância nos rótulos explicada pelo modelo. Regressão

Limite: o limite desejado para a métrica selecionada. Os tokens matemáticos permitidos são >, <, >=, e <=m, seguidos por um número real. Por exemplo, >= 0,75 significa que o destino da métrica selecionada é maior ou igual a 0,75.

Importância do recurso

top_n: o número de recursos a serem exibidos com um máximo de 10. Inteiros positivos de até 10 são permitidos.

Imparcialidade

Métrica Definição
metric A métrica primária para imparcialidade da avaliação.
sensitive_features Uma lista de nomes de recurso do conjunto de dados de entrada a ser designada como um recurso sensível para o relatório de imparcialidade.
fairness_evaluation_kind Valores em ['difference', 'ratio'].
threshold Os valores de destino desejados da avaliação de imparcialidade. Os tokens matemáticos permitidos são >, <, >=, e <=, seguidos por um número real.
Por exemplo, metric="accuracy", fairness_evaluation_kind="difference".
<= 0,05 significa que o destino para a diferença em precisão é menor ou igual a 0,05.

Observação

Selecionar fairness_evaluation_kind (selecionar 'difference' em vez de 'ratio') afeta a escala do seu valor de destino. Certifique-se de escolher um valor de destino significativo na sua seleção.

É possível selecionar entre as seguintes métricas, emparelhadas com o fairness_evaluation_kind, para configurar seu componente de avaliação de imparcialidade do scorecard:

Métrica fairness_evaluation_kind Definição Tipo de modelo
accuracy_score diferença A diferença máxima na pontuação de precisão entre dois grupos. classificação
accuracy_score ratio A razão mínima na pontuação de precisão dois entre grupos. classificação
precision_score diferença A diferença máxima na pontuação de precisão entre dois grupos. classificação
precision_score ratio A razão máxima na pontuação de precisão entre dois grupos. classificação
recall_score diferença A diferença máxima na pontuação de recall entre dois grupos. classificação
recall_score ratio A razão máxima na pontuação de recall entre dois grupos. classificação
f1_score diferença A diferença máxima na medida f entre dois grupos. classificação
f1_score ratio A razão máxima na medida f entre dois grupos. classificação
error_rate diferença A diferença máxima na taxa de erros entre dois grupos. classificação
error_rate ratio A razão máxima na taxa de erros entre dois grupos. classificação
Selection_rate diferença A diferença máxima na taxa de seleção entre dois grupos. classificação
Selection_rate ratio A razão máxima na taxa de seleção entre dois grupos. classificação
mean_absolute_error diferença A diferença máxima no erro médio absoluto entre dois grupos. Regressão
mean_absolute_error ratio A razão máxima no erro médio absoluto entre dois grupos. Regressão
mean_squared_error diferença A diferença máxima no erro quadrático médio entre dois grupos. Regressão
mean_squared_error ratio A razão máxima no erro quadrático médio entre dois grupos. Regressão
median_absolute_error diferença A diferença máxima no erro mediano absoluto entre os dois grupos. Regressão
median_absolute_error ratio A razão máxima no erro mediano absoluto entre os dois grupos. Regressão
r2_score diferença A diferença máxima na pontuação R2 entre dois grupos. Regressão
r2_Score ratio A razão máxima na pontuação R2 entre dois grupos. Regressão

Restrições de entrada

Quais formatos e sabores variantes de modelo são compatíveis?

O modelo deve estar no diretório MLFlow com uma variante sklearn disponível. Além disso, o modelo deve ser carregado no ambiente usado pelos componentes de IA Responsável.

Quais formatos de dados são compatíveis?

Os conjuntos de dados fornecidos devem ser mltable com os dados de tabela.

Próximas etapas