Générer des insights d’IA responsable avec YAML et Python

S’APPLIQUE À :Extension Azure ML CLI v2 (actuelle)Kit de développement logiciel (SDK) Python azure-ai-ml v2 (préversion)

Vous pouvez générer un tableau de bord et une carte de performance d’IA responsable à l’aide d’un travail de pipeline en utilisant des composants d’IA responsable. Il existe six composants principaux pour créer des tableaux de bord IA responsable, ainsi que quelques composants d’assistance. Voici un exemple de graphe d’expérience :

Capture d'écran d'un exemple de graphique d'expérience.

Composants IA responsable

Les composants principaux de la construction du tableau de bord IA responsable dans Azure Machine Learning sont les suivants :

  • RAI Insights dashboard constructor
  • Composants de l’outil :
    • 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

Les composants RAI Insights dashboard constructor et Gather RAI Insights dashboard sont toujours requis, ainsi qu’au moins un des composants de l’outil. Toutefois, il n’est pas nécessaire d’utiliser tous les outils de chaque tableau de bord IA responsable.

Les sections suivantes présentent les spécifications des composants IA responsable et des exemples d’extraits de code en YAML et Python.

Important

Les éléments marqués (préversion) dans cet article sont actuellement en préversion publique. La préversion est fournie sans contrat de niveau de service et n’est pas recommandée pour les charges de travail en production. Certaines fonctionnalités peuvent être limitées ou non prises en charge. Pour plus d’informations, consultez Conditions d’Utilisation Supplémentaires relatives aux Évaluations Microsoft Azure.

Limites

L’ensemble actuel de composants présente de nombreuses limitations d’utilisation :

  • Tous les modèles doivent être inscrits dans Azure Machine Learning au format MLflow avec une saveur sklearn (scikit-learn).
  • Les modèles doivent être chargeables dans l’environnement de composant.
  • Les modèles doivent être sérialisables via pickle.
  • Les modèles doivent être fournis aux composants IA responsable en utilisant le composant Fetch Registered Model (Extraire des modèles inscrits) que nous fournissons.
  • Les entrées de jeu de données doivent être au format mltable.
  • Un modèle doit être fourni même si seule une analyse causale des données est effectuée. Vous pouvez utiliser pour cela les estimateurs DummyClassifier et DummyRegressor de scikit-learn.

Constructeur de tableau de bord Insights IA responsable

Ce composant a trois ports d’entrée :

  • Le modèle Machine Learning
  • Le jeu de données d’apprentissage
  • Le jeu de données de test

Pour générer des insights de débogage de modèle avec des composants tels que l’analyse des erreurs et les explications de modèle, utilisez le jeu de données d’apprentissage et de test que vous avez utilisé lors de l’apprentissage de votre modèle. Pour des composants tels que l’analyse causale, qui ne nécessite pas de modèle, vous utilisez le jeu de données d’apprentissage pour effectuer l’apprentissage du modèle causal afin de générer les insights causales. Vous utilisez le jeu de données de test pour remplir vos visualisations de tableau de bord d’IA responsable.

Le moyen le plus simple de fournir le modèle consiste à inscrire le modèle d’entrée et à référencer le même modèle dans le port d’entrée de modèle du composant RAI Insight Constructor, dont nous parlerons plus loin dans cet article.

Notes

Actuellement, seuls les modèles au format MLflow et avec une saveur sklearn sont pris en charge.

Les deux jeux de données doivent être au format mltable. Les jeux de données d’apprentissage et de test fournis n’ont pas besoin d’être les mêmes que ceux utilisés dans l’apprentissage du modèle, mais cela est possible. Par défaut, pour des raisons de performances, le jeu de données de test est limité à 5 000 lignes de l’interface utilisateur de visualisation.

Le composant constructeur accepte également les paramètres suivants :

Nom du paramètre Description Type
title Courte description du tableau de bord. Chaîne
task_type Spécifie si le modèle est destiné à la classification, à la régression, ou à la prévision. Chaîne, classification, regression ou forecasting
target_column_name Nom de la colonne dans les jeux de données d’entrée, que le modèle tente de prédire. String
maximum_rows_for_test_dataset Nombre maximal de lignes autorisées dans le jeu de données de test, pour des raisons de performances. Entier, valeur par défaut 5 000
categorical_column_names Colonnes des jeux de données, qui représentent des données catégorielles. Liste facultative de chaînes1
classes Liste complète des étiquettes de classe dans le jeu de données d’apprentissage. Liste facultative de chaînes1
feature_metadata Spécifie des informations supplémentaires dont le tableau de bord peut avoir besoin en fonction du type de tâche. Pour la prévision, cela inclut la spécification de la colonne qui est la colonne datetime et de la colonne qui est la colonne time_series_id. Pour la vision, cela peut inclure une valeur de pixel moyenne ou des données d’emplacement d’une image. Liste facultative de chaînes1
use_model_dependency Spécifie si le modèle nécessite qu’un conteneur Docker distinct soit pris en charge en raison de dépendances en conflit avec le tableau de bord RAI. Pour la prévision, cela doit être activé. En règle générale, pour d’autres scénarios, cela n’est pas activé. Boolean

