Introduction


Une agence bancaire est un point de contact important entre les clients et la banque. En plus de fournir des services bancaires traditionnels tels que les dépôts, les retraits et les prêts, les agences bancaires peuvent également jouer un rôle crucial dans la gestion des relations avec les clients et la promotion des produits et services bancaires.
Dans le contexte actuel, la majorité des firmes importantes analyse la “data” et quel que soit le secteur (sport, économique, social…). Les banques gèrent des données importantes sur les clients, les transactions et les activités financières. La collecte, l’analyse et l’utilisation de ces données peuvent fournir de précieuses informations aux banques pour mieux comprendre les besoins de leurs clients, leurs comportements, améliorer leur expérience utilisateur, et à optimiser leurs opérations et leur rentabilité.
Les banques utilisent ces données pour créer des modèles d’analyse prédictive qui leur permettent d’anticiper les besoins des clients et de développer des produits et des services personnalisés en conséquence.
Dans cette étude, nous allons utiliser des techniques d’analyse multivariée (analyses en composantes principales et classification) pour explorer les relations entre les variables disponibles.


Lors de cette étude, nous allons essayer de comprendre et expliqué en fonction de l’analyse de plusieurs variables les différences similitude de clientèle dans les agences de la région PACA.
Ainsi, cette étude sera accès sur un individu moyen (explication dans la partie 2.1) de chaque agence bancaire “Crédit Agricole” de la région PACA. Ce choix permettra, les analyses statistiques de regroupé, de comparer, de classifier, d’identifier des profils, et faire des hypothèses plus facilement.


SOMMAIRE


1.MÉTHODOLOGIE

1.1 Le choix du sujet et la sélection des données

1.2 L’objectif

1.3 L’importation des données et la création du schéma relationnel

1.4 Mise en contexte


2. PREMIERE APPROCHE AVEC LES DONNÉES

2.1 Préparation des données

2.2 Les corrélations


3. L’ANALYSE DES COMPOSANTES PRINCIPALES

3.1 Les composantes principales

3.2 Représentation des composantes principales


4. LA CLASSIFICATION

4.1 Décision du nombres de classes

4.2 Les principales mesures des classes (inter et intra)

4.3 Les caractéristiques des variables


5. SYNTHÈSE

5.1 Graphique sythese générale

5.2 conclusion


6. ANNEXE


1. MÉTHODOLOGIE

Afin d’effectuer une analyse multivariée répondant le plus justement à l’objectif ci-dessus, j’ai pris la décision de supprimer quelques variables et valeur (explication dans le points 2.1). J’ai aussi fait le choix de prendre une base de données que je connais et où j’ai fait plusieurs sae avec (explication dans la partie 1.1).
Enfin, j’ai importé les données sur PHPGadmin (application Web réalisée en langage PHP destinée à faciliter la gestion du SGBD PostgreSQL), et requêter les données que j’avais besoin pour l’analyse.

1.1 Le choix du sujet et la sélection des données


J’ai choisi une base de données portant sur les banques et sa clientèle puisque :
• J’ai toujours aimé le domaine des banques, l’économie en général et analyser / comprendre leurs actions
• Dans le monde professionnel, le secteur des banques recherche beaucoup de “data Analystes” où ils peuvent être amener à faire ce type d’analyse, ainsi, je me familiarise avec ces demandes qui pourraient m’arriver dans le monde professionnel.
• Je connais bien cette base de données puisque lorsque nos tuteurs nous laissent le choix de la base de données je prends souvent celle-ci pour les raisons citée.

1.2 L’objectif


L’objectif de cette analyse multivariée est d’expliquer, comprendre et trouvé des similitudes (à des fins décisionnelles) entre les banques de la région paca en fonction de plusieurs variables (ancienneté, catégorie socioprofessionnelle, …) pour que les décisions soient optimales (pour les clients) et bénéfiques (pour la société).
Les résultats de cette analyse pourraient aider les banques à améliorer et optimiser leur compréhension des facteurs qui influencent la rentabilité de leurs agences bancaires et à développer des stratégies pour améliorer leurs performances.

1.3 Le choix de variables et modification nécessaire pour l’analyse


La base est composée de 88 058 individus, et de 28 variables, donc beaucoup trop d’individu et de variables.
Ainsi, avec l’accord de mes tuteurs, nous avons pris la décision d’une part de faire un “individu moyen” pour chaque agence bancaire et d’autre part de supprimer des variables “inutiles” dans l’analyse pouvant fausser certaines conclusions (plus d’explication dans la partie 2.1).
De cette manière, la compréhension et la lisibilité seront beaucoup plus simples.


1.4 Mise en contexte


Mais avant de commencer toute analyse, il me semble primordial de comprendre le sujet.
Ainsi, je vous dans cette partie vous présenter les principales données étudiées, leur définition, l’origine de la base de données…


L’origine de la base de données:


Comme expliqué rapidement ci-dessus, notre professeur Pierre-Michel Bousquet nous a transmis cette base de données pour un autre projet. Elle fait partie d’un ensemble de données structurées et organisées, sur les clients de l’entreprise “Crédit Agricole” s’appelant « base_clts » datant du 31 janvier 2019.



Téléchargement des données :


https://guacamole.univ-avignon.fr/nextcloud/index.php/s/wZ9P3kop4dKqmAt


Definition des principales varialbles selon l’insee:


Le « age » est l’âge du client.


Le terme « li_regrp_csp » désigne la catégorie professionnelle du client, ici il y en a 8: • Agriculteurs exploitants/ agr
• Artisants, commerçants et chefs d’entreprise / art
• Autres personnes sans activité professionnelle / sans_act
• Cadres et professions intellectuelles supérieures / cadres
• Employés / employes
• Ouvriers / ouvrier
• Professions Intermédiaires / prof_intermediaires
• Retraités / retraites


