Académique Documents
Professionnel Documents
Culture Documents
Exemple - cible
Une enseigne de grande surface propose à ses clients des formules de crédit (A, B et C).
Le conseiller doit être attentif pour proposer au client une formule adaptée.
L'objectif de l'étude est de cibler la formule que l'on doit proposer en priorité (variable
typecredit).à partir des variables suivantes:
- l'âge (quantitatif ),
- sexe (binaire, 1 = homme)
- revenu par personne du ménage (quantitatif ),
1. Construire des graphiques exploratoires permettant de visualiser les liaisons entre les
variables explicatives et la variable cible. Commenter ces liaisons.
Interpréter les sorties estimations des coefficients pour les deux procédures.
Calculer le R2 de Mac-Fadden.
Classer l’individu A dans l’une des trois formes de crédit sur la base du modèle estimé.
Construire une matrice de confusion et estimer le taux de bien – mal classés par la
méthode de resubstitution.
1
Exemple cible
Une enseigne de grande surface propose à ses clients des formules de crédit revolving (A, B et
C). Le conseiller doit etre attentif lorsqu'il est face au client car s'il met en avant une formule
inadaptée, il risque de le décourager et de le voir partir. L'objectif de l'étude est de cibler, à partir
des données recueillies [l'âge (quantitatif ), le sexe (binaire, 1 = homme) et le revenu par tête du
ménage (quantitatif )], la formule que l'on doit proposer en priorité.
Les données reportent les valeurs des variables explicatives, la variable dépendante ou
typecredit qui indique la formule proposée. Les trois dernières colonnes reportent les indicatrices
de modalités de typecredit. On dispose de n=30 observations, les distributions sont équilibrées.
> drv<-read.table("revolver.txt",header=TRUE)
> attach(drv)
> drv[,"sexe"]<-factor(drv[ ,"sexe"])
> for (i in 4:7) drv[,i]<-factor(drv[,i])
> drv
age sexe revenu typecredit yA yB yC
1 29 0 7.09 A 1 0 0
2 27 0 2.25 A 1 0 0
3 24 1 4.47 A 1 0 0
4 18 1 4.66 A 1 0 0
5 21 0 6.47 A 1 0 0
6 30 1 9.18 A 1 0 0
7 26 0 8.96 A 1 0 0
8 23 1 5.68 A 1 0 0
9 22 1 7.39 A 1 0 0
10 20 1 9.93 A 1 0 0
11 49 1 13.60 B 0 1 0
12 47 0 21.53 B 0 1 0
13 50 0 11.41 B 0 1 0
14 51 0 8.27 B 0 1 0
15 54 1 11.62 B 0 1 0
16 49 1 14.28 B 0 1 0
17 44 1 12.51 B 0 1 0
18 46 0 9.45 B 0 1 0
19 48 0 7.85 B 0 1 0
20 52 0 11.21 B 0 1 0
21 39 0 6.50 C 0 0 1
22 37 1 7.84 C 0 0 1
23 30 0 7.40 C 0 0 1
24 29 0 10.10 C 0 0 1
25 27 1 8.43 C 0 0 1
26 34 1 9.19 C 0 0 1
27 30 1 12.31 C 0 0 1
28 21 1 14.13 C 0 0 1
29 52 1 10.04 C 0 0 1
30 50 0 8.90 C 0 0 1
> str(drv)
'data.frame': 30 obs. of 7 variables:
$ age : int 29 27 24 18 21 30 26 23 22 20 ...
$ sexe : Factor w/ 2 levels "0","1": 1 1 2 2 1 2 1 2 2 2 ...
$ revenu : num 7.09 2.25 4.47 4.66 6.47 9.18 8.96 5.68 7.39 9.93 .
$ typecredit: Factor w/ 3 levels "A","B","C": 1 1 1 1 1 1 1 1 1 1 ...
$ yA : Factor w/ 2 levels "0","1": 2 2 2 2 2 2 2 2 2 2 ...
$ yB : Factor w/ 2 levels "0","1": 1 1 1 1 1 1 1 1 1 1 ...
$ yC : Factor w/ 2 levels "0","1": 1 1 1 1 1 1 1 1 1 1 ...
2
Graphiques exploratoires
Graphiques exploratoires des liaisons entre les variables explicatives et la variable cible.
On peut noter certaines préférences pour les crédits, A pour les plus jeunes, B pour les plus
agés, B pour les revenus les plus élevés…
> plot(drv$sexe,drv$typecredit,col=c("red","blue","yellow"))
3
Régression logistique multinomiale
Un avantage de la fonction multinom est de fournir la matrice Hessienne pour développer les
tests de significativité. Il est possible changer la modalité de référence qui modifie la lecture et
l’interprétation des coefficients.
Estimation du modèle
Il faut préciser la modalité ou niveau de la variable à expliquer pris comme niveau de référence ;
on choisit ici le niveau C correspondant à une qualité médiocre.
Remarque: il faut abaisser les seuils de tolérance en argument.
> typecredit2<- relevel(drv$typecredit, ref = "C")
> mult.rv <- multinom(typecredit2 ~ drv$age+drv$sexe+drv$revenu,
Hess=T, abstol=1e-15,reltol=1e-15,maxit=1000)
# weights: 15 (8 variable)
initial value 32.958369
iter 10 value 10.686440
iter 20 value 9.212540
iter 30 value 9.194181
iter 40 value 9.191315
iter 50 value 9.190889
iter 60 value 9.190876
iter 70 value 9.190857
iter 80 value 9.190856
iter 90 value 9.190856
iter 100 value 9.190856
iter 110 value 9.190856
iter 120 value 9.190856
final value 9.190856
converged
> summary(mult.rv)
Call:
multinom(formula = typecredit2 ~ drv$age + drv$sexe + drv$revenu,
abstol = 1e-15, reltol = 1e-15, maxit = 1000)
Coefficients:
(Intercept) drv$age drv$sexe1 drv$revenu
A 21.16554 -0.4713515 0.170161 -0.935095
B -26.32654 0.2861745 -4.965935 1.565938
Std. Errors:
(Intercept) drv$age drv$sexe1 drv$revenu
A 10.8419 0.2632022 1.853307 0.5738308
B 14.8413 0.1532726 3.569188 1.0552729
4
- Package VGAM - fonction vglm
> library(VGAM)
> poly.drv <- vglm(drv$typecredit ~ drv$age+drv$sexe+drv$revenu,
+ family=multinomial())
> summary(poly.drv)
Call:
vglm(formula = typecredit ~ drv$age + drv$sexe + drv$revenu,
family = multinomial())
Pearson Residuals:
Min 1Q Median 3Q Max
log(mu[,1]/mu[,3]) -1.4379 -0.090237 -1.0413e-07 0.050910 2.0030
log(mu[,2]/mu[,3]) -2.6104 -0.024822 -1.4738e-06 0.052045 1.1605
Coefficients:
Value Std. Error t value
(Intercept):1 21.16539 10.84180 1.952203
(Intercept):2 -26.32673 14.84141 -1.773870
drv$age:1 -0.47135 0.26320 -1.790839
drv$age:2 0.28618 0.15327 1.867093
drv$sexe1:1 0.17016 1.85330 0.091815
drv$sexe1:2 -4.96597 3.56920 -1.391338
drv$revenu:1 -0.93509 0.57383 -1.629566
drv$revenu:2 1.56595 1.05528 1.483921
Ces relations permettent de faire les remarques suivantes, sous réserve de significativité des
coefficients (noter que la lecture doit se faire par rapport à la modalité de référence C) :
A versus C
- Plus le client est âgé moins il privilégie le crédit A (par rapport au C), autrement dit
les personnes qui prennent le crédit A sont moins âgés que ceux qui prennent le C.
B versus C
- Plus le revenu du client est élevé, plus il choisira B (par rapport à C).
5
Modifier la modalité de référence
Il est donc possible par simple différenciation d’obtenir le logit entre 2 modalités quelconques de
la variable réponse. Le choix initial de la modalité de référence n'est pas restrictif.
Sur l’exemple on peut caractériser la modalité A par rapport à B par différenciation des logit :
logitA,B= C1 − C2
= (21.165+26.328) + (−0.471−0.286)* age + (0.170+4.966)* sexe+
(−0.935−1.566)* revenu
= 47.493 −0.758* age + 5.136* sexe − 2.501* revenu
Les effets sont plus marqués dans (A vs. B) par rapport (A vs. C) avec des coefficients de même
signe, mais sont plus élevés en valeur absolue :
Le test du rapport de vraisemblance sur le modèle est réalisé par comparaison avec le modèle
constant ne comportant aucune variable explicative.
> summary(mult.rv0)
Call: multinom(formula = typecredit2 ~ 1)
Coefficients:
(Intercept)
A 3.885781e-15
B 3.330669e-16
Std. Errors:
(Intercept)
A 0.4472136
B 0.4472136
Le test du rapport de vraisemblance consiste à comparer les deux déviances du modèle étudié
et modèle constant.
6
Remarque- Pseudo-R2 de McFadden
Le pseudo-R2 déterminé à partir des vraisemblances précédentes varie entre 0 (modèle pas
meilleur que le trivial) et 1 (modèle saturé). Dans l’exemple, le modèle apparait bon :
R2M F = 1-(-9.191/-32.958)=0.721
On peut tester ici la nullité de q coefficients dans un logit, dans un ensemble de logit ou dans les
K-1 logit. Les conclusions ne seront pas les mêmes.
- Si une variable n'est pas significative dans l'ensemble des logit, on peut l’exclure du modèle.
- Si une variable est significative dans un logit au moins, on ne peut l’exclure car elle joue un rôle
dans la caractérisation d'une des modalités de la variable dépendante. La variable ne peut pas
être exclue.
- On peut également tester l'égalité des coefficients pour plusieurs (ou l'ensemble ) équations
logit. Si l'hypothèse est vérifiée, on peut conclure que la variable joue un rôle identique dans
la caractérisation des différentes modalités de la variable dépendante.
- la statistique de Wald basée sur la normalité asymptotique des estimateurs. Il faut déterminer
dans ce cas la matrice de variance - covariance des coefficients.
7
Il faut au préalable inverser la matrice Hessienne avec la fonction solve( ) :
Les variances des coefficients pour chaque équation logit se lisent sur la diagonale principale.
En prenant la racine carré on retrouve les écarts types fournies par les fonctions.
Si un coefficient dans un logit n’est pas significatif, on peut supprimer la variable associée dans
le logit concerné. On ne peut rien conclure pour les autres logit et on ne peut exclure la variable
de l’étude. La statistique de Wald est formée par le rapport entre le carré du coefficient estimé et
sa variance et suit une loi du chi deux à 1 ddl.
8
Significativité d’un coefficient dans tous les logit – Test de Wald
Ce test permet de savoir si les coefficients d’une variable explicative sont simultanément nuls
dans l’ensemble des logit. Si l’hypothèse H0 est acceptée la variable peut être retirée du modèle.
La statistique du test de Wald suit une loi du chi deux à K-1 ddl (K indiquant le nombre de
modalités de la variable à expliquer).
Test d’égalité d’un coefficient dans tous les logit – Test de Wald
On teste ici si les coefficients d’une variable Xj sont identiques d’un logit à l’autre ce qui est
équivalent à dire que la variable a le même effet dans tous les logit.
On peut rejetter l'égalité des coefficients de la variable revenu dans l'ensemble des logit.
L’interprétation des odds ratios en termes de modification du risque reste identique, toujours par
rapport à la modalité de référence.
9
Note : Il est possible d’aborder une régression logistique multinomiale en s’appuyant sur les
régressions logistiques binaires sur deux des K modalités ; ce qui permet de disposer d’outils
d’interprétation simple.
Classement – Prévision
Prévision de classement (K modalités)
Pour classer un nouvel individu ω, on calcule les probabilités a posteriori prédites πk(ω) pour
chaque modalité k de la variable dépendante.
10
> predict(mult.rv)
[1] A A A A A C A A A A B B B B B B B B C B C C A C A C C C C B
Levels: C A B
Matrice de confusion
Les prévisions précédentes sont à comparer avec les valeurs observées sur l’échantillon.
> drv$typecredit
[1] A A A A A A A A A A B B B B B B B B B B C C C C C C C C C C
Levels: A B C
A B C
A 9 0 1
B 0 9 1
C 2 1 7
>cTab<-table(drv$typecredit,levels(drv$typecredit)[max.col(PhatCateg)])
> addmargins(cTab)
A B C Sum
A 9 0 1 10
B 0 9 1 10
C 2 1 7 10
Sum 11 10 9 30
Annexe
#Déviance - log vraisemblance - critère AIC
deviance(modelfit)
logLik(modelfit)
AIC(modelfit)
11
Script
drv<-read.table("revolver.txt",header=TRUE)
drv
drv[,"sexe"]<-factor(drv[ ,"sexe"])
for (i in 4:7) drv[,i]<-factor(drv[,i])
str(drv)
#Graphiques#
par(mfrow=c(2,2))
boxplot(drv$age~drv$typecredit,xlab="typecredit",
ylab="age",col="red")
boxplot(drv$revenu~drv$typecredit,xlab="typecredit",
ylab="revenu",col="red")
plot(drv$age,drv$typecredit)
plot(drv$revenu,drv$typecredit)
plot(drv$sexe,drv$typecredit,col=c("red","blue","yellow"))
#Prévisions
#Predicted category probabilities – vglm
predict(poly.drv, type="response")
#Predicted category probabilities - multinom
predict(mult.rv,drv, type="probs")
fitted(mult.rv, outcome=FALSE)
#Predicted categories - vglm
PhatCateg <- predict(poly.drv, type="response")
levels(drv$typecredit)[max.col(PhatCateg)]
#Predicted categories - multinom
predict(mult.rv,drv,type="class")
predict(mult.rv)
#Matrice de confusion
12
cTab<-table(drv$typecredit,levels(drv$typecredit)[max.col(PhatCateg)])
addmargins(cTab)
#Taux de bien classés
sum(diag(cTab)) / sum(cTab)
13