Tous les produits
Search
Centre de documentation

Platform For AI:Analyse des erreurs

Dernière mise à jour :Aug 28, 2026

PAI vous permet d'intégrer la boîte à outils Responsible AI dans DSW afin d'identifier et de résoudre systématiquement les erreurs de prédiction de vos modèles d'IA. Ce tutoriel vous guide pas à pas dans l'analyse des erreurs d'un modèle de classification binaire utilisant un jeu de données de recensement.

Fonctionnement

L'analyse des erreurs identifie, catégorise et résout systématiquement les erreurs de prédiction pour améliorer la précision et l'équité du modèle. Les principes fondamentaux sont les suivants :

  • Identifier les erreurs : repérez les erreurs de prédiction du modèle. Comparez les prédictions du modèle avec la vérité terrain afin de détecter les écarts. Les erreurs peuvent être classées en différents types, tels que les faux positifs et les faux négatifs.

  • Catégoriser les erreurs : classez les erreurs selon leurs caractéristiques. Cette démarche vous aide à mieux comprendre les causes profondes, telles qu'un déséquilibre des données, des fonctionnalités insuffisantes ou un biais du modèle. Ce processus peut nécessiter une expertise métier et un jugement humain.

  • Analyser les causes profondes : examinez les origines de chaque catégorie d'erreur. Cette étape est cruciale, car elle oriente directement l'optimisation du modèle. Elle peut impliquer l'analyse de la qualité des données, des problèmes de conception du modèle, de l'ingénierie des fonctionnalités ou des problèmes de représentation des données.

  • Prendre des mesures correctives : sur la base de l'analyse, l'équipe de développement peut mettre en œuvre des actions spécifiques pour remédier aux problèmes du modèle. Ces mesures peuvent inclure le nettoyage des données, le rééquilibrage du jeu de données, la modification de l'architecture du modèle, l'introduction de nouvelles fonctionnalités ou l'utilisation d'algorithmes différents.

  • Itérer et évaluer : l'analyse des erreurs n'est pas une tâche ponctuelle, mais un processus itératif. Après chaque modification du modèle, effectuez une nouvelle analyse des erreurs pour vérifier si les changements ont été efficaces, s'ils ont amélioré les performances ou s'ils ont introduit de nouveaux problèmes.

  • Documenter et rapporter : pour garantir la transparence et l'interprétabilité, documentez minutieusement le processus d'analyse des erreurs, les résultats obtenus et les actions correctives entreprises. Cela aide également les membres de l'équipe à comprendre les limites du modèle et fournit des retours précieux pour les autres phases du projet.

Ce tutoriel utilise la boîte à outils responsible-ai-toolbox dans PAI DSW pour effectuer une analyse des erreurs sur un modèle qui prédit si le revenu annuel d'un individu dépasse 50 K, sur la base de données de recensement.

Prérequis

  • Une instance DSW. Si vous n'en possédez pas, consultez Créer une instance DSW. La configuration recommandée est la suivante :

    • Type d'instance recommandé : ecs.gn6v-c8g1,2xlarge

    • Image : Python 3.9 ou version ultérieure est recommandé. Dans ce tutoriel, l'image officielle utilisée est tensorflow-pytorch-develop:2.14-pytorch2.1-gpu-py311-cu118-ubuntu22,04.

    • Modèle : la boîte à outils responsible-ai-toolbox prend en charge les modèles de régression et de classification binaire du framework Scikit-learn.

  • Jeu de données d'entraînement : utilisez votre propre jeu de données d'entraînement. Pour utiliser le jeu de données d'exemple de ce tutoriel, consultez Étape 3 : Préparer le jeu de données.

  • Modèle algorithmique : utilisez votre propre modèle algorithmique. Pour utiliser le modèle d'exemple de ce tutoriel, consultez Étape 5 : Entraîner le modèle.

Étape 1 : Accéder à la galerie DSW

  1. Connectez-vous à la console PAI.

  2. Dans le coin supérieur gauche, sélectionnez une région selon vos besoins.

  3. Dans le volet de navigation de gauche, choisissez QuickStart > Notebook gallery. Recherchez « Responsible AI-Error Analysis » et cliquez sur Open in DSW sur la carte correspondante.

  4. Sélectionnez une instance DSW et cliquez sur Open Notebook. Le notebook « Responsible AI-Error Analysis » s'ouvre.

