Ce projet est une proposition de solution au Rakuten Data Challenge. Le descriptif du challenge est disponible ici : https://challengedata.ens.fr/challenges/35/
L'objectif est de mettre en œuvre différentes méthodes de Machine Learning et Deep Learning pour résoudre le problème.
- Clonez le dépôt :
git clone https://github.com/MatteoLucas/Rakuten_Data_Challenge.git
- Allez dans le répertoire du projet :
cd Rakuten_Data_Challenge
- Installez les dépendances :
npm install
oupip install -r requirements.txt
Le code permet de faire différentes choses :
Pour entrainer un modèle, il suffit de lancer dans le répertoire du projet :
python Train_Functions/model.py --teacher_mode Bool
En remplaçant :
model
par le nom du modèle à entrainer :svm
,rf
,knn
,rn
,gb
,svd_svm
.Bool
parTrue
ouFalse
: en modeTrue
, le modèle sera entrainé sur la totalité deX_train.csv
, alors qu'en modeFalse
, une partie deX_train.csv
sera conservée pour les tests. Argument optionnel, la valeur par défault estTrue
Par exemple :
python Train_Functions/knn.py --teacher_mode False
python Train_Functions/svm.py
Il est possible d'entraîner un modèle avec une réduction de la dimension par la méthode SVD.
Pour ce faire, il faut tout d'abord entraîner le modèle de réduction de la dimension :
python Train_Functions/svd.py --n_components n
Où n_components
est un argument facultatif qui permet de définir la nouvelle dimension. La valeur par défaut est n_components=30000
.
Par exemple :
python Train_Functions/svd.py --n_components 60000
Maintenant, pour entraîner un modèle avec une réduction de la dimension, il suffit de rajouter --svd True
à la fin de la commande.
Par exemple :
python Train_Functions/svm.py --svd True
Dans cet exemple, le modèle créé sera nommé svd_svm
, c'est le nom qu'il faudra utiliser pour la prédiction.
Pour effectuer une prédiction à partir d'un modèle entraîné, il suffit de lancer dans le répertoire du projet :
python ./predict.py model --teacher_mode Bool
En remplaçant :
model
par le nom du modèle à partir duquel faire la prédiction :svm
,rf
,knn
,rn
,gb
,svd_svm
.Bool
parTrue
ouFalse
: en modeTrue
, le modèle de prédiction sera celui entraîné sur la totalité deX_train.csv
, un fichierPredictions_ForTeacher/Y_pred_model.csv
sera créé, alors qu'en modeFalse
, le modèle de prédiction sera celui entraîné sur une partie deX_train.csv
et le programme renverra uniquement le score f1. Argument optionnel, la valeur par défault estTrue
Par exemple :
python ./predict.py rf
Il est aussi possible d'effectuer un vote majoritaire entre plusieurs modèles entraînés. Pour ce faire, il suffit de lancer dans le répertoire du projet :
python ./vote.py model1 model2 model3 --teacher_mode Bool
En remplaçant :
model1
,model2
,model3
par le nom des modèles à partir desquels faire le vote :svm
,rf
,knn
,rn
,gb
,svd_svm
. Il faut mettre au minimum 2 modèles.Bool
parTrue
ouFalse
: en modeTrue
, les modèles de prédiction seront ceux entraînés sur la totalité deX_train.csv
, un fichierPredictions_ForTeacher/Y_pred_vote.csv
sera créé, alors qu'en modeFalse
, les modèles de prédiction seront ceux entraînés sur une partie deX_train.csv
et le programme renverra uniquement le score f1. Argument optionnel, la valeur par défault estTrue
Par exemple :
python ./vote.py svm rn rf knn True
Le tableau ci-dessous regroupe les scores obtenus par nos différents modèles lors de la soumission des résultats sur le site du challenge.
Modèle | Abréviation | Score lors de la soumission |
---|---|---|
Vote majoritaire : svm gb rf rn svd_svm | vote | 0,822972819005701 |
Support Vector Machine | svm | 0,8150772450094129 |
Random Forest | rf | 0,7954135737911665 |
Gradient Boosting | gb | 0,7857407432117608 |
Réseau de neurones simple | rn | 0,7585749852167508 |
SVM avec réduction de la dimension | svd_svm | 0,7463318764800209 |
K plus proches voisins | knn | 0,7009108287785425 |
Nous avons aussi commencé à implémenter une méthode basée sur le modèle BERT et une basée sur les CNN, mais nous avons été limités par nos capacités d'entraînement. Le travail en cours est disponible sur les branches éponymes.
- Mattéo Lucas
- Mathias Polverino
- Hugo Lelièvre