library(tidyverse)
library(broom)
data_path <- if (file.exists("../atelier-04-recapitulation/data/cas_integrateur_quebec.csv")) {
"../atelier-04-recapitulation/data/cas_integrateur_quebec.csv"
} else {
"modules/atelier-04-recapitulation/data/cas_integrateur_quebec.csv"
}
service <- read_csv(
data_path,
show_col_types = FALSE
) |>
mutate(
date = as.Date(date),
succursale = factor(succursale),
promotion = factor(promotion)
) |>
arrange(succursale, date) |>
group_by(succursale) |>
mutate(ventes_retard_1 = lag(ventes)) |>
ungroup()Exercices - Module 09
Préparation
Les capsules utilisent une seule série de ventes et des scénarios de prix. Le cas de transfert porte sur plusieurs succursales et demande de détecter des variables qui ne seraient connues qu’après le mois à prévoir.
Jeu de données de transfert : cas_integrateur_quebec.csv.
Exercice 1 - Audit de disponibilité
Une équipe propose de prévoir les ventes du mois suivant avec promotion, capacite, achalandage, ruptures_stock, temps_attente, satisfaction et ventes_retard_1.
Construisez un tableau indiquant pour chaque variable :
- le moment où elle devient réellement connue;
- si elle est planifiée, observée, retardée ou prévue séparément;
- si son utilisation créerait une fuite d’information;
- la solution de remplacement possible.
L’équipe doit notamment repérer que les mesures opérationnelles du mois à prévoir ne sont pas disponibles au début de ce mois.
Exercice 2 - Résidus et autocorrélation
Ajustez un modèle de base sur les observations antérieures à 2025, puis calculez l’autocorrélation de rang 1 des résidus séparément par succursale.
entrainement <- service |>
filter(date < as.Date("2025-01-01"))
modele_base <- lm(
ventes ~ indice_temps + promotion + succursale,
data = entrainement
)
diagnostic <- augment(modele_base, data = entrainement) |>
arrange(succursale, date) |>
group_by(succursale) |>
summarise(
autocorrelation_rang_1 = cor(.resid, lag(.resid), use = "complete.obs"),
.groups = "drop"
)
diagnosticExpliquez pourquoi une moyenne résiduelle proche de zéro ne suffit pas si les erreurs positives ou négatives se suivent dans le temps.
Exercice 3 - Scénarios
Créez un modèle de scénario qui n’utilise que la tendance, une promotion planifiée, la capacité annoncée et les ventes du mois courant. Comparez ensuite un scénario de capacité inchangée à un scénario de hausse de capacité de 5 %.
modele_scenario <- lm(
ventes ~ indice_temps + promotion + capacite + ventes_retard_1,
data = entrainement
)
profil_reference <- service |>
filter(succursale == "Québec") |>
slice_max(date, n = 1, with_ties = FALSE) |>
transmute(
indice_temps = indice_temps + 1,
promotion = factor("non", levels = levels(service$promotion)),
capacite,
ventes_retard_1 = ventes
)
scenarios <- bind_rows(
profil_reference |>
mutate(scenario = "Capacité inchangée"),
profil_reference |>
mutate(
capacite = capacite * 1.05,
scenario = "Capacité augmentée de 5 %"
)
)
scenarios <- scenarios |>
mutate(
prevision = predict(modele_scenario, newdata = scenarios)
)
scenariosExpliquez pourquoi la différence entre les deux prévisions est une implication conditionnelle du modèle, et non une estimation certaine de l’effet de la nouvelle capacité.
Exercice de synthèse
Rédigez une recommandation qui distingue trois décisions : retirer les variables indisponibles, surveiller l’autocorrélation par succursale et présenter les changements de capacité comme des scénarios. Ajoutez une limite d’extrapolation.