Le « classe risque » est indicateur du risque lié au client (16 niveaux).


Le « tp assurance » signifie si le clients oui (1) ou non (0) à une Assurance en cours.


Le « tp epargne » signifie si le clients oui (1) ou non (0) à une Epargne en cours.


Le « mt rentabilite » est le montant de rentabilité du client.


Le « mt epargne disponible » est le montant d’épargne disponible du client.


Le « identifiant » est le nombre de client dans l’agence.


Une fois ces étapes passée, l’analyse peut enfin commencer.


2. PREMIERE APPROCHE AVEC LES DONNÉE


Après vous avoir présenté les principaux termes spécifiques de l’étude, nous allons vous présenter une première approche graphique des données afin d’appuyer votre compréhension et d’avancer petit à petit dans l’analyse.


2.1 Préparation des données


Avant de pouvoir comparer et en entrer concrètement dans l’analyse, nous devons procéder à quelques étapes.
En effet, mon jeu de données est composé de 88 058 individus et de 28 variables. J’ai donc dût réduire le nombre de variables (12 variable maximum) et le nombre d’individus.
Ainsi, j’ai choisi les variables les plus permanentes selon moi (celles-ci sont présentées plus en détaille dans la partie 1.4) et de créer un individu moyen pour chaque agence bancaire (donc chaque agence a un individu qui a la moyenne de tous les clients de cette banque pour chaque variable.), cependant en faisant un individu moyen il est impossible de faire une ANOVA ce qui explique cette analyse abscente dans ce compte rendu.
Par ailleurs, certaines variables sont qualitatives, comme les catégories socio-professionnelles ou la classe risque par exemple, cependant pour faire une analyse multivariée, nous devons avoir que des variables quantitatives (des nombres). Pour contourner ce problème, j’ai utilisé deux méthodes :
Pour a premiere (pour la variable classe risque), j’ai dût remplacer chaque categorie (A, B, C…) par des chiffres (1, 2, 3…), pour cette variables cette méthode ne posé pas problème puisque (comme expliqué dans la partie 1.4) je suis partie du postulat que chaque la différence entre les classes sont équivalent (donc la classe 1 et 3 fois moins riqué que la classe 3); Et vous avez donc compris que pour la variable des catégories socioprofessionnelles, il fallait une autre méthode.
Ainsi, j’ai utilisé la méthode ACM. Disjonctif utilisable à partir du packages ade4 qui permet de modifier une variable qualitative en qualitative en créant chaque catégorie (ici ouvrier, agriculteur, …) en variable a par entière, et il a un “1” dans la colonne qui convient a ça csp et “0” pour les autres csp.

c=dbConnect(RPostgreSQL::PostgreSQL(),dbname="iut2203125")
query='SELECT * FROM "S4_enquete"."pred_variable"'
X <- dbGetQuery(c,query)
V = acm.disjonctif(data.frame(X$li_regrp_csp))
#dim(V)
#head(V,15)
colnames(V)=c("agr","art","sans_act","cadres","employes","ouvriers","prof_intermediaires","retraites")
X=data.frame(X[,-4],V)
X=na.omit(X)
gr=as.numeric(table(X$groupe))


Après avoir supprimé toutes les valeurs manquantes et une agences abérrantes (“Agence directe” (qui par déduction devais être les clients n’étant pas rattachés à une banque dans la région PACA)).
Nous obtenons ce tableau (dataframe), où chaque ligne représente une agence et les valeurs sur cette ligne sont les moyennes des individus reliés à cette agence. Pour la suite de l’analyse, je l’appellerais l’individu ou individu moyen.


X=aggregate(X[,c(2,3,5,9,10,11,14,29,30,31,32,33,34,35,36)],list(X$groupe),mean)
X$identifiants=gr 
rownames(X)=X[,1]
X=X[,-1]
X=X[-7,]#direct EXPLIQUER genre c internet
XX=X
#head(X,10)


Maintenant nous pouvons passer à l’analyse multivarié


2.2 Les corrélations


Pour analyser le lien entre nos variables je choisis de faire un tableau de corrélation.
Les corrélations sont des mesures statistiques qui indiquent comment deux variables sont liées ou associées entre elles. En d’autres termes, elles mesurent le degré de relation entre deux variables.
Il existe différents types de corrélations, mais l’une des plus courantes et celle que je vous présenterais est la corrélation de Pearson, qui mesure la relation linéaire entre deux variables. Elle varie de -1 à 1, où -1 indiquent une relation négative parfaite (c’est-à-dire que lorsque la valeur d’une variable augmente, la valeur de l’autre variable diminue), 1 indique une relation positive parfaite (lorsque la valeur d’une variable augmente, la valeur de l’autre variable augmente également), et 0 indique l’absence de corrélation (c’est-à-dire que les variables ne sont pas liées linéairement).
Cependant, il est important de noter que la corrélation n’implique pas nécessairement une relation de cause à effet entre les variables. Il est possible que les deux variables soient influencées par un autre facteur commun ou que la corrélation soit simplement une coïncidence.
Ainsi voici ce que nous obtenons avec nos données (avec R)

corrplot(cor(X[,c(1,2,3,4,5,6,7)]), method = 'number', order = 'AOE', type = 'lower')


