Plus facile à lire avec un fond crème, une teinte, plus de contraste ou un texte plus grand ? Choisissez vos couleurs et votre texte, une fois pour toutes les pages.

Leçon gratuite

Expliquer les prédictions d’un modèle

Après cette leçon: Je peux expliquer pourquoi un modèle a donné une prédiction.

Leçon de 55 min1 commandeLab JupyterLab de science des données : pandas, Matplotlib et scikit-learn dans le navigateur

Pourquoi le modèle a-t-il répondu cela ?

Expliquer une prédiction, c’est dire quelles informations ont fait pencher le modèle vers sa réponse. Une personne refusée veut savoir pourquoi, et l’équipe doit le savoir pour corriger.

Vous lirez un modèle simple, puis vous mesurerez l’effet d’une information en la changeant.

À la fin de cette leçon

Remarque

Je peux expliquer pourquoi un modèle a donné une prédiction.

Mots clés

MotCe que ça veut dire
Entréeune information donnée au modèle
Prédictionla réponse que le modèle donne
Poidsle nombre qui dit combien une entrée compte, et dans quel sens
Effetde combien la prédiction change quand une entrée change
Explication localele pourquoi d’une seule prédiction
Boîte noireun modèle dont on ne peut pas lire le calcul

Les cellules que les étudiants remplissent restent vides dans cet aperçu.

Un modèle simple se lit comme une recette

Un score de prêt peut s’écrire : une base, plus le revenu fois son poids, plus l’ancienneté fois son poids, moins les dettes fois leur poids. Chaque poids dit combien une entrée compte, et dans quel sens.

On lit directement un tel modèle. Un modèle très complexe, une boîte noire, se lit beaucoup moins bien.

Exemple travaillé : le score d’une demande

EntréeValeurPoidsContribution
Base20
Revenu (en centaines d’euros)15230
Ancienneté (en années)236
Dettes (en centaines d’euros)3-4-12
Score44

Les cellules que les étudiants remplissent restent vides dans cet aperçu.

Calculer le score d’une demande

Code: python
# Le score d’une demande de prêt.
poids = {"base": 20, "revenu": 2, "anciennete": 3, "dettes": -4}
demande = {"revenu": 15, "anciennete": 2, "dettes": 3}
score = poids["base"]
for nom in demande:
    score = score + poids[nom] * demande[nom]
print("score :", score)
# Le seuil d’accord est 50.
# Mettez dettes à 0, puis relancez.

Le labo contient un vrai modèle

Dans le labo, un modèle prévoit le nombre de locations d’un jour à partir de deux entrées : la température et la pluie. Il calcule un poids pour chacune.

Le script affiche ces poids. Une ligne dit combien de locations un degré de plus apporte, l’autre combien un millimètre de pluie en retire.

Lire les poids d’un vrai modèle

Commande
docker exec jupyter python3 steps/model.py

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

On mesure l’effet d’une entrée en la changeant

Gardez la demande telle quelle. Changez une seule entrée, puis calculez le nouveau score. L’écart entre les deux scores est l’effet de ce changement.

Répétez pour chaque entrée. L’entrée dont l’effet est le plus grand est la plus importante pour cette demande.

Exemple travaillé : trois changements

ChangementNouveau scoreEffet
Revenu de 15 à 2054+10
Ancienneté de 2 à 553+9
Dettes de 3 à 056+12

Les cellules que les étudiants remplissent restent vides dans cet aperçu.

Mesurer l’effet d’un seul changement

Code: python
# L’effet d’un seul changement sur le score.
poids = {"base": 20, "revenu": 2, "anciennete": 3, "dettes": -4}
avant = {"revenu": 15, "anciennete": 2, "dettes": 3}
apres = {"revenu": 20, "anciennete": 2, "dettes": 3}
score_avant = poids["base"]
score_apres = poids["base"]
for nom in avant:
    score_avant = score_avant + poids[nom] * avant[nom]
    score_apres = score_apres + poids[nom] * apres[nom]
print("effet du revenu :", score_apres - score_avant)
# Changez le revenu de apres en 10, puis relancez.

Une erreur fréquente

Attention

Beaucoup pensent qu’une explication montre la cause dans la vie réelle. Elle montre ce que le modèle a utilisé, pas ce qui arrive aux gens. Le classement dépend aussi de la taille des changements essayés : dites-la toujours.

Une bonne explication est courte et utile

Pour une personne refusée, donnez les deux ou trois entrées qui ont le plus pesé. Dites aussi ce qui aurait changé la réponse.

Par exemple : « Votre score est 44 et le seuil est 50. Avec 300 euros de dettes en moins, il aurait été de 56. » Évitez de citer une entrée sur laquelle la personne ne peut rien.

Une entrée neutre peut remplacer un groupe

Le code postal n’est pas un groupe. Mais si A et B habitent des quartiers différents, il en dit presque autant.

Testez chaque entrée : sert-elle de remplaçant à un groupe ? Si oui, expliquez-le, ou retirez-la.

Dans votre carnet : dix millimètres de pluie

Code: python
import pandas as pd
from sklearn.linear_model import LinearRegression

locations = pd.read_csv("hires.csv")
entrees = locations[["temp_c", "rain_mm"]]
modele = LinearRegression().fit(entrees, locations["hires"])
sec = pd.DataFrame({"temp_c": [15.0], "rain_mm": [0.0]})
pluvieux = pd.DataFrame({"temp_c": [15.0], "rain_mm": [10.0]})
# L’effet de dix millimètres de pluie sur la prédiction.
modele.predict(pluvieux)[0] - modele.predict(sec)[0]

Pour aller plus loin

Écrivez l’explication d’un refus pour une demande de votre choix. Donnez un score, un seuil, les deux entrées qui ont le plus pesé et ce qui aurait changé la réponse.

Relisez-la comme la personne refusée. Comprend-elle ce qu’elle peut faire ? Cite-t-elle une entrée qui remplace un groupe ?

À propos de ce labo et de sa source: Lab JupyterLab de science des données : pandas, Matplotlib et scikit-learn dans le navigateur

Vous enseignez à une classe ? Proposez ce module à vos étudiants avec un guide de l'enseignant, des devoirs corrigés et un laboratoire pour chaque étudiant.