Cours 2 – Lier deux grandeurs : la régression
BTS SIO SISR 2e année – Option mathématiques approfondies – M3, seconde partie
Note
Objectifs de ce cours. À la fin, tu sais : représenter une série à deux variables par un nuage de points ; déterminer la droite de régression (à la calculatrice ou en Python) ; interpréter son coefficient directeur et le coefficient de corrélation ; faire une prévision en distinguant interpolation et extrapolation ; ajuster une croissance exponentielle par un changement de variable.
Prérequis. Le cours 1 et les fonctions affines du module M1.
1. Pour démarrer : la charge dépend-elle du nombre d'utilisateurs ?
On relève, pour six moments de la journée, le nombre \(x\) de centaines d'utilisateurs connectés et la charge processeur \(y\) (en %) :
| \(x\) | 1 | 2 | 3 | 4 | 5 | 6 |
|---|---|---|---|---|---|---|
| \(y\) | 12 | 19 | 31 | 38 | 52 | 57 |
Chaque ligne est un couple \((x_i\,;\,y_i)\). On veut savoir s'il existe un lien, le chiffrer, et prévoir la charge pour un nombre d'utilisateurs qu'on n'a pas mesuré.
2. Le nuage de points
On place chaque couple comme un point dans un repère : c'est le nuage de points.
Les six points sont presque alignés et la charge augmente avec le nombre d'utilisateurs. Cela suggère un ajustement affine : on cherche la droite qui passe « au plus près » des points.
3. La droite de régression (moindres carrés)
Parmi toutes les droites, on retient celle qui minimise la somme des carrés des écarts verticaux entre les points et la droite : c'est la droite de régression de \(y\) en \(x\), d'équation \(y = ax + b\).
Les formules.
avec \(\operatorname{cov}(x, y) = \overline{xy} - \bar{x}\,\bar{y}\) (moyenne des produits moins produit des moyennes) et \(V(x)\) la variance de \(x\).
Le calcul pas à pas (pour comprendre, car la calculatrice le fait seule) :
| Quantité | Calcul | Résultat |
|---|---|---|
| \(\bar{x}\) | \(\dfrac{1+2+3+4+5+6}{6}\) | \(3{,}5\) |
| \(\bar{y}\) | \(\dfrac{209}{6}\) | \(\approx 34{,}83\) |
| \(V(x)\) | \(\dfrac{1+4+9+16+25+36}{6} - 3{,}5^2 = 15{,}17 - 12{,}25\) | \(\approx 2{,}917\) |
| \(\overline{xy}\) | \(\dfrac{12 + 38 + 93 + 152 + 260 + 342}{6} = \dfrac{897}{6}\) | \(149{,}5\) |
| \(\operatorname{cov}(x,y)\) | \(149{,}5 - 3{,}5 \times 34{,}83\) | \(\approx 27{,}58\) |
| \(a\) | \(\dfrac{27{,}58}{2{,}917}\) | \(\approx 9{,}46\) |
| \(b\) | \(34{,}83 - 9{,}46 \times 3{,}5\) | \(\approx 1{,}73\) |
La droite de régression est donc \(y \approx 9{,}46\,x + 1{,}73\).
Tip
La droite passe toujours par le point moyen \((\bar{x}\,;\,\bar{y}) = (3{,}5\,;\,34{,}83)\) : c'est un bon contrôle. Vérification : \(9{,}46 \times 3{,}5 + 1{,}73 = 34{,}84\) ✔.
Interprétation de \(a\) et \(b\). Chaque centaine d'utilisateurs supplémentaires ajoute en moyenne environ 9,5 points de charge ; \(b \approx 1{,}73\) est la charge « de fond » du modèle sans utilisateur.
Deux droites de régression. On peut aussi ajuster \(x\) en fonction de \(y\) : c'est la droite de régression de \(x\) en \(y\), \(x = a'y + b'\), avec \(a' = \dfrac{\operatorname{cov}(x,y)}{V(y)}\). Ici \(a' \approx 0{,}1046\) et \(b' \approx -0{,}142\). Les deux droites passent par le point moyen ; elles sont confondues seulement si la liaison est parfaite (\(r = \pm 1\)). On a la relation \(r^{2} = a \times a'\) : ici \(9{,}457 \times 0{,}1046 \approx 0{,}989\). Pour prévoir \(y\) à partir de \(x\), on utilise la droite de \(y\) en \(x\) ; pour prévoir \(x\) à partir de \(y\) (par exemple le nombre d'utilisateurs qui donne 70 % de charge), la droite de \(x\) en \(y\) est la bonne : \(x \approx 0{,}1046 \times 70 - 0{,}142 \approx 7{,}18\), soit 718 utilisateurs (la résolution de la section 5 donnait 722 : les deux sont proches parce que \(r\) est proche de 1).
4. Le coefficient de corrélation : la droite est-elle un bon modèle ?
Le coefficient de corrélation linéaire \(r\) est un nombre compris entre \(-1\) et \(1\).
| Valeur de \(r\) | Lecture |
|---|---|
| proche de \(1\) | forte liaison linéaire, \(y\) augmente avec \(x\) |
| proche de \(-1\) | forte liaison linéaire, \(y\) diminue quand \(x\) augmente |
| proche de \(0\) | pas de liaison linéaire |
Ici \(r \approx 0{,}994\) : le nuage est presque parfaitement aligné, l'ajustement affine est très bon. Le nombre \(r^2 \approx 0{,}989\) s'interprète : environ 99 % des variations de la charge sont expliquées par la droite.
Warning
Corrélation n'est pas causalité. Un \(r\) proche de 1 dit que deux grandeurs évoluent ensemble, pas que l'une cause l'autre. Ici le lien de cause est plausible (plus d'utilisateurs, plus de calculs) ; mais deux grandeurs peuvent évoluer ensemble à cause d'une troisième.
5. Prévoir : interpolation et extrapolation
La droite permet d'estimer \(y\) pour un \(x\) donné.
- Interpolation : \(x\) est dans l'intervalle des mesures (entre 1 et 6). La prévision est en général fiable.
- Extrapolation : \(x\) est hors de l'intervalle. Elle suppose que la tendance continue, ce qui est incertain.
Exemple. Pour 800 utilisateurs (\(x = 8\)) : \(y \approx 9{,}46 \times 8 + 1{,}73 \approx 77{,}4\) %. C'est une extrapolation (on n'a pas mesuré au-delà de \(x = 6\)). Elle est plausible, mais la charge ne peut pas dépasser 100 %, et le comportement peut changer près de la saturation. Il faut le dire.
Prévision inverse. À partir de combien d'utilisateurs la charge dépasse-t-elle 70 % ? On résout \(9{,}46x + 1{,}73 > 70\), donc \(x > \dfrac{70 - 1{,}73}{9{,}46} \approx 7{,}22\), soit plus de 722 utilisateurs.
6. Quand la droite ne convient pas : le changement de variable
Situation. Le nombre de comptes créés par semaine :
| semaine \(t\) | 0 | 1 | 2 | 3 | 4 | 5 |
|---|---|---|---|---|---|---|
| comptes \(y\) | 100 | 148 | 225 | 340 | 512 | 770 |
La croissance s'accélère : ce n'est pas une droite. Regardons les rapports successifs : \(\dfrac{148}{100} = 1{,}48\), \(\dfrac{225}{148} \approx 1{,}52\), \(\dfrac{340}{225} \approx 1{,}51\), \(\dfrac{512}{340} \approx 1{,}51\), \(\dfrac{770}{512} \approx 1{,}50\). Ils sont presque constants : la croissance est multiplicative (environ \(+50\) % par semaine), donc exponentielle.
Astuce. Si \(y = C\,q^{t}\), alors \(\ln y = \ln C + t\ln q\) : c'est une fonction affine de \(t\). On ajuste donc \(\ln y\) en fonction de \(t\) par une droite. À la calculatrice, on obtient \(\ln y \approx 0{,}410\,t + 4{,}598\), avec \(r \approx 0{,}9999\) : l'ajustement est excellent.
On revient à \(y\) : \(y = e^{4{,}598}\left(e^{0{,}410}\right)^{t} \approx 99{,}3 \times 1{,}507^{\,t}\), soit environ \(+50{,}7\) % par semaine. Prévision pour la semaine 6 : environ 1 160 comptes.
Tip
Comment choisir ? Trace le nuage. S'il est aligné, ajuste \(y\) en \(x\). Si les valeurs multiplient d'une période à l'autre (rapports presque constants), ajuste \(\ln y\) en \(x\).
Comparer deux ajustements. Pour les comptes créés, comparons les deux modèles à l'aide du coefficient de corrélation :
| Ajustement | Équation | \(r\) | Prévision semaine 6 |
|---|---|---|---|
| Affine : \(y\) en \(t\) | \(y \approx 130{,}2\,t + 23{,}7\) | \(0{,}960\) | \(\approx 805\) |
| Exponentiel : \(\ln y\) en \(t\) | \(y \approx 99{,}3 \times 1{,}507^{\,t}\) | \(0{,}99997\) | \(\approx 1\,160\) |
Le modèle exponentiel a le meilleur \(r\) (on compare \(r\) de \(\ln y\) en \(t\) avec \(r\) de \(y\) en \(t\)) : il convient mieux, ce qu'on avait déjà vu sur les rapports presque constants. Attention : un \(r\) de 0,96 est déjà « bon » ; seul le nuage et la forme du phénomène permettent de trancher. La différence sur la prévision (805 contre 1 160) montre l'enjeu du choix.
7. Calculer avec Python
from statistics import linear_regression, correlation
x = [1, 2, 3, 4, 5, 6]
y = [12, 19, 31, 38, 52, 57]
droite = linear_regression(x, y)
print(droite.slope, droite.intercept) # 9.457... 1.733...
print(correlation(x, y)) # 0.9944...
8. À retenir
Note
- Le nuage de points montre si un ajustement affine est raisonnable.
- Droite de régression \(y = ax + b\) : \(a = \dfrac{\operatorname{cov}(x,y)}{V(x)}\), \(b = \bar{y} - a\bar{x}\) ; elle passe par le point moyen.
- \(r\) proche de \(\pm 1\) : bon ajustement linéaire ; corrélation n'est pas causalité.
- Prévoir : l'interpolation est fiable, l'extrapolation est à commenter.
- Croissance multiplicative : ajuster \(\ln y\) en fonction de \(t\).
9. Teste-toi
Question 1. Une droite de régression est \(y = 2{,}5x + 10\) avec \(r = 0{,}98\), pour des mesures entre \(x = 0\) et \(x = 20\). Estimer \(y\) pour \(x = 12\), puis pour \(x = 50\). Que dire de chaque estimation ?
Question 2. Pourquoi la droite de régression passe-t-elle par \((\bar{x}\,;\,\bar{y})\) ?
Voir les réponses
- \(x = 12\) : \(y = 2{,}5 \times 12 + 10 = 40\), une interpolation (12 est entre 0 et 20), fiable car \(r\) est grand. \(x = 50\) : \(y = 135\), une extrapolation très éloignée des mesures : à prendre avec beaucoup de précautions.
- Parce que \(b = \bar{y} - a\bar{x}\) : en remplaçant \(x\) par \(\bar{x}\), on obtient \(a\bar{x} + b = \bar{y}\).
Pour continuer : les exercices du module, puis le module M4 sur les probabilités.