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.

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()

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"
  )

diagnostic

Expliquez 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)
  )

scenarios

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

Assistant IA Ouvrir le GPT du cours