1 Les listes doivent être fournies en tant que chaîne codée JSON unique pour les entrées categorical_column_names, classes et feature_metadata.

Le composant constructeur a une sortie unique nommée rai_insights_dashboard. Il s’agit d’un tableau de bord vide sur lequel les composants d’outil individuels fonctionnent. Tous les résultats sont assemblés par le composant Gather RAI Insights dashboard à la fin.

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

Ajouter une analyse causale au tableau de bord Insights IA responsable

Ce composant effectue une analyse causale sur les jeux de données fournis. Il a un port d’entrée unique, qui accepte la sortie du RAI Insights dashboard constructor. Il accepte aussi les paramètres suivants :

Nom du paramètre Description Tapez .
treatment_features Liste des noms de caractéristiques dans les jeux de données, qui sont potentiellement « traitables » pour obtenir différents résultats. Liste de chaînes2.
heterogeneity_features Liste des noms de caractéristiques dans les jeux de données, qui peuvent affecter le comportement des caractéristiques « traitables ». Par défaut, toutes les caractéristiques sont prises en compte. Liste facultative de chaînes2.
nuisance_model Modèle utilisé pour estimer le résultat de la modification des caractéristiques de traitement. Chaîne facultative. Doit être linear ou AutoML, par défaut linear.
heterogeneity_model Modèle utilisé pour estimer l’effet des caractéristiques d’hétérogénéité sur le résultat. Chaîne facultative. Doit être linear ou forest, par défaut linear.
alpha Niveau de confiance des intervalles de confiance. Nombre à virgule flottante facultatif, par défaut 0,05.
upper_bound_on_cat_expansion Extension maximale pour les caractéristiques catégorielles. Entier facultatif, par défaut 50.
treatment_cost Le coût des traitements. Si la valeur est 0, tous les traitements ont un coût nul. Si une liste est passée, chaque élément est appliqué à l’une des treatment_features.

Chaque élément peut être une valeur scalaire pour indiquer un coût constant d’application de ce traitement ou un tableau indiquant le coût de chaque échantillon. Si le traitement est un traitement discret, le tableau de cette caractéristique doit être à deux dimensions, la première dimension représentant des échantillons et la seconde représentant la différence de coût entre la valeur par défaut et les autres valeurs.
Entier facultatif ou liste2.
min_tree_leaf_samples Nombre minimal d’échantillons par nœud terminal dans l’arborescence de stratégie. Entier facultatif, par défaut 2.
max_tree_depth Profondeur maximale de l’arborescence de stratégie. Entier facultatif, par défaut 2.
skip_cat_limit_checks Par défaut, les caractéristiques catégorielles doivent avoir plusieurs instances de chaque catégorie afin qu’un modèle soit robuste. La définition de la valeur sur True ignore ces vérifications. Booléen facultatif, par défaut False.
categories Catégories à utiliser pour les colonnes catégorielles. Si auto, les catégories sont déduites pour toutes les colonnes catégorielles. Sinon, cet argument doit comporter autant d’entrées qu’il existe de colonnes catégorielles.

Chaque entrée doit être soit auto pour déduire les valeurs de cette colonne, soit la liste des valeurs de la colonne. Si des valeurs explicites sont fournies, la première valeur est traitée comme la valeur « contrôle » pour cette colonne par rapport à laquelle d’autres valeurs sont comparées.
Facultatif, auto ou liste2.
n_jobs Degré de parallélisme à appliquer, Entier facultatif, par défaut 1.
verbose Spécifie s’il faut fournir une sortie détaillée pendant le calcul. Entier facultatif, par défaut 1.
random_state Valeur de départ pour le générateur de nombres pseudo-aléatoires (PRNG). Entier facultatif.

2 Pour les paramètres list : plusieurs paramètres acceptent des listes d’autres types (chaînes, nombres, et même autres listes). Pour les transmettre au composant, ils doivent d’abord être encodés en JSON dans une seule chaîne.

Ce composant a un port de sortie unique, qui peut être connecté à l’un des ports d’entrée insight_[n] du composant 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"]' 

Ajouter des points contrefactuels au tableau de bord Insights IA responsable

Ce composant génère des points contrefactuels pour le jeu de données de test fourni. Il dispose d’un port d’entrée unique, qui accepte la sortie du constructeur de tableau de bord d’insights IA responsable. Il accepte aussi les paramètres suivants :

