Validation croisée - Université de Caen

Commentaires

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
francois.kauffmann[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
francois.kauffmann[email protected]