Vous êtes sur la page 1sur 13

Universite de Caen Basse-Normandie

8 janvier 2013

M2-DECIM Fouilles de donnees

Votre banque va t-elle vous pr


eter de largent ?

Sommaire
1.1
1.2

Description . . . . . . . . . . . . . . . . . . . .
Enonc
e . . . . . . . . . . . . . . . . . . . . . . .
1.2.1 Preparation des donnees . . . . . . . . . . . .
1.2.2 Valeurs manquantes . . . . . . . . . . . . . .
1.2.3 Mod`ele de regression logistique . . . . . . . .
1.2.4 Decision : oui ou non . . . . . . . . . . . . . .
1.2.5 Validation par bootstrap . . . . . . . . . . . .
1.2.6 n-Validation croisee . . . . . . . . . . . . . .
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 estimees 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`eres lignes de la table hemq . . . . . . . . . . . . . .
Descriptif de la table . . . . . . . . . . . . . . . . . . . . .
Coefficients estimes . . . . . . . . . . . . . . . . . . . . . .
Resultats de la regression logistique . . . . . . . . . . . . .
Rapports de cote . . . . . . . . . . . . . . . . . . . . . . .
Scoring de la table . . . . . . . . . . . . . . . . . . . . . .
Matrice de confusion pour differents niveau de probabilite
Table de lift . . . . . . . . . . . . . . . . . . . . . . . . . .
Tableau de contingence croisee . . . . . . . . . . . . . . .

.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.

2
2
3
6
6
7
7
8
10
12

Description

Une banque, dans le cadre de son service de prets, desire pouvoir predire la non solvabilite dun client demandant
pret en fonction des covariables explicatives. Pour ceci elle utilise sa base de donnees client`ele constituee de lhistorique
de 5960 clients ayant contracte au moins un pret. Le fichier de donnees 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 donnees manquantes
completees.
Cette base de donnees, sert dexemple pour SAS Entreprise Miner. Dans cet exercice nous allons utiliser SAS
(BASE,STAT,GRAPH) uniquement.

http://www.math.unicaen.fr/~kauffman/cours

francois.kauffmann@unicaen.fr

Universite 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 donnees

la personne a rembourse son credit sans incident(Bad=0) avec incidents (Bad=1)


montant de la demande de pret
montant du sur lhypoth`eque
valeur de la propriete
motif du pret : Consolidation financi`ere Debtcon ,amelioration habitat Homelmp.
profession Mgr,Office, Other, ProfXexe, Sales, Self, manque
nombre dannees dans le travail actuel
nombre de demande de report decheances de pret
nombre de litiges
Age du plus ancien credit en mois
nombre de demandes recentes de credit
nombre de credits 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`eres lignes de la table hemq