Nom du paramètre Description Type
total_CFs Nombre de points contrefactuels à générer pour chaque ligne du jeu de données de test. Entier facultatif, par défaut 10.
method Explication dice-ml à utiliser. Chaîne facultative. random, genetic ou kdtree. La valeur par défaut est random.
desired_class Index identifiant la classe contrefactuelle souhaitée. Pour la classification binaire, cette valeur doit être définie sur opposite. Chaîne ou entier facultatif. La valeur par défaut est 0.
desired_range Pour les problèmes de régression, identifiez la plage de résultats souhaitée. Liste facultative de deux nombres3.
permitted_range Dictionnaire avec des noms de caractéristiques en tant que clés et plage autorisée dans la liste en tant que valeurs. La valeur par défaut est la plage déduite des données d’entraînement. Chaîne ou liste facultative3.
features_to_vary Chaîne all ou liste de noms de caractéristiques qui varient. Chaîne ou liste facultative3.
feature_importance Indicateur pour activer le calcul de l’importance des caractéristiques à l’aide de dice-ml. Valeur booléenne facultative. La valeur par défaut est True.

3 Pour les paramètres non scalaires : les paramètres qui sont des listes ou des dictionnaires doivent être passés en tant que chaînes codées en JSON uniques.

Ce composant a un port de sortie unique, qui peut être connecté à l’un des ports d’entrée insight_[n] du composant 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]" 

Ajouter une analyse des erreurs au tableau de bord Insights IA responsable

Ce composant génère une analyse d’erreur pour le modèle. Il a un port d’entrée unique, qui accepte la sortie du RAI Insights Dashboard Constructor. Il accepte aussi les paramètres suivants :

Nom du paramètre Description Type
max_depth Profondeur maximale de l’arborescence d’analyse des erreurs. Entier facultatif. La valeur par défaut est 3.
num_leaves Nombre maximal de nœuds terminaux dans l’arborescence d’erreurs. Entier facultatif. La valeur par défaut est 31.
min_child_samples Nombre minimal de points de données requis pour produire un nœud terminal. Entier facultatif. La valeur par défaut est 20.
filter_features Liste d’une ou deux caractéristiques à utiliser pour le filtre de matrice. Liste facultative, à passer en tant que chaîne encodée JSON unique.

Ce composant a un port de sortie unique, qui peut être connecté à l’un des ports d’entrée insight_[n] du composant 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"]' 

Ajouter une explication au tableau de bord Insights IA responsable

Ce composant génère une explication du modèle. Il a un port d’entrée unique, qui accepte la sortie du RAI Insights Dashboard Constructor. Il accepte une chaîne de commentaire facultative unique en tant que paramètre.

Ce composant a un port de sortie unique, qui peut être connecté à l’un des ports d’entrée insight_[n] du composant Collecter le tableau de bord Insights IA responsable.

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

Collecter le tableau de bord Insights IA responsable

Ce composant assemble les insights générés dans un tableau de bord IA responsable unique. Il a cinq ports d’entrée :

  • Port constructor qui doit être connecté au composant Constructeur de tableau de bord Insights IA responsable.
  • Quatre ports insight_[n] pouvant être connectés à la sortie des composants d’outil. Au moins un de ces ports doit être connecté.

Il existe deux ports de sortie :

  • Le port dashboard contient l’objet RAIInsights terminé.
  • Le port ux_json contient les données requises pour afficher un tableau de bord minimal.
  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}} 

Comment générer une carte de performance d’IA responsable (préversion) ?

L’étape de configuration vous oblige à utiliser votre expertise de domaine autour du problème pour définir vos valeurs cibles souhaitées sur les performances du modèle et les métriques d’équité.

Comme d’autres composants de tableau de bord d’IA responsable configurés dans le pipeline YAML, vous pouvez ajouter un composant pour générer la carte de performance dans le pipeline 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 

Où pdf_gen.json est le fichier json de configuration de la génération de carte de performance et l’ID predifined_cohorts_json est le fichier json de définition de cohortes prédéfini.

Voici un exemple de fichier JSON pour la définition de cohortes et la configuration de génération de carte de performance :

Définition de cohortes :

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

Voici un fichier de configuration de génération de carte de performance en guise d’exemple de régression :

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

Voici un fichier de configuration de génération de carte de performance en guise d’exemple de classification :

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

Définition d’entrées pour le composant de carte de performance d’IA responsable

Cette section répertorie et définit les paramètres requis pour configurer le composant de carte de performance d’IA responsable.

Modèle

ModelName Nom du modèle
ModelType Valeurs dans ['classification', 'regression'].
ModelSummary Entrez un texte résumant l'objet du modèle.

Notes

Pour la classification multiclasse, vous devez d’abord utiliser la stratégie One-vs-Rest pour choisir votre classe de référence, puis fractionner votre modèle de classification multiclasse en un problème de classification binaire pour votre classe de référence sélectionnée et le reste des classes.