Étape 2 : Importer les dépendances

Installez la dépendance raiwidgets pour la boîte à outils responsible-ai-toolbox, utilisée pour l'évaluation.

!pip install raiwidgets==0.34.1

Importez les dépendances Responsible AI et Scikit-learn nécessaires à l'entraînement du modèle.

# Import dependencies for Responsible AI

import zipfile
from sklearn.pipeline import Pipeline
from sklearn.impute import SimpleImputer
from sklearn.preprocessing import StandardScaler, OneHotEncoder
from sklearn.compose import ColumnTransformer

import pandas as pd
from lightgbm import LGBMClassifier
from raiutils.dataset import fetch_dataset
import sklearn
from packaging import version
from sklearn.pipeline import Pipeline
from sklearn.impute import SimpleImputer
from sklearn.preprocessing import StandardScaler, OneHotEncoder
from sklearn.compose import ColumnTransformer

Étape 3 : Préparer le jeu de données

Téléchargez et extrayez le jeu de données de recensement. Le dossier extrait contient les données d'entraînement adult-train.csv et les données de test adult-test.csv.

# Specify the name of the dataset file.
outdirname = 'responsibleai.12.28.21'
zipfilename = outdirname + '.zip'

# Download and extract the dataset.
fetch_dataset('https://publictestdatasets.blob.core.windows.net/data/' + zipfilename, zipfilename)
with zipfile.ZipFile(zipfilename, 'r') as unzip:
    unzip.extractall('.')

Étape 4 : Prétraiter les données

  1. Chargez les données d'entraînement adult-train.csv et les données de test adult-test.csv.

  2. Séparez les données d'entraînement et de test en variables de caractéristiques et variables cibles. La variable cible correspond au résultat réel que le modèle doit prédire. Les variables de caractéristiques sont toutes les variables de chaque instance de données, à l'exception de la variable cible. Dans cet exemple, la variable cible est income, et les variables de caractéristiques incluent workclass, education et marital-status.

  3. Convertissez les données d'entraînement au format NumPy pour l'entraînement.

# Load the training and test data.
train_data = pd.read_csv('adult-train.csv', skipinitialspace=True)
test_data = pd.read_csv('adult-test.csv', skipinitialspace=True)

# Define the columns for the features and the target variable.
target_feature = 'income'
categorical_features = ['workclass', 'education', 'marital-status',
                        'occupation', 'relationship', 'race', 'gender', 'native-country']

# Define a function to split the features and the target variable.
def split_label(dataset, target_feature):
    X = dataset.drop([target_feature], axis=1)
    y = dataset[[target_feature]]
    return X, y

# Split the features and the target variable.
X_train_original, y_train = split_label(train_data, target_feature)
X_test_original, y_test = split_label(test_data, target_feature)

# Convert to the NumPy format.
y_train = y_train[target_feature].to_numpy()
y_test = y_test[target_feature].to_numpy()

# Define a test sample.
test_data_sample = test_data.sample(n=500, random_state=5)

Pour charger votre propre jeu de données au format CSV :

import pandas as pd

# Load your own dataset in CSV format.
# Use pandas to read the CSV file.
try:
    data = pd.read_csv(filename)
except:
    pass

Étape 5 : Entraîner le modèle

Construisez un pipeline d'entraînement des données à l'aide de Scikit-learn pour entraîner un modèle de classification binaire.

# Define the ohe_params parameter based on the scikit-learn version.
if version.parse(sklearn.__version__) < version.parse('1.2'):
    ohe_params = {"sparse": False}
else:
    ohe_params = {"sparse_output": False}

