Bienvenue sur la page du challenge d’Apprentissage automatique du Master 2 MIMSE !
 342 |  8 |  ✔ |
---|---|---|
soumissions | équipes | terminé |
Dernière mise à jour : 08 janv. 2015 00:00
Classement | Equipe | Soumissions | Date | Taux d’erreur | Coût moyen |
---|---|---|---|---|---|
1. | CLF_KH_VG | 58 | 07/01/15 16:12 | 0.220 | 0.740 |
2. | CC_JC_CD | 55 | 07/01/15 15:38 | 0.220 | 0.760 |
3. | GB_AD_BH | 60 | 07/01/15 19:50 | 0.225 | 0.865 |
4. | Anonymous | 25 | 18/11/14 16:55 | 0.225 | 0.925 |
5. | MP_DS_BT | 35 | 31/12/14 13:20 | 0.230 | 0.790 |
6. | FCS_CS_CD | 40 | 07/01/15 18:40 | 0.230 | 0.910 |
7. | CA_IB_YQ | 20 | 28/12/14 15:17 | 0.235 | 0.755 |
8. | DZ_JK_MG | 49 | 05/01/15 11:35 | 0.275 | 1.175 |
9. | baseline | 6 | 07/10/14 16:28 | 0.300 | 1.500 |
Classement | Equipe | Soumissions | Date | Coût moyen | Taux d’erreur |
---|---|---|---|---|---|
1. | DZ_JK_MG | 49 | 06/01/15 09:26 | 0.460 | 0.420 |
2. | CA_IB_YQ | 20 | 05/01/15 17:36 | 0.525 | 0.405 |
3. | CLF_KH_VG | 58 | 07/01/15 22:34 | 0.550 | 0.490 |
4. | MP_DS_BT | 35 | 03/01/15 02:45 | 0.570 | 0.490 |
5. | Anonymous | 25 | 17/10/14 17:21 | 0.615 | 0.255 |
6. | baseline | 6 | 07/10/14 16:28 | 0.700 | 0.700 |
7. | CC_JC_CD | 55 | 07/01/15 22:46 | 0.700 | 0.700 |
8. | FCS_CS_CD | 40 | 07/01/15 22:44 | 0.775 | 0.255 |
9. | GB_AD_BH | 60 | 07/01/15 13:52 | 0.850 | 0.230 |
Classification binaire : prédire la solvabilité ou le risque de non-remboursement d’un ensemble de clients dans le but de l’octroi de crédit bancaire.
On dispose pour cela d’un jeu de données d’apprentissage supervisé : ensemble de clients dont la réponse est connue. Le but est d’obtenir le meilleur score de prédiction sur un jeu de données test dont la réponse est cachée.
Envoyer un email Ă adrien.todeschini@inria.fr contenant les informations suivantes :
Vous recevrez une invitation Ă partager un dossier Dropbox portant le nom de votre Ă©quipe.
Télécharger les données.
Soumettre vos prédictions sur le jeu test sous format csv dans le dossier Dropbox partagé.
Note : Le nombre de soumissions n’est pas limité. Cependant le calcul des scores n’est mis à jour que toutes les heures.
Date limite des soumissions : mercredi 07 janv. 2015 23:59 CET
Nom | Fichier | Description | Liens |
---|---|---|---|
Apprentissage | data_train.rda |
data.frame avec 800 lignes/clients et 21 colonnes/variables |
|
Test | data_test.rda |
data.frame avec 200 lignes/clients et 20 colonnes/variables |
Ces fichiers sont Ă importer dans R avec :
load("data_train.rda")
load("data_test.rda")
La variable à prédire est la variable Class
dont la valeur est Bad
ou Good
. Les valeurs d’apprentissage de cette variable sont fournies dans la dernière colonne de data_train
. data_test
ne contient pas cette colonne puisqu’elle doit être prédite.
Le jeu de données complet contient 30% de Bad
et 70% de Good
. Ces proportions sont respectées à la fois dans le jeu d’apprentissage et le jeu test.
table(data_train$Class)/nrow(data_train)
##
## Bad Good
## 0.3 0.7
Pour la prédiction, on dispose de 20
variables explicatives dont :
7
variables quantitatives de classe numeric
13
variables qualitatives de classe factor
str(data_test)
## 'data.frame': 200 obs. of 20 variables:
## $ Duration : num 24 48 45 36 36 42 24 18 12 18 ...
## $ Amount : num 4870 4308 4746 2225 1977 ...
## $ InstallmentRatePercentage: num 3 3 4 4 4 4 1 2 2 4 ...
## $ ResidenceDuration : num 4 4 2 4 4 3 1 4 4 2 ...
## $ Age : num 53 24 25 57 40 34 44 39 20 33 ...
## $ NumberExistingCredits : num 2 1 2 2 1 1 2 2 1 1 ...
## $ NumberPeopleMaintenance : num 2 1 1 1 1 1 1 2 1 1 ...
## $ Telephone : Factor w/ 2 levels "none","yes": 2 2 2 1 1 2 1 1 2 2 ...
## $ ForeignWorker : Factor w/ 2 levels "no","yes": 2 2 2 2 2 2 2 2 2 2 ...
## $ CheckingAccountStatus : Factor w/ 4 levels "lt.0","0.to.200",..: 1 1 2 2 1 1 4 4 1 1 ...
## $ CreditHistory : Factor w/ 5 levels "NoCredit.AllPaid",..: 4 3 5 4 3 3 3 2 3 3 ...
## $ Purpose : Factor w/ 11 levels "NewCar","UsedCar",..: 1 10 4 1 7 4 4 1 3 3 ...
## $ SavingsAccountBonds : Factor w/ 5 levels "lt.100","100.to.500",..: 1 1 1 1 5 1 5 1 1 1 ...
## $ EmploymentDuration : Factor w/ 5 levels "lt.1","1.to.4",..: 2 1 1 4 4 1 1 4 2 5 ...
## $ Personal : Factor w/ 5 levels "Male.Divorced.Seperated",..: 3 2 3 3 3 3 2 3 2 2 ...
## $ OtherDebtorsGuarantors : Factor w/ 3 levels "None","CoApplicant",..: 1 1 1 1 1 1 1 1 1 1 ...
## $ Property : Factor w/ 4 levels "RealEstate","Insurance",..: 4 2 2 4 4 3 3 4 3 3 ...
## $ OtherInstallmentPlans : Factor w/ 3 levels "Bank","Stores",..: 3 3 3 1 3 3 3 1 3 3 ...
## $ Housing : Factor w/ 3 levels "Rent","Own","ForFree": 3 1 2 3 2 2 2 2 1 2 ...
## $ Job : Factor w/ 4 levels "UnemployedUnskilled",..: 3 3 2 3 4 3 3 4 3 3 ...
Les statistiques univariées de ces variables peuvent facilement être obtenues :
summary(rbind(data_train[,-ncol(data_train)], data_test))
Un classifieur est une fonction qui affecte une classe Bad
ou Good
à l’ensemble des données test. Un telle fonction peut être :
predict_all_good <- function(data_test, ...) {
y_pred = rep("Good", nrow(data_test))
return(y_pred)
}
qui affecte Good
à toutes les individus. Un tel classifieur n’utilise pas les données d’apprentissage. Il correspond à accepter toutes les demandes de crédit. On obtient le résultat suivant
y_pred = predict_all_good(data_test)
Vous devez programmer un ou plusieurs classifieurs qui utilisent les données d’apprentissage pour améliorer les performances d’une telle décision.
Les performances de votre prédiction sont calculées en fonction des vraies réponses de l’ensemble test. On utilisera deux critères différents.
Le taux d’erreur mesure le taux de mauvaise classification de vos prédictions soit le nombre de faux positifs FP
plus le nombre de faux négatifs FN
divisé par le nombre total. Il est mesuré par la fonction average_error
.
error_rate <-
function(y_pred, y_test) {
FP = (y_pred == "Good") & (y_test == "Bad")
FN = (y_pred == "Bad") & (y_test == "Good")
return(sum(FP+FN)/length(y_test))
}
Cette métrique de performance correspond au côut 0-1 moyenné sur l’ensemble des prédictions. Le but est de minimiser le taux d’erreur. Puisque 70% des individus sont Good
, le taux d’erreur associé au prédicteur predict_all_good
est de 0.3, tandis que son homologue predict_all_bad
fournit 0.7. predict_all_good
est ici préférable.
On considère cependant qu’il est 5 fois plus risqué/coûteux d’accorder un crédit à une personne non solvable (faux positif) que de ne pas accorder de crédit à une personne solvable (faux négatif). Le coût moyen est mesuré par la fonction average_cost
.
average_cost <-
function(y_pred, y_test) {
FP = (y_pred == "Good") & (y_test == "Bad")
FN = (y_pred == "Bad") & (y_test == "Good")
return(sum(5*FP+FN)/length(y_test))
}
Le but étant de minimiser le coût moyen, predict_all_bad
est ici préférable avec 0.7 à predict_all_good
avec 1.5. Du point de vue du coût moyen, il est donc moins risqué de n’accorder aucun crédit.
Les soumissions se font sous forme de fichier texte portant l’extension .csv
, que vous pouvez exporter avec la commande suivante :
write(y_pred, file = "my_pred.csv")
Le fichier doit contenir 200
lignes contenant uniquement le mot Bad
ou Good
.
Tous les fichiers .csv
placés dans votre répertoire Dropbox partagé seront automatiquement importés grâce à la fonction read_pred
.
read_pred <- function(file, n = nrow(data_test)) {
y_pred <- scan(file, what = "character")
y_pred <- factor(y_pred, levels = c("Bad", "Good"))
if (length(y_pred) != n)
stop("incorrect number of predictions")
if (any(is.na(y_pred)))
stop("predictions contain missing values (NA)")
return(y_pred)
}
Utilisez cette fonction pour vérifier que votre fichier sera correctement importé.
Les erreurs de lecture lors de l’import sont affichées à la section Erreurs de lecture.
Une fois un fichier importé, son score est calculé et stocké. Vous pouvez effacer ou remplacer des soumissions, l’historique est conservé.
Le classement ainsi que les scores affichés sont calculés sur seulement la moitié des données test. Le score final calculé sur toutes les données test sera révélé à la fin du challenge.
Seul le meilleur score par Ă©quipe parmi toutes les soumissions est retenu.
L’équipe baseline
correspond au score du meilleur classifieur parmi predict_all_bad
ou predict_all_good
qui tient lieu de référence à améliorer.
Equipe | Fichier | Message |
---|---|---|
FCS_CS_CD | my_pred6.csv |
predictions contain missing values (NA) |
FCS_CS_CD | my_pred7.csv |
predictions contain missing values (NA) |
FCS_CS_CD | Rpart.csv |
predictions contain missing values (NA) |
MP_DS_BT | my_pred.csv |
submitted after the deadline |
Développé avec rchallenge.