Mesures

Mesure de performance Définition Type de modèle
accuracy_score Fraction de points de données correctement classifiés. classification ;
precision_score Fraction de points de données correctement classifiés parmi ceux classifiés comme ayant la valeur 1. classification ;
recall_score Fraction de points de données correctement classifiés parmi ceux dont l’étiquette réelle est 1. Autres noms : taux de vrai positif, sensibilité. classification ;
f1_score Le score F1 est la moyenne harmonique de la précision et du rappel. classification ;
error_rate Proportion d’instances mal classifiées sur l’ensemble des instances. classification ;
mean_absolute_error Moyenne de valeurs d’erreurs absolues. Plus robuste pour les valeurs hors norme que mean_squared_error. régression ;
mean_squared_error Moyenne des erreurs quadratiques. régression ;
median_absolute_error Valeur médiane des erreurs carrées. régression ;
r2_score Fraction de variance dans les étiquettes expliquée par le modèle. régression ;

Seuil : seuil souhaité pour la métrique sélectionnée. Les jetons mathématiques autorisés sont >, <, >= et <=m, suivis d’un nombre réel. Par exemple, >= 0,75 signifie que la cible pour la métrique sélectionnée est supérieure ou égale à 0,75.

Importance de la fonctionnalité

top_n : nombre de fonctionnalités à afficher avec un maximum de 10. Les entiers positifs jusqu’à 10 sont autorisés.

Équité

Métrique Définition
metric Métrique principale pour l’impartialité de l’évaluation.
sensitive_features Liste de noms de caractéristiques du jeu de données d’entrée à désigner comme caractéristiques sensibles pour le rapport d’impartialité.
fairness_evaluation_kind Valeurs dans ['difference', 'ratio'].
threshold Valeurs cibles souhaitées de l’évaluation d’impartialité. Les jetons mathématiques autorisés sont >, <, >= et <=, suivis d’un nombre réel.
Par exemple, metric="accuracy", fairness_evaluation_kind="difference".
<= 0,05 signifie que la cible pour la différence d’exactitude est inférieure ou égale à 0,05.

Notes

Votre choix de fairness_evaluation_kind (sélection de 'difference' ou 'ratio') affecte l’échelle de votre valeur cible. Dans votre sélection, veillez à choisir une valeur cible significative.

Vous pouvez sélectionner parmi les métriques suivantes, jumelées avec fairness_evaluation_kind pour configurer le composant d’évaluation d’impartialité de la carte de performance :

Métrique fairness_evaluation_kind Définition Type de modèle
accuracy_score différence La différence maximale en score d’exactitude entre deux groupes. classification ;
accuracy_score ratio Le rapport minimal en score d’exactitude entre deux groupes. classification ;
precision_score différence La différence maximale en score d’exactitude entre deux groupes. classification ;
precision_score ratio Le rapport maximal en score d’exactitude entre deux groupes. classification ;
recall_score différence La différence maximale en score de rappel entre deux groupes. classification ;
recall_score ratio Le rapport maximal en score de rappel entre deux groupes. classification ;
f1_score différence La différence maximale en score f1 entre deux groupes. classification ;
f1_score ratio Le rapport maximal en score f1 entre deux groupes. classification ;
error_rate différence La différence maximale en taux d’erreur entre deux groupes. classification ;
error_rate ratio Le rapport maximal en taux d’erreur entre deux groupes. classification ;
Selection_rate différence La différence maximale en taux de sélection entre deux groupes. classification ;
Selection_rate ratio Le rapport maximal en taux de sélection entre deux groupes. classification ;
mean_absolute_error différence Différence maximale en erreur absolue moyenne entre deux groupes. régression ;
mean_absolute_error ratio Rapport maximal en erreur absolue moyenne entre deux groupes. régression ;
mean_squared_error différence Différence maximale en erreur carrée moyenne entre deux groupes. régression ;
mean_squared_error ratio Rapport maximal en erreur carrée moyenne entre deux groupes. régression ;
median_absolute_error différence Différence maximale en erreur absolue médiane entre deux groupes. régression ;
median_absolute_error ratio Rapport maximal en erreur absolue médiane entre deux groupes. régression ;
r2_score différence La différence maximale en score R2 entre deux groupes. régression ;
r2_Score ratio Le rapport maximal en score R2 entre deux groupes. régression ;

Contraintes d’entrée

Quels sont les formats et saveurs de modèle pris en charge ?

Le modèle doit se trouver dans le répertoire MLflow avec une saveur sklearn disponible. En outre, le modèle doit être chargeable dans l’environnement qui est utilisé par les composants IA responsable.

Quels sont les formats de données acceptés ?

Les jeux de données fournis doivent être au format mltable avec des données tabulaires.

Étapes suivantes