Dans notre cas notre tableau est un tableau à double. Si une case reliant deux variables est supérieure à 70% alors on peut dire qu’il y a un lien entre les deux variables. Si cette valeur dépasse 85% on peut conclure qu’il y a une très grosse corrélation. Même cas avec les valeurs négatives. Effectivement si une valeur est inférieure à -0.70 cela veut dire qu’il existe une corrélation significative négative. Étant donné que cette corrélation est négative cela veut dire que plus la variable 1 est grande plus la variable 2 est petite.
Ainsi, nous remarquons rapidement qu’il y a une importante corrélation entre l’âge et l’ancienneté de l’individu dans l’agence (0,90) et que le niveau de risque de l’individu est corrélé négativement à l’ancienneté, l’age et le montant de l’épargne disponible (-0,75; -0,72 et -0,73 respectivement).
Enfin, nous pouvons remarquer que le montant d’épargne disponible de l’individu est corrélé à l’âge (0,79), l’ancienneté mois (0,71) et à l’épargne. (0,73)


…

Pour le tableau de corrélation avec sas, nous trouvons les mêmes valeurs.
Ce que l’on peut ajouter est que l’on peut voire une importante corrélation positive entre les retraités et l’age (logique), l’ancienneté mois, et le montant d’épargne disponible.
Maintentant nous allons regarder le résumé de chaque variables afin de faire des premières observations. On va prendre un de nos résultats trouvé sur SAS.
…

N’oublions pas que l’analyse ce fais sur les individu moyen de chaque agence. Ce graphique nous permier deja de tirer quelque affirmation.
Premièrement, lorsqu’on regarde la derniere variable “identifiants” nous remarquons une enorme différnece entre le l’agence ayant le moins de clients et celle ayant le plus de clients.
Ensuite, nous pouvons remarqué pour la variable “montant rentabilité” il y prés de 80 € de difference entre le minimum et maximum (oublions pas que c’est sur les individu moyens donc approximativement chaque clients d’une agences gagne 282€ alors qu’une autre gagne 205€) et que la mediane est plus faible que la moyenne et est d’environ 230€ ce qui signifie que les clients etant dans l’agence ayant 282 € de montant de rentabilité est bien supérieur à la moyenne.
On peut aussi tirer la meme conclusion pour le montant disponible. Enfin on peut remarqué qu’en générale les clients de n’importe qu’elle agence ne sont pas assuré (0,36) et on une épargne(0,84)


v=as.matrix(X)
X=v
XX=X


############################################################################
#
# - entree : X (ne doit contenir que des nombres)
# - pas besoin de centrer-reduire le fichier. C'est fait ci-dessous.
# - genere un fichier 'cor_var_init_cp.csv' sur le repertoire de travail
#
############################################################################

X=as.matrix(X)

if (sum(ls()=="L")==0) L=2
n=nrow(X)
p=ncol(X)

X=scale(X)

V=cor(X)
d=eigen(V,symmetric=T)
# all equal
for (j in 1:p) d$vectors[,j]=ifelse(d$vectors[1,j]>0,1,-1)*d$vectors[,j]

cp=X%*% d$vectors
colnames(cp)=paste("cp",1:p,sep="")

contributions=d$values


3. L’ACP


Dans l’ACP, l’objectif est de réduire la dimensionnalité d’un ensemble de variables corrélées en créant de nouvelles variables non corrélées appelées composantes principales. Ces composantes principales expliquent la plupart de la variabilité des données initiales.

3.1 Les composantes principales


Pour continuer l’analyse nous devons centrer et réduire nos données afin d’éliminer toutes les unités de mesures. Le centrage et la réduction de données sont des techniques couramment utilisées en statistique pour normaliser les données. Le centrage consiste à soustraire la moyenne de chaque variable de la base de données, tandis que la réduction consiste à diviser chaque variable par son écart type (ce qui deviens le centrage reduction et on parle de donnée centrée-réduite) . L’objectif principal de la normalisation des données est de rendre les variables comparables et de minimiser l’impact des écarts de mesure entre les variables.
La normalisation des données peut être utile pour plusieurs raisons. Tout d’abord, cela peut permettre de faciliter la comparaison des variables entre elles en leur donnant des échelles comparables. Cela peut également faciliter l’interprétation des coefficients dans les modèles statistiques en réduisant les problèmes de colinéarité et en augmentant la stabilité des estimations. Enfin, cela peut améliorer l’efficacité de certaines techniques statistiques, comme la classification ou la régression, en réduisant la complexité des données.
En somme, la normalisation des données permet de faciliter l’analyse statistique en éliminant les biais potentiels causés par les différences d’échelle entre les variables, ce qui permet de mieux interpréter les résultats et de prendre des décisions plus éclairées. Pour centrée reduire les données j’ai utilisé la fonction “scale”.
Plus concretment il faut soustraire la moyenne de la variable (colonne) à la valeur de la case puis la diviser par l’écart-type de la colonne.
Pour vérifier notre calcul on regarde que la moyenne de chaque variable soit 0 et que l’écart-type de chaque variable vaut 1.

apply(X,2,mean)
##                   age       anciennete_mois         classe_risque 
##          1.695053e-15         -5.275684e-16          2.805368e-16 
##        mt_rentabilite mt_epargne_disponible          tp_assurance 
##         -6.469610e-16          8.376977e-17         -6.525520e-16 
##            tp_epargne                   agr                   art 
##          1.122246e-15          3.058622e-17         -4.051986e-17 
##              sans_act                cadres              employes 
##          3.904827e-16          1.706651e-16          2.880872e-16 
##              ouvriers   prof_intermediaires             retraites 
##         -7.166576e-17          3.406204e-16         -2.093126e-16 
##          identifiants 
##          2.900314e-17
apply(X,2,sd)
##                   age       anciennete_mois         classe_risque 
##                     1                     1                     1 
##        mt_rentabilite mt_epargne_disponible          tp_assurance 
##                     1                     1                     1 
##            tp_epargne                   agr                   art 
##                     1                     1                     1 
##              sans_act                cadres              employes 
##                     1                     1                     1 
##              ouvriers   prof_intermediaires             retraites 
##                     1                     1                     1 
##          identifiants 
##                     1


