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

SAS STAT Discussion :

Courbe ROC avec regression logistique


Sujet :

SAS STAT

  1. #1
    thomahh
    Invité(e)
    Par défaut Courbe ROC avec regression logistique
    Bonjour,

    j'effectue une régression logistique, ma courbe ROC à un AUC de 85% !

    Quand je fais la matrice de confusion, j'obtiens 0 de biens prédits pour l'évènement recherché à un seuil de 0.5.

    J'ai l'impression que la courbe ROC ne veut rien dire. EN effet à quoi ça sert de dire que mon modèle est bon car la courbe ROC est à 85% alors que je n'arrive pas à prédire l'évènement recherché ???

    Ai-je raison oui ou non ?

  2. #2
    thomahh
    Invité(e)
    Par défaut
    ou alors c'est moi qui ne sait pas me servir de SAS. Je ne sais pas.

    Help.

  3. #3
    Membre expérimenté


    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    3 176
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 176
    Par défaut
    Peux-tu nous indiquer ton programme SAS et ta log ?
    Les balises code
    FAQ SAS
    Rubrique SAS

    Si vous souhaitez contribuer à la rubrique SAS, contactez-moi ou tout autre membre de l'équipe BI par MP.

  4. #4
    thomahh
    Invité(e)
    Par défaut
    Voici le code:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    data infosx modeltest;
    set infos1;
    alea=ranuni(0);
    if 0<alea<0.75 then output infosx; /* car on veut 75% ds chaque table*/
    else output modeltest;
    run;
    ods results on;
    ods listing;
    ODS OUTPUT CLParmWald = tableSAS ;
    proc logistic data=infosx plots=roc(id=prob)PLOTS(MAXPOINTS=NONE)   ;
    class                  
    dcapitaltr
    dAnciennete_CFK2
    /param=ref ;
    model ctxpc(event="OUI")=                
    dcapitaltr
    dAnciennete_CFK2
    / CLPARM=WALD   rsquare lackfit ctable corrb   ; 
    output out=out predicted=proba1;
    score data= modeltest  out= modelscore ; 
    run;
    proc freq data=modelscore;
    table F_CTXPC*I_CTXPC;
    run;

    et voici la LOG:

    4279 data infosx modeltest;
    4280 set infos1;
    4281 alea=ranuni(0);
    4282 if 0<alea<0.75 then output infosx; /* car on veut 75% ds chaque table*/
    4283 else output modeltest;
    4284 run;

    NOTE: There were 9715 observations read from the data set WORK.INFOS1.
    NOTE: The data set WORK.INFOSX has 7294 observations and 51 variables.
    NOTE: The data set WORK.MODELTEST has 2421 observations and 51 variables.
    NOTE: L'étape DATA used (Total process time):
    real time 0.04 secondes
    cpu time 0.04 secondes


    4285 ods results on;
    4286 ods listing;
    4287 ODS OUTPUT CLParmWald = tableSAS ;
    4288 proc logistic data=infosx plots=roc(id=prob)PLOTS(MAXPOINTS=NONE) ;
    4289 class
    4290 dcapitaltr
    4291 dAnciennete_CFK2
    4292 /param=ref ;
    4293 model ctxpc(event="OUI")=
    4294 dcapitaltr
    4295 dAnciennete_CFK2
    4296 / CLPARM=WALD rsquare lackfit ctable corrb ;
    4297 output out=out predicted=proba1;
    4298 score data= modeltest out= modelscore ;
    4299 run;

    NOTE: PROC LOGISTIC is modeling the probability that CTXPC='OUI'.
    NOTE: Convergence criterion (GCONV=1E-8) satisfied.
    NOTE: The data set WORK.TABLESAS has 10 observations and 5 variables.
    NOTE: There were 7294 observations read from the data set WORK.INFOSX.
    NOTE: The data set WORK.OUT has 7294 observations and 53 variables.
    NOTE: The data set WORK.MODELSCORE has 2421 observations and 55 variables.
    NOTE: PROCEDURE LOGISTIC used (Total process time):
    real time 2.05 secondes
    cpu time 0.73 secondes


    4300 proc freq data=modelscore;
    4301 table F_CTXPC*I_CTXPC;
    4302 run;

    NOTE: There were 2421 observations read from the data set WORK.MODELSCORE.
    NOTE: PROCEDURE FREQ used (Total process time):
    real time 0.03 secondes
    cpu time 0.01 secondes

  5. #5
    Membre expérimenté


    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    3 176
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 176
    Par défaut
    Bonjour,
    Le seuil 0.5 correspond-il à ton seuil optimal obtenu par ta courbe ROC ?
    Comment as-tu choisi ce seuil ?
    Les balises code
    FAQ SAS
    Rubrique SAS

    Si vous souhaitez contribuer à la rubrique SAS, contactez-moi ou tout autre membre de l'équipe BI par MP.

  6. #6
    thomahh
    Invité(e)
    Par défaut
    Bonjour,

    Comme tu peux voir dans mon programme, il n'y a pas de choix de suil pour la courbe ROC. Quel est le code pour effectuer un choix de seuil dans une courbe ROC ?

  7. #7
    Membre expérimenté


    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    3 176
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 176
    Par défaut
    Alors là, je sais pas ... faudrait chercher !
    Et quand tu regardes ta courbe ROC, quelle probabilité tu serais amener à garder ?
    Les balises code
    FAQ SAS
    Rubrique SAS

    Si vous souhaitez contribuer à la rubrique SAS, contactez-moi ou tout autre membre de l'équipe BI par MP.

  8. #8
    Membre expérimenté


    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    3 176
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 176
    Par défaut
    Dans une de tes tables générées par SAS, n'as-tu pas une probabilité prédite (estimée) en colonne ?
    Les balises code
    FAQ SAS
    Rubrique SAS

    Si vous souhaitez contribuer à la rubrique SAS, contactez-moi ou tout autre membre de l'équipe BI par MP.

  9. #9
    thomahh
    Invité(e)
    Par défaut
    Si bien sur que j'ai cette probabilité. C'est grâce à elle que je peux faire la matrice de confusion.

  10. #10
    Membre expérimenté


    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    3 176
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 176
    Par défaut
    Hello,
    Voici une réponse à ta question :
    Dans l'exemple, en regardant la courbe ROC j'ai considéré que la proba optimale était de 0.67 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    data vaso;
          length Response $12;
          input Volume Rate Response @@;
          LogVolume=log(Volume);
          LogRate=log(Rate);
          datalines;
       3.70  0.825  constrict       3.50  1.09   constrict
       1.25  2.50   constrict       0.75  1.50   constrict
       0.80  3.20   constrict       0.70  3.50   constrict
       0.60  0.75   no_constrict    1.10  1.70   no_constrict
       0.90  0.75   no_constrict    0.90  0.45   no_constrict
       0.80  0.57   no_constrict    0.55  2.75   no_constrict
       0.60  3.00   no_constrict    1.40  2.33   constrict
       0.75  3.75   constrict       2.30  1.64   constrict
       3.20  1.60   constrict       0.85  1.415  constrict
       1.70  1.06   no_constrict    1.80  1.80   constrict
       0.40  2.00   no_constrict    0.95  1.36   no_constrict
       1.35  1.35   no_constrict    1.50  1.36   no_constrict
       1.60  1.78   constrict       0.60  1.50   no_constrict
       1.80  1.50   constrict       0.95  1.90   no_constrict
       1.90  0.95   constrict       1.60  0.40   no_constrict
       2.70  0.75   constrict       2.35  0.03   no_constrict
       1.10  1.83   no_constrict    1.10  2.20   constrict
       1.20  2.00   constrict       0.80  3.33   constrict
       0.95  1.90   no_constrict    0.75  1.90   no_constrict
       1.30  1.625  constrict
       ;
     
     
       ods graphics on;
       title 'Occurrence of Vasoconstriction';
       proc logistic data=vaso plots=roc(id=prob);
          model Response=LogRate LogVolume/influence iplots;
    	   output out=out predicted=proba1;
    	   score data= vaso out= modelscore ;
       run;
       ods graphics off;
     
       DATA base;
       SET modelscore;
       IF P_constrict>0.67 THEN PRED='constrict';
       ELSE PRED='no_constrict';
       RUN;
     
       PROC FREQ DATA=base;
       TABLE F_Response*I_Response; /*Regles de Bayes classique : proba>0.5*/
    	TABLE F_Response*PRED;
    	RUN;
    En regardant les résultats de la proc freq on remarque qu'en prenant une proba de 0.67 on améliore la discrimination par rapport à la règle classique de Bayes qui prend 0.5 !
    Les balises code
    FAQ SAS
    Rubrique SAS

    Si vous souhaitez contribuer à la rubrique SAS, contactez-moi ou tout autre membre de l'équipe BI par MP.

  11. #11
    thomahh
    Invité(e)
    Par défaut
    En fait mon modèle n'estime aucune probabilité supérieure à 0,5 pour l'évènement recherché. C'est ça le hic. C'est pourquoi je trouve que la courbe ROC ne sers à rien. Ok, j'ai 98% de bonne réponse, mais les 2% restant correspondent à tout ceux pour lequel l'évènement est arrivé.

  12. #12
    Membre expérimenté


    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    3 176
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 176
    Par défaut
    La courbe ROC ne donne pas le taux de mal classés : elle donne les sensibilités et spécificités ... ça n'a rien à voir avec le taux de mal classés !!!
    Si ton AUC est à 85 % tu as forcément un seuil (même inférieur à 0.5) qui te donnera de bon résultats !
    Les balises code
    FAQ SAS
    Rubrique SAS

    Si vous souhaitez contribuer à la rubrique SAS, contactez-moi ou tout autre membre de l'équipe BI par MP.

  13. #13
    thomahh
    Invité(e)
    Par défaut
    Non. Si je mets un seuil de 0.2, j'ai 3 bonnes réponses pour 22 fausses. Ca craint.

  14. #14
    thomahh
    Invité(e)
    Par défaut
    Merci quand même pour ton aide.

  15. #15
    Membre expérimenté


    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    3 176
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 176
    Par défaut
    Citation Envoyé par thomahh Voir le message
    Non. Si je mets un seuil de 0.2, j'ai 3 bonnes réponses pour 22 fausses. Ca craint.
    Tes résultats sont plus qu'étonnant !
    Tu trouves un AUC de 85 %, ton seuil optimal est apparemment de 0.2 % d'après ta courbe ROC ... et avec ce seuil tu obtiens un taux de mal classés de 3/(22+3)=0.12 .. ça me paraît plus qu'étrange !
    Es-tu sur de ton seuil optimal ?
    Quel taux de mal classés, sensibilité, spécifié obtiens-tu avec ton seuil optimal et sur ta base d'apprentissage ... car apparemment tu testes ton seuil sur ta base de test ?
    Bon courage !
    Les balises code
    FAQ SAS
    Rubrique SAS

    Si vous souhaitez contribuer à la rubrique SAS, contactez-moi ou tout autre membre de l'équipe BI par MP.

  16. #16
    thomahh
    Invité(e)
    Par défaut
    Mon seuil optimal...

    La pour le coup c'est moi qui ait choisi le seuil. Je te montre comment je fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    /*Modelscore est la sortie du scoring sur la table modeltest*/
    data modelscore;
    set modelscore;
    if P_oui>0.2 and CTXPC="OUI" then Bienpredit=1;
    else Bienpredit=0;
     
    proc freq data=modelscore;
    table Bienpredit;
    run;
    Ce n'est pas un seuil optimal. C'est juste parce que tu ma dis de baisser mon seuil pour voir si j'aurai des meilleurs résultats. La réponse est non.

  17. #17
    Membre expérimenté


    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    3 176
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 176
    Par défaut
    Citation Envoyé par thomahh Voir le message
    Mon seuil optimal...

    La pour le coup c'est moi qui ait choisi le seuil. Je te montre comment je fais :
    Tu ne dois pas le choisir, tu dois le trouver en regardant ta courbe ROC

    Ce n'est pas un seuil optimal. C'est juste parce que tu ma dis de baisser mon seuil pour voir si j'aurai des meilleurs résultats. La réponse est non.
    Comme tu as dit que :
    Citation Envoyé par thomahh Voir le message
    En fait mon modèle n'estime aucune probabilité supérieure à 0,5 pour l'évènement recherché.
    Ton seuil optimal que tu dois chercher à l'aide de la courbe ROC (je me répète) est donc forcément inférieur à 0.05.


    Un question : sais-tu comment chercher ce seuil sur la courbe ROC ?

    a+
    Les balises code
    FAQ SAS
    Rubrique SAS

    Si vous souhaitez contribuer à la rubrique SAS, contactez-moi ou tout autre membre de l'équipe BI par MP.

  18. #18
    thomahh
    Invité(e)
    Par défaut
    C'est quand la pente de la courbe est plus petite que celle de la diagonale ?

  19. #19
    Membre expérimenté


    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    3 176
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 176
    Par défaut
    Citation Envoyé par thomahh Voir le message
    C'est quand la pente de la courbe est plus petite que celle de la diagonale ?
    C'est le point situé la plus en haut à gauche !
    Les balises code
    FAQ SAS
    Rubrique SAS

    Si vous souhaitez contribuer à la rubrique SAS, contactez-moi ou tout autre membre de l'équipe BI par MP.

  20. #20
    thomahh
    Invité(e)
    Par défaut
    Voici la courbe. Moi je dirai dans les 0.8.

    Et l'AUC est de 0.82. Entre temps, j'ai changé le modèle.
    Images attachées Images attachées  

Discussions similaires

  1. [Regression logistique]Variable MODEL avec 3 modalités
    Par cococmoi dans le forum SAS STAT
    Réponses: 0
    Dernier message: 21/08/2012, 14h23
  2. Regression logistique avec stratification
    Par Lasse dans le forum SAS STAT
    Réponses: 0
    Dernier message: 16/07/2012, 12h55
  3. Réponses: 1
    Dernier message: 18/06/2007, 23h15
  4. tracé de courbe xy avec mschart
    Par legos dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 24/09/2006, 16h30
  5. Faire un zoom sur courbe Wave avec déplacement
    Par FredericB dans le forum C++Builder
    Réponses: 3
    Dernier message: 23/04/2006, 15h22

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