# Define the classification pipeline for feature transformation. The input parameter X represents the training data.
def create_classification_pipeline(X):
    pipe_cfg = {
        'num_cols': X.dtypes[X.dtypes == 'int64'].index.values.tolist(),
        'cat_cols': X.dtypes[X.dtypes == 'object'].index.values.tolist(),
    }
    num_pipe = Pipeline([
        ('num_imputer', SimpleImputer(strategy='median')),
        ('num_scaler', StandardScaler())
    ])
    cat_pipe = Pipeline([
        ('cat_imputer', SimpleImputer(strategy='constant', fill_value='?')),
        ('cat_encoder', OneHotEncoder(handle_unknown='ignore', **ohe_params))
    ])
    feat_pipe = ColumnTransformer([
        ('num_pipe', num_pipe, pipe_cfg['num_cols']),
        ('cat_pipe', cat_pipe, pipe_cfg['cat_cols'])
    ])

    pipeline = Pipeline(steps=[('preprocessor', feat_pipe),
                               ('model', LGBMClassifier(random_state=0))])

    return pipeline
    
# Create the classification model training pipeline.
pipeline = create_classification_pipeline(X_train_original)

# Train the model.
model = pipeline.fit(X_train_original, y_train)

Étape 6 : Ajouter le composant Responsible AI

Ajoutez le composant d'analyse des erreurs à Responsible AI et exécutez le calcul.

# Import the RAI dashboard components.
from raiwidgets import ResponsibleAIDashboard
from responsibleai import RAIInsights

# Define the RAIInsights object.
from responsibleai.feature_metadata import FeatureMetadata
feature_metadata = FeatureMetadata(categorical_features=categorical_features, dropped_features=[])
rai_insights = RAIInsights(model, train_data, test_data_sample, target_feature, 'classification',
                           feature_metadata=feature_metadata)

# Add the error analysis component.
rai_insights.error_analysis.add()

# Perform the RAI computation.
rai_insights.compute()

Étape 7 : Créer le tableau de bord Responsible AI

  1. Créez différentes cohortes en appliquant des filtres pour analyser des segments de données spécifiques. Voici quelques exemples :

  • L'âge est inférieur à 65 ans et le nombre d'heures par semaine est supérieur à 40.

  • La situation matrimoniale est « Never-married » (célibataire) ou « Divorced » (divorcé).

  • L'index est inférieur à 20.

  • La valeur Y prédite est >50K.

  • La valeur Y réelle est >50K.

  1. Importez ResponsibleAIDashboard et utilisez la boîte à outils responsible-ai-toolbox pour analyser le modèle.

from raiutils.cohort import Cohort, CohortFilter, CohortFilterMethods
import os
from urllib.parse import urlparse

# Age is less than 65 and hours-per-week is greater than 40.
cohort_filter_age = CohortFilter(
    method=CohortFilterMethods.METHOD_LESS,
    arg=[65],
    column='age')
cohort_filter_hours_per_week = CohortFilter(
    method=CohortFilterMethods.METHOD_GREATER,
    arg=[40],
    column='hours-per-week')

user_cohort_age_and_hours_per_week = Cohort(name='Cohort Age and Hours-Per-Week')
user_cohort_age_and_hours_per_week.add_cohort_filter(cohort_filter_age)
user_cohort_age_and_hours_per_week.add_cohort_filter(cohort_filter_hours_per_week)

# Marital status is "Never-married" or "Divorced".
cohort_filter_marital_status = CohortFilter(
    method=CohortFilterMethods.METHOD_INCLUDES,
    arg=["Never-married", "Divorced"],
    column='marital-status')

user_cohort_marital_status = Cohort(name='Cohort Marital-Status')
user_cohort_marital_status.add_cohort_filter(cohort_filter_marital_status)

# Index is less than 20.
cohort_filter_index = CohortFilter(
    method=CohortFilterMethods.METHOD_LESS,
    arg=[20],
    column='Index')

user_cohort_index = Cohort(name='Cohort Index')
user_cohort_index.add_cohort_filter(cohort_filter_index)

# Predicted Y is >50K.
cohort_filter_predicted_y = CohortFilter(
    method=CohortFilterMethods.METHOD_INCLUDES,
    arg=['>50K'],
    column='Predicted Y')

user_cohort_predicted_y = Cohort(name='Cohort Predicted Y')
user_cohort_predicted_y.add_cohort_filter(cohort_filter_predicted_y)