Donc c’est bon, et nous pouvons continuer l’analyse.
Dans ce contexte, une “supervariable” est une une Composantes Principales lorsque sa variance est supérieure à 1 car on sait que les variances initiales ont une variance de 1, puisqu’elles sont centrées et réduites autrement dit une supervariables et une “variable” resumant plus que seulement elle.

g=barplot(contributions,main="Graphique des contributions",
names.arg=round(contributions,2),col=rainbow(p),cex.names = 0.8)
text(g,contributions,paste(round(100*contributions/p),"%"),pos=3,cex=0.8,xpd=NA)
abline(v=3.7,lty=2)

Ce graphique nous permet d’avoir une visualisation sur les composantes principales et de voir leurs contributions.
Ainsi, Il nous permet donc de savoir avec quelles composantes principales nous pouvons analyser Ici, je prends toutes les composantes principale qui résume plus qu’une variable (on a cette information en abscisse, par exemple, la 3ème variable représente 1,77 fois plus que la variable initiale.).
Ainsi, on retient les 3 premières composantes principales (jusqu’au trait en pointillé), qui contiennent environ 79 % de l’information initiale (49+19+11=79).
On regarde ensuite le tableau des corrélations entre les variables initiales et les composantes principales. Ce tableau se lit de la même façon que la matrice des corrélations. Sauf qu’ici on regarde le lien entre les variables initiale et les CP. On retient souvent comme pour la matrice de corrélation les valeurs supérieures à 0.70 ou inférieure à -0.70.

cor_var_init_cp= d$vectors %*% diag(sqrt(d$values))
rownames(cor_var_init_cp)=colnames(X)
colnames(cor_var_init_cp)=paste("cp",1:p,sep="")
data.frame(round(cor_var_init_cp,2))[1:5]
##                         cp1   cp2   cp3   cp4   cp5
## age                    0.91  0.17  0.04  0.19  0.16
## anciennete_mois        0.96 -0.13  0.11  0.04  0.01
## classe_risque         -0.73 -0.24 -0.54 -0.04  0.16
## mt_rentabilite        -0.47  0.36 -0.66  0.20  0.07
## mt_epargne_disponible  0.81  0.51 -0.04 -0.03 -0.16
## tp_assurance          -0.67  0.05 -0.29 -0.45  0.08
## tp_epargne             0.69  0.15 -0.13 -0.42 -0.50
## agr                    0.82 -0.13 -0.26 -0.05  0.05
## art                    0.85  0.20 -0.11 -0.14  0.17
## sans_act              -0.44 -0.66 -0.39  0.14 -0.34
## cadres                -0.58  0.64 -0.04  0.29 -0.28
## employes              -0.70  0.36  0.28 -0.39  0.19
## ouvriers               0.37 -0.86  0.05  0.02  0.12
## prof_intermediaires   -0.59  0.50  0.51  0.14  0.01
## retraites              0.88  0.20 -0.17  0.06  0.09
## identifiants          -0.32 -0.62  0.57  0.00 -0.14


La composante principale, qui représente près de la moitié de l’information totale (49 %), est une opposition entre : Le groupe de variable : age, ancienneté mois, montant épargne, agriculteur, artisans, épargne en cours (on acceptera ici la valeur 0,69.) et la classe risque.
La 2 eme composante principale qui représente 19 % de l’information totale, la variable sans activité est négativement corrèle significativement (on accepte la valeur -0,66, limite du seuil -0,70, cette variable étant la seule à apparaître presque significative sur cette composante.).
Enfin pour la dernière et 3 eme composante qui représente 11 % de l’information totale, comme pour la composante 2 nous acceptons la variable montant rentabilité puisque c’est la seule variable “proche” du seuil.
Nous obtenons les mêmes résultats sur sas (voire en annexe)


Afin de mieux visualiser les variables initiales représentées par les supervariables nous avons décidé de réaliser le graphique ci-dessous.

#plot(cor_var_init_cp)
#arrows(0,0,cor_var_init_cp[,1]*L,cor_var_init_cp[,2]*L,col="red",length=0.1)
#text(cor_var_init_cp[,1]*L*1.1,cor_var_init_cp[,2]*L*1.1,colnames(X),cex=0.8,col="red",xpd=NA)
plot(cor_var_init_cp[,1],cor_var_init_cp[,2],asp=1,main="Cercle des correlations",xlim=c(-1,1),ylim=c(-1,1),xlab="cp1",ylab="cp2")
abline(h=0,v=0)
symbols(0,0,circles=c(1),add=TRUE,inches=FALSE)
symbols(0,0,circles=c(0.70),add=TRUE,inches=FALSE)
 
arrows(0,0,cor_var_init_cp[,1],cor_var_init_cp[,2],col="red",length=0.1)
text(cor_var_init_cp[,1]*1.1,cor_var_init_cp[,2]*1.15,colnames(X),cex=0.8,col="red",xpd=NA)
text(x=1, y=-0.5, "2")
text(x=0.6, y=-0.5, "1")


Ainsi, ce graphique concerne la composantes principales 1 et composantes principales 2, resumant de maniere graphique ce que j’ai resumé ci dessus.
Ce qui faut regardé ici sont les variables entre le cercle 1 et 2 (variables corrélées a la cp en fonction de l’axe) Nous voyons donc que la variable agr (agriculteur) et ancienneté années on exactement le meme comportement (c’est à dire extremement corréle à la cp 1 et moyennes à la cp 2) contrairement au montant épargen disponible et classe risque.
Nous pouvons faire cela pour toute les combinaison de cp (1/3 et 2/3) mais cela redit ce que j’ai expliqué ci dessus donc voit pouvais retrouver les autres representation en annexe.

