8
IUT de Caen - D ´ epartement STID STID 2 ` eme ann ´ ee Responsable : Alain LUCAS Data Mining Mod` ele d’attrition Business Understanding Phase Lors d’une r´ eunion en septembre 2003 avec les responsables des directions Commerciale, Marketing, Statistique et Informatique, le directeur d’une banque r´ egionale demande : 1. de mener une ´ etude sur le « churn » (ou « attrition ») des clients de la banque, c’est-`a-dire d’´ evaluer le pourcentage de clients qui quittent la banque pour la concurrence ; 2. de cr´ eer le cas ´ ech´ eant un mod` ele permettant de d´ etecter en amont les clients susceptibles de partir `a la concur- rence en vue de les retenir par une strat´ egie commerciale. Study of Churn Apr` es cette r´ eunion, le responsable de la direction Statistique vous demande en tant que charg´ e d’´ etudes de ealiser un audit concernant le « churn » des clients de la banque pour le mois de juillet 2003. Apr` es avoir de- mand´ e au d´ epartement informatique (IT - Information Technology) les donn´ ees concernant la segmentation client (New/Gold/Silver/Bronce/Lead/Lost/Undefined) depuis janvier 2003, un fichier sous forme de table SAS nomm´ e Scores vous a ´ et´ e fourni avec les informations demand´ ees (cf. Table 1 pour visualiser un extrait du fichier). Tab. 1 : Extrait de la table Scores 1. La structure de ce fichier est de la forme “multiples observations par clients”. Qu’est ce qui justifie ici le nom d’une telle structure ? Justifier votre r´ eponse `a l’aide d’un exemple. 1 2. Dans le but de r´ ealiser l’audit, cr´ eer un r´ epertoire Datamining sur votre disque, puis copier le fichier Scores dans ce r´ epertoire. 3. Lancer le logiciel SAS, puis cr´ eer une fenˆ etre EDITOR nomm´ ee Audit-Churn. 4. Dans la fenˆ etre ainsi cr´ ee, ´ ecrire les lignes de commande suivantes : dm ’clear log’ ; dm ’clear output’ ; options linesize=120 nodate nonumber ; 5. Cr´ eer ` a la suite du code la librairie DM via l’instruction libname (adapter si besoin la lettre du disque !) : libname DM ’C :\Datamining’ ; 6. Dans le but d’extraire la segmentation client en date du 01 aoˆ ut 2003, ´ ecrire les lignes de commande suivantes : data DM.Churn ; set DM.Scores ; if Date=’01AUG2003’d then output ; run ; 7. Ecrire la proc´ edure PRINT suivante : proc print data=DM.Churn (obs=30) heading=h noobs ; title1 “Audit du Churn” ; title3 “Visualisation de la table Churn” ; run ; erifier que l’on obtient la sortie suivante : Tab. 2 : Segment client au 1er aoˆ ut 2003 8. Dans le but de d´ eterminer la fr´ equence du « churn » au mois de juillet 2003, ´ ecrire la proc´ edure FREQ suivante : proc freq data=DM.Churn ; title3 “Fr´ equence des diff´ erents segments pour le mois de juillet 2003” ; table ValueSegment ; run ; Indiquer alors pr´ ecis´ ement pour la banque le taux de churn pour le mois de juillet 2003. 2

Data Mining - al-lucas.pagesperso-orange.fral-lucas.pagesperso-orange.fr/fichiers/Data Mining/TD/Fiche1.pdf · Placer le fichier Accounts dans le r´epertoire Datamining . 2

Embed Size (px)

Citation preview

IUT de Caen - Departement STID STID 2eme annee

Responsable : Alain LUCAS

Data Mining

Modele d’attrition

Business Understanding Phase

Lors d’une reunion en septembre 2003 avec les responsables des directions Commerciale, Marketing, Statistique etInformatique, le directeur d’une banque regionale demande :

1. de mener une etude sur le « churn » (ou « attrition ») des clients de la banque, c’est-a-dire d’evaluer le pourcentagede clients qui quittent la banque pour la concurrence ;

2. de creer le cas echeant un modele permettant de detecter en amont les clients susceptibles de partir a la concur-rence en vue de les retenir par une strategie commerciale.

Study of Churn

Apres cette reunion, le responsable de la direction Statistique vous demande en tant que charge d’etudes derealiser un audit concernant le « churn » des clients de la banque pour le mois de juillet 2003. Apres avoir de-mande au departement informatique (IT - Information Technology) les donnees concernant la segmentation client(New/Gold/Silver/Bronce/Lead/Lost/Undefined) depuis janvier 2003, un fichier sous forme de table SAS nommeScores vous a ete fourni avec les informations demandees (cf. Table 1 pour visualiser un extrait du fichier).

Tab. 1 : Extrait de la table Scores

1. La structure de ce fichier est de la forme “multiples observations par clients”. Qu’est ce qui justifie ici le nomd’une telle structure ? Justifier votre reponse a l’aide d’un exemple.

1

2. Dans le but de realiser l’audit, creer un repertoire Datamining sur votre disque, puis copier le fichier Scores dansce repertoire.

3. Lancer le logiciel SAS, puis creer une fenetre EDITOR nommee Audit-Churn.

4. Dans la fenetre ainsi creee, ecrire les lignes de commande suivantes :dm ’clear log’ ;

dm ’clear output’ ;

options linesize=120 nodate nonumber ;

5. Creer a la suite du code la librairie DM via l’instruction libname (adapter si besoin la lettre du disque !) :libname DM ’C :\Datamining’ ;

6. Dans le but d’extraire la segmentation client en date du 01 aout 2003, ecrire les lignes de commande suivantes :data DM.Churn ;

set DM.Scores ;

if Date=’01AUG2003’d then output ;

run ;

7. Ecrire la procedure PRINT suivante :proc print data=DM.Churn (obs=30) heading=h noobs ;

title1 “Audit du Churn” ;

title3 “Visualisation de la table Churn” ;

run ;

Verifier que l’on obtient la sortie suivante :

Tab. 2 : Segment client au 1er aout 2003

8. Dans le but de determiner la frequence du « churn » au mois de juillet 2003, ecrire la procedure FREQ suivante :proc freq data=DM.Churn ;

title3 “Frequence des differents segments pour le mois de juillet 2003” ;

table ValueSegment ;

run ;

Indiquer alors precisement pour la banque le taux de churn pour le mois de juillet 2003.

2

Creation of Datamarts

Votre responsable, a la vue de votre resultat, souhaite que le departement de Statistique developpe un modeled’attrition pour le mois de novembre 2003 permettant d’identifier en amont les clients susceptibles de partir a laconcurrence. Cela va consister en l’elaboration d’un score representant la probabilite, pour chacun des clients, dequitter la banque.

Etant novice dans la construction d’un tel score, votre responsable vous informe que pour mener a bien cet objectif,il convient de definir une date de reference ainsi que trois periodes de temps specifiques :

– Observational window ou Inputs variables window : periode de temps permettant d’observer l’ensembledes caracteristiques des clients (donnees internes et externes) ;

– Operational lag ou Offset : periode de latence durant laquelle on ne dispose pas de toutes les donnees concer-nant les clients du au processus de verification et de stockage des informations dans le datawarehouse de labanque ;

– Performance window ou Target window : periode de temps durant laquelle on observe ou non le departd’un client pour la concurrence.

Sachant que votre responsable veut faire usage des donnees les plus recentes, vous decidez de choisir comme date dereference le 31 mai 2003, afin d’avoir les trois periodes suivantes :

– Observational window : janvier a mai 2003 ;– Operational lag : juin 2003 ;– Target window : juillet 2003.En vue de construire le modele, vous decidez de creer un datamart (ou magasin de donnees) specifique a votre

objectif en realisant la fusion de plusieurs fichiers fournis par le departement informatique prealablement sollicite parvos soins. Il s’agit des fichiers Scores, Accounts, Leasing, Callcenter, et Customer.

• Scores Data Set :

Dans le cadre du fichier Scores pour lequel vous disposez de toutes les informations, vous souhaitez creer une tablenommee DataMart1 contenant les informations suivantes : segment client pour le mois d’avril 2003 (LastValueSeg-ment), segment client pour le mois de mai 2003 (ActualValueSegment), segment client pour le mois de juillet 2003(FutureValueSegment), et creation d’une variable binaire permettant d’identifier les clients partis a la concurrence aucours du mois de juiller 2003 (Cancel).

1. Creer une fenetre EDITOR nommee Scores-Datamart1.

2. Dans la fenetre nouvellement creee, ecrire les lignes de commande suivantes :dm ’clear log’ ;

dm ’clear output’ ;

options linesize=120 nodate nonumber ;

3. Creer a la suite du code la librairie DM via l’instruction libname (adapter si besoin la lettre du disque !) :libname DM ’C :\Datamining’ ;

4. Creer la macro-variable snapdate comme suit :%let snapdate = ’31MAY2003’d ;

5. A la suite du programme, ecrire les lignes de commande suivantes :data Last (rename = (ValueSegment = LastValueSegment))

Actual (rename = (ValueSegment = ActualValueSegment))Future (rename = (ValueSegment = FutureValueSegment)) ;

set DM.Scores ;

DateEnd=intnx(’month’,Date,-1,’END’) ;

format DateEnd date9. ;

if DateEnd = intnx(’month’,&snapdate,-1,’END’) then output Last ;

else if DateEnd = intnx(’month’,&snapdate,0,’END’) then output Actual ;

else if DateEnd = intnx(’month’,&snapdate,+2,’END’) then output Future ;

drop Date DateEnd ScoreID ;

run ;

En quoi consiste l’instruction « DateEnd=intnx(’month’,Date,-1,’END’) » ? Expliquer en quoi consiste la sequencede if. . .then. . .else ?

3

6. Compiler le programme, puis verifier que le contenu des tables nouvellement creees est en accord avec les tablessuivantes :

Tab. 3 : Table Last Tab. 4 : Table Actual Tab. 4 : Table Future

7. Vous souhaitez maintenant fusionner ces trois tables permettant ainsi d’avoir une observation (i.e. une ligne) parclient. Ecrire alors a la suite du programme les lignes de commande suivantes :proc sort data=Last ;

by CustID ;

run ;

proc sort data=Actual ;

by CustID ;

run ;

proc sort data=Future ;

by CustID ;

run ;

Quel est l’interet de la procedure SORT?

8. Ecrire l’etape DATA suivante :data DM.DataMart1 ;attribCustID format = 8. label = ”Customer ID”LastValueSegment format = $10. label = ”Last Value Segment”ActualValueSegment format = $10. label = ”Actual Value Segment”FutureValueSegment format = $10. label = ”Future Value Segment”Cancel format = 8. label = ”Customer canceled”

;

merge LastActualFuture (IN = InFuture) ;

by CustID ;

if InFuture ;

Cancel = (FutureValueSegment = ’8. LOST’) ;

run ;

4

Expliquer la ligne de commande « Cancel = (FutureValueSegment = ’8. LOST’) ». Compiler le programme, puisvisualiser la table DataMart1. Verifier le succes de l’operation.

9. Afin d’obtenir les caracteristiques de la table ainsi que le nombre d’observations et le nombre de donnees man-quantes, ecrire les deux procedure suivantes :proc contents data=DM.DataMart1 ;

title1 ”Table Scores” ;

title3 ”Caracteristiques de la table DataMart1” ;

run ;

proc means data=DM.DataMart1 n nmiss ;

title3 ”Nombre d’observations et nombre de donnees manquantes pour la table DataMart1” ;

run ;

Compiler alors le programme, puis commenter succinctement les caracteristiques de la table DataMart1.

• Accounts Data Set :

Vous decidez maintenant de travailler sur la table Accounts contenant des informations sur les comptes clients.Dans ce but, vous souhaitez creer une table DataMart2 contenant les informations suivantes : nombre de comptede chacun des clients (NrAccounts), solde total des comptes (Balance), moyenne des taux d’interets (SavingAccount),moyenne des taux d’emprunts (Loan), et la moyenne des taux de fonds disponibles immediatement (Funds).

1. Placer le fichier Accounts dans le repertoire Datamining.

2. Creer une fenetre EDITOR nommee Accounts-Datamart2.

3. Dans la fenetre ainsi creee, ecrire les lignes de commande suivantes :dm ’clear log’ ;

dm ’clear output’ ;

options linesize=120 nodate nonumber ;

4. Creer a la suite du code la librairie DM via l’instruction libname (adapter si besoin la lettre du disque !) :libname DM ’C :\Datamining’ ;

5. Compiler le programme, puis verifier que la table SAS admet la structure suivante :

Tab. 6 : Table Accounts

5

6. Dans le but de denombrer les comptes de chacun des clients, ecrire les lignes de commande suivantes :proc sort data=DM.Accounts ( keep = CustID AccountID ) out=tmp ;

by CustID AccountID ;

run ;

data tmp ;

set tmp ;

by CustID AccountID ;

if last.AccountID ;

run ;

proc freq data=tmp noprint ;

tables CustID / out=NrAccounts (rename = (count = NrAccounts) drop = percent) ;

run ;

proc datasets lib=work ;

delete tmp ;

run ;quit ;

Expliquer en quoi consiste la ligne de commande « if last.AccountID ; ».(Aide : comparer les resultats obtenus avec et sans cette ligne).

7. Compiler le programme, puis visualiser la table NrAccounts. Verifier alors le succes de l’operation.

8. Vous souhaitez maintenant extraire le solde des comptes de chaque client. Ecrire les lignes de commande suivantesa la suite de votre programme :proc sort data=DM.Accounts (keep = CustID Balance) out=tmp ;

by CustID ;

run ;

data Balance ;

set tmp ;

by CustID ;

if last.CustID ;

run ;

proc datasets lib=work ;

delete tmp ;

run ;quit ;

Compiler alors le programme, puis verifier le succes de l’operation en visualisant la table Balance.

9. Vous souhaitez synthetiser pour chaque client les trois types de taux en calculant la moyenne des taux par typede produit. Ecrire alors les lignes de commande suivantes :proc means data=DM.Accounts (keep = CustID Interest Type) nway noprint ;

class CustID Type ;

var Interest ;

output out = Interest (keep = CustID Type MeanInterest) Mean(Interest)=MeanInterest ;

run ;

data Interest ;

set Interest ;

Type=compress(Type) ;

run ;

proc transpose data=Interest out=Interest (drop = NAME LABEL ) ;

by CustID ;

var MeanInterest ;

ID Type ;

run ;

Preciser l’interet de faire usage de la procedure TRANSPOSE. Compiler le programme, puis s’assurer du succesde l’operation.

6

10. Vous decidez maintenant de fusionner les tables ainsi creees. Dans ce but, ecrire les lignes de commande suivantes :proc sort data=NrAccounts ;by CustID ;run ;proc sort data=Balance ;by CustID ;run ;proc sort data=Interest ;by CustID ;run ;data DM.DataMart2 ;attribCustID format = 8. label = ”Customer ID”NrAccounts format = 8. label = ”Number of Accounts”Balance format = 8.2 label = ”Balance”Loan format = 8.2 label = ”Loan Rate Mean”SavingAccount format = 8.2 label = ”Savings Account Rate Mean”Funds format = 8.2 label = ”Funds Rate Mean”

;

merge NrAccounts Balance Interest ;

by CustID ;

run ;

proc datasets lib=work ;

delete NrAccounts Balance Interest ;

run ;quit ;

Preciser en quoi consiste la procedure DATASETS. Compiler ce programme, puis verifier que la table DataMart2

est coherente avec la suivante :

Tab. 7 : Table DataMart2

Preciser ce que represente les points dans la table.

7

11. Dans le but d’obtenir des informations sur la table DataMart2, ecrire a la suite du programme les proceduressuivantes :proc contents data=DM.DataMart2 ;

title1 ”Accounts Data Set” ;

title3 ”Caracteristiques de la table DataMart2” ;

run ;

proc means data=DM.DataMart2 min mean median max cv n nmiss ;

title3 ”Statistics for Balance, Loan, SavingAccount and Funds” ;

var Balance Loan SavingAccount Funds ;

run ;

proc freq data=DM.DataMart2 ;

title3 ”Frequency for NrAccounts” ;

table NrAccounts ;

run ;

Determiner le nombre de clients presents dans cette table. Observez-vous des donnees manquantes ? si oui, pourquelle(s) variable(s) ? Commenter succintement le resultat de la procedure FREQ.

• Leasing Data Set :

Vous decidez de travailler maintenant sur la table Leasing contenant des informations concernant les prets accordesaux clients. En particulier, vous disposez des informations suivantes : date du debut du pret (StartDate), date de findu pret (EndDate), montant du pret (Value), et taux annuel de remboursement (AnnualRate).

1. Placer le fichier Leasing dans le repertoire Datamining.

2. Creer une fenetre EDITOR nommee Leasing-Datamart3.

3. Dans la fenetre ainsi creee, ecrire les lignes de commande suivantes :dm ’clear log’ ;

dm ’clear output’ ;

options linesize=120 nodate nonumber ;

4. Creer a la suite du code la librairie DM via l’instruction libname (adapter si besoin la lettre du disque !) :libname DM ’C :\Datamining’ ;

5. Compiler le programme, puis verifier que la table SAS admet la structure suivante :

Tab. 8 : Table Leasing

8

6. Dans le but d’extraire l’information concernant la duree du pret et le nombre de mois restant a payer, ecrirel’etape DATA suivante :

data tmp (drop = StartDate EndDate) ;

set DM.Leasing ;

Duration=intck(’month’,datepart(StartDate),datepart(EndDate)) ;

Rest=max(intck(’month’,’31MAY2003’d,datepart(EndDate)),0) ;

if Rest>0 then LeasingYN=1 ;

else LeasingYN=0 ;

run ;

Compiler le programme, puis verifier le succes de l’operation.Note : la fonction Datepart permet d’extraire la date d’une variable temporelle admettant un codage du typeDate :Heure s’exprimant sous la forme 13SEP1999 :00 :00 :00. Quant a la fonction intck, elle permet de calculerun ecart entre deux dates exprime en nombre de jours, de mois ou d’annees.

7. Cela etant, vous avez observe que des clients peuvent avoir plusieurs prets en cours. Aussi, vous decidez de creerde nouvelles variables permettant de synthetiser les caracteristiques de pret d’un meme client. Vous decidez doncde creer les variables : montant total des prets (LeasingValue), taux moyen annuel (LeasingAnnualRate), dureemoyenne des prets (DurationMean), nombre de mois maximum restant a rembourser (RestMax), et emprunt encours (HasLeasing). Ecrire alors les lignes de commande suivantes a la suite de votre programme :

proc means data=tmp nway noprint ;

class CustID ;

var Value AnnualRate Duration Rest LeasingYN ;

output out=tmp (drop = TYPE rename = ( FREQ = NrLeasing))

sum(Value) = LeasingValue

mean(AnnualRate) = LeasingAnnualRate

mean(Duration) = DurationMean

max(Rest) = RestMax

max(LeasingYN) = HasLeasing ;

run ;

Compiler le programme, puis s’assurer du succes de l’operation en visualisant la table tmp. Expliquer concretementle role de l’option nway de la procedure MEANS (Aide : compiler avec et sans cette option, puis comparer lapremiere ligne des deux tables tmp ainsi creees).

8. Dans le but de creer le DataMart3, ecrire les lignes de commande suivantes :

data DM.DataMart3 ;attribCustID format = 8. label = ”Customer ID”HasLeasing format = 8. label = ”Customer has any leasing contract”NrLeasing format = 8. label = ”Number of leasing contracts”LeasingValue format = 8.2 label = ”Total leasing value”LeasingAnnualRate format = 8.4 label = ”Mean annual leasingrate”RestMax format = 8. label = ”Maximum leasing rest (months)”DurationMean format = 8.2 label = ”Mean leasing duration”

;

set tmp ;

run ;

proc datasets lib=work ;

delete tmp ;

run ;quit ;

Compiler, puis verifier le succes de l’operation.

9

9. Enfin, pour terminer vous decidez d’editer un certain nombre de caracteristiques de la table ainsi que des va-riables la constituant. Dans ce but, ecrire les trois etapes suivantes :proc contents data=DM.DataMart3 ;

title1 ”Leasing Data Set” ;

title3 ”Caracteristiques de la table DataMart3” ;

run ;

proc means data=DM.DataMart3 min mean median max cv n nmiss ;

title3 ”Statistics for LeasingValue, LeasingAnnualRate, RestMax and DurationMean” ;

var LeasingValue LeasingAnnualRate RestMax DurationMean ;

run ;

proc freq data=DM.DataMart3 ;

title3 ”Frequency for HasLeasing and NrLeasing” ;

table HasLeasing NrLeasing ;

run ;

Compiler ces procedures, puis indiquer : le nombre de clients presents dans la table, la presence ou l’absence dedonnees atypiques ou « outliers », la presence ou l’absence de donnees manquantes pour les variables quantita-tives, la frequence de clients ayant un pret en cours, et la repartition du nombre de prets.

• CallCenter Data Set :

Vous decidez maintenant de travailler sur la table CallCenter contenant des informations concernant les appelspasses par les clients au centre d’appels. N’ayant aucune information sur ce fichier, vous decidez d’en realiser uneanalyse rapide.

1. Placer le fichier CallCenter dans le repertoire Datamining.

2. Creer une fenetre EDITOR nommee CallCenter-Datamart4.

3. Dans la fenetre ainsi creee, ecrire les lignes de commande suivantes :dm ’clear log’ ;

dm ’clear output’ ;

options linesize=120 nodate nonumber ;

4. Creer a la suite du code la librairie DM via l’instruction libname (adapter si besoin la lettre du disque !) :libname DM ’C :\Datamining’ ;

5. Afin d’obtenir des informations sur la table, ecrire les lignes de commande suivantes :proc contents data=DM.CallCenter ;

title1 ”CallCenter Data Set” ;

title3 ”Caracteristiques de la table CallCenter” ;

run ;

Compiler le programme, puis visualiser la sortie. Preciser alors le nombre d’observations et le nombre de variables.Preciser pour chacune des variables son type (qualitatif, quantitatif, chaıne de caracteres, ou date).

6. Visualiser la table CallCenter, puis verifier qu’elle est en accord avec la table de la figure 9 (cf. page 11).

7. Vous souhaitez avoir des informations concernant la variable Category comme ses modalites ainsi que sa distri-bution. Dans ce but ecrire les lignes de commande suivantes :proc freq data=DM.CallCenter ;

title3 ”Distribution de la variable Category” ;

table Category ;

run ;

Compiler cette procedure, puis en deduire les modalites ainsi que la distribution de la variable Category. Com-menter succinctement ce resultat.

8. Peut-on avoir, dans le cas present, plusieurs appels enregistres passes par un meme client ? Justifier votre reponsea l’aide d’un exemple.

10

Tab. 9 : Table CallCenter

9. Creer la macro-variable snapdate comme suit :%let snapdate = ’31MAY2003’d ;

10. Vous souhaitez comptabiliser le nombre d’appels passes par client. Ecrire les lignes de commande suivantes :proc freq data=DM.Callcenter noprint ;

table CustID / out = tmp1 (drop = Percent rename = (Count = Calls)) ;

where datepart(date)¡&snapdate ;

run ;

Compiler le programme, puis s’assurer du succes de l’operation.

11. Vous souhaitez maintenant comptabiliser le nombre de reclamations par client qui sont intervenues avant la datede reference. Ecrire a la suite de votre programme les lignes de commande suivantes :proc freq data=DM.Callcenter noprint ;

table CustID / out = tmp2 (drop = Percent rename = (Count = Complaints)) ;

where datepart(date)<&snapdate and Category=’Complaint’ ;

run ;

Compiler le programme, puis s’assurer du succes de l’operation.

12. Vous souhaitez enfin realiser la fusion des deux tables nouvellement creees afin de constituer le DataMart4.Ecrire les lignes de commande suivantes :proc sort data=tmp1 ;by CustID ;run ;proc sort data=tmp2 ;by CustID ;run ;data DM.DataMart4 ;attribCustID format = 8. label = ”Customer ID”Calls format = 8. label = ”Number of call center contacts”Complaints format = 8. label = ”Number of complaints”

;merge tmp1 tmp2 ;by CustID ;if Complaints=’.’ then Complaints=0 ;run ;

11

proc datasets lib=work ;

delete tmp1 tmp2 ;

run ;quit ;

Compiler le programme, puis s’assurer du succes de l’operation. En quoi consiste la ligne de commande « ifComplaints=’.’ then Complaints=0 ; » ?

13. Dans le but de connaıtre les caracteristiques de la table DataMart4, ecrire les lignes de commande suivante :proc contents data=DM.DataMart4 ;

title1 ”CallCenter Data Set” ;

title3 ”Caracteristiques de la table DataMart4” ;

run ;

proc freq data=DM.DataMart4 ;

title3 ”Frequency for Calls and Complaints” ;

table Calls Complaints ;

run ;

Compiler, puis commenter succinctement la distribution des variables Calls et Complaints.

• Customer Data Set :

Dans le but de completer l’information interne detenue par la banque sur ses clients, vous decidez de faire usage dela table Customer contenant des informations personnelles concernant l’ensemble des clients de la banque. Vous avezen particulier les informations suivantes : annee de naissance (Birthdate), titre (Title), branche d’activite (Branch),date d’entree a la banque (CustomerSince), sexe (Gender), et statut matrimonial (MaritalStatus).

1. Copier le fichier Customer dans le repertoire Datamining.

2. Creer une fenetre EDITOR nommee Customer-Datamart5.

3. Dans la fenetre ainsi creee, ecrire les lignes de commande suivantes :dm ’clear log’ ;

dm ’clear output’ ;

options linesize=120 nodate nonumber ;

4. Creer a la suite du code la librairie DM via l’instruction libname (adapter si besoin la lettre du disque !) :libname DM ’C :\Datamining’ ;

Tab. 10 : sortie CONTENTS de la table Customer

12

5. Vous souhaitez avoir des informations sur la table Customer, avec notamment le nombre de clients sur lesquelson connaıt des informations externes. A cette fin, ecrire les lignes de commande suivantes :proc contents data=DM.Customer ;

title1 ”Customer Data Set” ;

title3 ”Caracteristiques de la table Customer” ;

run ;

Compiler le programme, puis verifier que vous obtenez une sortie identique a celle de la figure 10 (cf. page 12).En deduire le type de chacune des variables et le nombre de clients presents dans la table.

6. Vous souhaitez dans le cadre du DataMart5 creer les variables suivantes : age du client (Age), possession d’untitre (HasTitle) et anciennete du client a la banque en mois (CustomerMonths). Dans ce but, ecrire les lignes decommande suivantes :data DM.DataMart5 ;attribCustID format = 8. label = ”Customer ID”Birthdate format = date9. label = ”Date of Birth”Age format = 8. label = ”Age (years)”Gender format = $6. label = ”Gender”MaritalStatus format = $10. label = ”Marital Status”Title format = $10. label = ”Academic Title”HasTitle format = 8. label = ”Has Title ? (0/1)”Branch format = $5. label = ”Branch Name”CustomerSince format = date9. label = ”Customer Start Date”CustomerMonths format = 8. label = ”Customer Duration (months)”

;

set DM.Customer ;

Age = round(yrdif(Birthdate,&snapdate,’ACTUAL’)) ;

HasTitle = (Title ne ’ ’) ;

CustomerMonths=intck(’month’,CustomerSince,&snapdate) ;

run ;

Compiler le programme, puis verifier le succes de l’operation. En vous aidant eventuellement de l’aide en lignede SAS, expliquer en quoi consiste l’instruction « round(yrdif(Birthdate,&snapdate,’ACTUAL’)) ».

7. Vous souhaitez maintenant controler les caracteristiques physiques de la table DataMart5. Dans ce but, ecrireles lignes de commande suivantes :proc contents data=DM.DataMart5 ;

title1 ”Customer Data Set” ;

title3 ”Caracteristiques de la table DataMart5” ;

run ;

Compiler le programme, puis verifier que le type des variables est coherent avec la definition imposee dans votreprogramme.

8. Dans le but d’obtenir quelques caracteristiques des variables pertinentes, ecrire les deux procedures suivantes ala suite de votre programme :proc means data=DM.DataMart5 min max Q1 mean median Q3 CV nmiss ;

title3 ”Statistics” ;

var Age CustomerMonths ;

run ;

proc freq data=DM.DataMart5 ;

title3 ”Frequency for HasTitle and Branch” ;

table Gender MaritalStatus HasTitle Branch ;

run ;

Compiler, puis analyser succinctement les caracteristiques de chacune des variables.

13

Creation of Business Data Set

L’ensemble des informations pertinentes (dans le cadre de votre objectif) concernant vos clients etant contenuesdans plusieurs tables, il convient maintenant de les fusionner afin de regrouper ces informations dans une table uniqueque vous avez decide d’appeler BusinessDataset.

1. Creer une fenetre EDITOR nommee DataMartFinal.

2. Dans la fenetre ainsi creee, ecrire les lignes de commande suivantes :dm ’clear log’ ;

dm ’clear output’ ;

options linesize=120 nodate nonumber ;

3. Creer a la suite du code la librairie DM via l’instruction libname (adapter si besoin la lettre du disque !) :libname DM ’C :\Datamining’ ;

Compiler ce programme.

4. Pour realiser la fusion des cinq « datamarts », vous devez au prealable les trier selon la variable CustID. Aussi,vous decidez de creer une macro afin de faciliter le travail :%macro sort(k) ;

proc sort data=DM.DataMart&k ;

by CustID ;

run ;

%mend sort ;

%sort(1) ;%sort(2) ;%sort(3) ;%sort(4) ;%sort(5) ;

Compiler alors ce programme.

5. Dans le but de realiser la fusion effective des cinq « datamarts », ecrire les lignes de commande suivantes :

data DM.BusinessDataset ;attrib /*Scores DataMart1*/

CustID format = 8. label = ”Customer ID”LastValueSegment format = $10. label = ”Last Value Segment”ActualValueSegment format = $10. label = ”Actual Value Segment”FutureValueSegment format = $10. label = ”Future Value Segment”Cancel format = 8. label = ”Customer canceled”

;

attrib /*Accounts DataMart2*/

NrAccounts format = 8. label = ”Number of Accounts”Balance format = 8.2 label = ”Balance”Loan format = 8.2 label = ”Loan Rate Sum”SavingAccount format = 8.2 label = ”Savings Account Rate Sum”Funds format = 8.2 label = ”Funds Rate Sum”

;

attrib /*Leasing DataMart3*/

HasLeasing format = 8. label = ”Customer has any leasing contract” /*New Variable*/NrLeasing format = 8. label = ”Number of leasing contracts”LeasingValue format = 8.2 label = ”Total leasing value”LeasingAnnualRate format = 8.4 label = ”Total annual leasingrate”RestMax format = 8. label = ”Maximum leasing rest (months)”DurationMean format = 8.2 label = ”Mean leasing duration”

;

attrib /*Call Center DataMart4*/

HasCallCenter format = 8. label = ”Customer has any call center contact” /*New Variable*/Calls format = 8. label = ”Number of call center contacts”Complaints format = 8. label = ”Number of complaints”ComplaintsPct format = percent8.2 label = ”Percentage of complaints” /*New Variable*/

;

14

attrib /*Customer DataMart5*/

Birthdate format = date9. label = ”Date of Birth”Age format = 8. label = ”Age (years)”Gender format = $6. label = ”Gender”MaritalStatus format = $10. label = ”Marital Status”Title format = $10. label = ”Academic Title”HasTitle format = 8. label = ”Has Title ? (0/1)”Branch format = $5. label = ”Branch Name”CustomerSince format = date9. label = ”Customer Start Date”CustomerMonths format = 8. label = ”Customer Duration (months)”

;

merge DM.DataMart1DM.DataMart2DM.DataMart3 (IN = InLeasing)DM.DataMart4 (IN = InCallCenter)DM.DataMart5 (IN = InCustomer)

;

by CustID ;

if InCustomer ;

*Creation des nouvelles variables ;

/*Leasing*/

HasLeasing = InLeasing ;

/*CallCenter*/

If Calls>0 then ComplaintsPct=Complaints/Calls ;

HasCallCenter = InCallCenter ;

run ;

Compiler le programme, puis verifier le succes de l’operation via une visualisation de la table.

6. Apres visualisation de la table BusinessDataset, vous notez qu’un certain nombre de donnees manquantes tra-duisent en fait la valeur numerique 0. Vous decidez alors de proceder au remplacement en inserant dans l’etapeDATA, apres la phase de creation des nouvelles variables, les lignes de commande suivantes :

if Loan=. then Loan=0 ;

if SavingAccount=. then SavingAccount=0 ;

if Funds=. then Funds=0 ;

if NrLeasing=. then NrLeasing=0 ;

if LeasingValue=. then LeasingValue=0 ;

if RestMax=. then RestMax=0 ;

if DurationMean=. then DurationMean=0 ;

if Calls=. then Calls=0 ;

if Complaints=. then Complaints=0 ;

if ComplaintsPct=. then ComplaintsPct=0 ;

Compiler le de nouveau le programme, puis controler le succes de l’operation.

7. Vous desirez connaıtre la distribution de la variable Cancel qui rend compte du « churn » dans votre « BusinessDataset ». Ecrire alors les lignes de commande suivantes :

proc freq data=DM.BusinessDataset ;

title1 ”Business Dataset” ;

title3 ”Distribution de la variable Cancel - Churn” ;

table Cancel ;

run ;

Compiler, puis commenter le resultat de la procedure FREQ. Observe-t-on des donnees manquantes pour cettevariable ?

15

8. Vous decidez de supprimer les clients dont la variable Cancel contient une donnee manquante. Ecrire les lignesde commande suivantes :data DM.BusinessDataset ;

set DM.BusinessDataset ;

if Cancel=’.’ then delete ;

run ;

proc freq data=DM.BusinessDataset ;

title1 ”Business Dataset” ;

title3 ”Distribution de la variable Cancel - Churn” ;

table Cancel ;

run ;

Compiler, puis controler le succes de l’operation. Vous disposez maintenant d’un fichier de travail sous formed’une table SAS nomme BusinessDataset qui devrait ressembler a la table suivante :

Tab. 11 : table BusinessDataset

Conclusion : vous disposez maintenant d’un business data set operationnel sur lequel il reste a operer des modi-fications (transformation et creation de variables) avant de construire le modele d’attrition.

16