Estimation du risque crédit à l'aide de Microsoft Machine Learning


Dans cet article, je traduis en français un article de Gary Ericson publié en anglais.


Pour cet exercice de prédiction du risque crédit, nous allons utiliser les données disponibles ici:
http://archive.ics.uci.edu/ml/datasets/Statlog+(German+Credit+Data)

Nous téléchargeons en local le fichier nommé GERMAN.DATA.
Il contient 20 variables concernant 1000 demandeurs de crédit. Une colonne décrit le risque crédit.
700 demandeurs ont été qualifiés à risque faible, 300 à risque élevé.

Nous allons utiliser ces données pour élaborer un modèle permettant de prédire ce niveau de risque pour de nouveaux demandeurs.
La description du jeu de données explique en outre qu'il est 5 fois plus coûteux pour la banque de se tromper sur le classement d'un demandeur - en le classant à faible risque alors qu'il aurait dû être noté à fort risque. Pour réduire ce risque dans notre modèle, une façon simple consiste à multiplier par 5 ces cas dans notre dataset. Ainsi, si notre modèle ne classe pas correctement un candidat qui aurait dû être classé comme à haut risque, il le fera mal 5 fois. Ce qui va augmenter mécaniquement le poids de ces cas dans nos données d'apprentissage et va accroître la précision du modèle pour ces exemples.

Voici la description des variables fournies avec le fichier de données.
Attribute 1: (qualitative)
Status of existing checking account
A11 : ... < 0 DM
A12 : 0 <= ... < 200 DM
A13 : ... >= 200 DM /
salary assignments for at least 1 year
A14 : no checking account

Attribute 2: (numerical)
Duration in month

Attribute 3: (qualitative)
Credit history
A30 : no credits taken/
all credits paid back duly
A31 : all credits at this bank paid back duly
A32 : existing credits paid back duly till now
A33 : delay in paying off in the past
A34 : critical account/
other credits existing (not at this bank)

Attribute 4: (qualitative)
Purpose
A40 : car (new)
A41 : car (used)
A42 : furniture/equipment
A43 : radio/television
A44 : domestic appliances
A45 : repairs
A46 : education
A47 : (vacation - does not exist?)
A48 : retraining
A49 : business
A410 : others

Attribute 5: (numerical)
Credit amount

Attibute 6: (qualitative)
Savings account/bonds
A61 : ... < 100 DM
A62 : 100 <= ... < 500 DM
A63 : 500 <= ... < 1000 DM
A64 : .. >= 1000 DM
A65 : unknown/ no savings account

Attribute 7: (qualitative)
Present employment since
A71 : unemployed
A72 : ... < 1 year
A73 : 1 <= ... < 4 years
A74 : 4 <= ... < 7 years
A75 : .. >= 7 years

Attribute 8: (numerical)
Installment rate in percentage of disposable income

Attribute 9: (qualitative)
Personal status and sex
A91 : male : divorced/separated
A92 : female : divorced/separated/married
A93 : male : single
A94 : male : married/widowed
A95 : female : single

Attribute 10: (qualitative)
Other debtors / guarantors
A101 : none
A102 : co-applicant
A103 : guarantor

Attribute 11: (numerical)
Present residence since

Attribute 12: (qualitative)
Property
A121 : real estate
A122 : if not A121 : building society savings agreement/
life insurance
A123 : if not A121/A122 : car or other, not in attribute 6
A124 : unknown / no property

Attribute 13: (numerical)
Age in years

Attribute 14: (qualitative)
Other installment plans
A141 : bank
A142 : stores
A143 : none

Attribute 15: (qualitative)
Housing
A151 : rent
A152 : own
A153 : for free

Attribute 16: (numerical)
Number of existing credits at this bank

Attribute 17: (qualitative)
Job
A171 : unemployed/ unskilled - non-resident
A172 : unskilled - resident
A173 : skilled employee / official
A174 : management/ self-employed/
highly qualified employee/ officer