R
ef
erences
[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
e
Pr
eparation des donn
ees

1. Dans cette question, on initialise la session SAS.


(a) Creer un repertoire hmeq dans le quel on travaillera. Puis un sous repertoire lib.
(b) Tele-chargez le fichier hmeq.sas7bdat et le mettre dans le repertoire lib.
(c) Definir comme repertoire associe `
a votre libraire par defaut user , le repertoire lib.
(d) Creer la table nommee variables contenant le descriptif des variables `a laide de la procedure contents.
(e) Ajouter `a la table hmeq une colonne validation `a laide de linstruction validation=rand(table,.6,.2,.2).
Cette instruction permet de simuler un echantillon independant dune va discr`ete prenant 3 valeurs {1, 2, 3}
dont on peut preciser la loi. La base de donnees sera composee de trois parties disjointes Apprentissage(1)
60%, Test(2) 20%, Validation(3) 20%.

http://www.math.unicaen.fr/~kauffman/cours

francois.kauffmann@unicaen.fr

Universite 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 donnees

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 etudier si certaines variables explicatives ont un lien avec la variable bad. Dans
un premier temps, on fait une analyse graphique `a laide du module INSIGHT de SAS Solution-> Analyse->
Analyse interactive des donn
ees. Construire des boites `a moustaches des variables quantitatives en fonction
de la variable bad. Explicitez les sens de variation. Faire de meme avec les variables explicatives qualitatives,
on obtient des graphiques mosaique (analyse factorielle des correspondances simples). Enoncez les methodes
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 jai
bien compris ! Les instructions suivantes permettent de creer une macro variable nommee names de valeur la
concatenation des reponses dune requete SQL.
proc sql;
select name into :names separated by ' ' from dictionary.columns
where
upper(libname)='USER' and
upper(memname)='HMEQ';
%put &names;
quit;
(a) Creer la macro variable nbvars contenant le nombre de colonne de la table HMEQ.
(b) La syntaxe into :var1-:var&nbvars, permet de creer les macros variables var1, var2, ..., var&nbvars.
Construire alors nbvars macros variables contenant le nom des colonnes.
(c) De meme calculer le type dune variable de la table HMEQ.
1.2.2

Valeurs manquantes

Dans cette question, on traite le cas des valeurs manquantes. Sur ce probl`eme difficile, on peut consulter le chapitre
Missing data imputation du livre dAndrew Gelman [2]. Ce chapitre est tr`es abordable et est illustre avec R. Dans
SAS des methodes de remplacement de valeurs manquantes sont disponibles dont les methodes dimputations multiples
avec la proc mi ou Entreprise Miner.
Ici nous allons utiliser deux methodes : la methode du remplacement des valeurs manquantes dune variable par
une seule valeur (la moyenne ou le mode) en anglais Single Imputation, conjointement avec lajout dune 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 frequentes par exemple la proc univariate. On fait le choix de nutiliser que la proc sql couplee avec de la macro
programmation, pour calculer les moyennes ou des modes puis les remplacer les valeurs manquantes par ces valeurs
choisies.
1. Definir les macros type defaut comme etant des macros variables globales. Elles peuvent etre definies et modifiees `a linterieur de macros fonctions.
% global type defaut;

http://www.math.unicaen.fr/~kauffman/cours

francois.kauffmann@unicaen.fr

Universite de Caen Basse-Normandie

8 janvier 2013

M2-DECIM Fouilles de donnees

2. Construire une requete SQL permettant de calculer la moyenne dune variable quantitative. Puis construire
un macro programme MACRO moyenne(nom,table=_LAST_); permettant de creer une macro variable nommee
d
efaut dont la valeur sera la moyenne de la variable quantitative nom de la table nommee 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 requete ou plusieurs requetes SQL permettant dobtenir la modalite la plus frequente dune variable
qualitative. Puis construire un macro programme MACRO mode(nom,table=_LAST_); permettant de creer une
macro variable nommee defaut dont la valeur sera le mode de la variable qualitative nom de la table nommee
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

francois.kauffmann@unicaen.fr

Universite de Caen Basse-Normandie

8 janvier 2013

M2-DECIM Fouilles de donnees

5. Redefinir 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 laide de la macro, definir la valeur manquante de debtinc `a 50
(expliquez ce choix de SAS). Redefinir les valeurs manquantes des variables job et reason `a la chane "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`
ele de r
egression logistique

Dans cette question, on estime un mod`ele de regression logistique (uniquement les effets principaux, pas de recherche
de mod`ele) grace `a la base dapprentissage 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 resultats extraits des sorties de SAS.

http://www.math.unicaen.fr/~kauffman/cours

francois.kauffmann@unicaen.fr

Universite 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.23E6
4.063E6
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 donnees

StdErr
0.6283
5.356E6
1.86E6
1.293E6
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 estimes

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
Taua
c

cValue2
0.821
0.823
0.261
0.911

nValue2
0.821208
0.822829
0.261396
0.910604

Table 9 Resultats de la regression logistique

http://www.math.unicaen.fr/~kauffman/cours

francois.kauffmann@unicaen.fr

Universite 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 donnees

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 estimes quels sont les coefficients significativement non nuls, interpretez ces coefficients.
2. Interpretez les rapports de cotes.
3. Decrire les resultats de la regression logistique dit dassociation dans SAS.
1.2.4

D
ecision : oui ou non

Dans cette question, on sinteresse aux classiffieurs construits `a partir de la regression logistique.
1. Decrire la table suivante.

http://www.math.unicaen.fr/~kauffman/cours

francois.kauffmann@unicaen.fr

Universite 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 donnees

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 differents niveau de probabilite