# True Y is >50K.
cohort_filter_true_y = CohortFilter(
    method=CohortFilterMethods.METHOD_INCLUDES,
    arg=['>50K'],
    column='True Y')

user_cohort_true_y = Cohort(name='Cohort True Y')
user_cohort_true_y.add_cohort_filter(cohort_filter_true_y)

cohort_list = [user_cohort_age_and_hours_per_week,
               user_cohort_marital_status,
               user_cohort_index,
               user_cohort_predicted_y,
               user_cohort_true_y]

# Create the Responsible AI dashboard.
metric_frame_tf = ResponsibleAIDashboard(rai_insights, cohort_list=cohort_list, feature_flights="dataBalanceExperience")

# Set the URL for redirection.
metric_frame_tf.config['baseUrl'] =  'https://{}-proxy-{}.dsw-gateway-{}.data.aliyun.com'.format(
    os.environ.get('JUPYTER_NAME').replace("dsw-",""),
    urlparse(metric_frame_tf.config['baseUrl']).port,
    os.environ.get('dsw_region') )

Étape 8 : Consulter l'analyse des erreurs

Cliquez sur l'URL pour ouvrir le tableau de bord Responsible AI.

[2024-05-29 11:04:57,458] WARNING in __init__: WebSocket transport not available. Install gevent-websocket for improved performance.

    ResponsibleAI started at http://localhost:8704

Consultez l'analyse des erreurs :

Arborescence

  1. Cliquez sur Tree Map. Dans la liste déroulante Select metric, sélectionnez Error rate pour effectuer l'analyse des erreurs. La vue arborescente divise les données en un arbre binaire selon les valeurs des caractéristiques du modèle. Par exemple, les deux branches sous le nœud racine de cet arbre représentent :

    • marital-status == Married-civ-spouse(54/224)

    • marital-status != Married-civ-spouse(18/276)

  2. Cet exemple contient 500 échantillons avec 72 erreurs de prédiction, soit un taux d'erreur de 14,4 % (72/500). Chaque nœud de l'arbre binaire affiche le nombre total de points de données satisfaisant la condition de la branche, ainsi que le nombre d'erreurs de prédiction et le taux d'erreur.

  3. Concentrez-vous sur les nœuds rouges. Une teinte de rouge plus foncée indique un taux d'erreur plus élevé.

  4. Dans cet exemple, cliquez sur le nœud feuille rouge le plus foncé. Cela révèle que le taux d'erreur de prédiction du modèle atteint 43,40 % pour les données satisfaisant toutes les conditions suivantes :

    • marital-status == Married-civ-spouse

    • fnlwgt <= 207583

    • hours-per-week > 40,5

Carte thermique

  1. Cliquez sur Heat map pour basculer vers la vue en carte thermique. Dans la liste déroulante Select metric, sélectionnez Error rate.

  2. (Facultatif) Configurez les paramètres :

    • Binning par quantile : méthode qui divise une variable continue en plusieurs intervalles, chacun contenant le même nombre de points de données.

      • Définissez sur OFF pour utiliser la stratégie de binning uniforme par défaut, où chaque intervalle a la même longueur.

      • Définissez sur ON pour activer le binning par quantile. Chaque intervalle contient le même nombre de points de données, garantissant une distribution uniforme des données entre les intervalles.

    • Seuil de binning : nombre d'intervalles pour le binning des données. Dans cet exemple, la valeur par défaut est 8, ce qui divise age et hours-per-week en 8 intervalles égaux.

  3. Dans la carte thermique, sélectionnez deux caractéristiques d'entrée pour une analyse croisée. Cet exemple utilise age et hours-per-week.

  4. Concentrez-vous sur les cellules rouges. Une teinte de rouge plus foncée indique un taux d'erreur plus élevé.

  5. Le taux d'erreur est le plus élevé (jusqu'à 100 %) lorsque les deux caractéristiques se situent dans les plages suivantes :

    • age[71,8,80,9], hours-per-week[39,0,51,0]

    • age[44,4,53,5], hours-per-week[75,0,87,0]

    • age[16,9,26,1], hours-per-week[63,0,75,0]

    • ...