IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

R Discussion :

Optimiser la précision d'une classe - prédiction et arbre de décision


Sujet :

R

  1. #1
    Candidat au Club
    Homme Profil pro
    en alternance
    Inscrit en
    Juillet 2017
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : en alternance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2017
    Messages : 3
    Points : 3
    Points
    3
    Par défaut Optimiser la précision d'une classe - prédiction et arbre de décision
    Bonjour à tous,

    J'ai réalisé un différentes méthodes de prédiction afin de parvenir à identifier des personnes susceptibles de résilier leurs contrats (churns).

    Je possède 26 variables dans mon analyse et en utilisant un arbre de décision avec la méthode "rpart" (plutôt reconnue), j'obtiens la matrice de confusion suivante :

    Nom : confusionmatrix.JPG
Affichages : 377
Taille : 39,0 Ko

    La précision est correcte même si perfectible, cependant l'objectif le plus intéressant dans cette analyse est d'identifier les personnes qui résilient, ce que fait l'algorithme avec 3,3% de précision seulement...

    Je cherche ainsi de nouvelles manières de faire grimper la précision pour la modalité "Oui". J'ai pensé à passer par une phase de pré-traitement (Dummy Variables puis centrer-réduire) mais j'ai peur que cela ne serve pas à grand chose...

    Je suis preneur de toutes les suggestions que vous pourrez m'apporter

    Merci à vous.

  2. #2
    Membre averti
    Homme Profil pro
    Data scientist
    Inscrit en
    Février 2017
    Messages
    211
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Data scientist
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2017
    Messages : 211
    Points : 343
    Points
    343
    Par défaut
    Bonjour,

    Peut-être réduire les variables et ne garder que celles qui influence ta variable à expliquer, changer le modèle peut aussi résoudre ta problématique, essayer du Generalized boosted models ( fonction gbm() sur R ), ou peut être faire une glm qui prédira plutôt l'espérance d'appartenir à une classe. vérifier la corrélation entre les variables explicatives...

    J'espère que j'ai pu t'aider !

    Bonne journée.

  3. #3
    Expert confirmé
    Avatar de olivier.decourt
    Homme Profil pro
    Formateur R/SAS/statistiques
    Inscrit en
    Avril 2008
    Messages
    2 064
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Activité : Formateur R/SAS/statistiques
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 064
    Points : 4 478
    Points
    4 478
    Par défaut
    Bonjour.
    Pour améliorer un arbre de décision, il n'y a pas beaucoup de recettes miracles. En termes de transformations en amont du modèle, la création d'indicatrices ou les centrages/réductions ne changeront rien. Si tu as des combinaisons de variables (ratios, transformations mathématiques) qui ont un sens métier, tu peux les ajouter car l'arbre ne créera jamais l'équivalent d'un ratio de sa propre initiative.
    Passer par du boosting ou une forêt aléatoire, ça va te produire un modèle beaucoup moins lisible, et ce n'est peut-être pas ce que tu veux.

    Une autre piste serait de "rééquilibrer" ton échantillon de données : il faudrait que les Oui y soient moins minoritaires. Je ne te propose pas de faire du 50/50 vu le volume de Oui mais si tu pouvais garder seulement un échantillon aléatoire des Non pour arriver à 10% de Oui, ça aiderait peut-être le modèle à mieux les distinguer.
    Bon courage.
    Olivier

  4. #4
    Candidat au Club
    Homme Profil pro
    en alternance
    Inscrit en
    Juillet 2017
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : en alternance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2017
    Messages : 3
    Points : 3
    Points
    3
    Par défaut
    Citation Envoyé par olivier.decourt Voir le message
    Une autre piste serait de "rééquilibrer" ton échantillon de données : il faudrait que les Oui y soient moins minoritaires. Je ne te propose pas de faire du 50/50 vu le volume de Oui mais si tu pouvais garder seulement un échantillon aléatoire des Non pour arriver à 10% de Oui, ça aiderait peut-être le modèle à mieux les distinguer.
    Bonjour et merci pour ta réponse aussi rapide. Pour recontextualiser brièvement, je me base sur mes données de 2014, 2015 et 2016 (données d'apprentissage) pour prédire les résiliations de personnes ayant obtenu un contrat en 2017. Il est normal que le modèle prédise beaucoup plus de résiliations que prévu pour 2017 car les données d'apprentissage contiennent beaucoup plus d'individus résiliant : et oui, il y a bcp + de chance de résilier son contrat à un jour J en 2017 si on a souscrit en 2014 que si on a souscrit en 2017.
    Ainsi avec la fonction gbm() avec comme données d'apprentissage 2014 et 2015 pour prédire 2016, c'est beaucoup mieux :

    Nom : capture_mconf2.JPG
Affichages : 377
Taille : 38,5 Ko

    A ce moment là, peut-on dire que le modèle est fiable ?

    Merci !

  5. #5
    Expert confirmé
    Avatar de olivier.decourt
    Homme Profil pro
    Formateur R/SAS/statistiques
    Inscrit en
    Avril 2008
    Messages
    2 064
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Activité : Formateur R/SAS/statistiques
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 064
    Points : 4 478
    Points
    4 478
    Par défaut
    Citation Envoyé par pad76520;9448263je me base sur mes données de 2014, 2015 et 2016 (données d'apprentissage) pour prédire les résiliations de personnes [B
    ayant obtenu un contrat en 2017[/B]. Il est normal que le modèle prédise beaucoup plus de résiliations que prévu pour 2017 car les données d'apprentissage contiennent beaucoup plus d'individus résiliant : et oui, il y a bcp + de chance de résilier son contrat à un jour J en 2017 si on a souscrit en 2014 que si on a souscrit en 2017.
    Je comprends pas bien cette partie, je crois.
    Si tu fais un modèle pour prédire que quelqu'un qui a souscrit un contrat en 2017 va résilier dans l'année 2017, tes données d'apprentissage devraient comptabiliser comme OUI ceux qui ont résilié dans leur année de souscription.
    Si tu fais un modèle pour prédire que quelqu'un qui a souscrit un contrat en 2017 va résilier un jour dans le futur, je n'en vois pas trop l'intérêt : on ne donne aucune échéance. Donc quelle action marketing entreprendre et quand pour éviter la résiliation ? Il est plus courant de faire des modèles de probabilité de résiliation dans l'année en cours, des clients en portefeuille, en fonction de nombreuses infos dont leur ancienneté.
    Bon courage.
    Olivier

Discussions similaires

  1. definir une class avec précision
    Par Invité dans le forum Mise en page CSS
    Réponses: 3
    Dernier message: 21/03/2011, 07h54
  2. Quelques précisions concernant une classe
    Par Caxton dans le forum Débuter avec Java
    Réponses: 6
    Dernier message: 04/08/2010, 08h56
  3. Précision sur fonction static d'une classe pour Thread
    Par thebop dans le forum Threads & Processus
    Réponses: 9
    Dernier message: 22/06/2009, 14h18
  4. Optimiser l'intanciation d'une classe
    Par olibara dans le forum C#
    Réponses: 7
    Dernier message: 17/10/2008, 07h35
  5. Sortir un typedef d'une classe
    Par Theophil dans le forum C++Builder
    Réponses: 13
    Dernier message: 03/07/2002, 17h21

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo