Une équation qui relie la valeur à prévoir à quelques facteurs : chaque variable reçoit un poids, et la prévision est la somme pondérée. C'est le premier modèle à poser sur une prévision chiffrée, parce qu'il se calcule en une seconde et que chaque coefficient se lit directement en euros.
La règle empirique d'un directeur réseau (« tant d'euros par m², tant par euro de pub »), mais calculée sur tout l'historique au lieu d'être estimée au jugé.
CA = constante + a × surface + b × budget pub + c × concurrents + un écart selon la zone. Les poids a, b et c sont inconnus.
L'algorithme choisit les poids qui rendent la plus petite possible la somme des carrés des écarts entre CA réel et CA prévu. C'est la méthode des moindres carrés, résolue par une formule exacte.
Chaque poids indique de combien le CA varie quand la variable augmente d'une unité, les autres restant fixes. Pour un projet de magasin, on applique l'équation.
Surface en m², budget publicitaire local en k€, nombre de concurrents dans la zone, type de zone (centre-ville, périphérie, rural). Et la colonne à prévoir : le chiffre d'affaires en k€.
Sur le jeu d'exemple, un m² de plus vaut environ 0,4 k€ de CA, un concurrent de plus en retire environ 15 k€, et un magasin rural fait environ 150 k€ de moins qu'un magasin de centre-ville comparable. De quoi chiffrer un projet d'ouverture.
Le R² donne la part des écarts de CA entre magasins que le modèle explique (ici au-dessus de 0,9). L'erreur absolue moyenne parle mieux au comité : c'est l'écart typique, en k€, entre prévision et réalité.
Aucun hyperparamètre à régler. La qualité du modèle se joue dans la préparation des variables.
La zone devient des indicatrices comparées à une modalité de référence, ici le centre-ville. R le fait seul avec un facteur, Python avec pd.get_dummies(drop_first=True).
Si l'effet s'essouffle (le 30e k€ de pub rapporte moins que le premier), passer la variable au logarithme ou ajouter son carré.
Si la pub rapporte davantage en centre-ville qu'en zone rurale, ajouter le produit des deux variables. En R : budget_pub_k * zone dans la formule.
Tracer les écarts entre réel et prévu. Une forme en courbe ou en entonnoir signale que la droite ne suffit pas, ou que l'erreur grandit avec la taille du magasin.
# CA magasins : régression linéaire en R
magasins <- read.csv("magasins.csv")
magasins$zone <- factor(magasins$zone) # référence : centre_ville
set.seed(42)
idx <- sample(nrow(magasins), round(0.7 * nrow(magasins)))
train <- magasins[idx, ]
test <- magasins[-idx, ]
modele <- lm(ca_k ~ surface_m2 + budget_pub_k + nb_concurrents + zone, data = train)
# Coefficients : effet de +1 unité sur le CA (k€), les autres variables fixes
print(round(summary(modele)$coefficients, 3))
# Qualité sur les magasins jamais vus
pred <- predict(modele, newdata = test)
r2 <- 1 - sum((test$ca_k - pred)^2) / sum((test$ca_k - mean(test$ca_k))^2)
cat("R² test :", round(r2, 3), "\n")
cat("Erreur absolue moyenne (k€) :", round(mean(abs(test$ca_k - pred)), 1), "\n")
# CA magasins : régression linéaire en Python
import pandas as pd
from sklearn.linear_model import LinearRegression
from sklearn.model_selection import train_test_split
from sklearn.metrics import r2_score, mean_absolute_error
magasins = pd.read_csv("magasins.csv")
# drop_first : la zone centre_ville sert de référence
X = pd.get_dummies(magasins[["surface_m2", "budget_pub_k", "nb_concurrents", "zone"]], drop_first=True, dtype=float)
y = magasins["ca_k"]
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
modele = LinearRegression()
modele.fit(X_train, y_train)
# Coefficients : effet de +1 unité sur le CA (k€), les autres variables fixes
print("Constante :", round(modele.intercept_, 1))
print(pd.Series(modele.coef_, index=X.columns).round(2))
# Qualité sur les magasins jamais vus
pred = modele.predict(X_test)
print("R² test :", round(r2_score(y_test, pred), 3))
print("Erreur absolue moyenne (k€) :", round(mean_absolute_error(y_test, pred), 1))
C'est la part des variations du résultat expliquée par le modèle. Sur les données d'entraînement, il va de 0 à 1 : un R² de 0,9 signifie que le modèle explique 90 % des écarts de CA entre magasins. Il faut aussi le calculer sur des données de test, car un R² élevé à l'entraînement peut cacher un surapprentissage.
Non. Un coefficient mesure une association, à valeur égale des autres variables du modèle. Si les magasins qui marchent déjà reçoivent plus de budget pub, l'effet de la pub sera surestimé. Pour mesurer un effet réel, il faut une expérience : test A/B, zones témoins.
Une relation linéaire entre les variables et le résultat, des erreurs indépendantes et de variance constante. La normalité des erreurs compte surtout pour que les p-values et les intervalles de confiance soient fiables. Un graphique des résidus suffit souvent à repérer un problème.
La même méthode, avec des variables élevées au carré ou au cube pour suivre une courbe.
Voir la fiche → quand les variables abondentUne régression linéaire qui freine les coefficients et met à zéro les variables inutiles.
Voir la fiche → pour les réponses oui / nonLe même principe de somme pondérée, transformée en probabilité. La référence du scoring.
Voir la fiche →Dataistudio forme les équipes au machine learning et à l'IA, sur des cas concrets.
Nous utilisons des cookies de mesure d'audience et de suivi publicitaire pour comprendre la fréquentation du site et l'efficacité de nos annonces. Rien n'est déposé sans votre accord. En savoir plus