Attribute 18: (numerical)
Number of people being liable to provide maintenance for

Attribute 19: (qualitative)
Telephone
A191 : none
A192 : yes, registered under the customers name

Attribute 20: (qualitative)
foreign worker
A201 : yes
A202 : no


8. Cost Matrix
This dataset requires use of a cost matrix (see below)
1 2
----------------------------
1 0 1
-----------------------
2 5 0
(1 = Good, 2 = Bad)

the rows represent the actual classification and the columns
the predicted classification.

It is worse to class a customer as good when they are bad (5),
than it is to class a customer as bad when they are good (1).


Conversion des données
Le dataset original utilises des espaces comme séparateur. MS Azure Machine Learning Studio travaille mieux avec des fichiers ayant la virgule comme séparateur. Nous allons donc transformé le dataset dans ce format.
Cela est faisable directement dans Windows.
Installer et lancer Windows PowerShell.


Exécuter la commande ci-dessus.

cat german.data | %{$_ -replace " ",","} | sc german.csv


Chargement des données dans MS Azure Machine Learning (ML)
Connectez-vous à Azure ML et uploader le fichier de données .csv


Création de l'expérimentation dans Azure ML
Créer une nouvelle expérimentation en cliquant sur NEW en bas de l'écran de Azure ML.
Nommez la "Credit scoring".


Dans la section "Saved Datasets" sélectionnez le dataset importé précédemment et faites le glisser dans la zone grise. 
Les données sont maintenant importées dans l'expérimentation.
En faisant un clic droit sur le petit rond - le port de sortie / output port - en bas de la boîte vous pouvez visualiser un aperçu des données.


Comme vous le constatez le fichier de données ne contient pas d'en-têtes de colonne. Cela n'est pas obligatoire mais simplifie notre travail. Ajoutons les en-têtes en utilisant l'éditeur de métadata. 

Taper "metadata" dans le champ de recherche en haut à droite et faites glisser "metadata editor" sous le module "dataset". 
Relier le port de sortie du dataset au port d'entrée du metadata editor. 
Sélectionner ensuite la boîte "Metadata editor". Dans la partie de droite, 
- Sélectionner "Begin with: all columns"
- Cliquez sur le bouton [-] pour supprimer la seconde ligne de paramètres. 


Revenez dans la partie de droite contenant les paramètres et entrez dans "columns names" les noms des colonnes:
Status of checking account, Duration in months, Credit history, Purpose, Credit amount, Savings account/bond, Present employment since, Installment rate in percentage of disposable income, Personal status and sex, Other debtors, Present residence since, Property, Age in years, Other installment plans, Housing, Number of existing credits, Job, Number of people providing maintenance for, Telephone, Foreign worker, Credit risk  


Enregistrez l'expérimentation et cliquez sur "Run". 
Une fois terminé, vous pouvez visualiser les données avec leurs en-têtes.


Création de 2 datasets un pour le training un pour le testing
Nous avons besoin de découper en 2 le jeu de données.
Pour cela nous utilisons le module "Split". Nous laissons le paramètre par défaut qui découpe le heu de données en 2.



Comme l'impact d'une erreur de classification d'un client à risque est 5 fois plus coûteux qu'une erreur dans l'autre sens - on classe un client sans risque comme un client à risque - , nous allons générer un nouveau jeu de données qui prend cela en compte. Dans le nouveau jeu de données, on va répliquer 5 fois ces données.

Nous allons faire cela avec le langage R.
Sélectionnez le module "Execute R Script" et remplacer le code proposé par celui-ci:

dataset1 <- maml.mapInputPort(1)data.set<-dataset1[dataset1[,21]==1,]pos<-dataset1[dataset1[,21]==2,]for (i in 1:5) data.set<-rbind(data.set,pos)maml.mapOutputPort("data.set")

Nous devons faire cela dans le dataset de training et de validation donc reproduisez ce code dans un autre module R relié cette fois au dataset de validation. Celui de droite.


