Université de Tamanrasset
Faculté des Sciences et de la Technologie
Département de Mathématique et Informatique
Master1 : Intelligence Artificielle et Science des Données
Module : Apprentissage Automatique
Mini Projet Machine Learning
Walmart Store Sales Forecasting
Réalisée par : Prof :
- Belhain Hamza Lacheheub Mohammed
Nassim
- Bouallag Abdelhalim
Sommaire
1. Introduction...................................................................................................3
2. Description des Données...............................................................................3
3. Résultats de l'Analyse Statistique avec Discussion.......................................4
3.1. Exploration des Données :..........................................................................4
3.2. Nettoyage et préparation des Données :.....................................................4
3.3. Visualisation :.............................................................................................4
3.4. Discussion..................................................................................................5
4. Modèle Utilisé...............................................................................................5
4.1. Sélection du Modèle...................................................................................5
4.2. Entraînement du Modèle............................................................................5
4.3. Implémentation...........................................................................................5
5. Résultats Obtenus..........................................................................................5
5.1. Métriques de Performance..........................................................................5
5.2. Comparaison...............................................................................................6
6. Conclusion.....................................................................................................6
[2]
1. Introduction
Dans cette projet, on dispose de données historiques de ventes pour 45
magasins Walmart situés dans différentes régions. Chaque magasin contient
plusieurs départements. Le dataset inclut également des événements de réductions
de prix pendant certaines fêtes, ce qui complique la tâche car il est difficile de
prévoir quels départements seront affectés et dans quelle mesure.
Notre objectif est de prédire les ventes hebdomadaires pour chaque
département dans chaque magasin.
2. Description des Données
stores.csv : Ce fichier contient des informations sur les 45 magasins.
train.csv : Il s'agit des données historiques d'entraînement, couvrant la période du
05/02/2010 au 01/11/2012. Il contient les champs suivants : Store : le numéro du
magasin ; Dept : le numéro du département ; Date : la semaine ; Weekly_Sales :
les ventes hebdomadaires pour le département donné dans le magasin donné ;
IsHoliday : indique si la semaine est une semaine de fête spéciale.
test.csv : Ce fichier est identique à train.csv, sauf les ventes hebdomadaires.
features.csv : Ce fichier contient des données supplémentaires liées à l'activité du
magasin, du département et de la région pour les dates données. Il contient les
champs suivants : Store : le numéro du magasin ; Date : la semaine ;
Temperature : température moyenne dans la région ; Fuel_Price : coût du
carburant dans la région ; MarkDown1-5 : données relatives aux réductions
promotionnelles que Walmart organise. CPI : indice des prix à la consommation ;
Unemployment : taux de chômage ; IsHoliday : indique si la semaine est une
semaine de fête spéciale ; les quatre fêtes tombent dans les semaines suivantes dans
l'ensemble de données (toutes les fêtes ne sont pas présentes dans les données) :
Super Bowl : 12-fév-10, 11-fév-11, 10-fév-12, 8-fév-13
Fête du Travail : 10-sept-10, 9-sept-11, 7-sept-12, 6-sept-13
Thanksgiving: 26-nov-10, 25-nov-11, 23-nov-12, 29-nov-13
Noël : 31-déc-10, 30-déc-11, 28-déc-12, 27-déc-13
Variable Cible : prédiction des ventes hebdomadaires.
Toute valeur manquante est marquée par NAN.
[3]
3. Analyse Statistique
3.1. Exploration des Données
Charger l'ensemble de données avec Pandas.
train = pd.read_csv('train.csv')
test = pd.read_csv(‘test.csv')
features = pd.read_csv('features.csv')
stores = pd.read_csv(‘stores.csv')
Afficher les premières lignes pour comprendre la structure :
display(train.head())
Résumer l'ensemble de données :
train.describe(),train.dtypes ,train.info()
3.2. Nettoyage et préparation des Données :
Fusionner les tables (train, features et stores)et (test, features et stores) pour
obtenir plus de variables.
Gérer les valeurs manquantes et les doublons :
test.isnull().sum()
test.duplicated().sum()
test.shape
test['CPI'] = test['CPI'].fillna(test['CPI'].mean())
test['Unemployment'] =
test['Unemployment'].fillna(test['Unemployment'].mean())
3.3. Visualisation :
Utiliser des bibliothèques comme Matplotlib ou Seaborn pour créer des
graphiques visualisant la distribution des données, les corrélations et tout modèle
notable.
Inclure des graphiques tels que des histogrammes, des box plots, des scatter
plots et des heatmaps.
3.4. Discussion
[4]
Interpréter les résumés statistiques et les visualisations.
Mettre en évidence les résultats intéressants ou les problèmes potentiels dans
l'ensemble de données.
4. Modèle Utilisé
4.1. Sélection du Modèle
Discuter des critères de sélection de votre ou vos modèles (par exemple,
précision, interprétabilité).
Introduire le ou les modèles choisis (par exemple, Régression Linéaire,
Arbres de Décision, Forêt Aléatoire, etc.).
4.2. Entraînement du Modèle
Diviser l'ensemble de données en ensembles d'entraînement et de test.
Entraîner le modèle en utilisant les données d'entraînement.
Ajuster les hyperparamètres en utilisant des techniques comme Grid Search
ou Random Search si applicable.
4.3. Implémentation
Fournir une brève explication de la manière dont le modèle est implémenté en
code en utilisant scikit-learn.
Montrer des extraits de code démontrant le processus d'entraînement.
5. Résultats Obtenus
5.1. Métriques de Performance
Évaluer la performance du modèle en utilisant des métriques appropriées (par
exemple, précision, précision, rappel, F1-score).
Discuter des résultats sur l'ensemble de test.
5.2. Comparaison
Si plusieurs modèles ont été utilisés, comparer leurs performances.
Discuter des compromis observés (par exemple, entre précision et
interprétabilité).
[5]
6. Conclusion
Résumer les principales conclusions de votre analyse et de l'évaluation du
modèle.
Limites :
Discuter des limites rencontrées durant le projet (par exemple, qualité des
données, hypothèses du modèle).
Directions Futures :
Suggérer des améliorations possibles ou des travaux futurs (par exemple,
utilisation de modèles plus complexes, obtention de plus de données).
Leçons Apprises :
Réfléchir à ce que vous avez appris durant le projet, à la fois en termes de
compétences techniques et de compréhension des concepts de machine learning.
Livrables
Code : Assurez-vous que votre code est bien documenté et organisé. Il devrait
inclure :
Chargement et prétraitement des données
Analyse statistique et visualisations
Entraînement et évaluation du modèle
Rapport : Respectez les directives (pas plus de 6 pages, simple interligne, 12-
pt Times New Roman). Assurez-vous qu'il soit clair, concis et bien structuré.
En suivant ce plan structuré, vous serez en mesure d'aborder
systématiquement votre projet de machine learning, en assurant une analyse
approfondie, une sélection réfléchie des modèles, et une présentation claire de vos
résultats.
Data Exploration
df_stores = pd.read_csv('/kaggle/input/walmart-recruiting-store-sales-
forecasting/stores.csv')
[6]
display(df_stores.head())
df_features = pd.read_csv('/kaggle/input/walmart-recruiting-store-sales-
forecasting/features.csv.zip')
display(df_features.head())
# Do needed data merges and get df
df = df_raw.merge(df_stores, on='Store')
feature_cols_to_use = ['Store', 'Date', 'Temperature', 'Fuel_Price', 'CPI',
'Unemployment']
df = df.merge(df_features[feature_cols_to_use], on=['Store', 'Date'])
display(df.head())
df.describe()
df.dtypes
Creation des Variables (Week)
Fix the data types for columns and create new columns
df[['Store', 'Dept']] = df[['Store', 'Dept']].astype(str)
df['Date'] = pd.to_datetime(df['Date'])
df['Month'] = df['Date'].dt.month
Traitement des données
numeric_preprocessor = Pipeline(
steps =[
("imputation_mean", SimpleImputer(missing_values=np.nan,
strategy="mean")),
("scaler", StandardScaler()),
]
)
categorical_preprocessor = Pipeline(
steps=[
("imputation_most_frequent", SimpleImputer(fill_value="missing",
strategy="most_frequent")),
("onehot", OneHotEncoder(handle_unknown="ignore", max_categories=12,
drop='first')),
]
)
categorical_col = ['Store', 'Dept', 'Type', 'IsHoliday', 'Month']
numerical_col = ['Size', 'Temperature', 'Fuel_Price', 'CPI', 'Unemployment']
preprocessor = ColumnTransformer(
[
("categorical", categorical_preprocessor, categorical_col),
("numerical", numeric_preprocessor, numerical_col),
]
[7]
)
preprocessor
Comparer les Vents normal et promo
T test
Correlation entre (Weekly_Sales , Temp, Feul price, Unemployement, cpi)
Split data
df_sample = df.sample(5000, random_state=4)
X = df_sample[categorical_col+numerical_col]
y = df_sample[['Date','Weekly_Sales']].set_index('Date')
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.1,
random_state = 10)
X_train.head(), y_train.head()
Models
ds = DecisionTreeRegressor(random_state=4, max_depth=4)
ls = Lasso(random_state=4, selection='random', tol=1e-3)
rd = Ridge(random_state=4, tol=1e-3)
models_to_try = [ds, ls, rd]
all_pipelines = {}
for m in models_to_try:
# Create a scikit-learn pipeline
all_pipelines[m] = pipeline = make_pipeline(preprocessor, m)
# Perform cross-validation on the training data
cross_val_scores = cross_val_score(pipeline, X_train, y_train, cv=4,
scoring='r2')
print(m)
print(f"Cross-Validation Scores: {cross_val_scores}")
print(f"Mean Cross-Validation Score: {np.mean(cross_val_scores)}\n")
[8]