Elaboration d`un score sur des emprunts immobiliers privés

Transcription

Elaboration d`un score sur des emprunts immobiliers privés
TECHNIQUES DE SCORING
Projet Tutoré 2ième année IUP-IES
2007/2008
Baha-Eddine Aouni
Carminda Cid
Mael Jauniaux
Techniques de Scoring
Table des Matières
1 INTRODUCTION
4
2 AVANT L’ESTIMATION …
5
2.1 NETTOYAGE ET DATA SPLITTING
5
2.1.1
TRAITEMENT DES VALEURS MANQUANTES
5
2.1.2
TRAITEMENT DES VALEURS ABERRANTES
5
2.1.3
DATA SPLITTING
6
2.2 STATISTIQUES UNIVARIEES
6
2.3 PRESELECTION DES VARIABLES ET ETUDES DES LIAISONS
9
2.3.1
VARIABLES QUANTITATIVES VS. VARIABLES QUANTITATIVES
9
2.3.2
VARIABLES QUALITATIVES VS. VARIABLES QUANTITATIVES
9
2.3.3
VARIABLES QUALITATIVES VS. VARIABLES QUALITATIVES
9
2.4 TRANSFORMATION DES VARIABLES
10
2.4.1
DISCRETISATION DES VARIABLES QUANTITATIVES
10
2.4.2
REGROUPEMENT DES VARIABLES QUALITATIVES
14
3 ESTIMATION DU MODELE
15
3.1 PRESENTATION
15
3.2 ANALYSE DES RESULTATS
15
4 ANALYSE DES PERFORMANCES
17
4.1 COURBES DE DENSITE
17
4.2 COURBES DE PERFORMANCE
18
4.2.1
COURBE DE ROC
18
4.2.2
COURBES DE SELECTION
18
4.2.3
COURBES DE PERFORMANCE
19
4.2.4
COURBES DE DISCRIMINATION
19
4.3 INDICE DE ROBUSTESSE
20
5 GRILLE DE SCORE ET ECHELLE DE NOTATION
21
5.1 LA GRILLE DE SCORE
21
Pages - 2 -
Techniques de Scoring
5.2 ECHELLE DE NOTATION
22
6 CONCLUSION
23
ANNEXES ET INDEX
24
INDEX DES TABLEAUX
25
ANNEXE 1 : LISTE DES VARIABLES
26
ANNEXE 2 : REFERENCE DES VARIABLES EXPLICATIVES
27
ANNEXE 3 : LES TESTS UTILISES
28
TEST DE CORRELATION DE SPEARMAN
28
TEST DE KRUSKAL-WALLIS
28
TEST DU KHI DEUX
29
TEST DE VUONG
29
ANNEXE 4 : PROGRAMMES SAS
30
Pages - 3 -
Techniques de Scoring
1 Introduction
Les techniques de scoring sont des méthodes dont le but est de sélectionner, classer et
discriminer une population donnée. Ces techniques sont utilisées dans divers secteurs allant
du marketing à la gestion du risque bancaire. Ce projet a pour but de construire une échelle de
notation du niveau de risque et d’en contrôler la performance.
La base de travail rassemble des données concernant les emprunts immobiliers de particuliers.
Nous disposons de données à la fois qualitatives et quantitatives, et d’un critère de défaut.
Nous cherchons à déterminer la probabilité de ne pas être défaillant, c'est-à-dire celle d’une
personne ne pouvant pas rembourser son crédit.
Notre étude s'effectue en plusieurs étapes. Nous commençons par une étape d'analyse des
données. Nous retirons les observations extrêmes et manquantes puis décrivons les variables
et leurs liaisons avec le critère de défaut. Une fois ce travail préparatoire effectué, nous
construisons notre score et en mesurons les performances. Enfin, nous présentons la grille de
score et notre échelle de notation.
Pages - 4 -
Techniques de Scoring
2 Avant l’estimation …
2.1 Nettoyage et Data Splitting
Notre base d’étude comporte 77.000 observations et 15 variables (cf. Annexe 1 : Liste des
variables). Cette base, à l’état brut, présente de nombreuses valeurs aberrantes ou manquantes.
D’où la nécessité de la nettoyer.
2.1.1 Traitement des valeurs manquantes
Nous avons comptabilisé le nombre de modalités existantes pour chacune de nos variables
quantitatives et qualitatives grâce aux procédures MEANS et FREQ. Si ce nombre se révélait
différent de 77.000 alors la variable contenait des valeurs manquantes, que nous avons
éliminées.
2.1.2 Traitement des valeurs aberrantes
Nous entendons par valeurs aberrantes les outliers susceptibles de biaiser notre estimation
ainsi que les valeurs n’ayant aucun sens. Afin de supprimer ces valeurs nous avons dû établir
un certain nombre de règles de décision.
L’âge du client :
La variable age_client présentait des valeurs comprises entre -19 et 2005. Nous avons décidé
de nous fixer une fourchette entre 18 (âge de la majorité) et 108 (âge maximum raisonnable).
De plus, nous avons créé un indicateur qui permet de se rendre compte de l’âge de l’individu
au moment où il a contracté le prêt (indice_age). Nous avons fait en sorte qu’il soit supérieur
à 18.
Revenus du client :
Nous avons décidé de garder les revenus compris entre le Revenu Minimum d’Insertion
annualisé (5.400€) et un plafond de 1.000.000€.
Pages - 5 -
Techniques de Scoring
Taux d’endettement :
La législation impose un taux d’endettement inférieur à 33.33% au moment du déblocage du
crédit. C’est pourquoi nous avons retiré l’ensemble des valeurs supérieures à ce seuil.
Montant initial :
Il est impossible d’avoir à rembourser un capital supérieur au montant initial du prêt. C’est
pourquoi nous avons créé un indicateur, indice_montant, représentant la différence entre ces
deux variables. Nous retirons alors de notre base l’ensemble des observations pour lesquelles
l’indicateur est positif.
Nous avons jugé qu’il est improbable de constituer un apport 19 fois supérieur au montant
initial. Cela revient à considérer que le montant de l’emprunt doit couvrir au moins 5% de
l’investissement immobilier. D’où la création de la variable indice qui restitue le rapport
entre l’apport personnel et le montant initial du prêt. Nous supprimons donc tutes les
observations pour lesquelles ce rapport sera supérieur à 19.
2.1.3 Data Splitting
La réalisation d’un score nécessite de diviser notre base en deux échantillons : l’échantillon
apprentissage (nécessaire pour l’estimation) et l’échantillon test (utilisé pour l’analyse des
performances). Nous avons effectué un tirage aléatoire simple sans remise. L’échantillon
apprentissage représente 70% de la base de départ. A l’issue de cet échantillonnage nous
avons contrôlé que le taux de critère reste constant sur les deux échantillons et la base (soit
environ 5%).
2.2 Statistiques Univariées
Les statistiques présentées ci-dessous sont issues de l’échantillon d’apprentissage.
Capital restant dû : montant du capital restant à rembourser
La variable oscille autour d’une moyenne de 72.455€ avec une médiane de 67.886€. En
étudiant la courbe de densité, nous remarquons deux “modes” autour de 10.000€ et 100.000€.
Pages - 6 -
Techniques de Scoring
Age client : âge du client détenant le crédit immobilier
Notre échantillon est composé d'individus dont la moyenne d'âge est de 37 ans et la médiane
35 ans. L’échantillonnage a réduit notre fourchette d’âge. Les valeurs extrêmes sont 19 et 89
ans.
Age prêt : durée passée depuis le déblocage du prêt
Les individus de notre échantillon ont contracté leur emprunt depuis un an en moyenne.
L’emprunt le plus ancien a 15 ans. En observant la courbe de densité, nous remarquons que le
nombre d’emprunts contractés il y a plus de trois ans est faible.
Durée prêt : durée totale déterminée à l’origine du prêt
La durée moyenne d’un prêt est de 18 ans, alors que la médiane est de 20 ans. La durée d'un
prêt peut atteindre la valeur extrême de 30 ans. La courbe de densité s'organise autour de deux
modes (8 ans et 25 ans). Cette variable est fortement volatile : sa variance est de 43,5.
Durée restante : durée restant avant la dernière échéance du prêt
La durée restante est une fonction linéaire de l’âge du prêt et de la durée du prêt. Nous
observons que sa moyenne est de 17, sa médiane est de 19. Tout comme durée_prêt, la
variable durée_restante est organisée autour de deux modes et présente une forte volatilité.
Montant apport : montant apporté par le client pour le financement de son achat
immobilier
En moyenne les individus de notre échantillon font un apport de 24.000€, alors que la
médiane de cette variable est de 8.800€. Cet apport est nul pour près du quart de notre
échantillon; il atteint à l'opposé 1.000.100€. La majeure partie de notre population fait un
apport personnel inférieur à 100.000€.
Montant initial : montant du prêt déterminé à l’origine du prêt
L‘emprunt moyen s’élève à plus de 87.000€. La médiane est de 89.000€. L’emprunt
minimum s’élève à 1.300€ tandis que l’emprunt maximum s’élève à 1.800.000€.
Nombre de trimestres en incident sur l’année d’observation :
La majeure partie des individus (plus de 90% de notre échantillon) n’a pas connu d’incident
de paiement. Cette part diminue avec le nombre d’incidents.
Pages - 7 -
Techniques de Scoring
Revenus : revenus du client
Les revenus des clients s’élèvent en moyenne à 20.500€. La médiane est de 17.000€. Le
revenu minimum correspond au R.M.I., le revenu maximum est de 700.000€. La courbe de
densité montre une forte concentration de la variable autour de son mode (18.000€); très peu
de revenus sont supérieurs à 40.000€.
Taux d’endettement : taux d’endettement du client à la date de déblocage du crédit
immobilier et en tenant compte de ce dernier
Les individus sont endettés en moyenne à hauteur de 24%, ce taux pouvant fluctuer entre
0.1% et 33.33%. Nous remarquons que les individus à fort taux d’endettement sont plus
représentés dans notre échantillon. Plus de la moitié de notre échantillon a un taux
d'endettement supérieur à 26%.
PCS : Catégorie Socioprofessionnelle
Les catégories les plus représentées sont celles des employées, des ouvriers et des professions
intermédiaires. Ces catégories comptent en moyenne 6.000 individus. Les catégories les
moins représentées sont les professions libérales et la catégorie regroupant les agriculteurs, les
commerçants et les artisans.
Situation familiale : situation familiale du client
Nous comptons environ 12.500 individus mariés. Ce sont les individus les plus représentés
devant les concubins et les célibataires. Les personnes veuves ou pacsées sont très faiblement
représentées.
Type bien : bien immobilier ancien ou neuf
La plupart des emprunts contractés sont destinés à financer un bien immobilier neuf (près de
16.000 individus).
Pages - 8 -
Techniques de Scoring
2.3 Présélection des variables et études des liaisons
Nous avons utilisé différentes méthodes selon la nature des variables explicatives étudiées. Le
but de l’étude des liaisons est d’éliminer les variables peu discriminantes vis-à-vis de la
variable à expliquer ou corrélées entre elles.
2.3.1 Variables quantitatives vs. Variables quantitatives
En analysant les résultats du test de corrélation de Spearman (cf. Annexe 3 : Les tests utilisés)
en sortie de la PROC CORR, nous remarquons que toutes nos variables sont corrélées entre
elles. Cependant nous ne retirerons que celles affichant un degré de corrélation très élevé.
Les variables CRD et montant_initial sont liées par une corrélation quasi unitaire et
significative. Nous choisissons donc de retirer la variable CRD du modèle. Par ailleurs les
variables duree_restante et duree_pret présentent également une forte corrélation. Parmi les
trois variables linéairement liées (age_pret, duree_restante et duree_pret) nous choisissons de
retirer duree_restante. En effet, cette variable a les coefficients de corrélations les plus élevés
avec les deux autres variables et nous paraît moins pertinente en termes d’interprétation.
2.3.2 Variables qualitatives vs. Variables quantitatives
Nous effectuons un test de Kruskal-Wallis (cf. Annexe 3 : Les tests utilisés) via la PROC
NPAR1WAY entre les variables quantitatives explicatives et la variable à modéliser. Ce test
nous permet de détecter les variables explicatives discriminantes. Pour l’ensemble des
variables, la p-value obtenue est inférieure à notre seuil de confiance (0.05). Nous en
concluons donc que toutes nos variables quantitatives sont discriminantes.
2.3.3 Variables qualitatives vs. Variables qualitatives
Nous effectuons un test d’indépendance du khi deux afin de déterminer si les classes de nos
variables qualitatives explicatives sont indépendantes de la variable à expliquer. Les résultats
obtenus sont décevants. En effet la statistique de test ne dépasse pas le seuil de 0.04 alors
qu’une variable a une liaison satisfaisante lorsque la statistique dépasse 0.3. Ces résultats nous
laissent penser que les variables qualitatives seront peu contributives à la construction du
score.
Pages - 9 -
Techniques de Scoring
2.4 Transformation des variables
Afin de faciliter l'estimation et la lisibilité de la grille de score, il est recommandé de
discrétiser les variables quantitatives et de regrouper les modalités des variables qualitatives.
Afin d’optimiser ces transformations et notamment d’éviter les effets de seuil, nous
maximisons un critère d'indépendance du khi deux.
2.4.1 Discrétisation des variables quantitatives
Deux approches s'offrent à nous : l'approche graphique et l'approche statistique. L'approche
graphique consiste à comparer les courbes de densité de chaque variable pour chaque sousgroupe de la variable à expliquer. L’approche statistique est un approche dynamique qui
consiste à maximiser systématiquement le critère du khi deux. A cet effet, nous avons conçu
une macro boucle maximisant ce critère pour chaque découpage en trois classes possible.
Toutefois l’utilisation de cette macro nécessitait un espace sur le disque dur trop important
pour tourner. Les classes que nous proposons ci-dessous résultent donc de l’approche
graphique.
Capital restant dû :
Crd_D1
Modalités
1
Bornes
0-15.000
Crd_D2
3
1
+105.000
0-15.000
2
15.000-
Critère du
105.000
2
3
15.000-
65.000-
65.000
105.000
4
+105.000
0.072
0.079
khi deux
Tableau 1 - Discrétisation de la variable CRD
La discrétisation en trois classes maximise notre critère du khi deux. Nous retenons la
variable ainsi créée pour la modélisation.
Pages - 10 -
Techniques de Scoring
Age client :
Age _D2
Age _D1
Modalités
1
2
3
1
2
3
4
Bornes
18-31
31-52
+52
18-24
24-34
34-54
+54
Critère du
0.026
khi deux
0.037
Tableau 2 - Discrétisation de la variable Age_client
La discrétisation en quatre classes maximise notre critère du khi deux. Nous retenons la
variable ainsi créée pour la modélisation.
Age prêt :
Age _pret_D1
Age _pret_D2
Modalités
1
2
1
2
3
4
Bornes
0-3
+3
0-1
1-2
2-3
+3
Critère du
0.339
0.444
khi deux
Tableau 3 - Discrétisation de la variable age_pret
La discrétisation en deux classes maximise notre critère du khi deux. Nous retenons la
variable ainsi créée pour la modélisation.
Durée prêt :
duree _pret_D1
duree _pret_D2
Modalités
1
2
3
1
2
3
4
5
Bornes
<14
14-24
+24
<7
7-12
12-21
21-24
+24
Critère du
0.071
0.091
khi deux
Tableau 4 - Discrétisation de la variable duree_pret
La discrétisation en trois classes maximise notre critère du khi deux. Nous retenons la
variable ainsi créée pour la modélisation.
Pages - 11 -
Techniques de Scoring
Durée restante :
Duree_restante_D1
Duree_restante_D2
Modalités
1
2
3
1
2
3
4
Bornes
<20
20-24
+24
<10
10-20
20-24
+24
Critère du
0.025
khi deux
0.056
Tableau 5 - Discrétisation de la variable duree_restante
La discrétisation en quatre classes maximise notre critère du khi deux. Nous retenons la
variable ainsi créée pour la modélisation.
Montant apport :
apport_D1
Modalités
1
Bornes
0-5.000
2
apport_D2
3
1
+24.000
0-5.000
5.000-
Critère du
24.000
2
3
5.000-
24.000-
24.000
160.000
4
+160.000
0.061
0.067
khi deux
Tableau 6 - Discrétisation de la variable montant_apport
La discrétisation en trois classes maximise notre critère du khi deux. Nous retenons la
variable ainsi créée pour la modélisation.
Pages - 12 -
Techniques de Scoring
Montant initial :
initial_D1
Modalités
1
Bornes
0-60.000
initial_D2
2
60.000110.000
Critère du
3
1
+110.000
0-20.000
2
3
20.000-
60.000-
60.000
220.000
+220.000
0.083
khi deux
4
0.094
Tableau 7 - Discrétisation de la variable montant_initial
La discrétisation en quatre classes maximise notre critère du khi deux. Nous retenons la
variable ainsi créée pour la modélisation.
Nombre de trimestres en incident sur l’année d’observation :
Nb_inc12m_D1
Nbinc12m
Modalités
1
2
Variable
Bornes
0
+0
d'origine
Critère du
0.406
0.515
khi deux
Tableau 8- Discrétisation de la variable nbinc12m
La discrétisation en deux classes maximise notre critère du khi deux. Nous retenons la
variable ainsi créée pour la modélisation.
Revenus :
Revenus_D2
Modalités
Bornes
Critère du
khi deux
1
2
5.400-
14.000-
14.000
35.000
Revenus_D1
3
1
2
+35.000 5.400-14.000 +14.000
0.052
0.062
Tableau 9 - Discrétisation de la variable revenus
Pages - 13 -
Techniques de Scoring
La discrétisation en deux classes maximise notre critère du khi deux. Nous retenons la
variable ainsi créée pour la modélisation.
Taux d’endettement :
endettement_D2
endettement_D1
Modalités
1
2
3
1
2
Bornes
0-15
15-27
+27
0-27
+27
Critère du
0.029
khi deux
0.026
Tableau 10 - Discrétisation de la variable endettement
La discrétisation en deux classes maximise notre critère du khi deux. Nous retenons la
variable ainsi créée pour la modélisation.
2.4.2 Regroupement des variables qualitatives
Pour les variables qualitatives, nous avons essayé de procéder à des regroupements logiques
des modalités. La seule variable reclassée retenue est Situfam_R1. Elle regroupe les
concubins et les personnes pacsées au sein d’une même modalité.
Nous avons effectué les transformations et les regroupements optimaux sur la base d'étude et
les deux échantillons. Nous pouvons maintenant passer à l'estimation du modèle.
Pages - 14 -
Techniques de Scoring
3 Estimation du modèle
3.1 Présentation
L’estimation s’effectue sur notre échantillon d’apprentissage. L’ensemble des variables
explicatives sont désormais qualitatives. Il nous faut alors spécifier une modalité de référence
pour chacune d’entre elles (cf. Annexe 2 : Référence des variables explicatives). Cette
référence représente la modalité la moins risquée de manière à obtenir des coefficients
négatifs facilitant l’interprétation et la construction de la grille de score.
Etant donné que la variable à modéliser est binaire, nous estimons le modèle via une
régression du type Logit puis Probit. Nous modélisons la probabilité de ne pas être défaillant
(impaye=1). Pour chaque type de régression, trois démarches de sélection des variables sont
possibles : backward, forward et stepwise. Pour sélectionner la meilleure, il suffit de comparer
les statistiques d’ajustement du modèle. Nous choisirons la méthode avec le critère d’AIC
maximum. Or, il s’est avéré que ces critères étaient proches pour chaque méthode. Nous
avons préféré la sélection du type backward.
Le test de Vuong nous permet de déterminer laquelle des deux régressions est la plus
appropriée (cf. Annexe 3 : Les tests utilisés). Sa statistique est de 1. Ainsi, la régression du
type Logit représente le mieux nos données.
3.2 Analyse des résultats
Notre modèle est bien spécifié selon les trois tests de significativité globale (Wald, Likelihood
Ratio et Score). C’est également ce que laisse supposer le R² ajusté de Nagelkerke (0,5).
La sélection automatique a éliminé les variables CRD_D1, type_bien, PCS, Situfam_R1.
L’ensemble des variables qualitatives de départ et la variable CRD sont donc supprimées
comme nous l’avions prévu lors de l’étude des liaisons.
L’analyse des effets de type 3 permet de déterminer si les variables contribuent
significativement à la construction de la probabilité de ne pas être défaillant. Toutes les
variables ont des pvalues inférieures à notre seuil de confiance, elles sont donc significatives.
L’analyse des estimations de la vraisemblance maximum permet de savoir quelles modalités
sont significatives. Nous remarquons qu’elles le sont toutes (pvalue<0.05).
La régression est d’une bonne qualité. En effet, le Sommer’s D est proche de 1 (0.81).
Pages - 15 -
Techniques de Scoring
Nous avons testé l’adéquation du modèle aux données grâce au test d’Hosmer et Lemeshow.
Ce test permet de vérifier si la probabilité estimée est proche de la probabilité constatée. Or,
notre pvalue est inférieure à notre seuil de confiance donc le modèle est mal calibré.
Toutefois, ignorant comment corriger ce problème, nous avons conservé le modèle en l’état.
La dernière étape de l’analyse de nos résultats est le calcul de la contribution de chaque
variable à l’étendue des valeurs du score. Elle se calcule à partir de la formule suivante :
C =
{
}
{
}
Max x1j ,..., x pj ,0 − Min x1j ,..., x pj ,0
j
i
k
∑ ( Max{x
j =1
i
j
1
j
p
i
}
{
j
1
j
p
× 100
}
,..., x ,0 − Min x ,..., x ,0 )
i
Où x pj est le coefficient estimé de la modalité i (i = 1, …, p) de la variable j (j = 1, …, k) de
l’échantillon apprentissage.
Ci-dessous se trouvent les résultats.
nb_
Duree
apport initial revenus Endettement
_pret_D1 _D1
_D2
_D2
age_D1 age_pret_D1 inc12m_D1
_D2
4,2
33,9
29,5
5,7
3,9
17
3
3,2
CONTRIBUTION
Tableau 11 – Contribution des variables au score
VARIABLES
Les variables les plus contributives sont l’âge du prêt, le nombre d’incidents et le montant
initial du prêt. Résultat surprenant, les revenus contribuent le moins à la construction du score
(3% seulement).
Pages - 16 -
Techniques de Scoring
4 Analyse des performances
L’analyse des performances est nécessaire pour la validation du score. En effet, celui-ci a été
construit sur l’échantillon apprentissage, on doit contrôler sa robustesse sur un échantillon qui
n’a pas servi à sa construction (échantillon test).
4.1 Courbes de densité
Pour analyser la robustesse de notre score, nous pouvons construire les courbes de densités du
score (y_etoile_chapeau) en fonction du critère à modéliser. Si notre score est robuste alors
les deux courbes sont les plus séparées possibles. Sur le graphique, ci-dessous, nous
observons des courbes de densité distinctes. Nous pouvons conclure que notre score est
robuste.
Pages - 17 -
Techniques de Scoring
4.2 Courbes de performance
4.2.1 Courbe de Roc
Cette courbe représente en ordonnée le taux de bon classement parmi les sains (vrais sains) et
en abscisse le taux de mauvais classement parmi les défaillants (faux défaillants). La
statistique c de cette courbe, proche de 1 (0.917), indique une bonne catégorisation de nos
individus.
4.2.2 Courbes de sélection
Echantillon test
Echantillon apprentissage
Cette courbe permet de mettre en relation une part d’individus classés selon leur niveau de
risque avec une part d’individus défaillants. Le score est performant lorsque cette courbe
s’éloigne de la bissectrice vers le bas.
Pages - 18 -
Techniques de Scoring
L’indice de Gini de l’échantillon test est 0,843 et celui de l’échantillon apprentissage 0,813 ce
qui est très bon. Nous remarquons que les courbes de sélection se ressemblent sur les deux
échantillons et se rapprochent du score parfait.
4.2.3 Courbes de performance
Echantillon Test
Echantillon Apprentissage
La courbe de performance permet de mettre en relation une part de marché d'individus avec la
part de défaillants parmi l’ensemble des défaillants. Cette courbe est d’autant meilleure
qu’elle est éloignée de la bissectrice vers le bas.
Les deux courbes sont similaires quel que soit l’échantillon. Nous remarquons qu’elles sont
éloignées de la bissectrice, on en conclut donc la performance de notre score.
4.2.4 Courbes de discrimination
Echantillon Apprentissage
Echantillon Test
La courbe de discrimination relie la part d’individus sains à la part d’individus défaillants.
Les courbes sont similaires sur les deux échantillons et sont éloignées de la bissectrice vers le
haut, ce qui confirme les conclusions tirées des précédentes courbes.
Pages - 19 -
Techniques de Scoring
4.3 Indice de robustesse
L’indice de robustesse se construit comme suit :
IR= 1 −
2 * Giniapprentissage − Ginitest
 n apprentissage

