Pb calcul d'AUC forêt aléatoire

Postez ici vos questions, réponses, commentaires ou suggestions - Les sujets seront ultérieurement répartis dans les archives par les modérateurs

Modérateur : Groupe des modérateurs

Megane Michel
Messages : 1
Enregistré le : 22 Mar 2017, 08:16

Pb calcul d'AUC forêt aléatoire

Messagepar Megane Michel » 22 Mar 2017, 09:21

Bonjour à tous,

Avant de poster ici j'ai écumé beaucoup de pages alors soyez indulgents.

J'ai un problème de classification binaire que je traite grâce à une forêt aléatoire (la régression logistique ne donne pas de bons résultats).
Ayant un évènement d'intérêt avec une fréquence d'apparition basse j'utilise une méthode d'undersampling de la classe majoritaire.
J'utilise la fonction "train" du package "caret" pour construire une forêt avec des paramètres optimaux (grâce à des analyses précédentes j'en ai déduit que 200 arbres étaient suffisants). C'est lorsque je veux tester le modèle ainsi obtenu que cela se corse, mon AUC sur l'échantillon d'apprentissage tourne autour de 0.97 (complètement improbable) et celui du test autour de 0.65, il a manifestement un problème dans le calcul de l'AUC mais impossible de comprendre où (puisqu'on voit lors de l’exécution de la fonction train que ROC est environ égal à 0.65 ce que je veux).

En espérant m'être exprimée de façon claire et correcte.

Voici mon code :

Code : Tout sélectionner

set.seed(12345)
train_control <- trainControl(method="boot", number=20, sampling = "down", classProbs = TRUE, summaryFunction = twoClassSummary,savePredictions=TRUE)
RFmodel <- train(as.factor(app[,1]) ~ .,data= app, method = "rf", ntree=200, tuneLength = 5,trControl = train_contro, metric= "ROC", importance = TRUE)
 
print(RFmodel)
print(RFmodel$finalModel)
# échantillon d'apprentisage
Probs_app <- predict(RFmodel, app[, -1], type = "prob")
ROC_app <- roc(response = app[,1], predictor = Probs_app$EVENT, levels = rev(levels(app[,1])))
auc(ROC_app)
plot(ROC_app)
 
# échantillon de test
Probs_test <- predict(RFmodel, test[, -1], type = "prob")
ROC_test <- roc(response = test[,1], predictor = Probs_test$EVENT, levels = rev(levels(test[,1])))
auc(ROC_test)
lines(ROC_test, col = "red")


Merci d'avance

Logez Maxime
Messages : 3138
Enregistré le : 26 Sep 2006, 11:35

Re: Pb calcul d'AUC forêt aléatoire

Messagepar Logez Maxime » 23 Mar 2017, 08:27

Bonjour,

Je ne suis pas sur que le problème soit d'ordre logiciel mais au cas où. Je ne sais pas comment la fonction train gère les formules mais par expérience il est beaucoup plus sur d'utiliser des formules qui font références aux noms des colonnes du data.frame dont sont issus les données plus que des numéros indexés des colonnes. Si la variable que tu cherches à prédire s'appelle "Presence" dans dont data.frame, il vaut mieux d'abord la transformer en facteur au sein de ton data.frame et ensuite utiliser une formule du type Presence ~ . plutôt qu'une formule du type as.factor(app[,1]) ~. qui fait référence à la première colonne de app qui sera ensuite elle même transformer en factor. Si ça ne change rien au résultat alors il te faut regarder probablement si tu as des erreurs de prédictions plus fortes pour certaines combinaison de variables ou si tu n'as pas un problème d'overfitting.

Cordialement,
Maxime


Retourner vers « Questions en cours »

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 1 invité