Prévoir une valeur avec une régression
Une classification répond par une catégorie, par exemple fret élevé ou non. Ici, la question demande un nombre : peut-on estimer le prix moyen historique d'un produit qui n'a pas servi à entraîner le modèle ? Une régression apprend à prévoir une valeur numérique.
L'exemple utilise 120 produits Olist dont le poids est renseigné. Une ligne représente un produit ; la cible est son prix moyen observé sur ses lignes de commande, en réaux brésiliens (BRL). Cet échantillonUn sous-ensemble d'observations choisi pour étudier un ensemble plus vaste. déterministe sert à apprendre la démarche. Il ne représente pas tout le catalogue et ne fixe pas un futur prix.
Exécuter l'artefact
Télécharge prix_produits.csv
et modele_prix.py.
Si un lien affiche le texte du fichier, fais un clic droit sur le lien puis
choisis « Enregistrer le lien sous… ». Garde les extensions .csv et .py,
sans ajouter .txt.
Place les deux fichiers dans le même dossier. Avant le premier lancement, prédis laquelle de ces trois méthodes aura la plus petite erreur moyenne : la moyenne constante, la médianeLa valeur qui coupe la population en deux parts égales : la moitié des lignes sont en dessous, l'autre moitié au-dessus. Contrairement à la moyenne, une valeur extrême ne la déplace presque pas. constante ou la droite qui utilise le poids. Écris ton choix, puis lance avec Python 3.9 ou plus :
py modele_prix.pySi py n'existe pas mais que python fonctionne, relance avec
python modele_prix.py.
Si un autre fichier laisse l'entraînement vide ou tous ses poids identiques, le script s'arrête avec un message explicite : cette droite ne peut pas être apprise dans ces conditions. Ce contrôle ne garantit pas qu'un autre échantillon suffit pour produire une prévision utile.
Le script affiche 120 lignes, dont 96 d'entraînement et 24 de test, avec zéro identifiant commun. L'entraînement sert à apprendre les paramètres. Le test reste à l'écart jusqu'au calcul final des erreurs.
La séparation prend chaque cinquième ligne du CSV pour le test. Elle est reproductible, mais dépend de l'ordre du fichier et ne réserve pas une période future. Elle mesure ici la réaction des trois méthodes fixées à des produits laissés hors apprentissage. Elle ne démontre pas leur capacité à prévoir des prix futurs.
Comparer à deux références constantes
La première référence prévoit toujours 145,47 BRL, la moyenne calculée uniquement sur l'entraînement. La seconde prévoit sa médiane, 81,42 BRL. Elles ne lisent ni le poids du produit ni le test.
La MAE, erreur absolue moyenne, calcule pour chaque produit la distance entre prix prévu et prix réel, puis fait la moyenne. Son unité reste le BRL. Le script renvoie 153,79 BRL pour la moyenne et 124,56 BRL pour la médiane sur le test. Le premier nombre signifie qu'une prévision s'écarte en moyenne de 153,79 BRL, sans indiquer si elle est trop haute ou trop basse.
Lire le modèle entraîné
Le modèle apprend une droite sur les 96 lignes d'entraînement :
prix ≈ 121,36 + 0,01121 × poids_g0,01121 est la pente apprise : dans cette droite, ajouter un gramme augmente la
prévision de 0,01121 BRL. Cette relation décrit le calcul du modèle ; elle ne
prouve pas que le poids cause le prix. Le script conserve davantage de décimales
pour calculer les erreurs ; la formule affichée est arrondie pour être lue.
Les trois méthodes ont été fixées avant d'ouvrir le test. Sur ses 24 lignes, la droite obtient 139,86 BRL de MAE. Elle bat la moyenne constante, mais pas la médiane constante à 124,56 BRL. La droite est entraînée en réduisant les erreurs au carré, tandis que la MAE mesure des écarts absolus ; ces objectifs différents peuvent classer les méthodes différemment. Ce test ne montre donc pas que le poids améliore la prévision face à une référence adaptée à la MAE.
Examiner une erreur avant de conclure
Le script affiche les trois erreurs absolues les plus grandes. En cas d'égalité, il les ordonne par identifiant de produit : cet ordre facilite la relecture et ne rend pas une erreur plus importante que l'autre. Pour un produit à 1 168,00 BRL, il prévoit 207,69 BRL, soit 960,31 BRL d'erreur. Cette ligne montre une limite concrète que la moyenne des erreurs masque.
Il signale aussi un produit de test à 19 200 g, alors que l'entraînement va jusqu'à 16 600 g. Pour ce produit, la droite extrapole, c'est-à-dire qu'elle applique au-delà de la plage apprise une relation qu'elle n'a pas observée. Inspecte cette ligne séparément avant toute décision.
Ouvre modele_prix.py et retrouve séparément les appels entrainer(train),
mae(test, ref_moyenne), mae(test, ref_mediane) et mae(test, pred). Demande à ChatGPT d'expliquer pourquoi
remplacer le premier par entrainer(test) invaliderait l'évaluation. Contrôle sa
réponse avec les arguments du code et l'intersection des identifiants.
Modification guidée
Le script compte un poids de test hors plage sans dire lequel. Après la ligne
Poids test hors plage, ajoute une boucle qui affiche l'identifiant et le poids
des lignes concernées. Dans main, place le bloc au même niveau que les autres
print : ajoute quatre espaces devant chacune de ces lignes.
minimum = min(r["x"] for r in train)
maximum = max(r["x"] for r in train)
for ligne in test:
if ligne["x"] < minimum or ligne["x"] > maximum:
print("Hors plage :", ligne["id"], ligne["x"], "g")Avant d'exécuter, prédis ce qui doit rester identique : les effectifs, les trois MAE et le nombre de lignes hors plage. Cette modification ajoute un diagnostic, elle ne change ni l'entraînement ni les prédictions.
Pour vérifier, le script doit afficher un seul produit hors plage, à 19 200 g. Les MAE doivent rester 153,79, 124,56 et 139,86 BRL. Si l'une change, la modification a touché une donnée ou un calcul au lieu d'ajouter seulement l'affichage demandé.
Transfert autonome
Télécharge durees_livraison.csv.
Ce jeu synthétique contient une distance et une durée pour 25 livraisons. Copie
modele_prix.py sous le nom modele_duree.py, place les deux fichiers ensemble,
puis adapte les données lues dans la fonction charger : le fichier devient
durees_livraison.csv, la clé livraison_id, l'entrée distance_km et la cible
duree_minutes. Dans les sorties, remplace aussi prix par durée, poids_g
et Poids par distance_km et Distance, puis BRL et g par minutes et
km. Ne change ni les calculs ni les fonctions separer, entrainer et mae.
Avant le premier lancement, fixe les deux méthodes comparées : médiane constante et droite utilisant la distance. Ne change plus de variable ni de méthode après avoir lu leurs erreurs sur le test. Produis ensuite une note et un script qui :
- nomment la cible, son unité et le moment où la prévision sera utilisée ;
- fixent la maille d'une ligne et une clé stable ;
- séparent les identifiants avant l'entraînement et contrôlent leur intersection ;
- apprennent la médiane constante et la droite sur l'entraînement ;
- comparent leurs MAE sur le même test, ouvert une seule fois ;
- montrent deux lignes où le modèle se trompe fortement ;
- concluent seulement pour ces deux méthodes fixées. Si le résultat conduit à chercher d'autres variables, note que ce même test ne donnera plus une mesure indépendante du prochain choix.
Tu dois retrouver 20 lignes d'entraînement, 5 de test et aucune clé commune. Pour contrôler une erreur affichée, soustrais à la main la durée prédite de la durée réelle, puis prends la valeur absolue. Une autre personne doit pouvoir relancer le script, retrouver les mêmes effectifs et relier chaque erreur aux minutes. Utiliser ensuite une cible numérique de ton propre projet reste une variante facultative : définis alors la période cible, le moment de la prévision et une séparation adaptée au temps si tu veux parler du futur.
Sources
- Requête d'extraction des 120 produits : elle calcule le prix moyen par produit dans Olist, puis sélectionne un échantillon reproductible.
- Scikit-learn, régression linéaire : définition du modèle ajusté par les moindres carrés.
- Scikit-learn, erreur absolue moyenne : définition et interprétation de la MAE.
- Scikit-learn, pièges courants et fuite de donnéesUne variable d'entrée qui ne sera pas connue au moment où on prédit, comme la date de livraison réelle. Elle rend le modèle excellent sur les exemples passés et inutile ensuite, sans produire la moindre erreur. : pourquoi le test ne participe pas à l'apprentissage.