3.2 Représentation des cp


Les représentations qui suivent nous permettent d’avoir une première idée des tendances et des caractéristiques des agences.
Les interprétations pour les cp 2 et cp 3, ne sont pas nécessairement vérifié puisque (comme présenté ci-dessus) l’explication de celle-ci reste faible et on été prises par défaut (Puisqu’elles sont inférieures au seuil : 0,70).

plot(cp[,1],cp[,2],
xlab=paste("CP 1   -   ",round(100*contributions[1]/p,2)," %",sep=""),
ylab=paste("CP 2   -   ",round(100*contributions[2]/p,2)," %",sep=""),asp=1)
abline(h=0,v=0)
# symbols(0,0,circles=c(1),add=TRUE,inches=FALSE)
text(cp[,1],cp[,2],rownames(X),pos=3,cex=0.7,xpd=NA)
#text(x=0,y=4, labels="text",col="blue", cex=4)
#mtext(c("Magic function"), side=3)
mtext("+ Age", side = 4, line =0 , cex = .5)
mtext("+ Ancienneté mois", side = 4, line =.5 , cex = .5)
mtext("+ montant épargne dispo", side = 4, line =1 , cex = .5)
mtext("+ agriculteur/ artisant", side = 4, line =1.5 , cex = .5)
mtext("+ épargne en cours", side = 4, line =2.5 , cex = .5)
mtext("- classe risque", side = 4, line =2 , cex = .5)

mtext("- Age", side = 2, line =0 , cex = .5)
mtext("- Ancienneté mois", side = 2, line =.5 , cex = .5)
mtext("- montant épargne dispo", side = 2, line =1 , cex = .5)
mtext("- agriculteur/ artisant", side = 2, line =1.5 , cex = .5)
mtext("- épargne en cours", side = 4, line =2.5 , cex = .5)
mtext("+ classe risque", side = 2, line =2 , cex = .5)

mtext("- sans activité", side = 3, line =.5 , cex = .5)

mtext("+ sans activité", side = 1, line =1.5 , cex = .5)


Ainsi, sur cette représentation montrant la composante principale 1 en abscisse et la composante principale 2 en ordonnées, nous pouvons affirmer que dans l’agence d’EMBRUN l’individu moyen et l’individu ayant l’âge, l’ancienneté, montant épargne disponible, agriculteur, artisans et client en activité (pas/peu de sans-emploi) le plus importante, mais la classe risque la plus faible. Inversement pour l’agence MARSEILLE RÉPUBLIQUE.
On peut aussi prendre l’exemple de l’agence de CAVAILLON où l’individu moyen et dans la moyenne pour la composante 1 (age, ancienneté, montant épargne disponible, …) cependant, c’est l’agence ayant le plus de clients sans activité contrairement à l’agence de MARTIGUES.

plot(cp[,1],cp[,3],
xlab=paste("CP 1   -   ",round(100*contributions[1]/p,2)," %",sep=""),
ylab=paste("CP 3   -   ",round(100*contributions[3]/p,2)," %",sep=""),asp=1)
abline(h=0,v=0)
# symbols(0,0,circles=c(1),add=TRUE,inches=FALSE)
text(cp[,1],cp[,3],rownames(X),pos=3,cex=0.7,xpd=NA)
mtext("+ Age", side = 4, line =0 , cex = .5)
mtext("+ Ancienneté mois", side = 4, line =.5 , cex = .5)
mtext("+ montant épargne dispo", side = 4, line =1 , cex = .5)
mtext("+ agriculteur/ artisant", side = 4, line =1.5 , cex = .5)
mtext("+ épargne en cours", side = 4, line =2.5 , cex = .5)
mtext("- classe risque", side = 4, line =2 , cex = .5)

mtext("- Age", side = 2, line =0 , cex = .5)
mtext("- Ancienneté mois", side = 2, line =.5 , cex = .5)
mtext("- montant épargne dispo", side = 2, line =1 , cex = .5)
mtext("- agriculteur/ artisant", side = 2, line =1.5 , cex = .5)
mtext("- épargne en cours", side = 4, line =2.5 , cex = .5)
mtext("+ classe risque", side = 2, line =2 , cex = .5)

mtext("- montant rentabilité", side = 3, line =.5 , cex = .5)

mtext("+ montant rentabilité", side = 1, line =1.5 , cex = .5)


Sur cette représentation montrant la composante principale 1 en abscisse et la composante principale 3 en ordonnées, nous pouvons dire que dans l’agence de MARSEILLE RÉPUBLIQUE l’individu moyen est l’individu ayant l’âge, l’ancienneté, montant épargne disponible, agriculteur, artisans le plus faible, mais la classe risque et le montant rentabilité le plus importante.
On peut aussi dire que dans l’agence de MARIGNANE l’individu moyen présente l’age, l’ancienneté, montant épargne disponible, agriculteur, artisan moyen, mais un montant rentabilité le plus faible.

plot(cp[,2],cp[,3],
xlab=paste("CP 2   -   ",round(100*contributions[2]/p,2)," %",sep=""),
ylab=paste("CP 3   -   ",round(100*contributions[3]/p,2)," %",sep=""),asp=1)
abline(h=0,v=0)
# symbols(0,0,circles=c(1),add=TRUE,inches=FALSE)
text(cp[,2],cp[,3],rownames(X),pos=3,cex=0.7,xpd=NA)

mtext("- montant rentabilité", side = 3, line =.5 , cex = .5)

mtext("+ montant rentabilité", side = 1, line =1.5 , cex = .5)

mtext("+ sans activité", side = 2, line =1.5 , cex = .5)

mtext("- sans activité", side = 4, line =0.5 , cex = .5)