Dans cette expérimentation, nous voulons essayer différents modèles pour prédire le score des candidats au crédit.

Two class boosted decision tree
Essayons l'algorithme "Two class boosted decision tree" pour prédire le score.

Recherchez et faites glisser le module "Two class boosted decision tree". Laissez le paramétrage par défaut de ce module.

Sélectionnez le module "Train Model" et faites le glisser sous le module "Two class..".
Sélectionnez le module "Train Model" et dans les propriétés sélectionnez la colonne "Credit Risk". 
C'est la variable que nous voulons prédire.

Exécuter le modèle afin de nous assurer que tout fonctionne.

Two-Class Support Vector Machine
Nous allons maintenant tester en utilisant l'algorithme "Two class support vector machine".
Bien que l'algorithme "Boosted decision trees" fonctionne parfaitement avec des données de tous types - qualitatives, quantitatives - le modèle utilisant l'algorithme SVM a le meilleur résultat. En effet, l'algorithme SVM utilise un classifier linéaire et donne de meilleurs résultats lorsque nous avons des données numériques avec la même échelle. 

Ainsi, il nous faut convertir les données à la même échelle. Nous utilisons pour cela le module "Normalize data" with a Tanh transformation qui transforme les variables en valeur [0,1]. 
Les chaines de caractères sont converties par le SVM module en variables qualitatives puis en variables binomiales 0/1. Ainsi nous n'avons pas besoin de transformer manuellement les chaines de caractères. 

Comme nous ne voulons pas transformer la colonne Credit Risk qui est déjà numérique, nous l’excluons. 

L'expérimentation doit donc ressemble à cela:


Scoring et évaluation des modèles
Nous allons utiliser les données de scoring pour évaluer les modèles. 
Ajouter les modules comme ci-dessous: 


Pour le modèle SVM, ajoutez par copier/coller le module "Normalize data" et gardez les paramètres.
Exécuter l'expérimentation. 
Pour visualiser les résultats, faites un clique droit sur le module "Evaluate Model", "Visualize".
Résultats pour le modèle "Two class boosted decison"
Les résultats sont visibles sous la forme de 2 courbes de ROC (Receiver Operator Characteristic).
Cliquez sur l'une des courbe pour voir les résultats selon le modèle évalué.
La légende "Scored dataset" fait référence au port gauche du module "Evaluate Model". Il s'agit dans notre exemple du modèle "Two class boosted decison".


Résultats pour le modèle SVM
Interprétation des résultats des deux modèles
Le modèle "Two class boosted decison" permet de classer correctement 65.9% des clients ayant un risque élevé de ne pas rembourser leur crédit. 
Le second modèle classe correctement 70.5% des clients. 

Nous allons donc conserver le second modèle.

Publication du modèle
Avant de publier le modèle nous allons supprimer tous les modules à présent inutiles:
- Two class support vector machine
- Train model et score model associés
- Normalize data: on supprime les deux modules
- Evaluate model

Conversion de l'expérimentation d'apprentissage en scoring
Convertir une expérimentation d'apprentissage en scoring nécessite 3 étapes:
1. Enregistrer le modèle
2. Retirer les modules nécessaires uniquement pour l'apprentissage
3. Définir les ports d'entrée et de sorties du web service

Azure ML permet de faire toutes ces opérations facilement en cliquant sur "Create Scoring Experiment". 

Une fois le modèle nettoyé comme décrit dans le paragraphe "Publication du modèle", exécuter le. 
Le pictogramme "CREATE SCORING EXPERIMENT" devient alors activable. 

Cliquer sur le bouton "CREATE SCORING EXPERIMENT". 


Notez que nous conservons les données dans le scoring experiment. Cela est nécessaire afin de connaitre la structure des données attendues en entrée.
Exécuter de nouveau l'expérimentation. Vous avez maintenant les colonnes "Scored Labels" et "Scored Probabilities"












































Comments