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

Ajuster une droite aux données (régression linéaire)

Après cette leçon: Je peux ajuster une droite à des données et dire si elle est bonne.

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

Combien de vélos sortir pour 20 degrés ?

La météo annonce 20 degrés pour demain. Ce soir, le loueur doit décider combien de vélos sortir du dépôt.

Une année de données montre que les jours chauds sont plus chargés. Une droite tracée à travers ces jours change « plus chargé » en un nombre utile. Elle dit aussi jusqu’où lui faire confiance.

À la fin de cette leçon

Remarque

Je peux ajuster une droite à des données et dire si elle est bonne.

Mots clés

MotCe que ça veut dire
Régression linéaireune règle en ligne droite qui va d’une valeur à une autre
Pentede combien la réponse change quand l’entrée monte de 1
Ordonnée à l’originela réponse quand l’entrée vaut 0
Résidula vraie valeur moins la valeur prédite
Moindres carrésle choix de la droite au plus petit total de résidus au carré
R carréla part des variations que la droite explique, de 0 à 1
Jeu de testdes lignes gardées de côté pour juger un modèle

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

Une droite, c’est une pente et une ordonnée

Une droite s’écrit locations = ordonnee + pente * temperature. La pente dit combien de locations chaque degré de plus apporte. L’ordonnée à l’origine est ce que prédit la droite à 0 degré.

LinearRegression de scikit-learn trouve les deux à partir des données. line.py ajuste les locations à la seule température, sur les 365 jours.

Ajuster les locations à la température

Commande
docker exec jupyter python3 steps/line.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.

Les moindres carrés choisissent la droite

Chaque jour se place un peu au-dessus ou au-dessous de la droite. Cet écart est le résidu. On élève chaque résidu au carré : un écart en dessous compte autant qu’un écart au-dessus. Puis on additionne.

La droite des moindres carrés est celle dont ce total est le plus petit. Deux sommes courtes la donnent : la pente vient de la façon dont x et y varient ensemble, l’ordonnée des moyennes.

Exemple travaillé : trois jours et leurs résidus

TempératureLocationsLa droite 130 + 13,75 xRésiduAu carré
4180185-525
825024010100
12290295-525
Total0150

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

Les deux sommes à la main

Code: python
# Les moindres carrés à la main, pour trois jours.
temperatures = [4, 8, 12]
locations = [180, 250, 290]
moyenne_x = sum(temperatures) / len(temperatures)
moyenne_y = sum(locations) / len(locations)
haut = 0
bas = 0
for n in range(len(temperatures)):
    haut = haut + (temperatures[n] - moyenne_x) * (locations[n] - moyenne_y)
    bas = bas + (temperatures[n] - moyenne_x) ** 2
pente = haut / bas
ordonnee = moyenne_y - pente * moyenne_x
print("pente :", pente, "ordonnée à l'origine :", ordonnee)
# Changez 290 en 320, puis relancez.
# La pente monte-t-elle ou descend-elle ?

À taper dans votre carnet : toute l’année

Code: python
import pandas as pd

locations = pd.read_csv("hires.csv")
x = locations["temp_c"]
y = locations["hires"]
pente = ((x - x.mean()) * (y - y.mean())).sum() / ((x - x.mean()) ** 2).sum()
ordonnee = y.mean() - pente * x.mean()
# À comparer avec ce que line.py a affiché.
round(pente, 1), round(ordonnee, 1)

Juger une droite sur des jours inconnus

Une droite colle toujours assez bien aux jours dont elle a appris. La vraie question : que donne-t-elle sur des jours nouveaux ?

On coupe donc les données. On ajuste sur environ trois quarts, le jeu d’entraînement, et on garde le reste comme jeu de test. On mesure ensuite R carré et l’erreur moyenne sur le jeu de test seul.

Apprendre sur des jours, tester sur d’autres

Commande
docker exec jupyter python3 steps/split.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.

Une erreur fréquente

Attention

Beaucoup pensent qu’un R carré élevé sur les données apprises prouve qu’un modèle prédira bien. Un modèle est toujours flatté par ce qu’il a déjà vu. Jugez-le sur un jeu de test qu’il n’a jamais vu, et citez ce chiffre-là.

À taper dans votre carnet : l’erreur sur l’appris

Code: python
# La droite apprise sur les 365 jours, jugée sur ces mêmes jours.
residus = y - (ordonnee + pente * x)
round(residus.abs().mean(), 1)

Plus d’entrées peuvent expliquer plus

La température seule explique environ 60 % des variations d’un jour à l’autre. La pluie compte aussi.

model.py ajuste une seule droite à deux entrées, la température et la pluie. Chaque entrée reçoit sa propre pente. Une pente négative veut dire que l’entrée tire la réponse vers le bas.

Ajuster avec la température et la pluie

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.

Pour aller plus loin

Dans votre carnet, ajoutez une troisième entrée : une colonne week-end de 1 et de 0, faite avec locations["weekday"].isin(["Sat", "Sun"]).astype(int).

Ajustez sur un jeu d’entraînement et notez sur un jeu de test, comme split.py. Le R carré de test monte-t-il ? Dites en une phrase ce que la pente du week-end signifie pour le loueur.

À 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.