Enfin sur le dernier graphique représentant la composante principale 2 en abscisse et la composante principale 3 en ordonnées, nous pouvons remarquer de manière générale que les agences sont beaucoup plus concentré au niveau du centre. Nous pouvons dire que dans l’agence de CARPENTRAS et de CAVAILLON, le montant de rentabilité de l’individu est moyen, cependant, ce sont les agences ayant le plus de clients sans activité / sans emploi.
On peut aussi dire que dans l’agence d’ARLES LICES l’individu moyen est dans la moyenne au niveau de l’emploi, cependant sont la montante rentabilité est très important, contrairement à l’individu moyen de l’agence de PAYS D’AIX.

Ces graphiques nous on permis dors et déjà de remarqué quelques agences “hors normes” et de remarque des tendances et des possibilités de regroupement (agence à Marseille ensemble par exemple).


4. La CLASSIFICATION


La classification est une méthode couramment utilisée en analyse multivariée pour regrouper des observations similaires dans des groupes distincts appelés classes. Cette technique est particulièrement utile lorsqu’il y a une grande quantité de données et que la recherche de structures ou de relations entre les variables devient difficile. La classification peut aider à réduire la complexité des données et à mieux comprendre les relations entre les variables.

4.1 Décision du nombres de classes

Pour faire une bonne classification il faut surtout choisir le bon nombre de classes. Pour cela j’ai fais le choix de faire plusieurs representation graphique pour etre sur de mon choix
La premiere representation graphique (graphique en arbre) est uen représentation au purement au juger de la personne (une personne vera 3 classe et l’autre 6,…)

X=scale(X)
# Verif : nouvelles moyennes et nouveaux ecarts-type
#apply(X,2,mean)
#apply(X,2,sd)
res.hc <- eclust(X, "hclust", k = 3,
                method = "ward.D2", graph = F) 
fviz_dend(res.hc, rect =F, show_labels = F, cex = 0.5) 


Sur ce graphique, nous pouvons remarquer assez facilement que le nombre de classe optimale est 3 (représente par les couleurs.).
En effet, tous les sauts entre les agences avais une distance faible (valeur en ordonnée), cependant la liaison 34 à 35 (liaison du bloc vert et du bloc bleu), nous remarquons une importante distance.
Nous pouvons voir ci-dessous une représentation graphique des classes (avec les agences associées à ça classe), entourés en pointillé.

fviz_dend(res.hc, rect = TRUE, show_labels = TRUE, cex = 0.5) 


Afin d’être sur du nombre de classes choisi, nous allons regarder plus précisément la distance annulée par la fusion des agences/groupes.

cah = hclust(dist(X),method = "ward.D2")
plot(rev(cah$height),type="b")


Sur cette representation (graphique du coudes), nous pouvons trouver en abcisses le nombres de classes et en ordonnées les sauts (autrement la distance annulé par la fusion de 2 classes).
Ici l’objectif est de localiser à quel moment le saut est trop important et signifie donc le nombre de classes optimale.

plot(rev(cah$height),type="b")

plot(rev(cah$height)[1:20],type="b")

Ainsi, on voit aisément sur celui zoomé ou non que le saut pour passer de 3 classes à 2 classes est “hors normes”.
Cependant les resultat donnée par sas sont differentes:
Nous voulons voir ce que SAS nous conseille comme nombre de classes. Pour cela on regarde le tableau ci dessous et on cherche dans la dernière colonne qui correspond au critère de classifiaction la valeur la plus petite, on se refere ensuite au nombre de cluster qui est la première colonne.
…
Ainsi, ici nous obtenons -2,0 en valeur minimale et du coup un nombre de classe optimale de 4
On peut vérifier ce résultats avec le graphique ci dessous.
…
Le nombre de classes optimal correspond à l’abscisse oà la courbe est la plus basse. Et on voit que cela suit notre raisonnement précédent (=4).
il y a d’autre représentation graphique de sas en annexe (arbre,…)
Cependant après plusieurs test je décide de garder le résultat de R-studio eton peut donc conclure que le nombre de classe optimale est 3.

4.2 les principales mesures des classes (inter et intra)


Dans cette partie nous allons analyser les principales mesures des classes


#---------------------------------
# choix du nombre de classes et classification
#--------------------------------
q=3

classif=cutree(cah,q)
# afficher les villes par classe
#sort(classif)

#---------------------------------
# Profil classes : 1. analyse spatiale (dispersion classes)
#---------------------------------
# Effectifs des classes
# Variances des Ecarts-type des classes
n=length(classif)
variance_totale=sum(diag(var(X)))*(n-1)/n
variances_classes=rep(0,q)
for (k in 1:q) {
  n=sum(classif==k)
  variances_classes[k] = sum(diag(var(X[classif==k,])))*(n-1)/n
}
#round(variances_classes,2)
#round(variance_totale,2)
# et donc ecarts-type des classes
round(sqrt(variances_classes),2)
## [1] 3.02 2.58 2.91
round(sqrt(variance_totale),2)
## [1] 3.95


Ici sont représenté les écart-type des classe, autrement dit la distance intra-classes. Par exemple, 3,02 est la dispersion des agences de la classe 1 et ainsi de suite. La valeur 3,95 est la dispersion de toutes les agences.
Nous pouvons dire que les écart-types ne sont pas aberrants et il n’y pas de classes qui sortent du lot (au maximum une différence d’environ 0,40).

### Distances inter-classes (sur centres de gravite)
# i. calcul des individus moyens (= moyennes, centres de gravite, centroids)
moyennes=aggregate(X,list(classif),mean)[,-1]
#round(moyennes,2)
# ii. matrice des distances entre individus moyens
round(dist(moyennes),2)
##      1    2
## 2 7.55     
## 3 4.38 4.34


