Validation croisée - Université de Caen
Transcription
Validation croisée - Université de Caen
Université de Caen Basse-Normandie 1 8 janvier 2013 M2-DECIM Fouilles de données Votre banque va t-elle vous prêter de l’argent ? Sommaire 1.1 1.2 Description . . . . . . . . . . . . . . . . . . . . Enoncé . . . . . . . . . . . . . . . . . . . . . . . 1.2.1 Préparation des données . . . . . . . . . . . . 1.2.2 Valeurs manquantes . . . . . . . . . . . . . . 1.2.3 Modèle de régression logistique . . . . . . . . 1.2.4 Décision : oui ou non . . . . . . . . . . . . . . 1.2.5 Validation par bootstrap . . . . . . . . . . . . 1.2.6 n-Validation croisée . . . . . . . . . . . . . . 1.2.7 Phase finale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 2 2 3 5 7 10 11 13 Table des figures 1 2 3 Courbe de Roc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Courbe de Lift . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Statistiques estimées par bootstrap . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 9 11 Liste des tableaux 1 3 5 7 9 11 13 15 17 19 1.1 Description des colonnes de la table hmeq . . . . . . . . . Premières lignes de la table hemq . . . . . . . . . . . . . . Descriptif de la table . . . . . . . . . . . . . . . . . . . . . Coefficients estimés . . . . . . . . . . . . . . . . . . . . . . Résultats de la régression logistique . . . . . . . . . . . . . Rapports de cote . . . . . . . . . . . . . . . . . . . . . . . Scoring de la table . . . . . . . . . . . . . . . . . . . . . . Matrice de confusion pour différents niveau de probabilité Table de lift . . . . . . . . . . . . . . . . . . . . . . . . . . Tableau de contingence croisée . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 2 3 6 6 7 7 8 10 12 Description Une banque, dans le cadre de son service de prêts, désire pouvoir prédire la non solvabilité d’un client demandant prêt en fonction des covariables explicatives. Pour ceci elle utilise sa base de données clientèle constituée de l’historique de 5960 clients ayant contracté au moins un prêt. Le fichier de données est disponible aux formats texte http://www.math.unicaen.fr/~kauffman/data/hmeq.txt sas7bdat http://www.math.unicaen.fr/~kauffman/data/hmeq.sas7bdat la table sans aucun traitement. sas7bdat http://www.math.unicaen.fr/~kauffman/data/hmeq1.sas7bdat la table avec les données manquantes complétées. Cette base de données, sert d’exemple pour SAS Entreprise Miner. Dans cet exercice nous allons utiliser SAS (BASE,STAT,GRAPH) uniquement. http://www.math.unicaen.fr/~kauffman/cours 1 [email protected] Université de Caen Basse-Normandie Bad Loan Mortdue Value Reason Job Yoj Derog Deling Clage Ninq Clno Debtinc qualitatif quantitatif quantitatif quantitatif qualitatif qualitatif quantitatif quantitatif quantitatif quantitatif quantitatif quantitatif quantitatif 8 janvier 2013 M2-DECIM Fouilles de données la personne a remboursé son crédit sans incident(Bad=0) avec incidents (Bad=1) montant de la demande de prêt montant du sur l’hypothèque valeur de la propriété motif du prêt : Consolidation financière Debtcon ,amélioration habitat Homelmp. profession Mgr,Office, Other, ProfXexe, Sales, Self, manque nombre d’années dans le travail actuel nombre de demande de report d’échéances de prêt nombre de litiges Age du plus ancien crédit en mois nombre de demandes récentes de crédit nombre de crédits dans la banque Ratio dette sur revenu Table 1 – Description des colonnes de la table hmeq Obs 1 2 3 4 5 bad 1 1 1 1 0 loan 1100 1300 1500 1500 1700 mortdue 25860 70053 13500 . 97800 value 39025 68400 16700 . 112000 reason HomeImp HomeImp HomeImp job Other Other Other HomeImp Office yoj 10.5 7.0 4.0 . 3.0 derog 0 0 0 . 0 delinq 0 2 0 . 0 clage 94.37 121.83 149.47 . 93.33 ninq 1 0 1 . 0 clno 9 14 10 . 14 debtinc . . . . . fold 3 4 3 3 3 Table 3 – Premières lignes de la table hemq Références [1] Robert C. Blattberg, Byung-Do Kim, and Scott A. Neslin. Database marketing, Analysing and Managing Custumers. Springer, 2008. 3 [2] Andrew Gelman and Jennifer Hill. Data Analysis using regression and Multilevel/Hierarchical models. Cambridge, 2007. 1.2.2 1.2 1.2.1 Enoncé Préparation des données 1. Dans cette question, on initialise la session SAS. (a) Créer un répertoire hmeq dans le quel on travaillera. Puis un sous répertoire lib. (b) Télé-chargez le fichier hmeq.sas7bdat et le mettre dans le répertoire lib. (c) Définir comme répertoire associé à votre libraire par défaut user , le répertoire lib. (d) Créer la table nommée variables contenant le descriptif des variables à l’aide de la procédure contents. (e) Ajouter à la table hmeq une colonne validation à l’aide de l’instruction validation=rand(’table’,.6,.2,.2). Cette instruction permet de simuler un échantillon indépendant d’une va discrète prenant 3 valeurs {1, 2, 3} dont on peut préciser la loi. La base de données sera composée de trois parties disjointes Apprentissage(1) 60%, Test(2) 20%, Validation(3) 20%. http://www.math.unicaen.fr/~kauffman/cours 2 [email protected] Université de Caen Basse-Normandie Obs 1 2 3 4 5 6 7 8 9 10 11 12 13 14 Member USER.HMEQ USER.HMEQ USER.HMEQ USER.HMEQ USER.HMEQ USER.HMEQ USER.HMEQ USER.HMEQ USER.HMEQ USER.HMEQ USER.HMEQ USER.HMEQ USER.HMEQ USER.HMEQ Num 2 11 13 14 10 9 7 3 4 12 6 1 5 8 Variable bad clage clno debtinc delinq derog job loan mortdue ninq reason validation value yoj 8 janvier 2013 Type Num Num Num Num Num Num Alph Num Num Num Alph Num Num Num Len 8 8 8 8 8 8 6 8 8 8 7 8 8 8 Pos 8 64 80 88 56 48 103 16 24 72 96 0 32 40 M2-DECIM Fouilles de données Format Label Default or seriously delinquent Age of oldest trade line in months Number of trade (credit) lines Debt to income ratio Number of delinquent trade lines Number of major derogatory reports Prof/exec sales mngr office self other Amount of current loan request Amount due on existing mortgage Number of recent credit inquiries Home improvement or debt consolidation VALID. Value of current property Years on current job Table 5 – Descriptif de la table 2. Dans cette question, on veut étudier si certaines variables explicatives ont un lien avec la variable bad. Dans un premier temps, on fait une analyse graphique à l’aide du module INSIGHT de SAS Solution-> Analyse-> Analyse interactive des données. Construire des boites à moustaches des variables quantitatives en fonction de la variable bad. Explicitez les sens de variation. Faire de même avec les variables explicatives qualitatives, on obtient des graphiques mosaique (analyse factorielle des correspondances simples). Enoncez les méthodes statistiques qui pourraient permettre de quantifier cette approche empirique. 3. La table (ou le catalogue) dictionary.columns contient la description de toutes les tables de SAS, si j’ai bien compris ! Les instructions suivantes permettent de créer une macro variable nommée names de valeur la concaténation des réponses d’une requête SQL. proc sql; select name into :names separated by ' ' from dictionary.columns where upper(libname)='USER' and upper(memname)='HMEQ'; %put &names; quit; (a) Créer la macro variable nbvars contenant le nombre de colonne de la table HMEQ. (b) La syntaxe into :var1-:var&nbvars, permet de créer les macros variables var1, var2, ..., var&nbvars. Construire alors nbvars macros variables contenant le nom des colonnes. (c) De même calculer le type d’une variable de la table HMEQ. 1.2.2 Valeurs manquantes Dans cette question, on traite le cas des valeurs manquantes. Sur ce problème difficile, on peut consulter le chapitre Missing data imputation du livre d’Andrew Gelman [2]. Ce chapitre est très abordable et est illustré avec R. Dans SAS des méthodes de remplacement de valeurs manquantes sont disponibles dont les méthodes d’imputations multiples avec la proc mi ou Entreprise Miner. Ici nous allons utiliser deux méthodes : la méthode du remplacement des valeurs manquantes d’une variable par une seule valeur (la moyenne ou le mode) en anglais ”Single Imputation”, conjointement avec l’ajout d’une variable binaire pour chacune des variables explicatives indiquant si la valeur est manquante ou pas en anglais ”Missing variable dummies”. Plusieurs solutions sont possibles dans SAS pour calculer des valeurs moyennes, des modes ou des valeurs fréquentes par exemple la proc univariate. On fait le choix de n’utiliser que la proc sql couplée avec de la macro programmation, pour calculer les moyennes ou des modes puis les remplacer les valeurs manquantes par ces valeurs choisies. 1. Définir les macros type defaut comme étant des macros variables globales. Elles peuvent être définies et modifiées à l’intérieur de macros fonctions. % global type defaut; http://www.math.unicaen.fr/~kauffman/cours 3 [email protected] Université de Caen Basse-Normandie 8 janvier 2013 M2-DECIM Fouilles de données 2. Construire une requête SQL permettant de calculer la moyenne d’une variable quantitative. Puis construire un macro programme MACRO moyenne(nom,table=_LAST_); permettant de créer une macro variable nommée défaut dont la valeur sera la moyenne de la variable quantitative nom de la table nommée table. proc sql; % MACRO MOYENNE(nom,table=_LAST_); select mean(&nom) into :defaut from &table; % let defaut=&defaut; % MEND; % MOYENNE(loan,table=hmeq) % put &defaut; quit; 3. Construire une requête ou plusieurs requêtes SQL permettant d’obtenir la modalité la plus fréquente d’une variable qualitative. Puis construire un macro programme MACRO mode(nom,table=_LAST_); permettant de créer une macro variable nommée defaut dont la valeur sera le mode de la variable qualitative nom de la table nommée table. proc sql; % MACRO mode(nom,table=_LAST_); select &nom into :defaut from ( select &nom,count(*) as freq from &table where &nom ^= '' group by &nom ) having freq=max(freq); % let defaut="&defaut"; % MEND; % MODE(reason,table=hmeq) % put &defaut; quit; 4. Que fait la macro suivante ? %MACRO DEFAUT(var,table=_LAST_,defaut= ); %let type=na; %let m_existe=; %if(&defaut= ) %THEN %DO; select type into :type from dictionary.columns where upper(libname)='USER' and upper(memname)=upper("&table") and upper(name)=upper("&var"); select name into :m_existe from dictionary.columns where upper(libname)='USER' and upper(memname)=upper("&table") and upper(name)=upper("m_&var"); %IF &TYPE=num %THEN %MOYENNE(&var,table=&table); %ELSE %MODE(&var,table=&table); %IF(&m_existe= ) %THEN %DO; alter table hmeq add m_&var num label="&var valeur manquante"; update hmeq set m_&var=case when &var IS MISSING then 1 else 0 end; %END; %END; update hmeq set &var=&defaut where m_&var=1; %put DEFAUT--> var="&var" m_existe=&m_existe type=&type defaut="&defaut"; %MEND; /* essais */ proc sql; %DEFAUT(loan,table=HMEQ); %DEFAUT(yoj,table=HMEQ,defaut=14); %DEFAUT(reason,table=HMEQ,defaut=na); quit; http://www.math.unicaen.fr/~kauffman/cours 4 [email protected] Université de Caen Basse-Normandie 8 janvier 2013 M2-DECIM Fouilles de données 5. Redéfinir les valeurs manquantes des variables explicatives en leur mode si elles sont sont qualitatives et en leur moyenne si elles sont quantitatives, ainsi que les variables indicatrices des valeurs manquantes. /* DECOUPE CHAINE TRES GROS PB AVEC QSCAN BUG?*/ %MACRO DECOUPE(chaine,table=_LAST_); %let count=1; %let y=%scan(&chaine,&count); %do %while(&y ne ); %put DECOUPE=&count "&y"; %DEFAUT(&y,table=&table) %let count=%eval(&count+1); %let y=%scan(&chaine,&count); %end; %MEND; quit; proc sql; %DECOUPE(&names,table=HMEQ) quit; /* defaut pour na */ 6. On traite maintenant les cas particuliers. A l’aide de la macro, définir la valeur manquante de debtinc à 50 (expliquez ce choix de SAS). Redéfinir les valeurs manquantes des variables job et reason à la chaı̂ne "na". proc sql; %DEFAUT(debtinc,table=HMEQ,defaut=50) /* debtinc def=50 */ %DEFAUT(job,table=HMEQ,defaut="na") /* job na */ %DEFAUT(reason,table=HMEQ,defaut="na")/* reason na */ quit; 1.2.3 Modèle de régression logistique Dans cette question, on estime un modèle de régression logistique (uniquement les effets principaux, pas de recherche de modèle) grâce à la base d’apprentissage ou de test validation = ^3. proc logistic data=hmeq(where=(validation ^=3)) outmodel=modele; class reason(param=ref ref='na') job(param=ref ref='na') ; model bad(event='1')= loan--m_debtinc/ ctable pprob= (0.3, 0.5 to 0.8 by 0.1) outroc=roc roceps=.01; output out=logistic predprobs=(individual) l=lower95 u=upper95 / alpha=.05; run; proc logistic inmodel=modele; score data=hmeq out=valid(keep=validation loan bad P_1); run; Voici quelques résultats extraits des sorties de SAS. http://www.math.unicaen.fr/~kauffman/cours 5 [email protected] Université de Caen Basse-Normandie Obs 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 Variable Intercept loan mortdue value reason reason job job job job job job yoj derog delinq clage ninq clno debtinc m validation m bad m loan m mortdue m value m reason m job m yoj m derog m delinq m clage m ninq m clno m debtinc 8 janvier 2013 ClassVal0 DebtCon HomeImp Mgr Office Other ProfEx Sales Self DF 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 1 1 0 0 1 1 1 1 1 1 1 Estimate −7.2591 −0.00001 −3.23E−6 4.063E−6 −0.1410 0.0152 2.2215 1.6262 2.4060 2.1180 3.5798 2.7540 −0.0130 0.5226 0.7998 −0.00631 0.1713 −0.0110 0.0978 0 0 0 0.4077 5.1512 0 0 −0.5261 −2.1311 −1.1000 0.9641 −0.2792 3.3480 1.1599 M2-DECIM Fouilles de données StdErr 0.6283 5.356E−6 1.86E−6 1.293E−6 0.3411 0.3458 0.4875 0.4904 0.4718 0.4838 0.5583 0.5504 0.00763 0.0684 0.0586 0.000764 0.0291 0.00594 0.00989 . . . 0.2330 0.5543 . . 0.2171 0.3352 0.4472 0.3941 0.4199 0.7112 0.1678 WaldChiSq 133.4665 3.5818 3.0201 9.8775 0.1708 0.0019 20.7679 10.9959 26.0071 19.1642 41.1087 25.0373 2.9162 58.4341 186.4341 68.3873 34.5669 3.4171 97.7408 . . . 3.0615 86.3793 . . 5.8695 40.4140 6.0489 5.9858 0.4422 22.1637 47.8013 ProbChiSq <.0001 0.0584 0.0822 0.0017 0.6794 0.9649 <.0001 0.0009 <.0001 <.0001 <.0001 <.0001 0.0877 <.0001 <.0001 <.0001 <.0001 0.0645 <.0001 . . . 0.0802 <.0001 . . 0.0154 <.0001 0.0139 0.0144 0.5061 <.0001 <.0001 Table 7 – Coefficients estimés Obs 1 2 3 4 Label1 Percent Concordant Percent Discordant Percent Tied Pairs cValue1 91.0 8.8 0.2 3643250 nValue1 90.961861 8.841090 0.197049 3643250 Label2 Somers’ D Gamma Tau−a c cValue2 0.821 0.823 0.261 0.911 nValue2 0.821208 0.822829 0.261396 0.910604 Table 9 – Résultats de la régression logistique http://www.math.unicaen.fr/~kauffman/cours 6 [email protected] Université de Caen Basse-Normandie Obs 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 8 janvier 2013 Effect loan mortdue value reason DebtCon vs na reason HomeImp vs na job Mgr vs na job Office vs na job Other vs na job ProfEx vs na job Sales vs na job Self vs na yoj derog delinq clage ninq clno debtinc m mortdue m value m yoj m derog m delinq m clage m ninq m clno m debtinc OddsRatioEst 1.000 1.000 1.000 0.869 1.015 9.221 5.085 11.089 8.315 35.865 15.705 0.987 1.686 2.225 0.994 1.187 0.989 1.103 1.503 172.646 0.591 0.119 0.333 2.623 0.756 28.446 3.190 M2-DECIM Fouilles de données LowerCL 1.000 1.000 1.000 0.445 0.516 3.547 1.945 4.399 3.221 12.007 5.340 0.972 1.475 1.984 0.992 1.121 0.978 1.082 0.952 58.261 0.386 0.062 0.139 1.211 0.332 7.058 2.296 UpperCL 1.000 1.000 1.000 1.695 2.000 23.971 13.295 27.956 21.462 107.132 46.189 1.002 1.928 2.496 0.995 1.257 1.001 1.124 2.374 511.608 0.904 0.229 0.800 5.677 1.723 114.648 4.431 Table 11 – Rapports de cote Obs 1 2 3 4 5 6 7 8 9 10 validation Test Apprentissage Apprentissage Test Apprentissage Validation Apprentissage Apprentissage Validation Apprentissage bad 1 1 1 1 1 1 1 1 1 1 loan 23300 2800 50000 40000 12000 22000 6500 15000 8000 37300 P1 1.00000 1.00000 1.00000 0.99999 0.99999 0.99999 0.99998 0.99998 0.99995 0.99994 Table 13 – Scoring de la table 1. Dans la table des coefficiens estimés quels sont les coefficients significativement non nuls, interprétez ces coefficients. 2. Interprétez les rapports de cotes. 3. Décrire les résultats de la régression logistique dit d’association dans SAS. 1.2.4 Décision : oui ou non Dans cette question, on s’interesse aux classiffieurs construits à partir de la régression logistique. 1. Décrire la table suivante. http://www.math.unicaen.fr/~kauffman/cours 7 [email protected] Université de Caen Basse-Normandie Obs 1 2 3 4 5 ProbLevel 0.300 0.500 0.600 0.700 0.800 TrueEvents 720 581 511 418 326 8 janvier 2013 TrueNevents 3483 3660 3732 3783 3808 FalseEvents 352 175 103 52 27 M2-DECIM Fouilles de données FalseNvents 230 369 439 532 624 Correct 87.8 88.6 88.7 87.8 86.4 Sensitivity 75.8 61.2 53.8 44.0 34.3 Specificity 90.8 95.4 97.3 98.6 99.3 FalsePos 32.8 23.1 16.8 11.1 7.6 Table 15 – Matrice de confusion pour différents niveau de probabilité 2. Faire la représentation graphique de la courbe ROC et interprétez. symbol1 i=join v=none c=blue; proc gplot data=roc; plot _sensit_*_1mspec_=1; title 'table roc'; run; quit; symbol1; Sensitivity 1.0 0.9 0.8 0.7 0.6 0.5 0.4 0.3 0.2 0.1 0.0 0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0 1 - Specificity Figure 1 – Courbe de Roc 3. Afin de choisir le seuil de probabilité au dela du quel, le classifieur va prédire que le client est un mauvais payeur, on ordonne les clients de la base d’apprentissage par ordre décroissant de leur score (probabilité d’être d ∈ [0.71, 0.99] sont les 10% des un mauvais payeur), puis on les partitionne en décile. Le premier décile µ(x) clients ayant la plus forte proba d’être un mauvais payeur. Le dixième décile sont les 10% des clients ayant la d ∈ [0., 0.008]. Pour chaque décile, on calcule le profit moyen plus faible probabilité d’être un mauvais payeur µ(x) de la banque. La dernière étape consiste choisir le décile en fonction de critères économiques ( par exemple maximisation du profit). Si on choisit par exemple de ne conserver que les 70% ayant les meilleurs scores d’être d < .10. Cet ensemble un bon payeur, on ne proposera des prêts aux clients ayant un score plus faible que .10 µ(x) de clients sont ceux dont le risque moyen d’être un mauvais payeur est moins de 10%. http://www.math.unicaen.fr/~kauffman/cours 8 [email protected] FalseNeg 6.2 9.2 10.5 12.3 14.1 Université de Caen Basse-Normandie 8 janvier 2013 M2-DECIM Fouilles de données Le lift d’un décile est simplement la probabilité moyenne d’être un mauvais payeur pour ce décile, divisé par la probabilité moyenne d’être un mauvais payeur de l’ensemble des clients. Un lift de 4 veut dire que l’on a 4 fois plus de chance d’être un mauvais payeur que la moyenne. On pourra consulter la partie ’Data Base marketing tool, statistical techniques’ du livre du Pr. Blattberg ”Data Base Marketing” [1]. lift 5 4 3 2 1 0 0 1 2 3 4 5 6 7 8 9 decile predit observe Figure 2 – Courbe de Lift Les critères économiques vont être paramétrisés pour un prêt de la façon suivante bon payeur le gain est de 100 + 0.05 ∗ loan, la banque gagne en moyenne 100 euros et 5% du montant du prêt ( c’est sans doute exagéré). mauvais payeur la perte est de 1000 + .20 ∗ loan, la banque perd en moyenne 1000 euros et perd en moyenne 20% du montant du prêt accordé. (a) Calculer la table de lift sur la base d’apprentissage (b) Trouver le décile à partir du quel les profits sont positifs. (c) Calculer les gains moyens sur la base d’apprentissage et de test. http://www.math.unicaen.fr/~kauffman/cours 9 [email protected] Université de Caen Basse-Normandie Obs 1 2 3 4 5 6 7 8 9 10 decile 0 1 2 3 4 5 6 7 8 9 loan 16579.49 16281.13 16820.79 19800.00 18145.35 19799.72 20069.01 21115.17 18419.15 18063.38 prob min 0.71466 0.38500 0.16306 0.09772 0.06302 0.04385 0.03100 0.01775 0.00823 0.00047 8 janvier 2013 prob max 1.00000 0.71466 0.38479 0.16229 0.09759 0.06295 0.04381 0.03095 0.01775 0.00817 prob pred 0.89133 0.54356 0.25765 0.12418 0.07846 0.05218 0.03692 0.02431 0.01285 0.00397 M2-DECIM Fouilles de données prob obs 0.90449 0.54366 0.25000 0.10704 0.09014 0.05618 0.02254 0.01966 0.01408 0.01690 lift pred 4.39818 2.68214 1.27135 0.61274 0.38716 0.25750 0.18217 0.11996 0.06343 0.01960 lift obs 4.46468 2.68357 1.23403 0.52837 0.44494 0.27731 0.11124 0.09706 0.06952 0.08343 profit −3745.92 −1896.29 −425.85 338.73 565.03 774.28 877.62 1000.68 947.62 980.87 Table 17 – Table de lift proc sort data=valid ;by proc sql; descending P_1 ;run; select count(*) into :nbtotal from valid where validation=1; create view tmp as select monotonic() as n, floor((calculated n-1)/&nbtotal*10) as decile, * from valid where validation=1; select mean(P_1), mean(bad) into :P1_mean,:BAD_MEAN from tmp; create table lift as select decile, mean(loan) as loan, min(P_1) as prob_min,max(P_1) as prob_max, mean(P_1) as prob_pred,mean(bad) as prob_obs, mean(P_1)/&P1_mean as lift_pred, mean(bad)/&BAD_mean as lift_obs, 0 as profit from tmp group by decile; update lift set profit=-(loan*0.2+1000)*prob_pred+(100+loan*0.05)*(1-prob_pred); select max(prob_min),count(*)*10,mean(profit),mean(loan) into :prob_seuil,:pourcentage,:profit,:pret from lift where profit>0; %put seuil=&prob_seuil pourcentage selectionne=&pourcentage, profit moyen=&profit, pret moyen=&pret; quit; 1.2.5 Validation par bootstrap Une des méthodes de validation d’un modèle (pour les petits effectifs) est le méthode de Boostrap. Dans cette question, on réalise cette méthode assez simplement avec SAS. 1. La procédure surveyselect permet de tirer aléatoirement des lignes d’une table. L’option metho=urs ”unrestricted random sampling” permet de faire un tirage aléatoire avec remise de n=500 échantillons parmi ceux de la table hmeq et de répéter rep=20 fois ce tirage, la table de sortie est nommée out=boot. Les colonnes de la table boot sont celles de la table originale aux quelles sont ajoutées les colonnes replicate numéro de la répétition numberhits nombre de fois ou cette ligne a été tirée. proc surveyselect data=hmeq method=urs n=500 rep=20 out=boot; run; 2. L’appel à la procédure logistic nécessite de faire une régression par répétition by replicate;, et de prendre en compte que certaines lignes ont été tirées plusieurs fois freq numberhits; proc logistic data=boot outest=estimates; class http://www.math.unicaen.fr/~kauffman/cours 10 [email protected] Université de Caen Basse-Normandie 8 janvier 2013 M2-DECIM Fouilles de données reason(param=ref ref='na') job(param=ref ref='na') ; model bad(event='1')= loan--m_debtinc; freq numberhits; by replicate; run; 3. La dernière étape consiste à calculer les estimateurs empiriques écarts types des β grâce aux répétitions, on vérifie après que less écarts types estimés par la méthode de bootstrap sont semblables à ceux estimés par la régression logistique (asymptotique). proc means data=estimates n mean std ; var intercept--m_debtinc; run; 4. la sortie ods , ou output ne fonctionne pas comme la sortie des résultats en SAS9.1. J’ai utilisé la sortie rtf puis la commande unix ps2eps pour définir la ”BoundingBox”. La procédure MEANS Variable Libellé Intercept loan mortdue value reasonDebtCon reasonHomeImp jobMgr jobOffice jobOther jobProfEx jobSales jobSelf yoj derog delinq clage ninq clno debtinc m_validation m_bad m_loan m_mortdue m_value m_reason m_job m_yoj m_derog m_delinq m_clage m_ninq m_clno m_debtinc Intercept: bad=0 Amount of current loan request Amount due on existing mortgage Value of current property Home improvement or debt consolidation DebtCon Home improvement or debt consolidation HomeImp Prof/exec sales mngr office self other Mgr Prof/exec sales mngr office self other Office Prof/exec sales mngr office self other Other Prof/exec sales mngr office self other ProfEx Prof/exec sales mngr office self other Sales Prof/exec sales mngr office self other Self Years on current job Number of major derogatory reports Number of delinquent trade lines Age of oldest trade line in months Number of recent credit inquiries Number of trade (credit) lines Debt to income ratio validation valeur manquante bad valeur manquante loan valeur manquante mortdue valeur manquante value valeur manquante reason valeur manquante job valeur manquante yoj valeur manquante derog valeur manquante delinq valeur manquante clage valeur manquante ninq valeur manquante clno valeur manquante debtinc valeur manquante Nb Moyenne Écart-type 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 -13.8955540 -0.000012971 -5.614754E-6 5.6378276E-6 1.6198681 1.6049881 6.8185745 5.9119376 6.8220173 6.7543728 7.1975425 7.5083114 -0.0086700 0.8068074 0.8631005 -0.0078995 0.1548393 -0.0202906 0.1122266 0 0 0 0.9338880 16.3456874 0 0 -0.5753616 -3.4033428 -4.1922645 -1.3667520 -1.7210031 12.1279715 1.2950100 9.5293649 0.000019322 0.000012035 9.7740588E-6 5.7619433 5.7901496 7.3249264 7.4413282 7.3661305 7.1815278 9.2744249 7.5607680 0.0373823 0.2718380 0.2014021 0.0039311 0.1147729 0.0210805 0.0607721 0 0 0 1.1119368 8.5309629 0 0 0.8171444 3.8426720 6.3898586 6.0051523 4.7657256 9.2801052 0.8309383 Figure 3 – Statistiques estimées par bootstrap 1.2.6 n-Validation croisée Cette méthode consiste à découper l’échantillon en n groupes d’effectifs approximativement égaux, puis d’estimer un modèle à partir des tous les groups sauf 1, on estime alors le classifieur sur la partie fold qui n’a pas servi pour l’estimation. 1. La première étape consiste à découper l’échantillon en n groupes en tirant aléatoirement de façon équiprobable parmi 10 nombres {1, · · · , 10}. data hmeq; attrib fold label='Validation croisee'; /* fold première colonne */ set hmeq; fold=rand('table',1/10,1/10,1/10,1/10,1/10,1/10,1/10,1/10,1/10,1/10); run; 2. La macro suivante permet d’estimer le modèle retirant un des groupes, puis de stocker les résultats. data crossvalid; fold=.; http://www.math.unicaen.fr/~kauffman/cours 11 [email protected] Université de Caen Basse-Normandie 8 janvier 2013 M2-DECIM Fouilles de données bad=.; P_1=.; run; %MACRO CROSSVALIDATION(n=10); %DO NFOLD=1 %TO &n; %put cross validation=&nfold/&n; proc logistic data=hmeq(where=(fold^=&nfold)) outmodel=modele; class reason(param=ref ref='na') job(param=ref ref='na') ; model bad(event='1')= loan--m_debtinc; score data=hmeq(where=(fold=&nfold)) out=tmp3(keep= fold bad P_1); run; data crossvalid; set crossvalid tmp3; run; %END; %MEND; 3. La dernière étape consiste à calculer la calsse prédite et faire les comparaisons. data crossvalid; set crossvalid(where=(bad ^= .)); bad_chap=P_1> &prob_seuil; run; proc tabulate data=crossvalid; class fold bad bad_chap; table fold*bad,bad_chap; run; bad chap 0 1 N N fold 1 2 3 4 5 6 7 8 9 10 bad 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 321 14 376 19 286 13 350 13 350 19 342 14 356 15 365 17 316 7 315 8 122 107 144 93 151 103 137 98 128 114 150 103 142 109 123 94 155 122 142 107 Table 19 – Tableau de contingence croisée http://www.math.unicaen.fr/~kauffman/cours 12 [email protected] Université de Caen Basse-Normandie 1.2.7 8 janvier 2013 M2-DECIM Fouilles de données Phase finale Il ne reste plus qu’à scorer les demandeurs de prêts et ne retenir que ceux ayant un risque d’être mauvais payeur de moins de 9%. Références [Collica(2010)] Randall S. Collica. CRM segmentation and clustering. SAS, 2010. http://www.math.unicaen.fr/~kauffman/cours 13 [email protected]