{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"name":"python","version":"3.11.13","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"},"kaggle":{"accelerator":"none","dataSources":[{"sourceId":7391,"databundleVersionId":44328,"sourceType":"competition"}],"dockerImageVersionId":31234,"isInternetEnabled":true,"language":"python","sourceType":"notebook","isGpuEnabled":false}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"# This Python 3 environment comes with many helpful analytics libraries installed\n# It is defined by the kaggle/python Docker image: https://github.com/kaggle/docker-python\n# For example, here's several helpful packages to load\n\nimport numpy as np # linear algebra\nimport pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv)\n\n# Input data files are available in the read-only \"../input/\" directory\n# For example, running this (by clicking run or pressing Shift+Enter) will list all files under the input directory\n\nimport os\nfor dirname, _, filenames in os.walk('/kaggle/input'):\n    for filename in filenames:\n        print(os.path.join(dirname, filename))\n\n# You can write up to 20GB to the current directory (/kaggle/working/) that gets preserved as output when you create a version using \"Save & Run All\" \n# You can also write temporary files to /kaggle/temp/, but they won't be saved outside of the current session","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","trusted":true,"execution":{"iopub.status.busy":"2026-01-06T23:11:17.635770Z","iopub.execute_input":"2026-01-06T23:11:17.636107Z","iopub.status.idle":"2026-01-06T23:11:17.647303Z","shell.execute_reply.started":"2026-01-06T23:11:17.636082Z","shell.execute_reply":"2026-01-06T23:11:17.646042Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"## Organisation des étapes\n\nDans ce projet, le prétraitement et le feature engineering sont traités\ncomme deux étapes distinctes et successives.\n\nLe prétraitement vise à nettoyer et préparer les données brutes\n(gestion des valeurs manquantes, aberrantes et cohérence des données).\n\nLe feature engineering, réalisé dans une étape ultérieure,\nconsiste à créer de nouvelles variables explicatives\n(lags, encodage, variables temporelles, etc.).\n\nCette séparation permet de garantir la clarté, la reproductibilité\net la cohérence du pipeline de Machine Learning.\n","metadata":{}},{"cell_type":"markdown","source":"# Prétraitement des données\n\nCette étape vise à nettoyer et préparer les données brutes\navant toute création de variables explicatives.\n\nLe prétraitement inclut :\n- la gestion des valeurs manquantes,\n- la gestion des valeurs aberrantes,\n- le typage et la cohérence des variables,\n- les jointures nécessaires.\n\nAucune création de nouvelles variables (lags, encodage, etc.)\nn’est réalisée à ce stade.\n","metadata":{}},{"cell_type":"code","source":"import warnings\nwarnings.filterwarnings(\"ignore\")\n\nimport os\nimport pandas as pd\nimport numpy as np","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2026-01-06T23:31:27.912678Z","iopub.execute_input":"2026-01-06T23:31:27.913867Z","iopub.status.idle":"2026-01-06T23:31:27.918688Z","shell.execute_reply.started":"2026-01-06T23:31:27.913833Z","shell.execute_reply":"2026-01-06T23:31:27.917576Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"## Décompression et chargement des données\n\nLes fichiers du jeu de données Favorita sont fournis compressés\nau format `.csv.7z` afin de réduire leur taille.\n\nPour pouvoir travailler sur l’ensemble du jeu de données\nsans contrainte de lecture ou de décodage,\nnous procédons à une décompression explicite des fichiers\navant leur chargement avec Pandas.\n","metadata":{}},{"cell_type":"code","source":"!pip install py7zr","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2026-01-06T23:31:38.289841Z","iopub.execute_input":"2026-01-06T23:31:38.290140Z","iopub.status.idle":"2026-01-06T23:32:15.996368Z","shell.execute_reply.started":"2026-01-06T23:31:38.290116Z","shell.execute_reply":"2026-01-06T23:32:15.995162Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"import os\nimport py7zr\n\nINPUT_PATH = \"/kaggle/input/favorita-grocery-sales-forecasting/\"\nWORK_PATH = \"/kaggle/working/\"\n\n# Décompression du fichier train.csv.7z\nwith py7zr.SevenZipFile(INPUT_PATH + \"train.csv.7z\", mode=\"r\") as z:\n    z.extractall(path=WORK_PATH)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2026-01-07T01:24:27.473550Z","iopub.execute_input":"2026-01-07T01:24:27.473950Z","iopub.status.idle":"2026-01-07T01:25:58.892557Z","shell.execute_reply.started":"2026-01-07T01:24:27.473922Z","shell.execute_reply":"2026-01-07T01:25:58.891170Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"os.listdir(WORK_PATH)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2026-01-06T23:37:28.537316Z","iopub.execute_input":"2026-01-06T23:37:28.538741Z","iopub.status.idle":"2026-01-06T23:37:28.550887Z","shell.execute_reply.started":"2026-01-06T23:37:28.538679Z","shell.execute_reply":"2026-01-06T23:37:28.549738Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"## Prétraitement de la base train.csv\n\nLa base `train.csv` constitue la base d’entraînement principale du projet.\nElle contient les ventes quotidiennes (`unit_sales`) par produit et par magasin,\nainsi que des informations temporelles et promotionnelles.\n\nCette base est centrale dans le processus de modélisation, car elle servira\ndirectement à l’apprentissage des modèles de prévision des ventes.\n\nNous procédons dans un premier temps à un diagnostic des valeurs manquantes,\ndes incohérences éventuelles et des valeurs aberrantes, afin de garantir\nla qualité et la fiabilité des données avant toute étape de feature engineering\net de modélisation.","metadata":{}},{"cell_type":"markdown","source":"## Chargement du jeu de données d’entraînement\n\nLe fichier `train.csv` a été décompressé dans l’espace de travail.\nAfin de limiter l’utilisation de la mémoire, seules les colonnes\nnécessaires au prétraitement sont chargées.\n","metadata":{}},{"cell_type":"code","source":"import pandas as pd\n\n# Colonnes nécessaires pour le prétraitement\ncols_train = [\n    \"date\",\n    \"store_nbr\",\n    \"item_nbr\",\n    \"unit_sales\",\n    \"onpromotion\"\n]\n\ntrain = pd.read_csv(\n    \"/kaggle/working/train.csv\",\n    usecols=cols_train\n)\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2026-01-06T23:38:37.722499Z","iopub.execute_input":"2026-01-06T23:38:37.722971Z","iopub.status.idle":"2026-01-06T23:39:56.265193Z","shell.execute_reply.started":"2026-01-06T23:38:37.722940Z","shell.execute_reply":"2026-01-06T23:39:56.263553Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"train.head()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2026-01-07T01:26:49.612218Z","iopub.execute_input":"2026-01-07T01:26:49.612547Z","iopub.status.idle":"2026-01-07T01:26:49.626826Z","shell.execute_reply.started":"2026-01-07T01:26:49.612521Z","shell.execute_reply":"2026-01-07T01:26:49.625349Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"## Diagnostic des valeurs manquantes\n\nAvant toute correction, il est nécessaire d’identifier la présence\net l’ampleur des valeurs manquantes dans le jeu de données.\nCette étape permet de guider les choix de traitement à appliquer\npar la suite.\n","metadata":{}},{"cell_type":"code","source":"# Nombre de valeurs manquantes par variable\ntrain.isna().sum()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2026-01-07T01:26:54.134023Z","iopub.execute_input":"2026-01-07T01:26:54.134358Z","iopub.status.idle":"2026-01-07T01:27:06.621137Z","shell.execute_reply.started":"2026-01-07T01:26:54.134333Z","shell.execute_reply":"2026-01-07T01:27:06.620070Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# Proportion de valeurs manquantes (en pourcentage)\n(train.isna().mean() * 100).round(2)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2026-01-06T23:43:05.098720Z","iopub.execute_input":"2026-01-06T23:43:05.099130Z","iopub.status.idle":"2026-01-06T23:43:18.275610Z","shell.execute_reply.started":"2026-01-06T23:43:05.099103Z","shell.execute_reply":"2026-01-06T23:43:18.274409Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"Les résultats montrent que la variable `onpromotion` contient une\nproportion importante de valeurs manquantes, tandis que les autres\nvariables ne présentent pas de valeurs manquantes significatives.","metadata":{}},{"cell_type":"markdown","source":"## Traitement des valeurs manquantes\n\nLe diagnostic des valeurs manquantes a montré que seule la variable\n`onpromotion` présente une proportion significative de valeurs manquantes\n(17,26 %).\n\nLes autres variables ne nécessitent aucun traitement à ce stade.\n","metadata":{}},{"cell_type":"markdown","source":"La variable `onpromotion` indique si un produit était en promotion ou non.\nEn l’absence d’information, il est raisonnable de considérer qu’aucune\npromotion n’était en cours.\n\nLes valeurs manquantes sont donc remplacées par 0, correspondant à\nl’absence de promotion.\n","metadata":{}},{"cell_type":"code","source":"# Remplacement des valeurs manquantes de onpromotion par 0\n# Traitement des valeurs manquantes de onpromotion\ntrain[\"onpromotion\"] = train[\"onpromotion\"].fillna(0)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2026-01-06T23:51:39.614099Z","iopub.execute_input":"2026-01-06T23:51:39.614381Z","iopub.status.idle":"2026-01-06T23:51:57.432393Z","shell.execute_reply.started":"2026-01-06T23:51:39.614358Z","shell.execute_reply":"2026-01-06T23:51:57.431406Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# Vérification après traitement\ntrain.isna().sum()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2026-01-06T23:51:57.434476Z","iopub.execute_input":"2026-01-06T23:51:57.434871Z","iopub.status.idle":"2026-01-06T23:52:11.023628Z","shell.execute_reply.started":"2026-01-06T23:51:57.434836Z","shell.execute_reply":"2026-01-06T23:52:11.022477Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"La variable `onpromotion` indique la présence ou l’absence d’une promotion.\nAprès le traitement des valeurs manquantes, elle est convertie en variable\nentière afin de refléter son caractère binaire.\n","metadata":{}},{"cell_type":"code","source":"train[\"onpromotion\"] = train[\"onpromotion\"].astype(int)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2026-01-06T23:54:23.004908Z","iopub.execute_input":"2026-01-06T23:54:23.005231Z","iopub.status.idle":"2026-01-06T23:54:23.740285Z","shell.execute_reply.started":"2026-01-06T23:54:23.005201Z","shell.execute_reply":"2026-01-06T23:54:23.739099Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# Vérification du type\ntrain.dtypes\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2026-01-06T23:54:59.440516Z","iopub.execute_input":"2026-01-06T23:54:59.440842Z","iopub.status.idle":"2026-01-06T23:54:59.448759Z","shell.execute_reply.started":"2026-01-06T23:54:59.440820Z","shell.execute_reply":"2026-01-06T23:54:59.447723Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"### Conclusion sur le traitement des valeurs manquantes\n\nLe diagnostic des valeurs manquantes a montré que seule la variable\n`onpromotion` présentait une proportion significative de valeurs manquantes.\nCes valeurs ont été traitées par imputation à 0, correspondant à l’absence\nde promotion.","metadata":{}},{"cell_type":"markdown","source":"## Traitement des valeurs aberrantes\nLors de l’analyse exploratoire, la variable `unit_sales` a montré :\n- une distribution fortement asymétrique,\n- la présence de valeurs négatives (retours),\n- des valeurs très élevées correspondant à des pics de ventes.\n\nCes observations guident le traitement des valeurs aberrantes.\n","metadata":{}},{"cell_type":"code","source":"# Nombre de ventes négatives\n(train[\"unit_sales\"] < 0).sum()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2026-01-07T00:04:57.794857Z","iopub.execute_input":"2026-01-07T00:04:57.796213Z","iopub.status.idle":"2026-01-07T00:04:58.043731Z","shell.execute_reply.started":"2026-01-07T00:04:57.796175Z","shell.execute_reply":"2026-01-07T00:04:58.042718Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# Correction des ventes négatives (retours) : ramenées à 0\ntrain[\"unit_sales\"] = train[\"unit_sales\"].clip(lower=0)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2026-01-07T00:05:31.786659Z","iopub.execute_input":"2026-01-07T00:05:31.788012Z","iopub.status.idle":"2026-01-07T00:05:33.242094Z","shell.execute_reply.started":"2026-01-07T00:05:31.787973Z","shell.execute_reply":"2026-01-07T00:05:33.240884Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"Les valeurs négatives de `unit_sales` correspondent à des retours.\nElles sont ramenées à zéro afin d’éviter des incohérences dans la\nvariable cible, tout en conservant l’observation.","metadata":{}},{"cell_type":"code","source":"# Vérification\n(train[\"unit_sales\"] < 0).sum()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2026-01-07T00:06:40.808692Z","iopub.execute_input":"2026-01-07T00:06:40.810397Z","iopub.status.idle":"2026-01-07T00:06:41.060065Z","shell.execute_reply.started":"2026-01-07T00:06:40.810216Z","shell.execute_reply":"2026-01-07T00:06:41.058716Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# Statistiques simples sur unit_sales\ntrain[\"unit_sales\"].describe(percentiles=[0.95, 0.99])","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2026-01-07T00:07:04.506952Z","iopub.execute_input":"2026-01-07T00:07:04.507357Z","iopub.status.idle":"2026-01-07T00:07:09.596009Z","shell.execute_reply.started":"2026-01-07T00:07:04.507328Z","shell.execute_reply":"2026-01-07T00:07:09.594723Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"Les valeurs élevées de `unit_sales` correspondent à des périodes de\nforte demande (pics de ventes) et ne sont pas considérées comme des\nerreurs de mesure.\n\nElles sont donc conservées afin de ne pas biaiser la distribution\net de préserver l’information utile pour la modélisation.\n","metadata":{}},{"cell_type":"code","source":"# Vérification finale\ntrain[\"unit_sales\"].min(), train[\"unit_sales\"].max()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2026-01-07T00:09:56.568950Z","iopub.execute_input":"2026-01-07T00:09:56.569353Z","iopub.status.idle":"2026-01-07T00:09:56.841885Z","shell.execute_reply.started":"2026-01-07T00:09:56.569324Z","shell.execute_reply":"2026-01-07T00:09:56.840737Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"### Conclusion sur le traitement des valeurs aberrantes\nLes statistiques montrent que la majorité des ventes quotidiennes\nse situent à des niveaux modérés, tandis que quelques observations\nprésentent des volumes très élevés.\n\nCes valeurs correspondent à des pics de ventes réels et ne sont pas\nconsidérées comme aberrantes. Elles sont donc conservées afin de\npréserver l’information utile pour la modélisation.\n","metadata":{}},{"cell_type":"markdown","source":"## Traitement du type de la date\nLa variable `date` de la base d’entraînement représente la dimension temporelle\ndes ventes. Afin de garantir une manipulation correcte des données temporelles\net d’assurer la cohérence avec les autres bases du projet, elle est convertie\nen format datetime.\n","metadata":{}},{"cell_type":"code","source":"# Conversion de la variable 'date' en format datetime\n# Cette opération garantit une manipulation correcte des dates\ntrain[\"date\"] = pd.to_datetime(train[\"date\"])","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2026-01-07T01:27:52.934318Z","iopub.execute_input":"2026-01-07T01:27:52.934821Z","iopub.status.idle":"2026-01-07T01:27:55.924982Z","shell.execute_reply.started":"2026-01-07T01:27:52.934789Z","shell.execute_reply":"2026-01-07T01:27:55.923702Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# Vérification des types après conversion\ntrain.dtypes","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2026-01-07T01:28:00.552960Z","iopub.execute_input":"2026-01-07T01:28:00.553282Z","iopub.status.idle":"2026-01-07T01:28:00.561495Z","shell.execute_reply.started":"2026-01-07T01:28:00.553262Z","shell.execute_reply":"2026-01-07T01:28:00.560530Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"### Conclusion du prétraitement de la base d’entraînement\n\nLe prétraitement de la base `train.csv` a été réalisé de manière progressive\net méthodique afin de garantir la qualité et la cohérence des données.\n\nLes actions suivantes ont été menées :\n- diagnostic et traitement des valeurs manquantes, limitées à la variable\n  `onpromotion`, imputées par 0 conformément à leur signification métier ;\n- correction des valeurs négatives de la variable cible `unit_sales`,\n  correspondant à des retours ;\n- analyse des valeurs extrêmes de `unit_sales`, conservées car reflétant\n  des pics de ventes réels ;\n- conversion de la variable temporelle `date` en format datetime afin\n  d’assurer une manipulation correcte des données temporelles ;\n- vérification de la cohérence des types des variables.","metadata":{}},{"cell_type":"markdown","source":"## Prétraitement de la base oil.csv\n\nLa base `oil.csv` contient l’évolution temporelle du prix du pétrole.\nCette variable constitue un facteur macroéconomique susceptible\nd’influencer les ventes.\n\nNous procédons d’abord à un diagnostic des valeurs manquantes et de la\ncohérence temporelle avant toute correction.\n","metadata":{}},{"cell_type":"code","source":"import py7zr\nimport os\nimport pandas as pd\n\nINPUT_PATH = \"/kaggle/input/favorita-grocery-sales-forecasting/\"\nWORK_PATH = \"/kaggle/working/\"\n\n# Décompression de oil.csv.7z\nwith py7zr.SevenZipFile(INPUT_PATH + \"oil.csv.7z\", mode=\"r\") as z:\n    z.extractall(path=WORK_PATH)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2026-01-07T00:14:36.280795Z","iopub.execute_input":"2026-01-07T00:14:36.281194Z","iopub.status.idle":"2026-01-07T00:14:36.304967Z","shell.execute_reply.started":"2026-01-07T00:14:36.281165Z","shell.execute_reply":"2026-01-07T00:14:36.303735Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# Chargement de la base oil.csv dans un DataFrame pandas\noil = pd.read_csv(\"/kaggle/working/oil.csv\")","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2026-01-07T00:15:39.182625Z","iopub.execute_input":"2026-01-07T00:15:39.183036Z","iopub.status.idle":"2026-01-07T00:15:39.193986Z","shell.execute_reply.started":"2026-01-07T00:15:39.183008Z","shell.execute_reply":"2026-01-07T00:15:39.192900Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# Affichage des premières lignes pour vérifier la structure des données\noil.head()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2026-01-07T00:15:58.532205Z","iopub.execute_input":"2026-01-07T00:15:58.532534Z","iopub.status.idle":"2026-01-07T00:15:58.561439Z","shell.execute_reply.started":"2026-01-07T00:15:58.532508Z","shell.execute_reply":"2026-01-07T00:15:58.560116Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"### Diagnostic des valeurs manquantes dans oil.csv\n\nAvant toute correction, il est nécessaire d’identifier la présence\net l’ampleur des valeurs manquantes dans la variable de prix du pétrole.\nCe diagnostic permet de choisir un traitement adapté à la nature\ntemporelle de la série.","metadata":{}},{"cell_type":"code","source":"# Calcul du nombre de valeurs manquantes par variable\n# Cette commande permet d'identifier quelles colonnes contiennent des NaN\noil.isna().sum()\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2026-01-07T00:19:15.360973Z","iopub.execute_input":"2026-01-07T00:19:15.361363Z","iopub.status.idle":"2026-01-07T00:19:15.374023Z","shell.execute_reply.started":"2026-01-07T00:19:15.361334Z","shell.execute_reply":"2026-01-07T00:19:15.372724Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# Calcul de la proportion de valeurs manquantes (en pourcentage)\n# Cela permet d'évaluer l'importance du problème\n(oil.isna().mean() * 100).round(2)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2026-01-07T00:20:00.576824Z","iopub.execute_input":"2026-01-07T00:20:00.577176Z","iopub.status.idle":"2026-01-07T00:20:00.590743Z","shell.execute_reply.started":"2026-01-07T00:20:00.577150Z","shell.execute_reply":"2026-01-07T00:20:00.589213Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"Le diagnostic montre que la variable `dcoilwtico`, représentant le prix\ndu pétrole, contient une proportion non négligeable de valeurs manquantes.\nLa variable `date` ne présente pas de valeurs manquantes.\n\nCe comportement est cohérent avec une série temporelle macroéconomique,\npour laquelle certaines observations peuvent être absentes.\n","metadata":{}},{"cell_type":"markdown","source":"### Traitement des valeurs manquantes dans oil.csv\n\nLa variable `dcoilwtico` représente une série temporelle du prix du pétrole.\nLes valeurs manquantes sont liées à l’absence d’observations certains jours.\n\nAfin de préserver la continuité temporelle de la série,\nune interpolation est appliquée pour estimer les valeurs manquantes\nà partir des observations voisines.\n","metadata":{}},{"cell_type":"code","source":"# Conversion de la variable 'date' en format datetime\n# Cela est indispensable pour toute opération temporelle\noil[\"date\"] = pd.to_datetime(oil[\"date\"])\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2026-01-07T00:27:31.510209Z","iopub.execute_input":"2026-01-07T00:27:31.510959Z","iopub.status.idle":"2026-01-07T00:27:31.522049Z","shell.execute_reply.started":"2026-01-07T00:27:31.510925Z","shell.execute_reply":"2026-01-07T00:27:31.520815Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# Tri des données par date\n# L'interpolation temporelle nécessite un ordre chronologique\noil = oil.sort_values(\"date\").reset_index(drop=True)\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2026-01-07T00:27:35.909328Z","iopub.execute_input":"2026-01-07T00:27:35.909691Z","iopub.status.idle":"2026-01-07T00:27:35.917971Z","shell.execute_reply.started":"2026-01-07T00:27:35.909660Z","shell.execute_reply":"2026-01-07T00:27:35.916425Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# Interpolation linéaire des valeurs manquantes\n# Cette méthode estime les valeurs manquantes à partir des points voisins\noil[\"dcoilwtico\"] = oil[\"dcoilwtico\"].interpolate(method=\"linear\")\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2026-01-07T00:27:39.216302Z","iopub.execute_input":"2026-01-07T00:27:39.216691Z","iopub.status.idle":"2026-01-07T00:27:39.224307Z","shell.execute_reply.started":"2026-01-07T00:27:39.216664Z","shell.execute_reply":"2026-01-07T00:27:39.223147Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# Vérification du nombre de valeurs manquantes après interpolation\noil.isna().sum()\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2026-01-07T00:27:43.200300Z","iopub.execute_input":"2026-01-07T00:27:43.200748Z","iopub.status.idle":"2026-01-07T00:27:43.209511Z","shell.execute_reply.started":"2026-01-07T00:27:43.200718Z","shell.execute_reply":"2026-01-07T00:27:43.208479Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"Après interpolation linéaire, une valeur manquante subsiste en bord de série.\nCe cas est classique pour les séries temporelles.\n\nLa valeur manquante résiduelle est traitée par propagation de la dernière\nvaleur observée afin de garantir la continuité de la série.","metadata":{}},{"cell_type":"code","source":"# Propagation de la dernière valeur connue pour traiter la valeur manquante résiduelle\noil[\"dcoilwtico\"] = oil[\"dcoilwtico\"].ffill()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2026-01-07T00:27:47.985124Z","iopub.execute_input":"2026-01-07T00:27:47.986099Z","iopub.status.idle":"2026-01-07T00:27:47.991481Z","shell.execute_reply.started":"2026-01-07T00:27:47.986064Z","shell.execute_reply":"2026-01-07T00:27:47.990475Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# Vérification finale après traitement complet\noil.isna().sum()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2026-01-07T00:27:53.222798Z","iopub.execute_input":"2026-01-07T00:27:53.223175Z","iopub.status.idle":"2026-01-07T00:27:53.232317Z","shell.execute_reply.started":"2026-01-07T00:27:53.223146Z","shell.execute_reply":"2026-01-07T00:27:53.231444Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"La valeur manquante restante se situe au tout début de la série temporelle.\nDans ce cas, la propagation de la valeur suivante est appliquée afin\nde garantir une série complète et exploitable.","metadata":{}},{"cell_type":"code","source":"# Propagation de la valeur suivante pour corriger la valeur manquante initiale\noil[\"dcoilwtico\"] = oil[\"dcoilwtico\"].bfill()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2026-01-07T00:29:47.437837Z","iopub.execute_input":"2026-01-07T00:29:47.438573Z","iopub.status.idle":"2026-01-07T00:29:47.447461Z","shell.execute_reply.started":"2026-01-07T00:29:47.438505Z","shell.execute_reply":"2026-01-07T00:29:47.446027Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# Vérification finale : il ne doit plus rester aucune valeur manquante\noil.isna().sum()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2026-01-07T00:30:04.242468Z","iopub.execute_input":"2026-01-07T00:30:04.242921Z","iopub.status.idle":"2026-01-07T00:30:04.251677Z","shell.execute_reply.started":"2026-01-07T00:30:04.242893Z","shell.execute_reply":"2026-01-07T00:30:04.250499Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"### Conclusion du prétraitement de oil.csv\n\nLa base `oil.csv` a fait l’objet d’un traitement spécifique adapté à\nla nature temporelle de la variable `dcoilwtico`.\nLes valeurs manquantes ont été corrigées par interpolation et\npropagation, garantissant une série continue et exploitable pour\nles étapes suivantes du projet.","metadata":{}},{"cell_type":"markdown","source":"## Prétraitement de la base items.csv\n\nLa base `items.csv` contient des informations descriptives sur les produits\n(ville, famille, classe, périssabilité).\nElle permet d’enrichir la base d’entraînement avec des caractéristiques\npropres aux articles.\n","metadata":{}},{"cell_type":"code","source":"# Import de la librairie py7zr pour décompresser les fichiers .7z\nimport py7zr\n\n# Décompression du fichier items.csv.7z dans le répertoire de travail\nwith py7zr.SevenZipFile(INPUT_PATH + \"items.csv.7z\", mode=\"r\") as z:\n    z.extractall(path=WORK_PATH)\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2026-01-07T00:40:12.887584Z","iopub.execute_input":"2026-01-07T00:40:12.888024Z","iopub.status.idle":"2026-01-07T00:40:12.902265Z","shell.execute_reply.started":"2026-01-07T00:40:12.887998Z","shell.execute_reply":"2026-01-07T00:40:12.900183Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# Chargement de la base items.csv dans un DataFrame pandas\nitems = pd.read_csv(WORK_PATH + \"items.csv\")","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2026-01-07T00:40:34.077010Z","iopub.execute_input":"2026-01-07T00:40:34.078046Z","iopub.status.idle":"2026-01-07T00:40:34.101012Z","shell.execute_reply.started":"2026-01-07T00:40:34.078013Z","shell.execute_reply":"2026-01-07T00:40:34.099737Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# Affichage des premières lignes pour vérifier la structure des données\nitems.head()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2026-01-07T00:40:58.962227Z","iopub.execute_input":"2026-01-07T00:40:58.963077Z","iopub.status.idle":"2026-01-07T00:40:58.974234Z","shell.execute_reply.started":"2026-01-07T00:40:58.963040Z","shell.execute_reply":"2026-01-07T00:40:58.973195Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"### Diagnostic des valeurs manquantes dans items.csv\n\nAvant toute transformation, il est nécessaire de vérifier la présence\néventuelle de valeurs manquantes dans la base des produits.\nCette étape permet de déterminer si un traitement est requis.","metadata":{}},{"cell_type":"code","source":"# Calcul du nombre de valeurs manquantes par colonne\n# Cette commande permet d’identifier les variables concernées par des NaN\nitems.isna().sum()\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2026-01-07T00:44:21.676084Z","iopub.execute_input":"2026-01-07T00:44:21.676503Z","iopub.status.idle":"2026-01-07T00:44:21.686243Z","shell.execute_reply.started":"2026-01-07T00:44:21.676473Z","shell.execute_reply":"2026-01-07T00:44:21.685223Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# Calcul de la proportion de valeurs manquantes (en pourcentage)\n# Utile pour évaluer l’ampleur du problème\n(items.isna().mean() * 100).round(2)\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2026-01-07T00:44:42.251908Z","iopub.execute_input":"2026-01-07T00:44:42.252221Z","iopub.status.idle":"2026-01-07T00:44:42.262840Z","shell.execute_reply.started":"2026-01-07T00:44:42.252197Z","shell.execute_reply":"2026-01-07T00:44:42.261589Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# Vérification du type\nitems.dtypes","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2026-01-07T01:34:27.603303Z","iopub.execute_input":"2026-01-07T01:34:27.603695Z","iopub.status.idle":"2026-01-07T01:34:27.612572Z","shell.execute_reply.started":"2026-01-07T01:34:27.603665Z","shell.execute_reply":"2026-01-07T01:34:27.611326Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"### Conclusion du prétraitement de items.csv\n\nLe diagnostic des valeurs manquantes montre que la base `items.csv`\nne contient aucune valeur manquante.\nAucun traitement supplémentaire n’est donc requis à ce stade.","metadata":{}},{"cell_type":"markdown","source":"## Prétraitement de la base stores.csv\n\nLa base `stores.csv` contient des informations descriptives sur les magasins\n(numéro de magasin, ville, état, type et cluster).\nCes informations permettent de caractériser les points de vente.","metadata":{}},{"cell_type":"code","source":"# Import de la librairie py7zr pour décompresser les fichiers .7z\nimport py7zr\n\n# Décompression du fichier stores.csv.7z dans le répertoire de travail\nwith py7zr.SevenZipFile(INPUT_PATH + \"stores.csv.7z\", mode=\"r\") as z:\n    z.extractall(path=WORK_PATH)\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2026-01-07T00:53:18.285170Z","iopub.execute_input":"2026-01-07T00:53:18.286256Z","iopub.status.idle":"2026-01-07T00:53:18.307338Z","shell.execute_reply.started":"2026-01-07T00:53:18.286202Z","shell.execute_reply":"2026-01-07T00:53:18.305738Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# Chargement de la base stores.csv dans un DataFrame pandas\nstores = pd.read_csv(WORK_PATH + \"stores.csv\")","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2026-01-07T00:53:38.324206Z","iopub.execute_input":"2026-01-07T00:53:38.324685Z","iopub.status.idle":"2026-01-07T00:53:38.334359Z","shell.execute_reply.started":"2026-01-07T00:53:38.324651Z","shell.execute_reply":"2026-01-07T00:53:38.333055Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# Affichage des premières lignes pour vérifier la structure des données\nstores.head()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2026-01-07T00:53:57.504054Z","iopub.execute_input":"2026-01-07T00:53:57.504877Z","iopub.status.idle":"2026-01-07T00:53:57.516626Z","shell.execute_reply.started":"2026-01-07T00:53:57.504842Z","shell.execute_reply":"2026-01-07T00:53:57.515676Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"### Diagnostic des valeurs manquantes dans stores.csv\n\nAvant toute transformation, un diagnostic des valeurs manquantes est réalisé\nafin de déterminer si un traitement est nécessaire pour la base des magasins.","metadata":{}},{"cell_type":"code","source":"# Calcul du nombre de valeurs manquantes par colonne\n# Cette commande permet d’identifier les variables concernées par des NaN\nstores.isna().sum()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2026-01-07T00:56:06.059137Z","iopub.execute_input":"2026-01-07T00:56:06.059687Z","iopub.status.idle":"2026-01-07T00:56:06.068529Z","shell.execute_reply.started":"2026-01-07T00:56:06.059652Z","shell.execute_reply":"2026-01-07T00:56:06.067388Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# Calcul de la proportion de valeurs manquantes (en pourcentage)\n# Utile pour évaluer l’ampleur du problème\n(stores.isna().mean() * 100).round(2)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2026-01-07T00:56:33.202969Z","iopub.execute_input":"2026-01-07T00:56:33.203283Z","iopub.status.idle":"2026-01-07T00:56:33.213388Z","shell.execute_reply.started":"2026-01-07T00:56:33.203256Z","shell.execute_reply":"2026-01-07T00:56:33.212047Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"### Conclusion du prétraitement de stores.csv\n\nLe diagnostic des valeurs manquantes montre que la base `stores.csv`\nne contient aucune valeur manquante.\nAucun traitement supplémentaire n’est requis à ce stade.","metadata":{}},{"cell_type":"markdown","source":"## Prétraitement de la base transactions.csv\n\nLa base `transactions.csv` contient le nombre de transactions réalisées\npar magasin et par date. Elle fournit une information agrégée sur\nl’activité des points de vente.","metadata":{}},{"cell_type":"code","source":"# Import de la librairie py7zr pour décompresser les fichiers .7z\nimport py7zr\n\n# Décompression du fichier transactions.csv.7z dans le répertoire de travail\nwith py7zr.SevenZipFile(INPUT_PATH + \"transactions.csv.7z\", mode=\"r\") as z:\n    z.extractall(path=WORK_PATH)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2026-01-07T01:03:39.598287Z","iopub.execute_input":"2026-01-07T01:03:39.598793Z","iopub.status.idle":"2026-01-07T01:03:39.666032Z","shell.execute_reply.started":"2026-01-07T01:03:39.598762Z","shell.execute_reply":"2026-01-07T01:03:39.664994Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# Chargement de la base transactions.csv dans un DataFrame pandas\ntransactions = pd.read_csv(WORK_PATH + \"transactions.csv\")","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2026-01-07T01:04:02.491838Z","iopub.execute_input":"2026-01-07T01:04:02.492157Z","iopub.status.idle":"2026-01-07T01:04:02.571547Z","shell.execute_reply.started":"2026-01-07T01:04:02.492124Z","shell.execute_reply":"2026-01-07T01:04:02.570396Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# Affichage des premières lignes pour vérifier la structure des données\ntransactions.head()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2026-01-07T01:04:20.211055Z","iopub.execute_input":"2026-01-07T01:04:20.211378Z","iopub.status.idle":"2026-01-07T01:04:20.222431Z","shell.execute_reply.started":"2026-01-07T01:04:20.211354Z","shell.execute_reply":"2026-01-07T01:04:20.221478Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"### Diagnostic des valeurs manquantes dans transactions.csv\n\nAvant toute transformation, un diagnostic des valeurs manquantes est réalisé\nafin de déterminer si un traitement est nécessaire pour la base des transactions.","metadata":{}},{"cell_type":"code","source":"# Calcul du nombre de valeurs manquantes par colonne\n# Cette commande permet d’identifier les variables concernées par des NaN\ntransactions.isna().sum()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2026-01-07T01:06:22.167081Z","iopub.execute_input":"2026-01-07T01:06:22.167450Z","iopub.status.idle":"2026-01-07T01:06:22.182584Z","shell.execute_reply.started":"2026-01-07T01:06:22.167427Z","shell.execute_reply":"2026-01-07T01:06:22.181429Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# Calcul de la proportion de valeurs manquantes (en pourcentage)\n# Utile pour évaluer l’ampleur du problème\n(transactions.isna().mean() * 100).round(2)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2026-01-07T01:06:44.323570Z","iopub.execute_input":"2026-01-07T01:06:44.323917Z","iopub.status.idle":"2026-01-07T01:06:44.338672Z","shell.execute_reply.started":"2026-01-07T01:06:44.323893Z","shell.execute_reply":"2026-01-07T01:06:44.337668Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# types des variables\ntransactions.dtypes","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2026-01-07T01:39:51.072259Z","iopub.execute_input":"2026-01-07T01:39:51.072624Z","iopub.status.idle":"2026-01-07T01:39:51.080882Z","shell.execute_reply.started":"2026-01-07T01:39:51.072600Z","shell.execute_reply":"2026-01-07T01:39:51.080020Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"## Traitement du format de la date\nLa variable `date` de la base transactions.csv est initialement au format texte.\nAfin de garantir la cohérence temporelle des données et de permettre les\ntraitements ultérieurs, elle est convertie en format datetime.","metadata":{}},{"cell_type":"code","source":"# Conversion de la variable 'date' en format datetime\n# Cette opération garantit une manipulation correcte des dates\ntransactions[\"date\"] = pd.to_datetime(transactions[\"date\"])","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2026-01-07T01:10:18.233947Z","iopub.execute_input":"2026-01-07T01:10:18.235072Z","iopub.status.idle":"2026-01-07T01:10:18.262716Z","shell.execute_reply.started":"2026-01-07T01:10:18.235035Z","shell.execute_reply":"2026-01-07T01:10:18.261337Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# Vérification des types des variables après conversion\ntransactions.dtypes","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2026-01-07T01:10:40.733237Z","iopub.execute_input":"2026-01-07T01:10:40.733623Z","iopub.status.idle":"2026-01-07T01:10:40.742373Z","shell.execute_reply.started":"2026-01-07T01:10:40.733592Z","shell.execute_reply":"2026-01-07T01:10:40.741085Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"### Conclusion du prétraitement de transactions.csv\n\nLa base `transactions.csv` ne présente ni valeurs manquantes ni incohérences\nde type. La variable temporelle a été convertie en format datetime afin\nd’assurer la cohérence temporelle des données.","metadata":{}},{"cell_type":"markdown","source":"## Prétraitement de la base holidays_events.csv\n\nLa base `holidays_events.csv` recense les jours fériés et événements\nspéciaux pouvant influencer les ventes. Elle contient des informations\ntemporelles et qualitatives décrivant la nature des événements.\n","metadata":{}},{"cell_type":"code","source":"# Décompression du fichier holidays_events.csv.7z\nwith py7zr.SevenZipFile(INPUT_PATH + \"holidays_events.csv.7z\", mode=\"r\") as z:\n    z.extractall(path=WORK_PATH)\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2026-01-07T01:46:20.737083Z","iopub.execute_input":"2026-01-07T01:46:20.737471Z","iopub.status.idle":"2026-01-07T01:46:20.757658Z","shell.execute_reply.started":"2026-01-07T01:46:20.737445Z","shell.execute_reply":"2026-01-07T01:46:20.756519Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# Chargement de la base holidays_events.csv\nholidays = pd.read_csv(WORK_PATH + \"holidays_events.csv\")","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2026-01-07T01:46:53.953198Z","iopub.execute_input":"2026-01-07T01:46:53.953752Z","iopub.status.idle":"2026-01-07T01:46:53.966908Z","shell.execute_reply.started":"2026-01-07T01:46:53.953720Z","shell.execute_reply":"2026-01-07T01:46:53.965583Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# Affichage des premières lignes pour vérifier la structure\nholidays.head()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2026-01-07T01:47:15.786623Z","iopub.execute_input":"2026-01-07T01:47:15.787041Z","iopub.status.idle":"2026-01-07T01:47:15.801142Z","shell.execute_reply.started":"2026-01-07T01:47:15.787013Z","shell.execute_reply":"2026-01-07T01:47:15.800046Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# Calcul du nombre de valeurs manquantes par colonne\n# Cette commande permet d’identifier les variables concernées par des NaN\nholidays.isna().sum()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2026-01-07T01:48:39.514828Z","iopub.execute_input":"2026-01-07T01:48:39.515190Z","iopub.status.idle":"2026-01-07T01:48:39.524790Z","shell.execute_reply.started":"2026-01-07T01:48:39.515156Z","shell.execute_reply":"2026-01-07T01:48:39.523521Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# Calcul de la proportion de valeurs manquantes (en pourcentage)\n# Utile pour évaluer l’ampleur du problème\n(holidays.isna().mean() * 100).round(2)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2026-01-07T01:49:06.425520Z","iopub.execute_input":"2026-01-07T01:49:06.426407Z","iopub.status.idle":"2026-01-07T01:49:06.437022Z","shell.execute_reply.started":"2026-01-07T01:49:06.426365Z","shell.execute_reply":"2026-01-07T01:49:06.435804Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# Vérification des types des variables\n# Cette étape permet d’identifier les conversions nécessaires\nholidays.dtypes","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2026-01-07T01:51:11.042651Z","iopub.execute_input":"2026-01-07T01:51:11.043059Z","iopub.status.idle":"2026-01-07T01:51:11.052293Z","shell.execute_reply.started":"2026-01-07T01:51:11.043031Z","shell.execute_reply":"2026-01-07T01:51:11.051096Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"La variable `date` représente la dimension temporelle des événements.\nAfin d’assurer la cohérence temporelle avec les autres bases du projet\net de permettre des jointures correctes, elle est convertie en format datetime.","metadata":{}},{"cell_type":"code","source":"# Conversion de la variable 'date' en format datetime\n# Cette opération garantit une manipulation correcte des données temporelles\nholidays[\"date\"] = pd.to_datetime(holidays[\"date\"])","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2026-01-07T01:53:45.065375Z","iopub.execute_input":"2026-01-07T01:53:45.065790Z","iopub.status.idle":"2026-01-07T01:53:45.073852Z","shell.execute_reply.started":"2026-01-07T01:53:45.065758Z","shell.execute_reply":"2026-01-07T01:53:45.072744Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# Vérification des types après conversion\nholidays.dtypes","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2026-01-07T01:54:13.936807Z","iopub.execute_input":"2026-01-07T01:54:13.937122Z","iopub.status.idle":"2026-01-07T01:54:13.945382Z","shell.execute_reply.started":"2026-01-07T01:54:13.937097Z","shell.execute_reply":"2026-01-07T01:54:13.944415Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"### Conclusion du prétraitement de holidays_events.csv\n\nLa base `holidays_events.csv` ne présente aucune valeur manquante.\nLa variable temporelle a été convertie en format datetime afin d’assurer\nla cohérence temporelle avec les autres sources de données.\n\nLes variables catégorielles ont été conservées dans leur format d’origine\net seront traitées lors de la phase de feature engineering.","metadata":{}},{"cell_type":"markdown","source":"## Conclusion générale \n\nCe notebook a été consacré au prétraitement des différentes sources de données\ndu projet de prévision des ventes. L’objectif principal était de garantir la\nqualité, la cohérence et la fiabilité des données avant toute étape de feature\nengineering et de modélisation.\n\nSur les huit bases de données fournies, six ont fait l’objet d’un prétraitement\ncomplet : `train.csv`, `oil.csv`, `items.csv`, `stores.csv`,\n`transactions.csv` et `holidays_events.csv`. Pour chacune d’elles, une\nméthodologie rigoureuse et homogène a été appliquée, incluant l’inspection\nde la structure des données, le diagnostic et le traitement des valeurs\nmanquantes, ainsi que la vérification et la correction des types des variables,\nen particulier pour les variables temporelles.\n\nLa base `train.csv`, centrale pour l’apprentissage des modèles, a fait l’objet\nd’une attention particulière. Les valeurs manquantes de la variable\n`onpromotion` ont été imputées conformément à leur signification métier,\nles valeurs négatives de la variable cible `unit_sales` ont été corrigées,\net les valeurs extrêmes ont été analysées et conservées lorsqu’elles\ncorrespondaient à des situations réelles de forte demande.\n\nLes bases `test.csv` et `sample_submission.csv` n’ont pas été traitées à ce\nstade. La première sera prétraitée ultérieurement en appliquant strictement\nles transformations définies sur la base d’entraînement, tandis que la seconde\nsert uniquement de format de sortie pour les prédictions finales.\n\nÀ l’issue de ce prétraitement, l’ensemble des données est désormais propre,\ncohérent et prêt à être exploité pour les étapes suivantes du projet, à savoir\nle feature engineering et la modélisation des ventes.\n","metadata":{}}]}