Ici, est représentée la distance entre chaque classe (autrement dit la distance inter-classe.). Le calcul a pris pour base la moyenne des points de chaque classe et les a comparées.
Par exemple, la distance entre la classes 1 et 2 est de 7,55. Ce qu’on peut retenir de ces distances est que la classe 3 est “entre” la classe 1 d’un côté et la classe 2 de l’autre (puisque la distance est similaire entre la classe 1, 3 et 2, 3, mais 1,2 et la plus grande distance).

barplot(table(classif), main="nombre d'agences dans chaque classes", xlab="classe", ylab="effectif", col = c("black", "red", "green"))


Enfin, ce graphique en barres verticale nous permet de savoir le nombre d’agences dans chaque classe. Cette information est très importante puisqu’une classe peut avoir une agence et cela peut fausser notre analyse (agence aberrante à supprimer).
Dans notre cas, nous voyons qu’en général il n’y a pas de classe qui est aberrante (juste une importante représentation de la classe 3).


4.3 Les caractéristiques des variables


Dans cette 4eme et dernière partie de l’analyse, nous allons essayer de définir quel type d’individu sont dans les différentes classes grâce à des représentations graphiques.


La première représentation graphique (barplot/barres verticales), nous donne une vue d’ensemble de chaque variable dans les différentes classes.

XX %>% 
  scale() -> arrest.scale
arrest.scale %>% 
  get_dist(upper = TRUE, diag = TRUE) -> arrest.dist

km.arrest <- kmeans(arrest.scale, centers = 3, nstart = 25)

centers<-as.data.frame(km.arrest$centers)
centers$cluster <- c("classe 1","classe 3","classe 2")
centers %>% 
  gather(type, value, -cluster) %>% 
  ggplot() + 
  geom_bar(aes(x = type, y = value, fill = type), position = "dodge", stat = "identity", colour = "black") +
  facet_wrap(~cluster) +
  theme_classic() +
  theme(axis.text.x = element_text(angle = 90, vjust = 0.5, hjust=1)) +
  theme(legend.position = "none") 


Ainsi, nous remarquons 3 ayant des représentations totalement différentes.
En effet, la classe 1 et 2 sont les 2 opposés sur chaque variable (par exemple, dans la classe 1 les variables ages, agriculteur, ancienneté mois et artisans sont très peu représente alors que la classe 2, ils sont très bien représentés…).


Ici, vais vous présenter le “profil des classes”. Cette représentation en lignes synthétise les mêmes informations que le graphique en barres verticale.

#---------------------------------
# Profil classes : 2. individus moyens
#---------------------------------
# graphique general
#profil classe
matplot(t(moyennes),type = "b")
abline(h=0)
abline(h=c(-1,1),lty=2)
text(1:ncol(X),max(moyennes)*1.1,colnames(X),xpd=NA,srt=-20)


Ainsi, nous tirons les mêmes conclusions que pour le graphique en barres verticale.
Ce dernier groupe de graphique (boxplot/boite à moustache) permet d’avoir une visualisation plus précise (valeur extrême, médiane, borne inférieure est supérieur, répartition…) de chaque classe en fonction des variables.

par(mfrow=c(2,4))
for (j in 1:ncol(X)){
  boxplot(X[,j]~classif, main=colnames(X)[j])
  abline(h=0)
  abline(h=c(-1,1),lty=2)
}

j=1


Ces résultats sont cohérents avec les affirmations faites dans la partie 3.2 et nous, on permit d’identifier quel genre d’agences (et donc de clients) a ton à faire dans chaque classe :
• La classe 1 represente l’agence où les clients plutôt jeunes, majoritairement actif, voulant faire fructifier leur argent, ayant une assurance
•La classe 2 représente l’agence où à l’inverse les clients plutôt agées (retraités), fidèle à l’agences/banque, ce reposant sur l’argent engrangé (épargne) dans leur vie (donc pas d’assurance et de volonté de faire fructifier leur argent)
• La classe 3 représente l’agence où les clients sans caractéristique particulière, autrement dit, ce sont les agences ayant des clients “sans objectif”.

5. SYNTHÈSE


Dans cette partie nous allons faire une synthèse des observation est relevé les elements à retenir,

5.1 Graphique sythese générale

Dans cette partie nous verrons des representations obtenu à partir de l’acp et de la classification.


km.res <- eclust(X, "hclust", k = 3,
                 nstart = 25, graph = FALSE)
h=fviz_cluster(km.res,  frame.type = "norm", frame.level = 0.77)
h+
scale_colour_manual(values = c("black", "red", "green")) +
  scale_fill_manual(values = c("black", "red", "lightgreen")) +
  theme_minimal()


Ainsi, nous obtenons cette représentation pour la composante principale 1 et la composante principales 2. Nous remarquons clairement que les 3 classes sont démarquées, la partie gauche par la classe 1 (donc les agences ayant des clients plutôt jeunes, actifs, …), sont des agences dans de grandes villes ou alentour de celle-ci (Marseille, Aix, Ciotat, …) la partie du milieu par la classe 3 (donc les agences sans caractéristique), sont des agences de ville ou petite ville (Avignon, Cavaillon, Orange) et enfin la partie droite par la classe 2 (donc les agences ayant des clients plutôt agés, qui ont une épargne, …) dans des villes plus petite (ou similaire) et à tendance de villes calme.
Nous remarquons aussi que cercle rouge (regroupant toutes les agences de la classe 2) est le plus petit que les autres, ce qui pourrait signifier que par exemple une offre pour ces agences, les clients aurait approximative le même comportement (contrairement aux deux autres classes).

