Exploration des données d'une l'enquête INSEE sur le patrimoine des français. Analyses uni, bi et multidimensionnelles: AFC, AFCM, classification non-supervisée k-means, CAH} des individus et interprétation des classes.
Le travail présenté décrit le déroulement classique d'une étude marketing dans un service de Gestion de la Relation Client. Les données sont extraites d'une enquête INSEE sur le patrimoine des ménages et des personnes constituant ces ménages. Le service marketing d'une banque ou d'une société d'assurance souhaite mieux connaître la structure socio-économique des ménages en France en rapport à leur patrimoine. Deux objectifs sont poursuivis sur ce type de données :
Seul le premier objectif est poursuivi dans la présente étude avec, en plus, l'idée d'étudier la structure des données afin d'évaluer la faisabilité du 2ème objectif ; ce sera l'objet d'un autre tutoriel.
Les données sont publiques et accessibles sur le site de l'INSEE. Elles sont issues d'une enquête "Patrimoine" réalisée en 2003-2004 qui faisait suite à des enquêtes "Actifs financiers" de 1986 et 1992. L'enquête "Patrimoine" visait une connaissance globale du patrimoine des ménages ainsi que de ses principales composantes. Elle recense tous les différents types d'actifs financiers, immobiliers et professionnels détenus par les individus ainsi que les différents types d'emprunts (immobilier, à la consommation, achat voiture, biens professionnels, ...). Outre la connaissance de souscriptions à différents types de produits, l'enquête interroge aussi les individus sur leur motivation de détention permettant ainsi d'appréhender le comportement patrimonial des ménages. Certaines questions liées à l'héritage, à la donation, à l'historique professionnelle et familiale, à la situation matrimoniale et financière sont ainsi renseignées. Les données, très volumineuses et relativement complexes sont accessibles sous la forme d'une base de données relationnelle compressée en 4 archives: ménages (657 variables pour 9 692 observations), individus (223 variables pour 22 821 observations), produits (89 variables pour 82 413 observations), transmission (29 variables pour 9 239 observations). Des variables clef identifiant le ménage, le numéro de l'individu dans le ménage ainsi que le numéro de produit possédé, permettent leur bonne mise en relation.
Dans cette étude, il a été choisi a priori de prendre pour unité statistique les individus car le produit "assurance vie" cible de l'étude est nominatif. Cette approche est aussi justifiée par le nombre important de personnes vivant seules et aussi par les difficultés à obtenir des informations patrimoniales quantitatives des ménages. C'est surtout sur les individus que cette enquête finalement renseigne.
Les variables se répartissent en différents groupes :
Un travail préliminaire important a donc consisté à construire un "entrepôt de données" fiable et suffisamment renseigné à partir des quatre archives disponibles sur le site de l'INSEE. Certaines variables seront considérées qualitatives (tranches d'âge), beaucoup de modalités sont regroupées pour éviter les trop faibles effectifs de certaines, des variables quasiment constantes sont éliminées. Obtenir des données correctes et fiables est généralement l'étape la plus longue d'une étude statistique ou de science des données, surtout si les sources sont multiples. Pour gagner du temps, tout ce travail de sélection, nettoyage des données est résumé dans un programme écrit en R : lec-trans-patrinsee.R
dans le répertoire http://wikistat.fr/programmes
. Consulter ce programme pour comprendre la logique du déroulement de cette étape.
NB.
dplyr
serait maintenant à privilégier pour réaliser des opérations complexes et volumineuses de data munging en R. Elle est utilisée dans les denrières étapes de préparation des données qui suivent dans ce calepin.Finalement, à l'issue de ce travail préliminaire, l'étude débute avec une base contenant 22821 individus décrits par les 36 variables définies dans le Tableau ci-dessous. Ces données sont accessibles dans le fichier bdd-insee.dat
du répertoire http://wikistat.fr/data
ou dans celui de ce notebook.
Un premier enseignement de cette étude : il aurait été sûrement beaucoup plus efficace, à même coût, d'interroger beaucoup moins de monde avec beaucoup moins de questions mais en prenant le temps (enquêteur en tête à tête) d'obtenir des réponses précises à l'ensemble des questions! C'est malheureusement un comportement excessivement répandu dans beaucoup de disciplines, des Sciences humaines à la Biologie, de viser un niveau de détail beaucoup trop fin au regard de la précision des données ou de la taille de l'échantillon.
Tableau: Identifiant, signification des variables retenues et liste des modalités; les identifiants des variables et modalités ont été choisis courts et mnémotechniques pour simplifier et aider l'interprétation des graphiques.
Identif. | Libellé | Modalités |
---|---|---|
Asvi | Possession ou non assurance vie | AsO, AsN |
AsviR | idem | 1, 0 |
Sexe | Genre | Sh, Sf |
Age | Age | Quantitatif |
Tage | Tranches d'âge | T10 à T90 |
Couple | Vie ou non en couple | CouO CouN |
Vmatri | Statut matrimonial | Vcel Vmar Vveu Vdiv |
Nation | Nationalité | Nfra Nnat Netr |
Diplome | Niveau de diplôme | Dsan, Dcep, Dtec (cap, bep), Dbepc, Dbact Dbacg, Db+2, Db+5 |
Occupa | Type d'occupation | Oact, Oina (foyer, chom, other), Oret |
Work | Niveau professionnel | WctA (cadre, catA), WctB (agent, catB, tech), Wemp, WctC (osp, ouv) |
statut | Statut professionnel | spri, spub, sind |
Herit | Bénéfice ou non d'un héritage | HerO, HerN |
Pere | Présence ou non du père | PerO PerN PerI |
Mere | Présence ou non de la mère | MerO, MerN MerI |
Gparp | Grands parents paternels | GppO GppN GppI |
gparm | Grands parents maternels | gpmO gpmN gpmI |
Jgrav | Evènement grave dans la jeunesse | JgvO JgvN |
Livep | Livret d'épargne | LivO LivN |
Epalo | Epargne logement | EplO EplN |
qpep | Plan d'épargne populaire | qppO qppN |
vmob | Valeurs mobilières | vmoO vmoN |
asdecv | Assurance décès volontaire | asdO asdN |
Retrait | Epargne retraite | RepO RepN |
livdf | Livret défiscalisé | ldfO, ldfN |
pel | Plan épargne logement | pelO, pelN |
cel | Compte épargne logement | celO, celN |
xcapi | Bons de capitalisation | xcpO xcpN |
fepsal | Epargne salarial ou stock options | fesO fesN |
Qpea | Plan épargne action | QpeO QpeN |
Urbani | Niveau d'urbanisation | U1 à U5 |
Zeat | Région de résidence | Zso Zpar Zoue Zne Zmed Zidf Zcen |
Nbenf | Nombre d'enfants | Quantitatif |
Nbenfq | Nombre d'enfants | Nbe0, Nbe1, Nbe2, Nb>3 |
Iogoc | Type d'occupation du logement | Iloc, Iprp (usufruit) |
terre | Possession de terres | terO terN |
dette | Dettes ou emprunts | detO detN |
bdetre | Emprunt achat maison | bemO bemN |
hdetvo | Emprunt voiture | hevO hevN |
Dans beaucoup de sitations et jeux de données, le principal problème rencontré et l'un des plus délicats à prendre en compte, est celui des données manquantes; absences qui peuvent être la conséquence de différentes causes et dont le traitement va différer justement en fonction de cette cause. Une absence de données peut être due à:
Pour simplifier, deux grands types sont à prendre en compte correspondant à différentes stratégies:
L'absence ne dépend pas du contexte, des autres variables, le "trou" est aléatoire (missing at random) dû à une erreur indépendamment des variables observées. Différentes stratégies sont applicables:
Le trou dépend des autres variables. Il n'y a pas de méthode statistique pour répondre à cette situation, c'est souvent le simple "bon sens" qui permet de contourner la difficulté.
C'est ce dernier cas qui est très présent dans les données étudiées.
Une vignette détaille les stratégies plus élaborées d'imputation de données manquantes.
Répondre aux questions en s'aidant des résultats des exécutions.
In [ ]:
bdInsee=read.table("bdd-insee.dat",header=T)
L'analyse élémentaire qui va suivre va montrer que les données de patrimoine contiennent beaucoup de données manquantes mais pas missing at random. Les absences dépendent des autres variables, les conserver biaiserait ou bloquerait les analyses. Comme l'effectif de l'échantillon est important (n=22821), le plus raisonnable est, dans ce cas, de supprimer des observations tout en s'assurant qu'aucun biais n'est ainsi introduit dans les objectifs de l'analyse.
Q Repérer les effectifs des données manquantes pour chaque variable ; repérer également les modalités à faible effectif:
In [ ]:
summary(bdInsee)
In [ ]:
table(bdInsee$Tage,bdInsee$Couple,useNA = "always")
In [ ]:
table(bdInsee$Tage,bdInsee$Work,useNA = "always")
Q Caractériser ces données manquantes et justifier de supprimer ensuite les individus de moins de 20 ans.
In [ ]:
bdInsee2=bdInsee[bdInsee[,"Age"]>19,]
summary(bdInsee2)
Le problème est réglé pour la variable Couple
mails il reste toujours des données manquantes dans la variable Work
.
Q Considérer le graphe suivant. Que dire de l'impact des variables manquantes sur la liaison entre la variable Work
et celle cible Asvi
?
In [ ]:
mosaicplot(table(bdInsee2$Asvi,bdInsee2$Work,useNA = "always"),main="")
Les résultats de la commande ci-dessous révèlent encore des soucis :
In [ ]:
table(bdInsee2$Diplome,bdInsee2$Work,useNA = "always")
Les colonnes <NA>
sont expllicitement nommées.
In [ ]:
cont=table(bdInsee2$Diplome,bdInsee2$Work,useNA = "always")
dimnames(cont)[[1]][9]="Dinc"
dimnames(cont)[[2]][6]="Winc"
cont
Pour évaluer les biais potentiels liés à la présence des ces données manquantes, deux [analyses des correspondances}(http://wikistat.fr/pdf/st-m-explo-afc.pdf) simples entre les variables Work
et Diplome
sont réalisées sans et avec les données manquantes considérées comme des modalités spécifiques Dinc
et Winc
.
In [ ]:
# observations avec données manquantes exclues
library(FactoMineR)
CA(table(bdInsee2$Diplome,bdInsee2$Work))
Données manquantes incluses comme une modalité spécifique en utilisant la table de contingence cont
.
Q Que sont les pourcentage des labels des axes? Comment sont-ils obtenus? Comment les interprétés?
Q Interpréter le graphique.
In [ ]:
CA(cont)
Q Que pouvez vous en déduire? Pensez vous que la prise en compte ou la suppression des observations avec données manquantes (modalités Dinc
et Winc
) a un impact sur l'interprétation de la liaison entre les variables Work
et Diplome
?
Les variables décrivant les ressources et le patrimoine n'ont même pas été prises en compte car elles présentent beaucoup trop de données manquantes : 90 % pour le patrimoine financier, 60 % pour l'autre ; même chose pour les variables relatives aux petits enfants. C'est la faiblesse majeure de cette enquête; cf. la remarque introductive sur la stratégie adoptée pour cette enquête trop "exhaustive" sur certains points; trop d"informations" tue l'information.
Le même type de démarche est entrepris sur les autres variables :
In [ ]:
summary(bdInsee2[,c("Mere", "Pere", "Gparp", "gparm", "Urbani", "Zeat")])
In [ ]:
summary(bdInsee2[,"Tage"])
In [ ]:
table(bdInsee2[,c("Gparp", "gparm")],useNA = "always")
In [ ]:
table(bdInsee2[,c("Mere", "Pere","Gparp")],useNA = "always")
In [ ]:
table(bdInsee2[,c("Urbani", "Zeat")])
Pour aboutir finalement à l'exécution du programme ci-dessous. remarquer que l'utilisaiton de la librairie dplyr
permettrait de sumplifier la syntaxe.
Q Justifier les choix opérés pour construire le data frame patrimInsee
qui servira de base aux analyses à venir.
In [ ]:
library(dplyr)
In [ ]:
patrimInsee=filter(bdInsee2,Diplome!="NA" & Work != "NA" & Work != "Waut" & statut != "NA" & Gparp != "Gppi" &
Gparp != "NA" & Mere != "MerI" & Pere != "PerI" & Jgrav != "NA")
In [ ]:
summary(patrimInsee)
In [ ]:
patProv=patrimInsee
patProv$Tage=recode(patrimInsee$Tage,T90="T80")
patProv$Vmatri=recode(patrimInsee$Vmatri, Vveu="Vsep", Vdiv="Vsep")
patProv$Diplome=recode(patrimInsee$Diplome, Dbacg="Dbac", Dbact="Dbac")
patProv$Urbani=recode(patrimInsee$Urbani, U6="U5")
patProv$Zeat=recode(patrimInsee$Zeat, Znor="Zne",Zest="Zne")
summary(patProv)
Supprimer les niveaux de facteur ou modalités d'effectifs nuls.
In [ ]:
patProv=droplevels(patProv)
summary(patProv)
In [ ]:
patrimInsee=select(patProv,-AsviR,-Nation,-xcapi)
dim(patrimInsee)
In [ ]:
summary(patrimInsee)
Dresser le bilan de ce long travail de préparation visant à obtenir des données fiables, représentatives et suffisament renseignées pour décrire l'ensemble des observations sans perdre de vue l'objectif qui est de s'intéresser au patrimoine des individus, notamment la possession de certains produits financiers comme une assurance vie.
Sauf erreur, il reste alors 11887 observations et 37 variables:
Age, Nbenf
,Asvi, Sexe, Tage, Couple, Vmatri, Diplome, Ocupa, Work, statut, Herit, Pere, Mere, Gparp, gparm, Jgrav, Livep, Epalo, fepsal, vmob, livdf, pel, cel, qpep, asdecv, Retrai, Qpea, Urbani, Zeat, Nbenfq, Iogoc, terre, dette, bdetre, hdetvo
.L'objectif est une prise en compte de toutes les variables retenues afin de mieux apprécier la structure globale des données.
Q Une analyse factorielle multiple des correspondances fournit les résultats ci-dessous. Quelle interprétation tirer des pourcentages sur les labels des axes?
In [ ]:
afcm=MCA(patrimInsee[,-c(3,30)],graph=F)
plot(afcm,habillage="quali",invisible="ind")
Q La lecture des graphiques met en évidence certains artefacts ou correspondances triviales entre certaines modalités. Les identifier.
In [ ]:
afcm=MCA(patrimInsee[,-c(3,30)],quali.sup=c(4,5,12,13,29),graph=F)
plot(afcm,habillage="quali",invisible="ind")
Q Expliquer brièvement les caractéristiques de la dispersion des modalités selon la direction du premier axe.
Q Quelle est l’interprétation de la dispersion selon le 2ème axe ?
Q De quelle matrice est calculée la décomposition en valeur singulière permettant le graphique ci-desous? Quelles sont les coordonnées des individus?
In [ ]:
plot(afcm, choix="ind",habillage="quali",cex=0.2, col.ind=as.integer(patrimInsee$Asvi))
Q Que dire de la position relative des individus rouges vs. les noirs? Que pouvons-nous penser de l’objectif de prévision de la possession d’un produit « assurance vie » ?
Q De façon classique, tout du moins en France, le statisticien récupère de l’exécution précédente une matrice quantitative de représentation vectorielle des individus. Quelle est cette matrice? Il l’utilise pour construire une classification non-supervisée. Pourquoi procéder ainsi?
Q Quel est l’intérêt de la CAH par rapport à kmeans? Quel problème pourrait poser la CAH avec ces données? Comment le contourner? Quelle option faut-il fixer en CAH et quel choix est-il conseillé?
In [ ]:
res.hcpc=HCPC(afcm,nb.clust=6,method="ward",order=F,graph=F)
plot(res.hcpc,choice="bar")
Q La CAH conduit au graphe précédent. Que représente-t-il et quelle conclusion en tirer? Quel graphe n’est pas représenté? Pourquoi?
La dernière étape vise à construire une interprétation des classes. Une démarche systématique consisterait alors à calculer les moyennes (variables quantitatives) ou les effectifs des modalités pour chacune des variables et chacune des classes. C'est plutôt fastidieux. Une autre approche, globale, consiste à recalculer une analyse des correspondances en intégrant la variable classe obtenue.
In [ ]:
color=as.integer(res.hcpc$data.clust$clust)
plot(afcm, choix="ind",habillage="quali",col.ind=color,cex=0.2)
Construire les classes et les représenter.
Q Caractériser brièvement les classes (1,2,4,6) les plus facile à interpréter.
In [ ]:
patriClasse=data.frame(patrimInsee[,-c(3,4,5,12,13,29,30)], "Classe"=as.factor(res.hcpc$data.clust$clust))
afcm=MCA(patriClasse,graph=F)
plot(afcm,habillage="quali",invisible="ind")