2. Faire la representation graphique de la courbe ROC et interpretez.
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 probabilite au dela du quel, le classifieur va predire que le client est un mauvais
payeur, on ordonne les clients de la base dapprentissage par ordre decroissant de leur score (probabilite detre
d [0.71, 0.99] sont les 10% des
un mauvais payeur), puis on les partitionne en decile. Le premier decile (x)
clients ayant la plus forte proba detre un mauvais payeur. Le dixi`eme decile sont les 10% des clients ayant la
d [0., 0.008]. Pour chaque decile, on calcule le profit moyen
plus faible probabilite detre un mauvais payeur (x)
de la banque. La derni`ere etape consiste choisir le decile en fonction de crit`eres economiques ( par exemple
maximisation du profit). Si on choisit par exemple de ne conserver que les 70% ayant les meilleurs scores detre
d < .10. Cet ensemble
un bon payeur, on ne proposera des prets aux clients ayant un score plus faible que .10 (x)
de clients sont ceux dont le risque moyen detre un mauvais payeur est moins de 10%.
http://www.math.unicaen.fr/~kauffman/cours

francois.kauffmann@unicaen.fr

FalseNeg
6.2
9.2
10.5
12.3
14.1

Universite de Caen Basse-Normandie

8 janvier 2013

M2-DECIM Fouilles de donnees

Le lift dun decile est simplement la probabilite moyenne detre un mauvais payeur pour ce decile, divise par la
probabilite moyenne detre un mauvais payeur de lensemble des clients. Un lift de 4 veut dire que lon a 4 fois
plus de chance detre 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

0
0

decile
predit

observe

Figure 2 Courbe de Lift


Les crit`eres economiques vont etre parametrises pour un pret de la facon suivante
bon payeur le gain est de 100 + 0.05 loan, la banque gagne en moyenne 100 euros et 5% du montant du pret
( cest sans doute exagere).
mauvais payeur la perte est de 1000 + .20 loan, la banque perd en moyenne 1000 euros et perd en moyenne
20% du montant du pret accorde.
(a) Calculer la table de lift sur la base dapprentissage
(b) Trouver le decile `
a partir du quel les profits sont positifs.
(c) Calculer les gains moyens sur la base dapprentissage et de test.

http://www.math.unicaen.fr/~kauffman/cours

francois.kauffmann@unicaen.fr

Universite 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 donnees

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 methodes de validation dun mod`ele (pour les petits effectifs) est le methode de Boostrap. Dans cette
question, on realise cette methode assez simplement avec SAS.
1. La procedure surveyselect permet de tirer aleatoirement des lignes dune table. Loption metho=urs unrestricted random sampling permet de faire un tirage aleatoire avec remise de n=500 echantillons parmi ceux de la
table hmeq et de repeter rep=20 fois ce tirage, la table de sortie est nommee out=boot. Les colonnes de la table
boot sont celles de la table originale aux quelles sont ajoutees les colonnes
replicate numero de la repetition
numberhits nombre de fois ou cette ligne a ete tiree.
proc surveyselect data=hmeq method=urs n=500 rep=20 out=boot;
run;
2. Lappel `a la procedure logistic necessite de faire une regression par repetition by replicate;, et de prendre
en compte que certaines lignes ont ete tirees plusieurs fois freq numberhits;
proc logistic data=boot outest=estimates;
class
http://www.math.unicaen.fr/~kauffman/cours

10

francois.kauffmann@unicaen.fr

Universite de Caen Basse-Normandie

8 janvier 2013

M2-DECIM Fouilles de donnees

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`ere etape consiste `
a calculer les estimateurs empiriques ecarts types des grace aux repetitions, on
verifie apr`es que less ecarts types estimes par la methode de bootstrap sont semblables `a ceux estimes par la
regression 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 resultats en SAS9.1. Jai utilise la sortie rtf
puis la commande unix ps2eps pour definir la BoundingBox.
La procdure 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 estimees par bootstrap


1.2.6

n-Validation crois
ee

Cette methode consiste `


a decouper lechantillon en n groupes deffectifs approximativement egaux, puis destimer
un mod`ele `a partir des tous les groups sauf 1, on estime alors le classifieur sur la partie fold qui na pas servi pour
lestimation.
1. La premi`ere etape consiste `
a decouper lechantillon en n groupes en tirant aleatoirement de facon equiprobable
parmi 10 nombres {1, , 10}.
data hmeq;
attrib fold label='Validation croisee'; /* fold premi`
ere 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 destimer le mod`ele retirant un des groupes, puis de stocker les resultats.
data crossvalid;
fold=.;
http://www.math.unicaen.fr/~kauffman/cours

11

francois.kauffmann@unicaen.fr

Universite de Caen Basse-Normandie

8 janvier 2013

M2-DECIM Fouilles de donnees

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`ere etape consiste `
a calculer la calsse predite 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 croisee

http://www.math.unicaen.fr/~kauffman/cours

12

francois.kauffmann@unicaen.fr

Universite de Caen Basse-Normandie

1.2.7

8 janvier 2013

M2-DECIM Fouilles de donnees

Phase finale

Il ne reste plus qu`a scorer les demandeurs de prets et ne retenir que ceux ayant un risque detre mauvais payeur
de moins de 9%.

R
ef
erences
[Collica(2010)] Randall S. Collica. CRM segmentation and clustering. SAS, 2010.

http://www.math.unicaen.fr/~kauffman/cours

13

francois.kauffmann@unicaen.fr