col=classif
clusplot(X, classif, label = 2, col.p = col, col.clus = c("black","red","green"),xlab = "composantes principales 1", ylab = "composantes principales 3", s.x.2d=list(x=cp[, c(1,3)],labs=rownames(X), var.dec=NA))
legend("bottomright",c("classe 1", "classe2", "classe 3"),pch=19, col=c("black","red","green"), text.col=c("black","red","green"))


Ainsi, nous obtenons cette représentation pour la composante principale 1 et la composante principales 3.
Ici, nous remarquons encore une tendance de démarcation, cependant elle est plus légère que sur le graphique ci-dessus. Nous voyons que certaines l’agence s’écarte de leurs classes (Marseille République pour la classe 1, Avignon République et Arles Lices pour la classe 3, Briançon Sainte-Catherine). Ces observations sont dues à des informations que nous ne pouvons savoir avec les données que nous avons. (peut etre une organisation differentes, une fermeture de l’agences qui a dut arrêter leur gestion, une licenciement,…)


J’ai fait le choix de ne pas représenter pour la composante principale 2 et la composante principales 3, puisque la lecture était très difficile et nous ne pouvais tirer des conclusions dessus.


5.2 Conclusion


Pour conclure cette analyse, nous avons dû passer par plusieurs étapes pour pouvoir commencer l’analyse (création individu moyen, conversion variable qualitative en quantitatives, …).
Ensuite, nous sommes passées à la corrélation entre les variables afin de comprendre dors et déjà quelques variables reliées naturellement (variable retraité avec l’âge, age avec ancienneté mois ou plus complexe, mais logique comme retraités et épargne ou jeunes et assurances, …). Cependant, le problème est que nous ne savons pas quelle agence il faut mettre cette campagne en place.
Cette première partie peut déjà entre décisionnelle, puisque prenons pour exemple que la banque veut faire une campagne de publicité pour promouvoir leur assurance, mais veulent faire passer cela sous forme d’exclusivité pour une tranche d’âge. Grâce à ces explications, la direction sera que les personnes jeunes sont plus consommateurs des assurances que les personnes âgées.
Ensuite, nous avons créé des “super variables” qui nous ont permis de localiser les agences où les clients sont plus des jeunes, actifs, … (Marseille) que des personnes âgées sans assurances,…(Embrun)
La encore cela peux être décisionnel cependant plus coûteux puisque l’analyse est au cas par cas.
Alors pour lier les deux (la précision et la décision) nous avons fait une classification ayant pour but de regroupé les agences similaires ensemble. Grace a cette méthode nous somme passer (en quelque sortes) de 37 agences en 3 classes d’agences avec leur caractéristique chacune.
Ainsi, cela nous a permis de caractériser des groupes d’agences en agences plutôt de jeunes (agences de la classe 1, volonté de fructifiés leurs argents) ou agé (classe 2 ayant une épargne et “fait” de l’argent avant. ) ou neutre (classe 3 sans “objectif” concrètement.).
Maintenant, les décisions seront plus précises, moins coûteuses, optimales, rentables (pour la banque/agences et pour les clients, …).

6. ANNEXE

SCRIPT SAS

#script sass
#%web_drop_table(BASE);
#FILENAME REFFILEE '/home/u62403666/data (5).csv';

#PROC IMPORT DATAFILE=REFFILEE
#   DBMS=CSV
#   OUT=BASEE;
#   GETNAMES=YES;
#   delimiter=",";
#RUN;

#PROC CONTENTS DATA=BASEE; 
#RUN;
#proc standard data=BASEE;
#run;
#PROC STANDARD DATA=BASEE
#   OUT=BASESTANDART (label="Id") mean=0 std=1;
#   var age anciennete_mois classe_risque mt_rentabilite mt_epargne_disponible tp_assurance tp_epargne agr art sans_act #cadres employes ouvriers prof_intermediaires retraites identifiants;
#RUN;
#proc print data=BASEE;
#run;

#proc univariate data=BASEE noprint;
#   var age anciennete_mois classe_risque mt_rentabilite mt_epargne_disponible tp_assurance tp_epargne agr art sans_act #cadres employes ouvriers prof_intermediaires retraites identifiants;
#output out= outliers pctlpre=lo pctlpre=1,99.5,99.9;
#run;
#/* erreur normale puisuq'il n'y a pas de valeur aberrantes*/

#proc corr data=BASEE;
#   var age anciennete_mois classe_risque mt_rentabilite mt_epargne_disponible tp_assurance tp_epargne agr art sans_act #cadres employes ouvriers prof_intermediaires retraites identifiants;
#run;

#proc princomp data= BASEE out= ACPCIC prefix=ACP OUTSTAT=ACPCIC2 PLOTS=PATTERN (VECTOR);
#   var age anciennete_mois classe_risque mt_rentabilite mt_epargne_disponible tp_assurance tp_epargne agr art sans_act #cadres employes ouvriers prof_intermediaires retraites identifiants;
#run;

#proc cluster data=BASESTANDART(label="Id")
#   method=ward ccc
#   outtree=tree;
#run;
#proc tree
#   data=tree
#   n=4
#   out=tree_out;
#run;
#proc print data=ACPCIC;
#title "coordinates and quality of representation of individuals on the axes";
#run;

#proc print data=ACPCIC2;
#run;

#PROC GPLOT DATA=ACPCIC;
#PLOT ACP2*ACP1=ID_VINE_LEAF / frame href=0 vref=0;
#symbol1 i=none c=red v=dot h=2;symbol2 i=none c=blue v=star h=2;
#run;


CERCLE DE CORRELATION CP1 ET CP3

CERCLE DE CORRELATION CP2 ET CP3

GRAPHIQUE EN ARBRE

TABLEAU ANALYSE DISTANCE MINIMALE

TABLEAU DES CP :