n
Max 1 −
); (1 − test )
N test 
 N apprentissage
Où n représente le nombre de défaillants et N le nombre d’observations dans chaque base.
Ici, l’indice de robustesse s’élève à 93% on considère qu’on a perdu moins de 7% de notre
performance de discrimination.
Pages - 20 -
Techniques de Scoring
5 Grille de score et échelle de notation
5.1 La grille de score
La grille de score permet d’associer une note comprise entre 0 et 100 à chaque client. Cette
note permet d’évaluer le niveau de risque de toutes les opérations de crédits.
N ij =
{
}
Min x1j ,..., x pj − xij
i
k
∑ ( Max{x
j =1
i
j
1
}
{
}
,..., x pj ,0 − Min x1j ,..., x pj ,0 )
i
Où x pj est le coefficient de la modalité i (i = 1, …, p) de la variable j (j = 1, …, k).
La grille de score se construit à partir des estimations sur l’échantillon apprentissage.
L’estimation de notre référence est fixée, par définition, à 0. Les notes les plus basses
correspondent au niveau de risque le plus élevé. Les individus sont répartis selon trois
niveaux de risque : faible, intermédiaire, élevé. De plus, la note maximale de la variable
correspond bien à sa contribution.
Les résultats sont présentés dans le tableau suivant.
Variables
AGE_D1
AGE_PRET_D1
NB_INC12M_D1
DUREE_PRET_D1
APPORT_D1
Modalités Estimation Contributions Notes Niveau de risque
18-24
-0,5
4,2
0,0
très risqué
24-34
0
4,2
4,2
peu risqué
34-54
-0,4025
4,2
0,8
très risqué
>54
-0,4271
4,2
0,6
intermédiaire
0-3
0
33,9
33,9
peu risqué
>3
-4,0058
33,9
0,0
très risqué
0
0
29,5
29,5
peu risqué
>0
-3,4868
29,5
0,0
très risqué
<14
0
5,7
5,7
peu risqué
14-24
-0,6689
5,7
0,0
très risqué
>24
-0,4366
5,7
2,0
intermédiaire
<5.000
-0,466
3,9
0,0
très risqué
5.000-0,3158
3,9
1,3
intermédiaire
24.000
>24.000
0
3,9
3,9
peu risqué
Pages - 21 -
Techniques de Scoring
Variables
Modalités Estimation Contributions Notes Niveau de risque
<20.000
0
17,0
17,0
peu risqué
20.000-1,6743
17,0
2,9
intermédiaire
60.000
INITIAL_D2
60.000-1,597
17,0
3,5
intermédiaire
220.000
>220.000
-2,0147
17,0
0,0
très risqué
5.400-0,3067
2,6
0,0
très risqué
REVENUS_D2
14.000
>14.000
0
2,6
2,6
peu risqué
<15%
0
3,2
3,2
peu risqué
ENDETTEMENT_D2 15-27%
-0,3156
3,2
0,5
très risqué
>27%
-0,3805
3,2
0,0
très risqué
Tableau 12 – Grille de score
5.2 Echelle de notation
L’échelle de notation permet d’effectuer un découpage de notre score en 10 classes afin
d’avoir des probabilités de ne pas être défaillant différentes pour chaque classe. Le numéro de
classe est croissant avec le risque associé et décroissant avec la probabilité estimée.
Probabilité de ne pas être défaillant
99,82%
Score maximum
100
Score minimum
93,5
Classe
1
99,72%
93,4
88,7
2
99,40%
88,5
79,8
3
98,87%
79,7
77
4
98,54%
76,9
75,5
5
98,37%
75,5
74,2
6
98,05%
74,1
72,9
7
97,72%
72,8
71,1
8
97,03%
71
67,7
9
57,56%
67,6
3,7
10
Tableau 13 – Echelle de notation
Pages - 22 -
Techniques de Scoring
6 Conclusion
Compte tenu des variables retenues, le score construit est utilisable pour les clients ayant déjà
des crédits. Il serait intéressant de construire un score applicable aux clients sollicitant un
crédit. Pour ce faire, il faudrait retirer la variable age_pret fortement contributive à
l’élaboration du score.
L’individu le moins risqué a entre 24 et 34 ans, détient un crédit depuis moins de 3 ans dont
l’échéance est courte (inférieure à 14 ans) et n’a connu aucun incident de crédits. Cet
individu contracte un prêt d'un montant faible avec un apport personnel important. Il fait
partie des individus les plus aisés et les moins endettés. Ce profil correspond à l’a priori que
nous avions.
Pages - 23 -
Techniques de Scoring
Annexes
et
Index
Pages - 24 -
Techniques de Scoring
Index des tableaux
TABLEAU 1 - DISCRETISATION DE LA VARIABLE CRD
10
TABLEAU 2 - DISCRETISATION DE LA VARIABLE AGE_CLIENT
11
TABLEAU 3 - DISCRETISATION DE LA VARIABLE AGE_PRET
11
TABLEAU 4 - DISCRETISATION DE LA VARIABLE DUREE_PRET
11
TABLEAU 5 - DISCRETISATION DE LA VARIABLE DUREE_RESTANTE
12
TABLEAU 6 - DISCRETISATION DE LA VARIABLE MONTANT_APPORT
12
TABLEAU 7 - DISCRETISATION DE LA VARIABLE MONTANT_INITIAL
13
TABLEAU 8- DISCRETISATION DE LA VARIABLE NBINC12M
13
TABLEAU 9 - DISCRETISATION DE LA VARIABLE REVENUS
13
TABLEAU 10 - DISCRETISATION DE LA VARIABLE ENDETTEMENT
14
TABLEAU 11 – CONTRIBUTION DES VARIABLES AU SCORE
16
TABLEAU 12 – GRILLE DE SCORE
22
TABLEAU 13 – ECHELLE DE NOTATION
22
Pages - 25 -
Techniques de Scoring
Annexe 1 : Liste des variables
#
Variable
Type
Libellé
1
CRD
Num
CRD = Capital restant dû
4
PCS
Alph
cl_Profession = CSP en modalités
2
age_client
Num
age_client = age du client
12
age_pret
Num
age_pret = Age du prêt
9
duree_pret
Num
11
duree_restante
Num
14
id
Num
15
impaye
Num
7
montant_apport
Num
6
montant_initial
Num
13
nbinc12M
Num
inc = Nombre de trimeste en incident l année N
10
revenus
Num
revenu1 = Montant des revenus
3
situfam
Alph
8
taux_endettement
Num
5
type_bien
Alph
mnt_apport1 = Montant de l apport
Pages - 26 -
Techniques de Scoring
Annexe 2 : Référence des variables explicatives
Variable
Modalité
CRD_D1
1
PCS
Prof_lib
age_D1
2
age_pret_D1
1
duree_pret_D1
1
Apport_D1
3
Initial_D2
1
Nb_inc12M_D1
1
Revenus_D2
2
Situfam_R1
4
Endettement_D2
1
type_bien
2
Pages - 27 -
Techniques de Scoring
Annexe 3 : Les tests utilisés
Test de corrélation de Spearman
H0 : ( ρ XY = 0 ) contre Ha ( ρ XY ≠ 0 )
n
6∑ ( R Xi − RYi ) 2
ρ = 1−
i =1
n(n ² − 1)
Où ρ XY est le cœfficient de corrélation entre la variable X et la variable Y, RXi
(respectivement RYi) est le rang que prend Xi (respectivement Yi) par rapport aux autres
valeurs de l'échantillon des X (respectivement Y)
ZR: { ρ > t (n,1 −
α
α
) ou ρ < t (n, ) }
2
2
Test de Kruskal-Wallis
H0 : (pas de différence entre les k populations) contre Ha : (au moins une des populations est
différente des autres populations)
G
∑ n (r
i
K = ( N − 1)
i⋅
−r )2
i =1
G ni
∑∑ (r
ij
−r )2
i =1 j =1
Où g est le nombre d’observations du groupe, rij le rang de l’observation j du groupe i, N le
nombre total d’observations, r i⋅ est la moyenne des rij pour chaque groupe i, r est la moyenne
pour tous les rij.
ZR: { K ≥ χ ²( g − 1) }
Pages - 28 -
Techniques de Scoring
Test du khi deux
H0 : (les variables sont indépendantes) contre Ha : (les variables ne sont pas indépendantes,
l’écart entre la valeur attendue et la valeur observée n’est pas dû au hasard)
K= ∑i , j
(Oij − Eij )²
Eij
Où Oij est la valeur observée et Eij la valeur attendue sous l’hypothèse d’indépendance.
ZR : { K ≥ χ ²((i − 1)( j − 1)) }
Test de Vuong
Le test consiste à comparer les vraisemblances issues des deux méthodes d’estimation et ce
pour chaque individus et de choisir celle qui offre la meilleure représentation (qui est
supérieur).
La statistique de test est :
Vuong =
1
N
∑t
σ
i
i
2
t
avec
t i = ln( lilog it ) - ln( li probit )
Donc, lorsque la statistique de test est positive, on préférera l’estimation de type Logit, sinon
on préférera l’estimation de type Probit.
Pages - 29 -
Techniques de Scoring
Annexe 4 : Programmes SAS
%let chemin="H:\Credit-scoring\projet";
libname td &chemin;
run;
data tab;
set td.Base_proj_sco_0708;
run;
%let variables_quanti= crd age_client age_pret duree_pret duree_restante
montant_apport
montant_initial nbinc12m revenus taux_endettement; /*variables
quantitatives de la base*/
%let variables_quali=pcs situfam type_bien;
/*variables qualitatives
de la base*/
%let y=impaye;
/*variable à modéliser*/
/*************************************************************************/
/****************************LA BASE DE DONNEES***************************/
/*************************************************************************/
proc contents data=tab;
title "contenu table";
run;
/*************************************************************************/
/**************************NETTOYAGE DE LA BASE***************************/
/*************************************************************************/
/*doublons*/
proc sort data=tab nodupkey
by id;
run;
;
/****TRAITEMENT DES VALEURS MANQUANTES****/
/*Pour les variables quantitatives*/
proc means data=tab;
var &variables_quanti;
title "valeurs manquantes variables quantitatives";
run;
/*Pour les variables qualitatives*/
proc freq data= tab;
table &variables_quali &y;
title "valeurs manquantes variables qualitatives";
run;
data tab;
set tab;
indice=montant_apport/montant_initial;
indice_age=age_client-age_pret;
indice_montant=CRD-montant_initial;
run;
Pages - 30 -
Techniques de Scoring
proc means data=tab;
var indice indice_age indice_montant;
title "valeurs manquantes variables quantitatives";
run;
/*on prend un seuil de 19 ie. apport 19* sup au prêt*/
proc means data=tab;
class pcs;
var revenus;
title "description pcs*revenus";
run;
data tab;
set tab;
if duree_restante= . then delete;
if montant_initial= . then delete;
if taux_endettement= . then delete;
if pcs="manquant" or pcs="Manquant" then delete;
if situfam="manquant" then delete;
if type_bien="manquant" then delete;
run;
/****TRAITEMENT DES VALEURS ABERRANTES****/
/*Proc Logistic Data=tab ;
Class &variables_quali / PARAM=REF ;
Model IMPAYE (Event='1')= &variables_quanti &variables_quali / Link=logit ;
output out=respearson reschi=PEARSON h=HATMATRIX;
Run ;
proc means data=respearson;
where pearson<-2 or pearson>2;
var pearson;
title "valeurs aberrantes _ Pearson";
run;*/
proc sql;
select count(id) into : nobs
from tab;
quit;
data tab;
set tab;
/*if hatmatrix>3*13/&nobs then delete;
if abs(pearson)>2 then delete;*/
if age_client<18 or age_client>108 then delete;
if indice_age<18 then delete;
if indice_montant>0 then delete;
if indice>19 then delete;
if revenus>1000000 then delete;
if taux_endettement>33.33 then delete;
if revenus<5400 then delete;/*RMI*/
run;
/*************************************************************************/
/*****************************DATA SPLITTING******************************/
/*************************************************************************/
/****CONSTRUCTION D'UN ECHANTILLON APPRENTISSAGE****/
proc surveyselect
Pages - 31 -
Techniques de Scoring
data=tab
method=srs
rep=1
seed=1234
samprate=70
out=echantillon_app;
title "construction echantillon apprentissage";
run;
/****CONSTRUCTION D'UN ECHANTILLON TEST****/
proc sort data=tab;
by id;
proc sort data=echantillon_app;
by id;
run;
data echantillon_test;
merge tab (in=a) echantillon_app (in=b);
by id;
if a ne b;
run;
/****VERIFICATION DE LA COHERANCE DES ECHANTILLONS****/
proc freq data=echantillon_app;
table &y;
title "verification echantillonnage";
proc freq data=echantillon_test;
table &y;
proc freq data=tab;
table &y;
run;
/*************************************************************************/
/****************************ETUDE EXPLORATOIRE***************************/
/*************************************************************************/
/****STATISTIQUES DESCRIPTIVES****/
/*Pour les variables quantitatives*/
Proc gchart data=echantillon_app;
title "statistiques descriptives ";
vbar age_client/ subgroup=impaye midpoints=18 to 78 by 1;
vbar crd/subgroup=impaye midpoints=0 to 660000 by 10000;
vbar age_pret/ subgroup=impaye midpoints=0 to 21 by 1;
vbar duree_pret/subgroup=impaye midpoints=0 to 40 by 1;
vbar duree_restante/ subgroup=impaye midpoints=18 to 30 by 1;
vbar montant_apport/subgroup=impaye midpoints=0 to 300000 by 10000;
vbar montant_initial/ subgroup=impaye midpoints=0 to 300000 by 10000;
vbar nbinc12m/subgroup=impaye midpoints=0 to 4 by 1;
vbar revenus/ subgroup=impaye midpoints=0 to 217000 by 10000 ;
vbar taux_endettement/subgroup=impaye;
run;
quit;
%macro KDE_description(tab,var_quanti);
proc kde data=&tab
out = kde_&var_quanti ;
Pages - 32 -
Techniques de Scoring
var &var_quanti ;
title "kde &var_quanti";
run;
proc gplot data=kde_&var_quanti;
plot density*&var_quanti ;
symbol color= blue
interpol=join
value=dot
height=0.1;
title "courbe de densite &var_quanti";
run;
quit;
Proc DataSets LIBRARY=WORK ;
Delete kde_&var_quanti
;
Run ;
%mend;
/*impaye=0 rouge*/
%kde_description(echantillon_app,
%kde_description(echantillon_app,
%kde_description(echantillon_app,
%kde_description(echantillon_app,
%kde_description(echantillon_app,
%kde_description(echantillon_app,
%kde_description(echantillon_app,
%kde_description(echantillon_app,
%kde_description(echantillon_app,
%kde_description(echantillon_app,
age_client);
crd);
age_pret);
duree_pret);
duree_restante);
montant_apport);
montant_initial);
nbinc12m);
revenus);
taux_endettement);
proc univariate data=echantillon_app;
var &variables_quanti;
title "description des variables quantitatives";
run;
/*Pour les variables qualitatives*/
proc gchart data=echantillon_app;
vbar &variables_quali;
title "repartition des variables qualitatives";
run;
quit;
proc freq data=echantillon_app;
table &variables_qual;
title "description des variables qualitatives";
run;
/*************************************************************************/
/****************************ETUDE DES LIAISONS***************************/
/*************************************************************************/
/****VARIABLES QUANTITATIVES - VARIABLES QUANTITATIVES****/
proc corr spearman data=echantillon_app ;
var &variables_quanti ;
title "liaisons variables quantitatives - variables quantitatives";
run;
/*on retire CRD et Duree_restante*/
/****VARIABLES QUALITATIVES - VARIABLES QUANTITATIVES****/
Pages - 33 -
Techniques de Scoring
proc npar1way wilcoxon data= echantillon_app
correct=no;
class &y;
var &variables_quanti;
title "liaisons variables qualitatives - variables quantitatives";
run;
/*pval<0.05 variable discriminante*/
/****VARIABLES QUALITATIVES - VARIABLES QUALITATIVES****/
/*test du chi-deux*/
%macro test_chideux(tab,var);
Proc Freq data=&tab;
tables impaye*&var/chisq;
output out= resultat n chisq;
run;
Data resultat;
set resultat;
T=sqrt((_pchi_/N)/sqrt(df_pchi));
keep N _pchi_ df_pchi t;
run;
proc print data=Resultat;
title "resultat liaison &var";
run;
Proc DataSets LIBRARY=WORK ;
Delete resultat;
Run ;
quit;
%mend;
%test_chideux (echantillon_app,pcs);
%test_chideux (echantillon_app,situfam);
%test_chideux (echantillon_app,type_bien);
/* proche de 1 variable discriminante*/
/*************************************************************************/
/***********************TRANSFORMATION DES VARIABLES**********************/
/*************************************************************************/
/****DISCRETISATION DES VARIABLES QUANTITATIVES****/
%macro KDE_discretisation (tab,var_quanti,deb,fin,incr);
proc kde data=&tab (where=(impaye=0))
out = kdeimpaye0_&var_quanti ;
var &var_quanti ;
title "kde &var_quanti";
run;
proc kde data=&tab (where=(impaye=1))
out = kdeimpaye1_&var_quanti;
var &var_quanti;
title "kde &var_quanti";
run;
data tab_dens_&var_quanti;
merge kdeimpaye0_&var_quanti (rename=(density=dens0))
kdeimpaye1_&var_quanti (rename=(density=dens1));
by &var_quanti;
run;
proc gplot data=tab_dens_&var_quanti;
plot (dens1 dens0)*&var_quanti /overlay haxis= &deb to &fin by &incr;
Pages - 34 -
Techniques de Scoring
symbol1 color=red
interpol=join
value=dot
height=0.1;
symbol2 color= green
interpol=join
value=dot
height=0.1;
title "courbes de densité &var_quanti";
run;
quit;
Proc DataSets LIBRARY=WORK ;
Delete kdeimpaye0_&var_quanti ;
Run ;
Proc DataSets LIBRARY=WORK ;
Delete kdeimpaye1_&var_quanti ;
Run ;
quit;
%mend;
/*impaye=0 rouge*/
%kde_discretisation(echantillon_app, age_client,18,103,1);
/*0-24 24-34 34-54 +54
31 31-52 +52*/
%kde_discretisation(echantillon_app, crd,0,400000,10000);
/*20000 20000-100000 +100000
*/
%kde_discretisation(echantillon_app, age_pret,0,8,1);
/*0-3 3-inf
0 1 2 3 inf*/
%kde_discretisation(echantillon_app, duree_pret,3,35,1);
/*0-14 14-24 +24
0è-7 7-12 12-21 21-24 24+*/
%kde_discretisation(echantillon_app, duree_restante,0,30,1);
/*0-20 20-24 +24
0-10 10-20 20-24 +24*/
%kde_discretisation(echantillon_app, montant_apport,0,300000,10000);
/*0-5000 5000-24000 24000+
0-5000 5000-24000 24000-160000 160000+*/
%kde_discretisation(echantillon_app, montant_initial,0,600000,20000);
/*0-60000 60000-110000 110000+
0-20000 20000-60000 +220000*/
%kde_discretisation(echantillon_app, nbinc12m,0,4,1);
/*01234
0 >0*/
%kde_discretisation(echantillon_app, revenus ,0,100000,5000);
/*0-14000 14000-35000 +35000
0-14000 +14000*/
%kde_discretisation(echantillon_app, taux_endettement,0,33,1);
/*0-27 +27
0-15 15-27 +27*/
proc gchart data=echantillon_app;
vbar &variables_quali / subgroup=impaye;
title "discretisation des variables qualitatives" ;
run;
quit;
Pages - 35 -
Techniques de Scoring
/****DISCRETISATION DES VARIABLES QUANTITATIVES****/
%macro regroupement(base);
data class_&base;
set &base;
AGE_D1 = 1*(AGE_CLIENT<24) + 2*(24<=AGE_CLIENT<34) + 3*(34<=AGE_CLIENT<54)
+ 4*(AGE_CLIENT>=54);
AGE_D2 = 1*(AGE_CLIENT<31) + 2*(31<=AGE_CLIENT<52) + 3*(52<=AGE_CLIENT);
CRD_D1 = 1*(CRD<15000) + 2*(15000<=CRD<105000) + 3*(105000<=CRD);
CRD_D2 = 1*(CRD<15000) + 2*(15000<=CRD<65000) +
3*(65000<=CRD<105000)+4*(105000<=CRD);
AGE_PRET_D1 = 1*(AGE_PRET<3) + 2*(AGE_PRET>=3);
AGE_PRET_D2 = 1*(AGE_PRET<1) + 2*(1=<AGE_PRET<2)+3*(2<=AGE_PRET<3) +
4*(3=<AGE_PRET);
DUREE_PRET_D1 = 1*(DUREE_PRET<14) +
2*(14=<DUREE_PRET<24)+3*(24<=DUREE_PRET);
DUREE_PRET_D2 = 1*(DUREE_PRET<7) +
2*(7=<DUREE_PRET<12)+3*(12<=DUREE_PRET<21)
+4*(21=<DUREE_PRET<24)+5*(24<=DUREE_PRET);
DUREE_RESTANTE_D1 = 1*(DUREE_RESTANTE<20) + 2*(20=<DUREE_RESTANTE<24)+
3*(24<=DUREE_RESTANTE);
DUREE_RESTANTE_D2 = 1*(DUREE_RESTANTE<10) +
2*(10=<DUREE_RESTANTE<20)+3*(20<=DUREE_RESTANTE<24)
+4*(24<=DUREE_RESTANTE);
APPORT_D1 = 1*(MONTANT_APPORT<5000) + 2*(5000=<MONTANT_APPORT<24000)+
3*(24000<=MONTANT_APPORT);
APPORT_D2 = 1*(MONTANT_APPORT<5000) + 2*(5000=<MONTANT_APPORT<24000)+
3*(24000<=MONTANT_APPORT<160000)+ 4*(160000<=MONTANT_APPORT);
INITIAL_D1 = 1*(MONTANT_INITIAL<60000) + 2*(60000=<MONTANT_INITIAL<110000)+
3*(110000<=MONTANT_INITIAL);
INITIAL_D2 = 1*(MONTANT_INITIAL<20000) + 2*(20000=<MONTANT_INITIAL<60000)+
3*(60000<=MONTANT_INITIAL<220000)+ 4*(220000<=MONTANT_INITIAL);
NB_INC12M_D1 = 1*(NBINC12M=0) + 2*(0<NBINC12M);
REVENUS_D1 = 1*(REVENUS<14000) + 2*(14000=<REVENUS<35000)+
3*(35000=<REVENUS);
REVENUS_D2 = 1*(REVENUS<14000) + 2*(14000=<REVENUS) ;
ENDETTEMENT_D1 = 1*(taux_ENDETTEMENT<27) + 2*(27=<taux_ENDETTEMENT);
ENDETTEMENT_D2 = 1*(taux_ENDETTEMENT<15) + 2*(15=<taux_ENDETTEMENT<27)+
3*(27=<taux_ENDETTEMENT);
PCS_R1 = 1*(PCS In ("Employé")) + 2*(PCS In ("Ouvrier")) + 3*(PCS IN
("Retraité")) + 4*(PCS IN("cadres","profint")) + 5*(PCS
IN("prof_lib","agrcomart")) ;
PCS_R2 = 1*(PCS In ("Employé")) + 2*(PCS In ("Ouvrier")) + 3*(PCS IN
("Retraité")) + 4*(PCS IN("profint")) + 5*(PCS
IN("cadres","prof_lib","agrcomart")) ;
SITUFAM_R1 = 1*(SITUFAM In ("marié")) + 2*(SITUFAM In ("célibataire")) +
3*(SITUFAM IN ("veuf(ve)","divorcé")) + 4*(SITUFAM IN("vm-concubins","vmconcubins-pacs")) ;
SITUFAM_R2 = 1*(SITUFAM In ("marié")) + 2*(SITUFAM In
("célibataire","divorcé")) + 3*(SITUFAM IN ("veuf(ve)")) + 4*(SITUFAM
IN("vm-concubins","vm-concubins-pacs")) ;
SITUFAM_R3 = 1*(SITUFAM In ("marié")) + 2*(SITUFAM In
("célibataire","divorcé","veuf(ve)")) + 3*(SITUFAM IN("vm-concubins","vmconcubins-pacs")) ;
type_bien=1*(type_bien in("ancien")) + 2*(type_bien in("neuf"));
run;
PROC FREQ DATA=class_&base;
TABLE AGE_D1 AGE_D2 crd_d1 crd_d2 age_pret_d1
duree_pret_d2 duree_restante_d1
Pages - 36 -
age_pret_d2 duree_pret_d1
Techniques de Scoring
duree_restante_d2 apport_d1 apport_d2 initial_d1 initial_d2 revenus_d1
revenus_d2 endettement_d1
endettement_d2 pcs_r1 pcs_r2 situfam_r1 situfam_r2 situfam_r3 type_bien;
title "verif discretisation &base";
run;
%mend;
%regroupement(tab);
%regroupement(echantillon_app);
%regroupement(echantillon_test);
Option MacroGen ;
%Macro T_Tschuprow(Tab=,Var_Qual_1=,Var_Qual_2=,Chemin_Out=) ;
ODS LISTING CLOSE ;
Proc Freq Data=&Tab. ;
Tables &Var_Qual_1.*&Var_Qual_2. / ChisQ ;
Output Out=Tab_Out_KD ChisQ ;
Run ;
ODS LISTING ;
Data Tab_Out_KD (Keep=T_Tschuprow) ;
Set Tab_Out_KD ;
Attrib T_Tschuprow Label="Statistique du T de Tschuprow" Format=8.6 ;
T_Tschuprow=(sqrt((_PCHI_/N)/sqrt(DF_PCHI))) ;
Run ;
/*ODS HTML FILE="&Chemin_Out\T_Tshuprow_&Var_Qual_1._&Var_Qual_2..xls"
STYLE=PRINTER ;*/
ODS PROCLABEL "Statistique du T de Tschuprow &var_qual_2" ;
Options NoDate NoNumber ;
Title ;
Proc Print Data=Tab_Out_KD Label NOOBS ;
Var T_Tschuprow ;
Format T_Tschuprow NUMX8.6 ;
Run ;
ODS HTML CLOSE ;
Proc DataSets LIBRARY=WORK ;
Delete Tab_Out_KD ;
Run ;
Quit ;
%Mend ;
%T_Tschuprow(Tab=Class_echantillon_app,Var_Qual_1=IMPAYE,Var_Qual_2=AGE_D1,
Chemin_Out=&chemin) ;
%T_Tschuprow(Tab=class_echantillon_app,Var_Qual_1=IMPAYE,Var_Qual_2=AGE_D2,
Chemin_Out=&chemin) ;
/*age_d1*/
%T_Tschuprow(Tab=class_echantillon_app,Var_Qual_1=IMPAYE,Var_Qual_2=crd_D1,
Chemin_Out=&chemin) ;
%T_Tschuprow(Tab=class_echantillon_app,Var_Qual_1=IMPAYE,Var_Qual_2=crd_D2,
Chemin_Out=&chemin) ;
/*crd_D1*/
%T_Tschuprow(Tab=class_echantillon_app,Var_Qual_1=IMPAYE,Var_Qual_2=AGE_pre
t_D1,Chemin_Out=&chemin) ;
%T_Tschuprow(Tab=class_echantillon_app,Var_Qual_1=IMPAYE,Var_Qual_2=AGE_pre
t_D2,Chemin_Out=&chemin) ;
/*age_pret_d1*/
%T_Tschuprow(Tab=class_echantillon_app,Var_Qual_1=IMPAYE,Var_Qual_2=duree_p
ret_D1,Chemin_Out=&chemin) ;
%T_Tschuprow(Tab=class_echantillon_app,Var_Qual_1=IMPAYE,Var_Qual_2=duree_p
ret_D2,Chemin_Out=&chemin) ;
/*duree_pret_d1*/
Pages - 37 -
Techniques de Scoring
%T_Tschuprow(Tab=class_echantillon_app,Var_Qual_1=IMPAYE,Var_Qual_2=duree_r
estante_D1,Chemin_Out=&chemin) ;
%T_Tschuprow(Tab=class_echantillon_app,Var_Qual_1=IMPAYE,Var_Qual_2=duree_r
estante_D2,Chemin_Out=&chemin) ;
/*duree_restante_d2*/
%T_Tschuprow(Tab=class_echantillon_app,Var_Qual_1=IMPAYE,Var_Qual_2=apport_
D1,Chemin_Out=&chemin) ;
%T_Tschuprow(Tab=class_echantillon_app,Var_Qual_1=IMPAYE,Var_Qual_2=apport_
D2,Chemin_Out=&chemin) ;
/*apport_d1*/
%T_Tschuprow(Tab=class_echantillon_app,Var_Qual_1=IMPAYE,Var_Qual_2=initial
_D1,Chemin_Out=&chemin) ;
%T_Tschuprow(Tab=class_echantillon_app,Var_Qual_1=IMPAYE,Var_Qual_2=initial
_D2,Chemin_Out=&chemin) ;
/*initial_d2*/
%T_Tschuprow(Tab=class_echantillon_app,Var_Qual_1=IMPAYE,Var_Qual_2=revenus
_D1,Chemin_Out=&chemin) ;
%T_Tschuprow(Tab=class_echantillon_app,Var_Qual_1=IMPAYE,Var_Qual_2=revenus
_D2,Chemin_Out=&chemin) ;
/*revenus_d2*/
%T_Tschuprow(Tab=class_echantillon_app,Var_Qual_1=IMPAYE,Var_Qual_2=NB_INC1
2M_D1,Chemin_Out=&chemin) ;
%T_Tschuprow(Tab=class_echantillon_app,Var_Qual_1=IMPAYE,Var_Qual_2=NBINC12
M,Chemin_Out=&chemin) ;
/*NBINC_12M_D1*/
%T_Tschuprow(Tab=class_echantillon_app,Var_Qual_1=IMPAYE,Var_Qual_2=endette
ment_D1,Chemin_Out=&chemin) ;
%T_Tschuprow(Tab=class_echantillon_app,Var_Qual_1=IMPAYE,Var_Qual_2=endette
ment_D2,Chemin_Out=&chemin) ;
/*endettement_d2*/
%T_Tschuprow(Tab=class_echantillon_app,Var_Qual_1=IMPAYE,Var_Qual_2=pcs_r1,
Chemin_Out=&chemin) ;
%T_Tschuprow(Tab=class_echantillon_app,Var_Qual_1=IMPAYE,Var_Qual_2=pcs_r2,
Chemin_Out=&chemin) ;
%T_Tschuprow(Tab=class_echantillon_app,Var_Qual_1=IMPAYE,Var_Qual_2=pcs,Che
min_Out=&chemin) ;
/*pcs*/
%T_Tschuprow(Tab=class_echantillon_app,Var_Qual_1=IMPAYE,Var_Qual_2=situfam
_r1,Chemin_Out=&chemin) ;
%T_Tschuprow(Tab=class_echantillon_app,Var_Qual_1=IMPAYE,Var_Qual_2=situfam
_r2,Chemin_Out=&chemin) ;
%T_Tschuprow(Tab=class_echantillon_app,Var_Qual_1=IMPAYE,Var_Qual_2=situfam
_r3,Chemin_Out=&chemin) ;
%T_Tschuprow(Tab=class_echantillon_app,Var_Qual_1=IMPAYE,Var_Qual_2=situfam
,Chemin_Out=&chemin) ;
/*situfam_r1*/
/*%macro decoupage_dynamique(Tab,Var,deb,fin,incr);
%do i=&deb %to &fin %by &incr;
%do j=&deb %to &fin-&i %by &incr;
data essai;
set &tab;
D_&var = 1*(&Var<&i) + 2*(&i<=&Var<&i+&j)+3*(&i+&j<=&Var);
run;
Proc Freq data=essai;
tables impaye*D_&var/chisq;
output out=resultat n chisq;
title "critére automatique &var";
run;
Data resultat;
set resultat;
Pages - 38 -
Techniques de Scoring
T=sqrt((_pchi_/N)/sqrt(df_pchi));
class1=&i;
class2=&i+&j;
run;
data test_&var;
set test_&var resultat ;
keep t and class1 and class2 ;
run;
%end;
%end;
proc sql;
select class1, class2, T
from test_duree_pret
where t=(select max(T) from test_duree_pret);
title "critére automatique &var";
quit;
Proc DataSets LIBRARY=WORK ;
Delete Essai ;
Run ;
Proc DataSets LIBRARY=WORK ;
Delete resultat ;
Run ;
quit;
%mend;*/
/*%decoupage_dynamique(echantillon_app,duree_pret,0,34,1);
%decoupage_dynamique(echantillon_app,crd,0,3020000,10000);
%decoupage_dynamique(echantillon_app,age_client,18,108,1);
%decoupage_dynamique(echantillon_app,age_pret,0,15,1);
%decoupage_dynamique(echantillon_app,duree_restante,0,30,1);
%decoupage_dynamique(echantillon_app,montant_apport,0,1000100,10000);
%decoupage_dynamique(echantillon_app,montant_initial,0, 3060000,10000);
%decoupage_dynamique(echantillon_app,nbinc12m,0,4,1);
%decoupage_dynamique(echantillon_app,revenus,0, 670355,10000);
%decoupage_dynamique(echantillon_app,taux_endettement,0,33,1);*/
/*************************************************************************/
/************************ESTIMATION DU MODELE*****************************/
/*************************************************************************/
%let variables_mod=age_d1 crd_d1 age_pret_d1 NB_INC12M_D1 duree_pret_d1
/*duree_restante_d2*/
apport_d1 initial_d2 revenus_d2 endettement_d2 pcs situfam_r1 type_bien;
%let variables_class=age_d1 (ref="2") crd_d1 (ref="1") age_pret_d1
(ref="1") duree_pret_d1 (ref="1")
/*duree_restante_d2*/ apport_d1 (ref="3") initial_d2 (ref="1") revenus_d2
(ref="2")
endettement_d2 (ref="1") pcs (ref="prof_lib") situfam_r1 (ref="4")
type_bien (ref="2") NB_INC12M_D1 (ref="1");
/*référence modalité la moins risquée*/
/****CHOIX DU MODELE PAR LE TEST DE VUONG****/
PROC LOGISTIC DATA = class_echantillon_app;
CLASS &variables_class/ PARAM=REF ;
MODEL IMPAYE (Event='1') = &variables_mod
/ OUTROC = Tab_Roc_App Selection=backward SLS=0.05 Link=Logit ;
OUTPUT OUT=TAB_SCORE_ECH_APP_logit p=p_logit PREDICTED=Y_Chapeau
XBETA=Y_Etoile_Chapeau ;
Pages - 39 -
Techniques de Scoring
title "modelisation logit";
RUN ;
PROC LOGISTIC DATA = class_echantillon_app;
CLASS &variables_class/ PARAM=REF ;
MODEL IMPAYE (Event='1') = &variables_mod
/ OUTROC = Tab_Roc_App Selection=Backward SLS=0.05 Link=Probit;
OUTPUT OUT=TAB_SCORE_ECH_APP_probit p=p_probit PREDICTED=Y_Chapeau
XBETA=Y_Etoile_Chapeau ;
title "modelisation probit";
RUN ;
data vuong; merge TAB_SCORE_ECH_APP_logit TAB_SCORE_ECH_APP_probit;
l_logit=impaye*log(p_logit)+(1-impaye)*log(1-p_logit);
l_probit=impaye*log(p_probit)+(1-impaye)*log(1-p_probit);
n_vuong=l_logit-l_probit;
run;
proc means data=vuong mean std stderr t0 prt;
var n_vuong;
title"vuong";
run;
proc means data=vuong vardef=n;
var n_vuong;
output out=resultat_vuong mean=moy std=stm n=n;
title"vuong";
run;
data resultat_vuong; set resultat_vuong; vuong=moy/(stm/sqrt(n));
proc print;
title"résultat test de vuong";
run;
/*Suite au test de vuong, on choisit le logit*/
/****CALIBRAGE DU MODELE****/
PROC LOGISTIC DATA = class_echantillon_app;
CLASS &variables_class / PARAM=REF ;
MODEL IMPAYE (Event='1') = &variables_mod
/ OUTROC = Tab_Roc_App Selection=Backward SLS=0.05 Link=logit
lackfit;
OUTPUT OUT=TAB_SCORE_ECH_APP_logit p=p_logit PREDICTED=Y_Chapeau
XBETA=Y_Etoile_Chapeau ;
title "regression logit Test d'Hosmer et Lemeshow ";
RUN ;
/*si pval>0.05 alors le modèle ne trahit pas les données
ici, la pval est inférieure */
/****QUALITE DU MODELE****/
PROC LOGISTIC DATA = class_echantillon_app;
CLASS &variables_class / PARAM=REF ;
MODEL IMPAYE (Event='1') = &variables_mod
/ OUTROC = Tab_Roc_App Selection=Backward SLS=0.05 Link=logit RSQUARE
;
OUTPUT OUT=TAB_SCORE_ECH_APP_logit p=p_logit PREDICTED=Y_Chapeau
XBETA=Y_Etoile_Chapeau ;
title"regression logit R² ajusté de Nagelkerke";
RUN ;
/* R2 de 0.50*/
Pages - 40 -
Techniques de Scoring
/****CONTRIBUTION****/
/*cf grille de score sur fichier Excel*/
/*************************************************************************/
/************************ANALYSE DES PERFORMANCES*************************/
/*************************************************************************/
/****COURBE DE ROC****/
Proc Logistic Data=class_echantillon_App OutEst=Tab_Est ;
Class &variables_class / PARAM=REF ;
Model IMPAYE (Event='1')= &variables_mod / Link=logit OutRoc=ROC_APP ;
Run ;
proc gplot data= class_echatillon_app ;
PLOT _SENSIT_*(_1MSPEC_ _SENSIT_) / OVERLAY ;
title "courbe de Roc echantillon apprentissage";
RUN ;
QUIT ;
/*--- Echantillon test ---*/
Proc Logistic Data=class_echantillon_Test InEst=Tab_Est ;
Class &variables_class / PARAM=REF ;
Model IMPAYE (Event='1')= &variables_mod /Link=logit OutRoc=ROC_TEST
MaxIter=0 ;
Run ;
PROC GPLOT DATA = ROC_TEST ;
PLOT _SENSIT_*(_1MSPEC_ _SENSIT_) / OVERLAY ;
title "Courbe de Roc ";
RUN ;
QUIT ;
/****COURBES DE DENSITE DES SCORES****/
%kde_discretisation(TAB_SCORE_ECH_APP_logit, y_etoile_chapeau,-2,8,1);
PROC LOGISTIC DATA = class_echantillon_test;
CLASS &variables_class/ PARAM=REF ;
MODEL IMPAYE (Event='1') = &variables_mod
/ OUTROC = Tab_Roc_App Selection=Backward SLS=0.05 Link=logit ;
OUTPUT OUT=TAB_SCORE_ECH_test_logit p=p_logit PREDICTED=Y_Chapeau
XBETA=Y_Etoile_Chapeau ;
title"regression logit test";
RUN ;
%kde_discretisation(TAB_SCORE_ECH_test_logit, y_etoile_chapeau,-2,8,1);
/****COURBES DE SELECTION, PERFORMANCE, DISCRIMINATION****/
%Macro Indice_Gini(Tab_Score=,Var_Qual=,Var_Score=) ;
Proc SQL NoPrint ;
Create Table Temp_1 As
Select &Var_Qual, &Var_Score From &Tab_Score
Order By &Var_Score DESC ;
Quit ;
Data Temp_1 ;
Set Temp_1 ;
Retain Nb Nb0 Nb1 0 ;
Nb=Nb+1 ;
If &Var_Qual=0 Then Nb0=Nb0+1 ; /* Défaillants */
Else If &Var_Qual=1 Then Nb1=Nb1+1 ; /* Non-défaillants */
Run ;
Pages - 41 -
Techniques de Scoring
Data _NULL_ ;
Set Temp_1 ;
Call Symput ("Nb_Tot",Nb) ;
Call Symput ("Nb_Tot_0",Nb0) ;
Call Symput ("Nb_Tot_1",Nb1) ;
Run ;
/* Courbe de sélection */
Data Temp_1 ;
Set Temp_1 ;
X_Sel=Nb/&Nb_Tot ;
Y_Sel=Nb0/&Nb_Tot_0 ;
If (Nb/&Nb_Tot) <= (&Nb_Tot_1/&Nb_Tot) Then Y_Sel_Max=0 ;
Else Y_Sel_Max=1+((Nb/&Nb_Tot-1)/(&Nb_Tot_0/&Nb_Tot)) ;
y_discr=(Nb-Nb0)/(&Nb_Tot-&Nb_Tot_0);
x_discr=Y_Sel;
y_perf=(Nb0/Nb)/(&Nb_Tot_0/&Nb_Tot);
x_perf=x_sel;
run ;
/* Calcul de l'indice de Gini */
Data Temp_1 ;
Set Temp_1 ;
Aire_Courbe_Sel=(1/&Nb_Tot)*(X_Sel-Y_Sel) ;
Run ;
Proc SQL NoPrint ;
Select Sum(Aire_Courbe_Sel) Into : Som_ACS From Temp_1 ;
Quit ;
%Put N : &Nb_Tot ;
%Put N (Défaillants) : &Nb_Tot_0 ;
%Put N (Non-Défaillants) : &Nb_Tot_1 ;
%Let Gini_Index_Temp=%SysFunc(ABS(&Som_ACS/((1-(&Nb_Tot_0/&Nb_Tot))/2))) ;
%Let Gini_Index=%SysFunc(Round(&Gini_Index_Temp,0.0001)) ;
Proc SQL NoPrint ;
Create Table Gini (Gini Num) ;
Insert Into Gini Values (&Gini_Index) ;
Quit ;
Proc Print Data=Gini ;
Var Gini ;
Format Gini NUMX8.3 ;
Run ;
GOptions Device=win Devmap=winansi Keymap=winansi FTitle=Triplex HTitle=3
CBack=White Border Htext=1 FText=Complex ;
Symbol1 i=join v=none c=Red w=2 ;
Symbol2 i=join v=none c=Orange w=2 l=3 ;
Symbol3 i=join v=none c=yellow w=2 l=3 ;
Symbol4 i=none v=none c=White width=1 ; /* Ligne blanche : permet
d'afficher la statistique de Gini à la ligne */
/*** Proc Gplot - Courbe de sélection ***/
Proc Gplot Data=Temp_1 ;
Title "Courbe de sélection" ;
Axis1 Label=(Color=Black F=Times H=2 Justify=Center "Part des
individus selectionnes") Order=0 To 1 By 0.1 ;
Axis2 Label=(Angle=90 Color=Black F=Times H=2.5 Justify=Center
"Selection") Order=0 To 1 By 0.1 ;
Legend1 Across=1 CBorder=Black Position=(Top Inside Right) OffSet=(50,-5) Mode=Share
Value=(Tick=1 "Score analysé" Tick=2 "Score parfait" Tick=3 "Score
aléatoire" Tick=4 "Indice de Gini = &Gini_Index") Shape=symbol(6,2.5)
Label=None ;
Plot (Y_Sel Y_Sel_max X_Sel Nb)*X_Sel
/ OverLay Legend=Legend1 NoFrame Grid HAxis=Axis1 VAxis=Axis2 VRef=1
LVref=2 HRef=1 LHref=2 Name='CRBSEL' ;
Pages - 42 -
Techniques de Scoring
Run ;
Quit ;
/*** Proc Gplot - Courbe de performance ***/
Proc Gplot Data=Temp_1 ;
Title "Courbe de performance" ;
Axis1 Label=(Color=Black F=Times H=2 Justify=Center "Part des
individus selectionnes") Order=0 To 1 By 0.1 ;
Axis2 Label=(Angle=90 Color=Black F=Times H=2.5 Justify=Center
"Sélection") Order=0 To 1 By 0.1 ;
Legend1 Across=1 CBorder=Black Position=(Top Inside Right) OffSet=(50,-5) Mode=Share
Value=(Tick=1 "Score analysé" Tick=2 "Score aléatoire" )
Shape=symbol(6,2.5) Label=None ;
Plot (Y_perf X_perf )*X_perf
/ OverLay Legend=Legend1 NoFrame Grid HAxis=Axis1 VAxis=Axis2 VRef=1
LVref=2 HRef=1 LHref=2 Name='CRBSEL' ;
Run ;
/*** Proc Gplot - Courbe de discrimination ***/
Proc Gplot Data=Temp_1 ;
Title "Courbe de discrimination" ;
Axis1 Label=(Color=Black F=Times H=2 Justify=Center "Part des
individus selectionnes") Order=0 To 1 By 0.1 ;
Axis2 Label=(Angle=90 Color=Black F=Times H=2.5 Justify=Center
"Selection") Order=0 To 1 By 0.1 ;
Legend1 Across=1 CBorder=Black Position=(Top Inside Right) OffSet=(50,-5) Mode=Share
Value=(Tick=1 "Score analysé" Tick=2 "Score aléatoire" )
Shape=symbol(6,2.5) Label=None ;
Plot (Y_discr X_discr )*X_discr
/ OverLay Legend=Legend1 NoFrame Grid HAxis=Axis1 VAxis=Axis2 VRef=1
LVref=2 HRef=1 LHref=2 Name='CRBSEL' ;
Run ;
Quit ;
Quit ;
/*--- Elimine les tables créées ---*/
/*Proc DataSets LIBRARY=WORK ;
Delete Temp_1 Gini ;
Run ;
Quit ;*/
%Mend ;
%Indice_Gini(Tab_score=TAB_SCORE_ECH_test_logit,Var_Qual=IMPAYE,Var_Score=Y
_Etoile_chapeau) ;
%Indice_Gini(Tab_score=TAB_SCORE_ECH_app_logit,Var_Qual=IMPAYE,Var_Score=Y_
Etoile_chapeau) ;
/****INDICE DE ROBUSTESSE****/
%Indice_Gini(Tab_score=TAB_SCORE_ECH_test_logit,Var_Qual=IMPAYE,Var_Score=Y
_Etoile_chapeau) ;
Data gini_test;
set Gini;
rename gini=gini_test;
i=1;
run;
%Indice_Gini(Tab_score=TAB_SCORE_ECH_app_logit,Var_Qual=IMPAYE,Var_Score=Y_
Etoile_chapeau) ;
Data gini_app;
set Gini;
rename gini=gini_app;
i=1;
Pages - 43 -
Techniques de Scoring
run;
Data IR;
merge gini_test gini_app;
by i;
run;
Proc SQL ;
title "construction Indice de robustesse";
Select Count(*)-Sum(IMPAYE) Into: N_Def_app From TAB_SCORE_ECH_app_logit ;
Select Count(*)Into: NObs_app From TAB_SCORE_ECH_app_logit ;
Select Count(*)-Sum(IMPAYE) Into: N_Def_test From TAB_SCORE_ECH_test_logit
;
Select Count(*)Into
: NObs_test From TAB_SCORE_ECH_test_logit ;
Quit ;
Data IR;
set IR;
drop i;
num=abs(gini_app-gini_test);
denom=Max(1-(&N_Def_app/&NObs_app),1-(&N_Def_test/&NObs_test));
IR=1-(2*num/denom);
drop num denom;
run;/*bon indice de robustesse entre 0.90 et 1*/
/*************************************************************************/
/*****************************GRILLE DE SCORE*****************************/
/*************************************************************************/
ods HTML FILE=&chemin;
PROC LOGISTIC DATA = class_echantillon_app;
CLASS &variables_class / PARAM=REF ;
MODEL IMPAYE (Event='1') = &variables_mod
/ OUTROC = Tab_Roc_App Selection=Backward SLS=0.05 Link=logit;
OUTPUT OUT=TAB_SCORE_app_logit p=p_logit PREDICTED=Y_Chapeau
XBETA=Y_Etoile_Chapeau ;
title"coeff pour contribution";
RUN ;
ods HTML close;
ods HTML FILE=&chemin;
PROC LOGISTIC DATA = class_tab;
CLASS &variables_class / PARAM=REF ;
MODEL IMPAYE (Event='1') = &variables_mod
/ OUTROC = Tab_Roc_App Selection=Backward SLS=0.05 Link=logit;
OUTPUT OUT=TAB_SCORE_tab_logit p=p_logit PREDICTED=Y_Chapeau
XBETA=Y_Etoile_Chapeau ;
title"grille score";
RUN ;
ods HTML close;
data score_var;
set tab_score_tab_logit;
if age_D1=1 then note_age=0;
if age_D1=2 then note_age=4.2;
if age_D1=3 then note_age=0.8;
if age_D1=4 then note_age=0.6;
if age_pret_D1=1 then note_age_pret=33.9;
if age_pret_D1=2 then note_age_pret=0;
if nb_inc12m_D1=1 then note_nbinc12m=29.5;
if nb_inc12m_D1=2 then note_nbinc12m=0;
Pages - 44 -
Techniques de Scoring
if duree_pret_D1=1 then note_duree_pret=5.7;
if duree_pret_D1=2 then note_duree_pret=0;
if duree_pret_D1=3 then note_duree_pret=2;
if apport_D1=1 then note_apport=0;
if apport_D1=2 then note_apport=1.3;
if apport_D1=3 then note_apport=3.9;
if initial_D2=1 then note_initial=17;
if initial_D2=2 then note_initial=2.9;
if initial_D2=3 then note_initial=3.5;
if initial_D2=4 then note_initial=0;
if revenus_D2=1 then note_revenus=0;
if revenus_D2=2 then note_revenus=2.6;
if endettement_D2=1 then note_endettement=3.2;
if endettement_D2=2 then note_endettement=0.5;
if endettement_D2=3 then note_endettement=0;
score=sum (note_age, note_age_pret,note_nbinc12M, note_duree_pret,
note_apport, note_initial, note_revenus, note_endettement);
run;
%macro classe_risque (tab,deb,fin);
proc sort data=&tab;
by score;
run;
proc rank data=&tab out=score descending groups=&fin;
var score;
ranks classe;
run;
data &tab;
set score;
classe=classe+1;
run;
data score;
set &tab;
keep score p_logit classe;
run;
%do i=&deb %to &fin;
proc sql;
create table classe_risque&i as
select mean(p_logit*100)as probabilite_sain, max(score) as score_max,
min(score)as score_min, classe
from score
where classe=&i
group by classe;
quit;
%if &i=1 %then %do ;
data classe_risque;
set classe_risque&i;
run;
%end;
%else %do;
data classe_risque;
set classe_risque classe_risque&i;
run;
%end;
Proc DataSets LIBRARY=WORK ;
Delete classe_risque&i ;
Pages - 45 -
Techniques de Scoring
Run ;
Quit ;
%end;
%mend;
%classe_risque (score_var,1,10);
proc sort data=score_var;
by classe;
proc univariate data=score_var;
var &variables_quanti;
by classe;
run;
PROC EXPORT DATA= classe_risque
OUTFILE= "H:\Credit-scoring\projet\echelle_notation.xls"
DBMS=excel REPLACE;
RUN;
Pages - 46 -