Le jeu de données contient des données issu de questionnaires de recensement américain des années 1994 et 1995. Notre variable d’intérêt (outcome) est binaire, c’est le résultat qu’on cherchera pour la prédiction. Il n’y a aucun manquant sur notre jeu de données « data_train » pour cette variable. Elle est considérée comme une valeur, c’est en fait une variable qualitative à 2 modalités.Les autres variables se répartissent en 28 variables qualitatives et 13 variables quantitatives. Notre objectif final est de construire un modèle permettant de prédire si le revenu d’un citoyen américain aléatoire est inférieur ou supérieur à 50000$ en fonction de caractéristiques données, telles que l’âge, le niveau de scolarité, la profession, le sexe, la race, etc.
Dans la première partie du projet, nous nettoyons et explorons le jeu de données en effectuant une analyse préliminaire de l’impact de chaque variable prédictive(appelée aussi variable variable explicative ou covariable indépendante) sur le “revenu” de la variable réponse (appelée aussi variable dépendante).
Dans la deuxième partie, nous utilisons différentes techniques de pré-traitement pour regrouper les variables et les modalités. Ensuite nous faisons une reduction du jeu de données afin de pouvoir faire correctement les predictions.
Dans la troisième partie du projet, nous construisons des modèles prédictifs utilisant différents algorithmes. Nous appliquons les reseaux de neurones, k plus proche voisins, les forêts aléatoires, l’arbre de décision etc … Nous testerons la précision des modèles construits à la fois sur des données d’apprentissage et des données de test-validation.
Cette première partie comporte des analyses statistiques et elle nous aide à comprendre les données. Nous allons explorer ce jeu de données.
Nous effectuons le chargement des données et des packages nécessaires à nos travaux.
Voici la liste exhaustive des variables explicatives :
[1] "age"
[2] "class of worker"
[3] "detailed industry recode "
[4] "detailed occupation recode"
[5] "education"
[6] "wage per hour"
[7] "enroll in edu inst last wk"
[8] "marital stat"
[9] "major industry code"
[10] "major occupation code"
[11] "race"
[12] "hispanic origin"
[13] "sex"
[14] "member of a labor union"
[15] "reason for unemployment"
[16] "full or part time employment stat"
[17] "capital gains"
[18] "capital losses"
[19] "from stocks"
[20] "tax filer stat"
[21] "region of previous residence"
[22] "state of previous residence"
[23] "detailed household and family stat"
[24] "detailed household summary in household"
[25] "migration code-change in msa"
[26] "migration code-change in reg"
[27] "migration code-move within reg"
[28] "live in this house 1 year ago"
[29] "migration prev res in sunbelt"
[30] "num persons worked for employer"
[31] "family members under 18"
[32] "country of birth father"
[33] "country of birth mother"
[34] "country of birth self"
[35] "citizenship"
[36] "business or self employed"
[37] "fill inc questionnaire for veteran's admi"
[38] "veterans benefits"
[39] "weeks worked in year"
[40] "year"
[41] "outcome"
Pour éviter des risques avec la présence d’espaces dans les noms de variables, nous préférons renommer nos variables avec des noms sans espace. Dans notre espace de travail, nous appellerons désormais “Census” le jeu de données correspondant à “data_train” pour conserver l’intégrité de data_train.
La dimension de notre tableau est :
[1] 199526 41
soit, 41 colonnes (variables) et 199526 lignes.
Les types de variables sont :
factor integer
29 12
Comme nous pouvons le voir, nous avons 29 colonnes qui sont qualitatives et 12 qui sont quantitatives. Afin de voir quels sont les modalités de chaque variable factorielle, nous écrivons la fonction levels_factors(), qui prend comme argument une trame de données, et que nous appliquons à notre jeu de données Census (Voir Annexes)
Le nombre de modalités pouvant être très important et rendant difficile l’analyse, nous serons certainement amenés à regrouper des modalités de certaines variables, ou des variables entre elles.
Nous observons que certaines variables reconnues comme quantitatives sont en fait des variables qualitatives (ce sont des codes pour désigner l’appartenance à une classe) :
detailed industry recode
detailed occupation recode
business or self employed
veterans benefits
La variable “year” constitue un cas un peu particulier, puisque c’est une variable temporelle, ici reconnue comme une variable quantitative alors qu’on devrait elle aussi la considérer comme une variable qualitative avec deux modalités. Nous allons changer les types de ces variables.
Pour les autres variables quantitatives, le choix de discrétiser ou non est plus ouvert, nous expliquerons plus loin nos choix.
après ces transformations, nous avons désormais :
factor integer
34 7
soit 34 colonnes qui sont catégorielles (qualitatives) et 7 qui sont entières (quantitatives).
Voici la distribution des données pour la variable outcome
nombre de colonne: 41
nombre de ligne: 199526
proportion de high salary: 6.2%
proportion de low salary: 93.8%
La proportion de salaire faible (-50 000$) est très importante, nos données ne sont pas équilibrées par rapport à cette variable outcome. Ce constat est important et nous en tiendrons compte lorsque nous formerons nos modèles.
Nous allons analyser les données manquantes, et les variables les plus concernées par ces manquants. Voici le nombre total de valeurs manquantes :
Nombre de données manquantes: 415836
[ 415836 / ( 199526 x 41 ) ] = 5.083218 %
Ce nombre de cellules vides dans notre jeu de données est assez faible si on le compare au nombre total de cellules.
Mesurons le nombre de ligne avec au moins une données manquantes :
FALSE TRUE
104452 95074
Nous avons 52.35007 % de lignes avec une valeur manquante
Soit 104452 lignes fausse avec au moins une valeur manquante et 95074 lignes sans valeur manquante. Ce qui est très important.
Observons la répartition de ces manquants par variables :
| x | |
|---|---|
| age | 91 |
| class_of_worker | 9 |
| detailed_industry_recode | 52 |
| detailed_occupation_recode | 47 |
| education | 17 |
| wage_per_hour | 1224 |
| enroll_in_edu_inst_last_wk | 3 |
| marital_stat | 7 |
| major_industry_code | 24 |
| major_occupation_code | 15 |
| race | 5 |
| hispanic_origin | 10 |
| sex | 2 |
| member_of_a_labor_union | 3 |
| reason_for_unemployment | 6 |
| full_or_part_time_employment_stat | 8 |
| capital_gains | 130 |
| capital_losses | 112 |
| from_stocks | 1479 |
| tax_filer_stat | 6 |
| region_of_previous_residence | 6 |
| state_of_previous_residence | 51 |
| detailed_household_and_family_stat | 38 |
| detailed_household_summary_in_household | 8 |
| migration_code_changeinmsa | 10 |
| migration_code_change_in_reg | 9 |
| migration_code_move_with_in_reg | 10 |
| live_int_his_house_1_year_ago | 3 |
| migration_prevres_in_sunbelt | 4 |
| num_persons_worked_for_employer | 7 |
| family_members_under_18 | 5 |
| countryofbirthfather | 43 |
| country_of_birthmother | 43 |
| country_of_birthself | 43 |
| citizenship | 5 |
| business_or_selfemployed | 3 |
| fill_inc_questionnaire_for_veterans_admi | 3 |
| veterans_benefits | 3 |
| weeks_worked_in_year | 53 |
| year | 2 |
| outcome | 2 |
Voici les variables comportant des valeurs manquantes et le nombre de valeurs manquantes pour chacunes d’elles :
On a donc 8 variables avec des données manquantes.
99665 valeurs pour chaques variables “migration_prevres_in_sunbelt”,“migration_code_changeinmsa”, “migration_code_move_with_in_reg”,“migration_code_move_with_in_reg”. En cherchant à comprendre pourquoi on observe exactement le même nombre de manquants sur ces 4 variables, on observe que toutes les données de l’année 1995 sont manquantes pour ces variables.
686 valeurs pour la variable “state_of_previous_residence” soit (686/ 199526) soit 0.34% des donneées de la variable state_of_previous_residence
6821 valeurs pour la variable countryofbirthfather
6170 valeurs pour la variable country_of_birthmother
3499 valeurs pour la variable country_of_birthself
A ce stade, nous nous limitons à coder les NA en “inconnu”. A part pour les 4 premières variables citées ci dessous, c’est une proportion de manquants relativement faible, et nous pouvons en faire une modalité. Par la suite, on verra comment gérer la modalité Inconnu par rapport à notre objectif de prédiction d’outcome.
=============================================================================================
Statistic N Min Pctl(25) Median Mean Pctl(75) Max St. Dev.
---------------------------------------------------------------------------------------------
age 199,526 0 15 33 34.502 50 90 22.351
wage_per_hour 199,526 0 0 0 54.948 0 9,999 274.167
capital_gains 199,526 0 0 0 430.726 0 99,999 4,666.440
capital_losses 199,526 0 0 0 36.389 0 4,608 268.271
from_stocks 199,526 0 0 0 198.124 0 99,999 1,965.004
num_persons_worked_for_employer 199,526 0 0 1 1.951 4 6 2.364
weeks_worked_in_year 199,526 0 0 8 23.106 52 52 24.399
---------------------------------------------------------------------------------------------
On peut remarquer qu’aucune des variables n’est constante. De telles variables n’auraient aucun intérêt pour l’analyse. Par ailleurs, les 4 variables “wage_per_hour”, “capital_gains”, “capital_losses” et “from_stock” sont distribuées de façon très déséquilibrée avec premier quartile = 3ème quartile = 0. Ce qui signifie un très grand nombre de valeur à 0. On peut supposer que les valeurs max à 9999, ou 99999 ne sont pas de vrais max mais des maxs autorisés par le nombre de digit disponibles.
On commence par visualiser les distributions des variables via des diagrammes en barres et des histogrammes. Pour les variables ayant un grand nombre de valeurs distinctes, on les représentera via des histogrammes formant des classes. Les variables “Age” et “num_persons_worked_for_employer” ont une distribution relaitvement équilibrée. Les variables “wage_per_hour”, “capital_gains”, “capaital_losses”, “from_stocks” sont très déséquilibrées, avec énormément d’individu à 0, par rapport au nombre d’individu avec des valeurs supérieures à 0. Enfin, la variable “weeks_worked_in_year” présente beaucoup d’individu à 0 et à 52, et une proportion beaucoup plus faible se répartissant entre ces deux bornes. Pour terminer sur l’analyse univariée sur variable quantitative, nous proposons les boites à moustaches mais elles n’apportent pas grand chose par rapport à ce qui a déjà été dit.
Nous avons vu plus haut que certaines variables ont beaucoup de modalités, on va voir ici les modalités rares via des diagrammes en barres (on pourrait de façon équivalente visualiser cette information sous forme de tableaux). Les modalités rares pouvant avoir un impact défavorable sur l’efficacité de certains modèles, il est important de les identifier (en vue d’éventuels regroupements par la suite).
Mais nous ne pouvons envisager des regroupements qu’après avoir vérifié que ces regroupements sont pertinents vis à vis de notre variable réponse outcome, ce que nous abordons dans l’analyse bivariée. A ce stade, nous en restons donc aux constats : il y a des variables avec beaucoup de modalités et certaines modalités rares, on devra en tenir compte (traitement éventuels) si on veut utiliser ces variables pour la prédiction.
Dans le cadre de notre objectif de prédiction, il convient prioritairement d’étudier le lien entre les variables explicatives et la réponse, mais on cherchera aussi par la suite à identifier des liens entre les variables explicatives
Nous pouvons comparer les boites à moustaches de nos données quantitatives en fonction d’outcome. Commençons par les variables dont on a vu plus haut qu’elles étaient très déséquilibrées (“wage_per_hour”, “capital_gains”, “capaital_losses”, “from_stocks”). Il est dificile de conclure sur la base de cette représentation, il est en de même pour les autres (“capital_gains”, “capaital_losses”, “from_stocks”) dont nous ne donnons pas la représentation.La valeur “0”, est très fortement représentée, que cela soit pour outcome “-50000” et pour outcome “+50000”.
Avec les variables “Age”,“weeks_worked_in_year” et “num_persons_worked_for_employer” qui ont une distribution relaitvement équilibrée, on a une meilleure lisibilité :
Ainsi, pour l’age, on observe un écart qui semble significatif entre les individus avec outcome “-50000” et avec outcome “+50000”. On voit qu’en moyenne les individus ont un peu plus de 30 ans (33,7) avec outcome “-50000” etun peu moins de 50 ans (46,4)avec outcome “+50000”.
Pour “num_persons_worked_for_employer”, le lien semble marqué mais on ne pourra conclure sur la force de ce lien qu’après un calcul statistique.
Parmi les individus avec outcome = +50000, il y en a une très forte proportion avec “weeks_worked_in_year” = 52. Dès maintenant, on peut supposer que cette variable jouera un rôle dans la prédiction. La présentation suivante est complémentaire à la boxplot :
Nous pouvons imaginer une explication logique à cette distribution. Les individus avec outcome à +50000 sont très majoritairement des individus travaillant 52 semaines. Mais il y a aussi beaucoup de personnes travaillant 52 semaines et qui ont un outcome <50000. Ils ont surement un travail peu qualifié et peu rémunérateur. Les individus travaillant 0 semaine par an ont très majoritairement un outcome inférieur à 50k, mais il en existe qui ont un outcome > 50000. Ces derniers pourraient être des rentiers.
Les boites à moustache ne permettant pas de conclure quant à la force des éventuelles liaisons, voici les rapport de corrélation entre les variables quantitatives et outcome :
Nous trouvons la variable “weeks_worked_in_year” comme ayant le lien le plus fort avec outcome, suivi de “capital_gains”, “num_persons_worked_for_employer”, et “from_stocks”. Une ACP complétera ultérieurement cette approche, mais cela permet de pointer des variables pouvant jouer un rôle dans la prédiction.
“Capital_losses” et “wage_per_hour” sont moins liés à “outcome”.
Etudions un peu plus le cas de “Age” avec un graphique “proportion de outcome +50K = f(age)” :
On a traité jusqu’ici l’âge comme une variable quantitative mais son traitement implique souvent de la passer en classes. Par ailleurs, dans beaucoup de domaines, l’age ne réagit pas de façon corrélée à la mesure (vitesse de course faible pour enfants et vieillards). Et dans le domaine médical, les âges faibles et très grands constituent des populations exposées à certains risques et sont regroupés. Notre courbe montre un peu la même choses, et cela nous dit que nous avons tout intérêt à réaliser des classes :
probabilité nulle à quasi nulle d’observer outcome +50K pour les âges compris dans [0,18]
probabilité intermédiaire d’observer outcome +50K pour les âges compris dans [19,33] et [63,90]
probabilité forte (en comparaison à l’ensemble des données) d’observer outcome +50K pour les âges compris dans [34,62]
Cette transformation de données est une transformation “métier”, on réalise un découpage à la lumière de notre lecture du lien entre la variable “age” et la variable “outcome” et de notre objectif.On ajoute donc une variable qualitative “groupedeage”.
[1] "jusqu'à 18 ans" "19 à 33 ans" "34 à 62 ans" "63 ans et plus"
Mesurons le lien entre les variables qualitatives (auxquelles nous avons donc ajouté “groupedeage” et “outcome” avec le V de Cramer (pour information, nous préférons le V de Cramer au test du Khi-deux car il est plus approprié avec un très grand nombre d’individus) :
| x | |
|---|---|
| year | 0.0143384 |
| live_int_his_house_1_year_ago | 0.0259757 |
| migration_prevres_in_sunbelt | 0.0270173 |
| region_of_previous_residence | 0.0274515 |
| fill_inc_questionnaire_for_veterans_admi | 0.0280491 |
| reason_for_unemployment | 0.0282018 |
| state_of_previous_residence | 0.0316417 |
| migration_code_move_with_in_reg | 0.0364233 |
| migration_code_change_in_reg | 0.0364775 |
| migration_code_changeinmsa | 0.0375418 |
| citizenship | 0.0427754 |
| country_of_birthself | 0.0585756 |
| race | 0.0601518 |
| enroll_in_edu_inst_last_wk | 0.0648959 |
| hispanic_origin | 0.0681777 |
| country_of_birthmother | 0.0707903 |
| countryofbirthfather | 0.0720188 |
| member_of_a_labor_union | 0.0776977 |
| business_or_selfemployed | 0.0786842 |
| veterans_benefits | 0.1443710 |
| full_or_part_time_employment_stat | 0.1583704 |
| sex | 0.1583786 |
| family_members_under_18 | 0.1592051 |
| marital_stat | 0.1993344 |
| detailed_household_summary_in_household | 0.2278732 |
| tax_filer_stat | 0.2314396 |
| detailed_household_and_family_stat | 0.2417388 |
| class_of_worker | 0.2593977 |
| major_industry_code | 0.2804275 |
| detailed_industry_recode | 0.2945807 |
| major_occupation_code | 0.3665681 |
| education | 0.3897944 |
| detailed_occupation_recode | 0.4380730 |
Voyons le graphique Parmi les variables qualitatives, les variables les plus liées à outcome (on donne ici celles pour lesquelles le V de cramer est supérieur à 0,19) sont : detailled_occupation_recode, education, major_occupation_code, detailed_industry_recode, major_industry_code, class_of_worker, detaille_household_and_family_stat, groupedeage, tax_filler_stat, detailled_household_summary_in_household, marital_stat.
Inversement, des variables comme year, live_int_his_house_1_year_ago (par exemple) sont très peu lièes à outcome.
Ces analyses pourront être utiles en vue d’une réduction du nombre de colonnes, les variables les moins liées à outcome pourront être écartées sans impact ou avec un impact négligeable sur la qualité de la prédiction d’outcome.
Des liaisons trop fortes entre variables explicatives peuvent conduire à de grande instabilité dans les modèles. L’analyse des liaisons entre variables explicatives permettra de détecter les couples de variables les plus liées. Nous concervons la variable “age” comme valeur numérique, même si nous avons montré que pour la modélisation, la variable “groupedeage” sera plus pertinente.
Voici la matrice des corrélations :
Nous n’observons pas de fortes corrélations, si ce n’est pour le couple “weeks_worked_in_year” et “num_persons_worked_for_employer”. Ci dessous, avec les coefficients de Spearman (plus adpaté si nos variables ne suivent pas une loi normale, ce qui est le cas), nous concluons de la même manière.
Voici la matrice des corrélations avec coefficient de spearman :
De la même façon, on détermine les V de Cramer entre les variables explicatives qualitatives.
Nous observons de très fortes liaisons entre :
detailed_industry_recode et major_industry code : c’est normal, par construction, ces données sont liées par une arborescence. On peut donc considérer qu’il y a redondance.
idem entre major_occupation_code et detailled_occupation_code et pour region_of_previous_residence et state_of_previous_residence
year et les 4 variables commençant par migration… : nous avons vu plus haut que cela s’explique par l’absence de données pour une valeur de year, et la présence pour l’autre valeur de year.
et des liaisons fortes entre :
les variables commençant par migration… et live_in_this_house_previous_year
country_birth_self avec country of birth_mother et father
ce qui est logique dans les deux cas, et qui dénote aussi une forme de redondance dans l’information.
Ces éléments nous donnent des indications pour supporter nos analyses ACM à venir.
Nous effectuons une ACP sur les données quantitatives (hormis l’age) en considérant outcome comme une variable supplémentaire quantitative.
On voit que la modalité -50000 est plus lié à la dimension 1
Les éléments les plus intéressants qui ressortent de l’ACP nous montre que :
la première composante est essentiellement liée à num_persons_worked_for_employer, et weeks_worked_in_year
la deuxième à capital_gains et from_stocks
la troisème à capital_losses
Enfin, sur chacune de ces trois composantes, les modalités d’outcome ont des coordonnées significativement différentes, respectivement (-0.099, -0.070, -0.018) pour -50k et (1.496, 1.059, 0.278) pour +50ke. Les cos2 des deux premières composantes sont assez élevés (0.64 et 0.321), mais faible pour la troisième.
Nous pouvons conclure pour notre prédiction que les 4 variables quantitatives num_persons_worked_for_employer, et weeks_worked_in_year,capital_gains et from_stocks sont les plus susceptibles de contribuer à la qualité d’un modèle de prédiction.
wage_per_hours et capital_losses contribuent peu à la variable réponse outcome mais capital_losses est proche de outcome. C’est une variable rare qui correspond à une perte de capital et qui necessite d’avoir un capital financier.En majorité, ce sont les individus avec un revenu confortable qui possèdent un capital financier.
Nous pouvons envisager, si la modélisation nous contraint dans le nombre de variables, de :
choisir entre num_persons_worked_for_employer, et weeks_worked_in_year, puisque ces deux variables sont très liées,
créer une variable composite (capital_gains + from_stocks) puisque ces deux variables correspondent à des revenus et agissent dans le même sens vis à vis d’outcome.
On réalise l’ACM en mettant la variable outcome en variable illustrative.
On gère les modalités rares (fréquence relative <5%) en effectuant de la ventilation.
Voici le graphe des individus
Voici le graphe des variables avec outcome Voici le graphe avec les modalités avec “-50000” et “+50000”
L’exploitation visuelle n’est pas facile du fait du nombre important de variables et du nombre important de modalités. Néanmoins, et en s’appuyant sur les détails que nous mettrons en annexe et des labels en rouge qui contribuent le plus, on fait apparaître un écart important sur la dimension 1 entre outcome +50k et outcome -50k.
Les contributions les plus fortes à cette dimension viennent de :
On peut noter que la dimension 2 est liée à des variables peu liées à outcome. On retrouve ce qu’on a déjà vu plus haut : forte liaison entre les variables en migration… et year, du à des manquants sur une année. Il y a d’autres variables liées elles aussi à un changement de lieu (region et state of previous residence, live_in_this_house_one_year_ago).
La faible repréentativité des premières dimensions limite la portée de cette acm, mais couplée avec les résultats trouvés sur les liaisons plus haut, on peut conclure que, en vue d’une modélisation, on peut retenir parmi les variables qualitatives :
-la variable “detailled_occupation_recode”et nous n’utiliserons pas major_occupation_code du fait de leur liaison -la variable “detailed_industry_recode”, et nous n’utiliserons pas major_industry_code du fait de leur liaison -la variable “class_of_worker”
Si notre modèle doit être amélioré, des variables comme : “veterans_benefits”, “full_or_part_time_employment_stat”, “family_members_under_18” et “sex” pourront dans un deuxième temps être envisagés.
Pour les besoins de l’étude et pour illustrer des regroupements de modalités, nous continuons de travailler sur la modalité “country_of_birth_self”. Nous avons vu qu’elle était fortement liée à country_of_birth_mother et father. On peut choisir d’utiliser “country_of_birth_self” uniquement, sans impacter ou de façon négligeable la modélisation.
Ces variables sont plutôt logique car il est très rare d’avoir un revenu élevé avant 24 ans et sans un diplome universitaire. La classe de travail et le secteur sont aussi important car il est moins rare d’avoir un revenu supérieur à +50k$ dans le domaine de la finance que dans le batiment. De même il est logique de prendre en compte le statuts marital,full_or_part_time_employment_stat,“full_or_part_time_employment_stat”, "family_members_under_18 ou le sexe qui sont des sources d’inégalités salariales entre hommes et femmes, mères célibataires et couples sans enfants, travail à temps partiel…
Notons que les variables pour lesquels nous avions des manquants semblent avoir un intérêt limité par rapport à notre objectif de modélisation.
Afin de faciliter les analyses, nous effectuons des regroupements de modalités. Nous proposons de travailler sur quelques variables seulement On choisit des variables où il y a une logique apparente de regroupement (approche “métier”). On s’assure au préalable que ces regroupements ne vont pas nous faire perdre de l’information, et que la distribution d’outcome est homogène parmi les différentes modalités qu’on souhaite regrouper.
Dans le cas de la variable “country of birth self” par exemple, on peut représenter le pourcentage de outcome +50 K pour s’assurer qu’on fait des regroupements pertinents :
-50000 +50000 Total
Cambodia 98.130841 1.869159 100.000000
Canada 90.275762 9.724238 100.000000
China 92.494929 7.505071 100.000000
Columbia 96.551724 3.448276 100.000000
Cuba 92.210767 7.789233 100.000000
Dominican-Republic 98.670606 1.329394 100.000000
Nous observons que les groupes au sens géographique sont relativement homogènes concernant la variable outcome. On peut donc procéder au regroupement avec pas ou peu de perte d’information (Asie de l’est, Asie Centrale, Amérique centrale, Amérique du sud, Europe de l’est et Europe de l’ouest).
Création de nouveaux labels
[1] " Central-America" " Central-Asia" " East-Asia"
[4] " Europe-East" " Europe-West" " Outlying-US"
[7] " South-America" " United-States"
De la même manière, nous effectuons des regroupements sur le niveau d’education, pour limiter fortement le nombre de modalités avec pas ou peu de perte d’informations.
Création de nouveaux labels
[1] "CC-grad" "College" "grad-school" "HS-grad" "no-HS"
Nous pouvons analyser plus finement la distribution de outcome selon le niveau d’éducation avec un graph de type mosaïc plot :
On trouve une sur-représentation de +50K pour les niveaux d’éducation CC-grad, College et Grad-school (et une sous représentation pour les HS-grad et les no-HS). Une liaison entre les variables outcome et edcu_level semble évidente, c’est quelque chose qu’on a déjà vu plus haut, mais avec ce graphique, on valide facilement des regroupements de modalités.
On peut définir une variable “extra_income” comme étant le montant des gains de capitaux (capital_gains) et des actions(from_stock), et discrétiser cette variable en s’intéressant uniquement aux trois modalités suivantes : extra_income inférieur à 0, nul, ou supèrieur à 0. Regardons la répartition outcome +50K/-50K pour ces trois modalités :
Création de nouveaux labels
[1] "none" "positive"
En fait, nous n’observons que des gains nuls ou positif, ce qui est assez logique puisque nous n’avions pas de valeur négative pour les deux composantes de cette nouvelle variable.
Cette répartition nous dit que les gens qui ont des revenus de capitaux, ont plus souvent des revenus du travail supérieurs à 50K$ que les gens qui n’ont pas de revenus de capitaux.
Sur le choix des variable quantitatives, nous pouvons conclure pour notre prédiction que nous garderons 4 variables quantitatives:
-num_persons_worked_for_employer
-weeks_worked_in_year
-capital_gains et from_stocks transformées en variable qualitative “extra_outcome”
Sur le choix des variables quantitatives, nous pouvons conclure pour notre prédiction que nous garderons 13 variables qualitatives :
la variable “groupedeage”
la variable “detailled_occupation_recode”
la variable “marital_stat”
Si notre modèle doit être amélioré, les variables ci-dessous pourront venir en supplément des variables ci dessus : - “veterans_benefits” - “full_or_part_time_employment_stat” - “family_members_under_18” - “sex” - “country_of_birth_self” transformée en “native_region”
Nous gardons finalement 16 variables explicatives et outcome, donc 17 variables pour commencer la modélisation.
Nous avons créé un nouveau jeu de donnée data_Census
La dimension de notre tableau est :
199526 17
soit 17 variables et 199526 lignes
Les types de variables sont :
factor integer
15 2
Nonbre de haut et faible salaires :
12380 lignes avec outcome = +50 000$ pour data_Census
187146 lignes avec outcome = -50 000$ pour data_Census
Pour détecter un sur-apprentissage, nous allons diviser les données en deux sous-ensembles, données apprentissage et test-validation. Pour cela, il suffit de découper notre jeu de données en deux (soit 30% pour les données de test-validation et 70% pour l’apprentissage).
Nous allons vérifier les colonnes avec des valeurs manquantes NA
[1] 0
Ici, nous avons aucune lignes avec des valeurs manquantes.
Ensuite, nous divisons l’ensemble de données apprentissage et Test.
Avant nous avions 199526 lignes. Maintenant, nous avons pour les données small_train_data:
155145 lignes pour la partie données d'apprentissage
Nous avons pour les données validation_data:
44381 lignes pour la partie données de test
Regardons en détail le jeu de donnée small_train_data et validation_data
9661 lignes avec outcome = +50 000$ pour small_train_data
2719 lignes avec outcome = +50 000$ pour validation_data
145484 lignes avec outcome = -50 000$ pour small_train_data
41662 lignes avec outcome = -50 000$ pour validation_data
Nous allons créer une petit ensemble de donnée pour reduire le nombre de lignes afin de minimiser les temps d’exécution pour plusieurs modèles. Le plus petit ensemble de données d’apprentissage “balanced_small_train_data” est échantillonné de façon aléatoire.
Nous avons 19322 lignes sur ce jeu de donnée.
Nous avons 9661 lignes avec outcome -50 000$ sur ce jeu de donnée.
Nous avons 9661 lignes avec outcome +50 000$ sur ce jeu de donnée.
Maintenant on va choisir quel algorithme est le plus précis pour prédire la variable réponse outcome dont les modalités sont “-50000” et “+50000”. Outcome indique que le citoyen gagne plus ou moins de 50K$ par an. On va utiliser 8 algorithmes et comparer les performances de ces modèles.
1.Stochastic Gradient Boosting
2.Random Forests
3.Decision Trees CART
4.Naives Bayes
5.Support vector machine lineaire
6.Support vector machine radial
7.K Plus proche voisins KNN
8.Neural Networks
Nous allons utiliser Le Grid search avec traincontrol. La fonction traincontrol va diviser l’échantillon original en k échantillons et le répeter k fois l’apprentissage du modèle en faisant des combinaisons de façon aléatoire.
La méthode sera le Grid search qui permet l’optimisation avec des hyperparameters de la prédiction. Le Grid search permet de tester une série d’hyperparamètres et de comparer les performances de prédiction pour déduire le meilleur paramétrage.
Le Stochastic Gradient Boosting utilise une méthode d’agrégation de modèles avec le boosting. Cet algorithme utilise le gradient de la fonction de perte pour le calcul des poids des individus lors de la construction de chaque nouveau modèle.
Stochastic Gradient Boosting
method = ‘gbm’
Type: Regression, Classification
Tuning parameters:
n.trees (# Boosting Iterations)
interaction.depth (Max Tree Depth)
shrinkage (Shrinkage)
n.minobsinnode (Min. Terminal Node Size)
Required packages: gbm, plyr
A model-specific variable importance metric is available.
Nous utilisons le paramètre number=2 et pas de répétitions car le temps d’execution est trop long.
Time difference of 31.22752 mins
Voici le resultat de l’apprentissage :
Stochastic Gradient Boosting
155145 samples
16 predictor
2 classes: '-50000', '+50000'
No pre-processing
Resampling: Cross-Validated (2 fold)
Summary of sample sizes: 77573, 77572
Resampling results across tuning parameters:
n.trees Accuracy Kappa
950 0.9494924 0.4534875
1050 0.9495504 0.4564001
1150 0.9495311 0.4570269
1200 0.9496084 0.4594981
1300 0.9496213 0.4571991
1400 0.9494666 0.4575853
Tuning parameter 'interaction.depth' was held constant at a value of
2
Tuning parameter 'shrinkage' was held constant at a value of
0.15
Tuning parameter 'n.minobsinnode' was held constant at a value of 18
Accuracy was used to select the optimal model using the largest value.
The final values used for the model were n.trees = 1300,
interaction.depth = 2, shrinkage = 0.15 and n.minobsinnode = 18.
Nous avons une faible erreur d’apprentissage.
Voici les paramètres choisis :
Best parameter pour n.trees est : 1300
Best parameter pour shrinkage est : 0.15
Best parameter pour minobsinnode est :
Best parameter pour interaction.depth est : 2
Nous regardons quelle covariable influnce le plus le modèle.
gbm variable importance
only 20 most important variables shown (out of 184)
Overall
extra_outcomepositive 100.000
weeks_worked_in_year 74.885
sex Male 60.730
educ_levelCollege 55.259
detailed_occupation_recode2 42.773
educ_levelgrad-school 28.249
detailed_occupation_recode7 28.143
detailed_occupation_recode11 27.627
groupedeage34 à 62 ans 27.568
num_persons_worked_for_employer 22.981
detailed_occupation_recode4 16.539
detailed_household_and_family_stat Householder 16.065
class_of_worker Self-employed-incorporated 12.648
detailed_occupation_recode5 6.516
detailed_occupation_recode18 5.793
detailed_occupation_recode17 5.585
groupedeage19 à 33 ans 5.425
detailed_occupation_recode8 5.155
educ_levelHS-grad 4.379
detailed_occupation_recode16 4.272
La variable qui influence le plus est extra_outcome
Voici le resultat de la validation :
Accuracy Kappa
0.9520516 0.4716073
Confusion Matrix and Statistics
Reference
Prediction -50000 +50000
-50000 41212 1678
+50000 450 1041
Accuracy : 0.9521
95% CI : (0.95, 0.954)
No Information Rate : 0.9387
P-Value [Acc > NIR] : < 2.2e-16
Kappa : 0.4716
Mcnemar's Test P-Value : < 2.2e-16
Sensitivity : 0.9892
Specificity : 0.3829
Pos Pred Value : 0.9609
Neg Pred Value : 0.6982
Prevalence : 0.9387
Detection Rate : 0.9286
Detection Prevalence : 0.9664
Balanced Accuracy : 0.6860
'Positive' Class : -50000
Nous avons une faible taux d’erreur de validation et elle est équivalant à l’erreur d’apprentissage.
Le kappa est modéré donc accord modéré sur la prédiction par rapport à une prédiction au hasard.
| -50000 | +50000 | |
|---|---|---|
| -50000 | 41212 | 1678 |
| +50000 | 450 | 1041 |
Notre classificateur est testé avec un jeu de 155145 lignes outcome, dont 145484 sont des outcome avec “- 50 000” et et les 9661 autres sont des outcome avec “+50 000”.
Pour cela, on veut savoir :
La matrice de confusion suivante se lit alors comme suit :
horizontalement, sur les 41662 données outcome “- 50 000” ,41662 ont été estimés par le système de classification comme “-50 000” et 373 ont été estimés comme “+ 50 000” (faux-négatifs),
horizontalement, sur les 1491 données outcome “+ 50 000” , 450 ont été estimés comme “-50 000” (faux-positifs) et 1041 ont été estimés comme “+ 50 000”
verticalement, sur les 41662 outcome estimés par le système comme “- 50 000”, 450 sont en fait des outcome “+ 50 000”,
verticalement, sur les 2719 outcome estimés par le système comme “+ 50 000”, 1041 sont en fait des outcome “- 50 000”.
| Durée | Accuracy | Taux.Erreur | Recall | Precision | |
|---|---|---|---|---|---|
| Stochastic Gradient Boosting | 31.22752 mins | 0.9520516 | 0.0479484 | 0.9891988 | 0.9608767 |
Nous avons une bonne performance de prediction pour ce modèle.
On va utiliser les fonctions sélectionnées dans le modèle rpart pour l’algorithme CART car il est facile d’utilisation pour un arbre binaire. Et pour la variable outcome la prédiction est binaire.
CART
method = ‘rpart2’
Type: Regression, Classification
Tuning parameters:
Required packages: rpart
Nous utilisons le paramètre number=10 et avec répétitions repeats=5 car le temps d’execution est rapide.
Time difference of 8.034623 mins
Voici le resultat de l’apprentissage :
CART
155145 samples
16 predictor
2 classes: '-50000', '+50000'
No pre-processing
Resampling: Bootstrapped (25 reps)
Summary of sample sizes: 155145, 155145, 155145, 155145, 155145, 155145, ...
Resampling results across tuning parameters:
maxdepth Accuracy Kappa
1 0.9442048 0.3362598
2 0.9442048 0.3362598
3 0.9442048 0.3362598
4 0.9442048 0.3362598
5 0.9442470 0.3363163
6 0.9445466 0.3362382
7 0.9445466 0.3362382
8 0.9445466 0.3362382
9 0.9445466 0.3362382
10 0.9445466 0.3362382
11 0.9445466 0.3362382
12 0.9445466 0.3362382
13 0.9445466 0.3362382
14 0.9445466 0.3362382
15 0.9445466 0.3362382
16 0.9445466 0.3362382
17 0.9445466 0.3362382
18 0.9445466 0.3362382
19 0.9445466 0.3362382
20 0.9445466 0.3362382
21 0.9445466 0.3362382
22 0.9445466 0.3362382
23 0.9445466 0.3362382
24 0.9445466 0.3362382
25 0.9445466 0.3362382
26 0.9445466 0.3362382
27 0.9445466 0.3362382
28 0.9445466 0.3362382
29 0.9445466 0.3362382
30 0.9445466 0.3362382
Accuracy was used to select the optimal model using the largest value.
The final value used for the model was maxdepth = 6.
Nous avons une faible erreur d’apprentissage.
Voici les paramètres choisis :
Best parameter pour maxdepth est : 6
Voici notre arbre. On a utilisé la représentation graphique avec la fonction fancyRpartPlot
La variable qui influence le plus est detailed_occupation_recode
Voici le resultat de la validation:
Accuracy Kappa
0.9468692 0.3542823
Confusion Matrix and Statistics
Reference
Prediction -50000 +50000
-50000 41311 2007
+50000 351 712
Accuracy : 0.9469
95% CI : (0.9447, 0.9489)
No Information Rate : 0.9387
P-Value [Acc > NIR] : 1.562e-13
Kappa : 0.3543
Mcnemar's Test P-Value : < 2.2e-16
Sensitivity : 0.9916
Specificity : 0.2619
Pos Pred Value : 0.9537
Neg Pred Value : 0.6698
Prevalence : 0.9387
Detection Rate : 0.9308
Detection Prevalence : 0.9760
Balanced Accuracy : 0.6267
'Positive' Class : -50000
Nous avons une faible taux d’erreur de validation et elle est équivalant à l’erreur d’apprentissage.
Le kappa est faible donc accord faible sur la prédiction par rapport à une prédiction au hasard.
| -50000 | +50000 | |
|---|---|---|
| -50000 | 41311 | 2007 |
| +50000 | 351 | 712 |
La matrice de confusion suivante se lit alors comme suit :
horizontalement, sur les 43318 données outcome “- 50 000” , 41311 ont été estimés par le système de classification comme “-50 000” et 2007 ont été estimés comme “+ 50 000” (faux-négatifs),
horizontalement, sur les 1063 données outcome “+ 50 000” , 351 ont été estimés comme “-50 000” (faux-positifs) et 712 ont été estimés comme “+ 50 000”
verticalement, sur les 41662 outcome estimés par le système comme “- 50 000”, 351 sont en fait des outcome “+ 50 000”,
verticalement, sur les 2719 outcome estimés par le système comme “+ 50 000”, 712 sont en fait des outcome “- 50 000”.
| Durée | Accuracy | Taux.Erreur | Recall | Precision | |
|---|---|---|---|---|---|
| Classification Tree CART | 8.034623 mins | 0.9468692 | 0.0531308 | 0.9536682 | 0.9915751 |
L’arbre de classification possède un temps d’exécution rapide avec bon taux de précison de la prédiction.
Nous allons utiliser random Forest qui utilise le bagging et donc prend en compte la majorité des variables.
Random Forest
method = ‘rf’
Type: Classification, Regression
Tuning parameters:
Required packages: randomForest
A model-specific variable importance metric is available
Nous utilisons le paramètre number=2.
Time difference of 14.98683 mins
Voici le resultat de l’apprentissage :
Random Forest
19322 samples
16 predictor
2 classes: '-50000', '+50000'
No pre-processing
Resampling: Cross-Validated (2 fold)
Summary of sample sizes: 9661, 9661
Resampling results across tuning parameters:
mtry Accuracy Kappa
8 0.8564848 0.7129695
12 0.8566919 0.7133834
16 0.8559155 0.7118308
20 0.8549840 0.7099677
Accuracy was used to select the optimal model using the largest value.
The final value used for the model was mtry = 12.
Nous avons une plus grande erreur d’apprentissage sur ce modèle par rapport aux premiers.
Voici les paramètres choisis :
Best parameter pour mtry est : 12
Accuracy Kappa
0.8341407 0.3370920
Confusion Matrix and Statistics
Reference
Prediction -50000 +50000
-50000 34563 262
+50000 7099 2457
Accuracy : 0.8341
95% CI : (0.8306, 0.8376)
No Information Rate : 0.9387
P-Value [Acc > NIR] : 1
Kappa : 0.3371
Mcnemar's Test P-Value : <2e-16
Sensitivity : 0.8296
Specificity : 0.9036
Pos Pred Value : 0.9925
Neg Pred Value : 0.2571
Prevalence : 0.9387
Detection Rate : 0.7788
Detection Prevalence : 0.7847
Balanced Accuracy : 0.8666
'Positive' Class : -50000
Nous avons une faible taux d’erreur de validation et elle est équivalant à l’erreur d’apprentissage.
Le kappa est faible donc accord faible sur la prédiction par rapport à une prédiction au hasard.
| -50000 | +50000 | |
|---|---|---|
| -50000 | 34563 | 262 |
| +50000 | 7099 | 2457 |
La matrice de confusion suivante se lit alors comme suit :
horizontalement, sur les 34825 données outcome “- 50 000” , 34563 ont été estimés par le système de classification comme “-50 000” et 262 ont été estimés comme “+ 50 000” (faux-négatifs),
horizontalement, sur les 9556 données outcome “+ 50 000” , 7099 ont été estimés comme “-50 000” (faux-positifs) et 2457 ont été estimés comme “+ 50 000”
verticalement, sur les 41662 outcome estimés par le système comme “- 50 000”, 7099 sont en fait des outcome “+ 50 000”,
verticalement, sur les 2719 outcome estimés par le système comme “+ 50 000”, 2457 sont en fait des outcome “- 50 000”.
| Durée | Accuracy | Taux.Erreur | Recall | Precision | |
|---|---|---|---|---|---|
| Random Forest | 14.98683 mins | 0.8341407 | 0.1658593 | 0.9924767 | 0.8296049 |
Nous avons une bonne accuracy pour la prédiction mais le temps d’excution est long.
On va utiliser l’algorithme naïf bayésien qui est l’une des méthodes les plus simples en apprentissage supervisé basée sur le théorème de Bayes. Il est peu utilisé par rapport aux arbres de décision ou les régressions logistiques mais il est facile d’estimer des paramètres et il est rapide.
Naive Bayes
method = ‘nb’
Type: Classification
Tuning parameters:
fL (Laplace Correction)
usekernel (Distribution Type) = TRUE, FALSE
adjust (Bandwidth Adjustment)
Required packages: klaR
Nous utilisons le paramètre number=10.
Time difference of 5.327326 mins
Voici le resultat de l’apprentissage :
Naive Bayes
19322 samples
16 predictor
2 classes: '-50000', '+50000'
No pre-processing
Resampling: Cross-Validated (10 fold)
Summary of sample sizes: 17389, 17390, 17390, 17390, 17390, 17390, ...
Resampling results across tuning parameters:
usekernel Accuracy Kappa
FALSE NaN NaN
TRUE 0.5 0
Tuning parameter 'fL' was held constant at a value of 0
Tuning
parameter 'adjust' was held constant at a value of 1
Accuracy was used to select the optimal model using the largest value.
The final values used for the model were fL = 0, usekernel = TRUE
and adjust = 1.
Nous avons un faible résultat d’apprentissage.
Voici les paramètres choisis :
Best parameter pour fL est : 0
Best parameter pour usekernel est : TRUE
Best parameter pour adjust est : 1
Nous regardons quelle covariable influnce le plus le modèle.
La variable qui influence le plus est educ_level et weeks_worked_in_year
Accuracy Kappa
0.938735 0.000000
Confusion Matrix and Statistics
Reference
Prediction -50000 +50000
-50000 41662 2719
+50000 0 0
Accuracy : 0.9387
95% CI : (0.9365, 0.9409)
No Information Rate : 0.9387
P-Value [Acc > NIR] : 0.5051
Kappa : 0
Mcnemar's Test P-Value : <2e-16
Sensitivity : 1.0000
Specificity : 0.0000
Pos Pred Value : 0.9387
Neg Pred Value : NaN
Prevalence : 0.9387
Detection Rate : 0.9387
Detection Prevalence : 1.0000
Balanced Accuracy : 0.5000
'Positive' Class : -50000
Nous avons une faible taux d’erreur de validation et elle est équivalant à l’erreur d’apprentissage.
Le kappa est null donc désaccord sur la prédiction par rapport à une prédiction au hasard.
La spécificité (la capacité du test à prédire une admission quand celle-ci a réellement eu lieu) est à 0. Le modèle a prédit 0 valeurs outcome +50000.
| -50000 | +50000 | |
|---|---|---|
| -50000 | 41662 | 2719 |
| +50000 | 0 | 0 |
Il n’y a aucune prédiction correcte pour le outcome +50000.
La matrice de confusion suivante se lit alors comme suit :
horizontalement, sur les 44381 données outcome “- 50 000” , 41662 ont été estimés par le système de classification comme “-50 000” et 2719 ont été estimés comme “+ 50 000” (faux-négatifs),
horizontalement, sur les 0 données outcome “+ 50 000” , 0 ont été estimés comme “-50 000” (faux-positifs) et 0 ont été estimés comme “+ 50 000”
verticalement, sur les 41662 outcome estimés par le système comme “- 50 000”, 0 sont en fait des outcome “+ 50 000”,
verticalement, sur les 2719 outcome estimés par le système comme “+ 50 000”, 0 sont en fait des outcome “- 50 000”.
| Durée | Accuracy | Taux.Erreur | Recall | Precision | |
|---|---|---|---|---|---|
| Naives bayes | 5.327326 mins | 0.938735 | 0.061265 | 1 | 0.938735 |
Il est rapide et très performant mais il ne prédit pas les outcome +50000 ce qui est un gros désavantage.
Nous allons utiliser un modèle SVM de type linéaire.
Support Vector Machines with Linear Kernel
method = ‘svmLinear’
Type: Regression, Classification
Tuning parameters:
Required packages: kernlab
Nous utilisons le paramètre number=2.
Time difference of 20.34367 mins
Support Vector Machines with Linear Kernel
19322 samples
16 predictor
2 classes: '-50000', '+50000'
Pre-processing: centered (184), scaled (184)
Resampling: Cross-Validated (2 fold)
Summary of sample sizes: 9661, 9661
Resampling results across tuning parameters:
cost Accuracy Kappa
0.2 0.8581410 0.7162822
0.4 0.8581927 0.7163857
0.6 0.8581927 0.7163857
0.8 0.8582962 0.7165927
1.0 0.8581927 0.7163857
1.2 0.8582445 0.7164892
1.4 0.8582445 0.7164892
Accuracy was used to select the optimal model using the smallest value.
The final value used for the model was cost = 0.2.
L’erreur est faible et le kappa est élevé avec un accord fort
Voici les paramètres choisis :
Best parameter pour cost est : 0.2
Nous regardons quelle covariable infleunce le plus le modèle.
La variable qui influence le plus est educ_level et weeks_worked_in_year
Voici le resultat de la validation :
Accuracy Kappa
0.8370474 0.3424217
Confusion Matrix and Statistics
Reference
Prediction -50000 +50000
-50000 34688 258
+50000 6974 2461
Accuracy : 0.837
95% CI : (0.8336, 0.8405)
No Information Rate : 0.9387
P-Value [Acc > NIR] : 1
Kappa : 0.3424
Mcnemar's Test P-Value : <2e-16
Sensitivity : 0.8326
Specificity : 0.9051
Pos Pred Value : 0.9926
Neg Pred Value : 0.2608
Prevalence : 0.9387
Detection Rate : 0.7816
Detection Prevalence : 0.7874
Balanced Accuracy : 0.8689
'Positive' Class : -50000
L’erreur est faible et le kappa est faible avec un accord faible sur la prédiction
| -50000 | +50000 | |
|---|---|---|
| -50000 | 34688 | 258 |
| +50000 | 6974 | 2461 |
La matrice de confusion suivante se lit alors comme suit :
horizontalement, sur les 34946 données outcome “- 50 000” , 34688 ont été estimés par le système de classification comme “-50 000” et 258 ont été estimés comme “+ 50 000” (faux-négatifs),
horizontalement, sur les 9435 données outcome “+ 50 000” , 6974 ont été estimés comme “-50 000” (faux-positifs) et 2461 ont été estimés comme “+ 50 000”
verticalement, sur les 41662 outcome estimés par le système comme “- 50 000”, 6974 sont en fait des outcome “+ 50 000”,
verticalement, sur les 2719 outcome estimés par le système comme “+ 50 000”, 2461 sont en fait des outcome “- 50 000”.
| Durée | Accuracy | Taux.Erreur | Recall | Precision | |
|---|---|---|---|---|---|
| Support vector machine linéaire | 20.34367 mins | 0.8370474 | 0.1629526 | 0.8326053 | 0.9926172 |
Le temps d’execution est long et la prédiction est bonne
Nous allons utilisé SVM de type Radial Basis Function Kernel
method = ‘svmRadialSigma’
Type: Regression, Classification
Tuning parameters:
Required packages: kernlab
Nous utilisons le paramètre number=2.
Nous utilisons number = 2 car le temps d’execution est trop long.
Time difference of 27.54678 mins
Voici le resultat de l’apprentissage :
Support Vector Machines with Radial Basis Function Kernel
19322 samples
16 predictor
2 classes: '-50000', '+50000'
Pre-processing: centered (184), scaled (184)
Resampling: Cross-Validated (2 fold)
Summary of sample sizes: 9661, 9661
Resampling results across tuning parameters:
sigma C Accuracy Kappa
0.010 0.75 0.8440120 0.6880241
0.010 1.00 0.8440120 0.6880241
0.010 1.25 0.8431839 0.6863679
0.015 0.75 0.8399752 0.6799503
0.015 1.00 0.8394059 0.6788118
0.015 1.25 0.8382673 0.6765346
0.200 0.75 0.7349653 0.4699308
0.200 1.00 0.7447987 0.4895976
0.200 1.25 0.7493013 0.4986027
Accuracy was used to select the optimal model using the smallest value.
The final values used for the model were sigma = 0.2 and C = 0.75.
L’erreur d’apprentissage est faible et le kappa est élevé avec un accord élevé de prédiction
Voici les paramètres choisis :
Best parameter pour sigma est : 0.2
Best parameter pour C est : 0.75
Nous regardons quelle covariable influnce le plus le modèle.
Nous avons educ_level, weeks_worked_in_year,num_persons_worked_for_employer qui influencent beaucoup le modèle.
Accuracy Kappa
0.5627633 0.1155063
Confusion Matrix and Statistics
Reference
Prediction -50000 +50000
-50000 22367 110
+50000 19295 2609
Accuracy : 0.5628
95% CI : (0.5581, 0.5674)
No Information Rate : 0.9387
P-Value [Acc > NIR] : 1
Kappa : 0.1155
Mcnemar's Test P-Value : <2e-16
Sensitivity : 0.5369
Specificity : 0.9595
Pos Pred Value : 0.9951
Neg Pred Value : 0.1191
Prevalence : 0.9387
Detection Rate : 0.5040
Detection Prevalence : 0.5065
Balanced Accuracy : 0.7482
'Positive' Class : -50000
Nous avons une grande erreur de validation et il est pls grand que l’ erreur d’apprentissage. Nous avons un problème de sur apprentissage. Le kappa est faible avec un accord faible de prédiction
| -50000 | +50000 | |
|---|---|---|
| -50000 | 22367 | 110 |
| +50000 | 19295 | 2609 |
La matrice de confusion suivante se lit alors comme suit :
horizontalement, sur les 22477 données outcome “- 50 000” , 22367 ont été estimés par le système de classification comme “-50 000” et 110 ont été estimés comme “+ 50 000” (faux-négatifs),
horizontalement, sur les 21904 données outcome “+ 50 000” , 19295 ont été estimés comme “-50 000” (faux-positifs) et 2609 ont été estimés comme “+ 50 000”
verticalement, sur les 41662 outcome estimés par le système comme “- 50 000”, 19295 sont en fait des outcome “+ 50 000”,
verticalement, sur les 2719 outcome estimés par le système comme “+ 50 000”, 2609 sont en fait des outcome “- 50 000”.
| Durée | Accuracy | Taux.Erreur | Recall | Precision | |
|---|---|---|---|---|---|
| Support vector machine Radial | 27.54678 mins | 0.5627633 | 0.4372367 | 0.5368681 | 0.9951061 |
Le temps d’execution est très long par rapport aux autres modèles et pour un résultat de la prédiction faible.
Le k Nearest Neighbors (KNN) est un algorithme qui peut servir autant pour la classification que la régression. L’algorithme Le plus proches voisins consiste à choisir les k données les plus proches du point étudié afin d’en prédire sa valeur.
k-Nearest Neighbors
method = ‘knn’
Type: Classification, Regression
Tuning parameters:
Nous utilisons le paramètre number=10 et pas de répétitions car le temps d’execution est trop long.
Time difference of 13.29267 mins
Voici le resultat de l’apprentissage :
k-Nearest Neighbors
19322 samples
16 predictor
2 classes: '-50000', '+50000'
No pre-processing
Resampling: Cross-Validated (10 fold)
Summary of sample sizes: 17390, 17390, 17390, 17390, 17390, 17390, ...
Resampling results across tuning parameters:
k Accuracy Kappa
1 0.8307107 0.6614214
4 0.8442706 0.6885411
7 0.8463929 0.6927856
10 0.8486181 0.6972361
13 0.8471171 0.6942338
Accuracy was used to select the optimal model using the largest value.
The final value used for the model was k = 10.
Nous avons une faible erreur d’apprentissage. Le kappa est élevé avec un accord élevé de prédiction
Voici les paramètres choisis :
Best parameter pour k est : 10
Nous regardons quelle covariable influnce le plus le modèle.
Nous avons educ_level, num_persons_worked_for_employer, detailed_industry_recode,weeks_worked_in_year qui influencent beaucoup le modèle.
Voici le resultat de la validation:
Accuracy Kappa
0.8125099 0.3027596
Confusion Matrix and Statistics
Reference
Prediction -50000 +50000
-50000 33610 269
+50000 8052 2450
Accuracy : 0.8125
95% CI : (0.8088, 0.8161)
No Information Rate : 0.9387
P-Value [Acc > NIR] : 1
Kappa : 0.3028
Mcnemar's Test P-Value : <2e-16
Sensitivity : 0.8067
Specificity : 0.9011
Pos Pred Value : 0.9921
Neg Pred Value : 0.2333
Prevalence : 0.9387
Detection Rate : 0.7573
Detection Prevalence : 0.7634
Balanced Accuracy : 0.8539
'Positive' Class : -50000
Nous avons une erreur de validation plus élevé que l’erreur d’apprentissage. Le kappa est faible avec un accord faible de prédiction.
| -50000 | +50000 | |
|---|---|---|
| -50000 | 33610 | 269 |
| +50000 | 8052 | 2450 |
La matrice de confusion suivante se lit alors comme suit :
horizontalement, sur les 33879 données outcome “- 50 000” , 33610 ont été estimés par le système de classification comme “-50 000” et 269 ont été estimés comme “+ 50 000” (faux-négatifs),
horizontalement, sur les 10502 données outcome “+ 50 000” , 8052 ont été estimés comme “-50 000” (faux-positifs) et 2450 ont été estimés comme “+ 50 000”
verticalement, sur les 41662 outcome estimés par le système comme “- 50 000”, 8052 sont en fait des outcome “+ 50 000”,
verticalement, sur les 2719 outcome estimés par le système comme “+ 50 000”, 2450 sont en fait des outcome “- 50 000”.
| Durée | Accuracy | Taux.Erreur | Recall | Precision | |
|---|---|---|---|---|---|
| K nearest neighbors KNN | 13.29267 mins | 0.8125099 | 0.1874901 | 0.8067304 | 0.99206 |
Nous avons trouver une stratégie pour avoir une valeur optimale pour le paramètre k. Le niveau de prediction est bon avec un temps d’exécution correcte.
Les réseaux neuronaux sont l’un des modèles d’apprentissage machine les plus fascinants car leur structure est inspirée par le cerveau.
Neural Network
method = ‘nnet’
Type: Classification, Regression
Tuning parameters:
size (#Hidden Units)
Required packages: nnet
A model-specific variable importance metric is available.
Voici le resultat de l’apprentissage :
Neural Network
155145 samples
16 predictor
2 classes: '-50000', '+50000'
No pre-processing
Resampling: Cross-Validated (2 fold)
Summary of sample sizes: 77572, 77573
Resampling results across tuning parameters:
size decay Accuracy Kappa
2 0.2 0.9489832 0.4507088
2 0.5 0.9490154 0.4468607
2 0.8 0.9489961 0.4404776
2 1.0 0.9433111 0.2273694
3 0.2 0.9484676 0.4380545
3 0.5 0.9494408 0.4358074
3 0.8 0.9491508 0.4469613
3 1.0 0.9490090 0.4366423
4 0.2 0.9487769 0.4399896
4 0.5 0.9480937 0.4046013
4 0.8 0.9492604 0.4475999
4 1.0 0.9494151 0.4476317
Accuracy was used to select the optimal model using the largest value.
The final values used for the model were size = 3 and decay = 0.5.
Nous avons une faible erreur d’apprentissage. Le kappa est modéré avec un accord modéré de prédiction
Voici les paramètres choisis :
Best parameter pour size est : 3
Best parameter pour decay est : 0.5
Nous regardons quelle covariable influnce le plus le modèle.
nnet variable importance
only 20 most important variables shown (out of 184)
Overall
detailed_occupation_recode7 100.00
sex Male 92.78
tax_filer_stat Nonfiler 78.33
family_members_under_18 Not in universe 71.20
extra_outcomepositive 68.42
tax_filer_stat Joint both under 65 62.35
detailed_household_and_family_stat Child <18 never marr not in subfamily 57.73
detailed_occupation_recode39 53.07
detailed_occupation_recode2 51.62
educ_levelno-HS 50.62
detailed_occupation_recode11 50.10
detailed_industry_recode20 46.54
detailed_household_and_family_stat Secondary individual 45.48
detailed_occupation_recode26 41.78
marital_stat Married-civilian spouse present 40.73
detailed_industry_recode33 40.26
detailed_occupation_recode5 40.25
detailed_industry_recode44 40.06
detailed_occupation_recode27 38.71
detailed_occupation_recode25 38.58
Nous avons detailed_occupation_recode7, detailed_occupation_recode11 et educ_levelHS-grad qui influencent beaucoup le modèle.
Le graphe plotnet du réseau de neurones:
Voici le resultat de la validation:
Accuracy Kappa
0.9515333 0.4697091
Confusion Matrix and Statistics
Reference
Prediction -50000 +50000
-50000 41184 1673
+50000 478 1046
Accuracy : 0.9515
95% CI : (0.9495, 0.9535)
No Information Rate : 0.9387
P-Value [Acc > NIR] : < 2.2e-16
Kappa : 0.4697
Mcnemar's Test P-Value : < 2.2e-16
Sensitivity : 0.9885
Specificity : 0.3847
Pos Pred Value : 0.9610
Neg Pred Value : 0.6864
Prevalence : 0.9387
Detection Rate : 0.9280
Detection Prevalence : 0.9657
Balanced Accuracy : 0.6866
'Positive' Class : -50000
Nous avons une faible erreur de validation et elle est équivalant à l’erreur d’apprentissage.
Le kappa est modéré avec un accord modéré de prédiction.
| -50000 | +50000 | |
|---|---|---|
| -50000 | 41184 | 1673 |
| +50000 | 478 | 1046 |
La matrice de confusion suivante se lit alors comme suit :
horizontalement, sur les 42857 données outcome “- 50 000” , 41184 ont été estimés par le système de classification comme “-50 000” et 1673 ont été estimés comme “+ 50 000” (faux-négatifs),
horizontalement, sur les 1524 données outcome “+ 50 000” , 478 ont été estimés comme “-50 000” (faux-positifs) et 1046 ont été estimés comme “+ 50 000”
verticalement, sur les 41662 outcome estimés par le système comme “- 50 000”, 478 sont en fait des outcome “+ 50 000”,
verticalement, sur les 2719 outcome estimés par le système comme “+ 50 000”, 1046 sont en fait des outcome “- 50 000”.
| Durée.Execution | Accuracy | Taux.Erreur | Recall | Precision | |
|---|---|---|---|---|---|
| Neural Networks | 28.59946 mins | 0.9515333 | 0.0484667 | 0.9885267 | 0.9609632 |
Nous avons une très bonne accuracy pour la prédiction mais le temps d’excution est très long.
Nous avons construit plusieurs modèles de classification pour prédire si un citoyen américain gagne plus ou moins de 50 000 $ par an. Nous avons utilisé le Stochastic Gradient Boosting ,la forêt aléatoire utilisant le bagging, les machines à vecteurs de support linéaire et à noyau, les arbres de décisions, les naives Bayes, kNN et Reseau de neurones. Dans le tableau ci-dessous, nous résumons l’accuracy, le taux d’erreur, le recall, la precision et le temps d’execution pour tous les modèles .
Le modèle le plus précis est le modèle Stochastic Gradient Boosting. En revanche, le modèle de Naives Bayes a la meilleure durée d’exécution avec seulement 5 min pour la modélisation avec les covariables mais il ne prédit pas les outcome “+50000”. Concernant le modèle SVM radial, il a un problème de sur-apprentissage d’où le faible score accuracy.
En termes de temps de calcul et précision, le meilleur modèle est l’arbre de décision CART.
En conclusion, après avoir pris en compte tous les indicateurs de performance, le modèle de l’arbre de décision semblent être le choix le plus approprié pour prédire la valeur outcome du dataset Census.
| Accuracy | Taux.Erreur | Durée.Execution | Recall | Precision | |
|---|---|---|---|---|---|
| Stochastic Gradient Boosting | 0.9520516 | 0.0479484 | 31.227520 mins | 0.9891988 | 0.9608767 |
| Classification Tree CART | 0.9468692 | 0.0531308 | 8.034623 mins | 0.9536682 | 0.9915751 |
| Random Forest | 0.8341407 | 0.1658593 | 14.986826 mins | 0.9924767 | 0.8296049 |
| Naives Bayes | 0.9387350 | 0.0612650 | 5.327326 mins | 1.0000000 | 0.9387350 |
| SVM linéaire | 0.8370474 | 0.1629526 | 20.343674 mins | 0.8326053 | 0.9926172 |
| SVM radial | 0.5627633 | 0.4372367 | 27.546775 mins | 0.5368681 | 0.9951061 |
| K nearest neighbors KNN | 0.8125099 | 0.1874901 | 13.292672 mins | 0.8067304 | 0.9920600 |
| Neural Networks | 0.9515333 | 0.0484667 | 28.599459 mins | 0.9885267 | 0.9609632 |
Nous avons les Covariables de * class_of_worker * avec comme factor levels:
[1] " Federal government" " Local government"
[3] " Never worked" " Not in universe"
[5] " Private" " Self-employed-incorporated"
[7] " Self-employed-not incorporated" " State government"
[9] " Without pay"
Nous avons un total de 9 covariables pour la variable *class_of_worker*
Nous avons les Covariables de * detailed_industry_recode * avec comme factor levels:
[1] "0" "1" "2" "3" "4" "5" "6" "7" "8" "9" "10" "11" "12" "13"
[15] "14" "15" "16" "17" "18" "19" "20" "21" "22" "23" "24" "25" "26" "27"
[29] "28" "29" "30" "31" "32" "33" "34" "35" "36" "37" "38" "39" "40" "41"
[43] "42" "43" "44" "45" "46" "47" "48" "49" "50" "51"
Nous avons un total de 52 covariables pour la variable *detailed_industry_recode*
Nous avons les Covariables de * detailed_occupation_recode * avec comme factor levels:
[1] "0" "1" "2" "3" "4" "5" "6" "7" "8" "9" "10" "11" "12" "13"
[15] "14" "15" "16" "17" "18" "19" "20" "21" "22" "23" "24" "25" "26" "27"
[29] "28" "29" "30" "31" "32" "33" "34" "35" "36" "37" "38" "39" "40" "41"
[43] "42" "43" "44" "45" "46"
Nous avons un total de 47 covariables pour la variable *detailed_occupation_recode*
Nous avons les Covariables de * education * avec comme factor levels:
[1] " 10th grade"
[2] " 11th grade"
[3] " 12th grade no diploma"
[4] " 1st 2nd 3rd or 4th grade"
[5] " 5th or 6th grade"
[6] " 7th and 8th grade"
[7] " 9th grade"
[8] " Associates degree-academic program"
[9] " Associates degree-occup /vocational"
[10] " Bachelors degree(BA AB BS)"
[11] " Children"
[12] " Doctorate degree(PhD EdD)"
[13] " High school graduate"
[14] " Less than 1st grade"
[15] " Masters degree(MA MS MEng MEd MSW MBA)"
[16] " Prof school degree (MD DDS DVM LLB JD)"
[17] " Some college but no degree"
Nous avons un total de 17 covariables pour la variable *education*
Nous avons les Covariables de * enroll_in_edu_inst_last_wk * avec comme factor levels:
[1] " College or university" " High school"
[3] " Not in universe"
Nous avons un total de 3 covariables pour la variable *enroll_in_edu_inst_last_wk*
Nous avons les Covariables de * marital_stat * avec comme factor levels:
[1] " Divorced" " Married-A F spouse present"
[3] " Married-civilian spouse present" " Married-spouse absent"
[5] " Never married" " Separated"
[7] " Widowed"
Nous avons un total de 7 covariables pour la variable *marital_stat*
Nous avons les Covariables de * major_industry_code * avec comme factor levels:
[1] " Agriculture"
[2] " Armed Forces"
[3] " Business and repair services"
[4] " Communications"
[5] " Construction"
[6] " Education"
[7] " Entertainment"
[8] " Finance insurance and real estate"
[9] " Forestry and fisheries"
[10] " Hospital services"
[11] " Manufacturing-durable goods"
[12] " Manufacturing-nondurable goods"
[13] " Medical except hospital"
[14] " Mining"
[15] " Not in universe or children"
[16] " Other professional services"
[17] " Personal services except private HH"
[18] " Private household services"
[19] " Public administration"
[20] " Retail trade"
[21] " Social services"
[22] " Transportation"
[23] " Utilities and sanitary services"
[24] " Wholesale trade"
Nous avons un total de 24 covariables pour la variable *major_industry_code*
Nous avons les Covariables de * major_occupation_code * avec comme factor levels:
[1] " Adm support including clerical"
[2] " Armed Forces"
[3] " Executive admin and managerial"
[4] " Farming forestry and fishing"
[5] " Handlers equip cleaners etc "
[6] " Machine operators assmblrs & inspctrs"
[7] " Not in universe"
[8] " Other service"
[9] " Precision production craft & repair"
[10] " Private household services"
[11] " Professional specialty"
[12] " Protective services"
[13] " Sales"
[14] " Technicians and related support"
[15] " Transportation and material moving"
Nous avons un total de 15 covariables pour la variable *major_occupation_code*
Nous avons les Covariables de * race * avec comme factor levels:
[1] " Amer Indian Aleut or Eskimo" " Asian or Pacific Islander"
[3] " Black" " Other"
[5] " White"
Nous avons un total de 5 covariables pour la variable *race*
Nous avons les Covariables de * hispanic_origin * avec comme factor levels:
[1] " All other" " Central or South American"
[3] " Chicano" " Cuban"
[5] " Do not know" " Mexican-American"
[7] " Mexican (Mexicano)" " NA"
[9] " Other Spanish" " Puerto Rican"
Nous avons un total de 10 covariables pour la variable *hispanic_origin*
Nous avons les Covariables de * sex * avec comme factor levels:
[1] " Female" " Male"
Nous avons un total de 2 covariables pour la variable *sex*
Nous avons les Covariables de * member_of_a_labor_union * avec comme factor levels:
[1] " No" " Not in universe" " Yes"
Nous avons un total de 3 covariables pour la variable *member_of_a_labor_union*
Nous avons les Covariables de * reason_for_unemployment * avec comme factor levels:
[1] " Job leaver" " Job loser - on layoff"
[3] " New entrant" " Not in universe"
[5] " Other job loser" " Re-entrant"
Nous avons un total de 6 covariables pour la variable *reason_for_unemployment*
Nous avons les Covariables de * full_or_part_time_employment_stat * avec comme factor levels:
[1] " Children or Armed Forces"
[2] " Full-time schedules"
[3] " Not in labor force"
[4] " PT for econ reasons usually FT"
[5] " PT for econ reasons usually PT"
[6] " PT for non-econ reasons usually FT"
[7] " Unemployed full-time"
[8] " Unemployed part- time"
Nous avons un total de 8 covariables pour la variable *full_or_part_time_employment_stat*
Nous avons les Covariables de * tax_filer_stat * avec comme factor levels:
[1] " Head of household" " Joint both 65+"
[3] " Joint both under 65" " Joint one under 65 & one 65+"
[5] " Nonfiler" " Single"
Nous avons un total de 6 covariables pour la variable *tax_filer_stat*
Nous avons les Covariables de * region_of_previous_residence * avec comme factor levels:
[1] " Abroad" " Midwest" " Northeast"
[4] " Not in universe" " South" " West"
Nous avons un total de 6 covariables pour la variable *region_of_previous_residence*
Nous avons les Covariables de * state_of_previous_residence * avec comme factor levels:
[1] " Abroad" " Alabama"
[3] " Alaska" " Arizona"
[5] " Arkansas" " California"
[7] " Colorado" " Connecticut"
[9] " Delaware" " District of Columbia"
[11] " Florida" " Georgia"
[13] " Idaho" " Illinois"
[15] " Indiana" " Iowa"
[17] " Kansas" " Kentucky"
[19] " Louisiana" " Maine"
[21] " Maryland" " Massachusetts"
[23] " Michigan" " Minnesota"
[25] " Mississippi" " Missouri"
[27] " Montana" " Nebraska"
[29] " Nevada" " New Hampshire"
[31] " New Jersey" " New Mexico"
[33] " New York" " North Carolina"
[35] " North Dakota" " Not in universe"
[37] " Ohio" " Oklahoma"
[39] " Oregon" " Pennsylvania"
[41] " South Carolina" " South Dakota"
[43] " Tennessee" " Texas"
[45] " Utah" " Vermont"
[47] " Virginia" " West Virginia"
[49] " Wisconsin" " Wyoming"
[51] "Inconnu"
Nous avons un total de 51 covariables pour la variable *state_of_previous_residence*
Nous avons les Covariables de * detailed_household_and_family_stat * avec comme factor levels:
[1] " Child <18 ever marr not in subfamily"
[2] " Child <18 ever marr RP of subfamily"
[3] " Child <18 never marr not in subfamily"
[4] " Child <18 never marr RP of subfamily"
[5] " Child <18 spouse of subfamily RP"
[6] " Child 18+ ever marr Not in a subfamily"
[7] " Child 18+ ever marr RP of subfamily"
[8] " Child 18+ never marr Not in a subfamily"
[9] " Child 18+ never marr RP of subfamily"
[10] " Child 18+ spouse of subfamily RP"
[11] " Child under 18 of RP of unrel subfamily"
[12] " Grandchild <18 ever marr not in subfamily"
[13] " Grandchild <18 never marr child of subfamily RP"
[14] " Grandchild <18 never marr not in subfamily"
[15] " Grandchild <18 never marr RP of subfamily"
[16] " Grandchild 18+ ever marr not in subfamily"
[17] " Grandchild 18+ ever marr RP of subfamily"
[18] " Grandchild 18+ never marr not in subfamily"
[19] " Grandchild 18+ never marr RP of subfamily"
[20] " Grandchild 18+ spouse of subfamily RP"
[21] " Householder"
[22] " In group quarters"
[23] " Nonfamily householder"
[24] " Other Rel <18 ever marr not in subfamily"
[25] " Other Rel <18 ever marr RP of subfamily"
[26] " Other Rel <18 never marr child of subfamily RP"
[27] " Other Rel <18 never marr not in subfamily"
[28] " Other Rel <18 never married RP of subfamily"
[29] " Other Rel <18 spouse of subfamily RP"
[30] " Other Rel 18+ ever marr not in subfamily"
[31] " Other Rel 18+ ever marr RP of subfamily"
[32] " Other Rel 18+ never marr not in subfamily"
[33] " Other Rel 18+ never marr RP of subfamily"
[34] " Other Rel 18+ spouse of subfamily RP"
[35] " RP of unrelated subfamily"
[36] " Secondary individual"
[37] " Spouse of householder"
[38] " Spouse of RP of unrelated subfamily"
Nous avons un total de 38 covariables pour la variable *detailed_household_and_family_stat*
Nous avons les Covariables de * detailed_household_summary_in_household * avec comme factor levels:
[1] " Child 18 or older"
[2] " Child under 18 ever married"
[3] " Child under 18 never married"
[4] " Group Quarters- Secondary individual"
[5] " Householder"
[6] " Nonrelative of householder"
[7] " Other relative of householder"
[8] " Spouse of householder"
Nous avons un total de 8 covariables pour la variable *detailed_household_summary_in_household*
Nous avons les Covariables de * migration_code_changeinmsa * avec comme factor levels:
[1] " Abroad to MSA" " Abroad to nonMSA" " MSA to MSA"
[4] " MSA to nonMSA" " Nonmover" " NonMSA to MSA"
[7] " NonMSA to nonMSA" " Not identifiable" " Not in universe"
[10] "Inconnu"
Nous avons un total de 10 covariables pour la variable *migration_code_changeinmsa*
Nous avons les Covariables de * migration_code_change_in_reg * avec comme factor levels:
[1] " Abroad" " Different county same state"
[3] " Different division same region" " Different region"
[5] " Different state same division" " Nonmover"
[7] " Not in universe" " Same county"
[9] "Inconnu"
Nous avons un total de 9 covariables pour la variable *migration_code_change_in_reg*
Nous avons les Covariables de * migration_code_move_with_in_reg * avec comme factor levels:
[1] " Abroad" " Different county same state"
[3] " Different state in Midwest" " Different state in Northeast"
[5] " Different state in South" " Different state in West"
[7] " Nonmover" " Not in universe"
[9] " Same county" "Inconnu"
Nous avons un total de 10 covariables pour la variable *migration_code_move_with_in_reg*
Nous avons les Covariables de * live_int_his_house_1_year_ago * avec comme factor levels:
[1] " No" " Not in universe under 1 year old"
[3] " Yes"
Nous avons un total de 3 covariables pour la variable *live_int_his_house_1_year_ago*
Nous avons les Covariables de * migration_prevres_in_sunbelt * avec comme factor levels:
[1] " No" " Not in universe" " Yes"
[4] "Inconnu"
Nous avons un total de 4 covariables pour la variable *migration_prevres_in_sunbelt*
Nous avons les Covariables de * family_members_under_18 * avec comme factor levels:
[1] " Both parents present" " Father only present"
[3] " Mother only present" " Neither parent present"
[5] " Not in universe"
Nous avons un total de 5 covariables pour la variable *family_members_under_18*
Nous avons les Covariables de * countryofbirthfather * avec comme factor levels:
[1] " Cambodia" " Canada"
[3] " China" " Columbia"
[5] " Cuba" " Dominican-Republic"
[7] " Ecuador" " El-Salvador"
[9] " England" " France"
[11] " Germany" " Greece"
[13] " Guatemala" " Haiti"
[15] " Holand-Netherlands" " Honduras"
[17] " Hong Kong" " Hungary"
[19] " India" " Iran"
[21] " Ireland" " Italy"
[23] " Jamaica" " Japan"
[25] " Laos" " Mexico"
[27] " Nicaragua" " Outlying-U S (Guam USVI etc)"
[29] " Panama" " Peru"
[31] " Philippines" " Poland"
[33] " Portugal" " Puerto-Rico"
[35] " Scotland" " South Korea"
[37] " Taiwan" " Thailand"
[39] " Trinadad&Tobago" " United-States"
[41] " Vietnam" " Yugoslavia"
[43] "Inconnu"
Nous avons un total de 43 covariables pour la variable *countryofbirthfather*
Nous avons les Covariables de * country_of_birthmother * avec comme factor levels:
[1] " Cambodia" " Canada"
[3] " China" " Columbia"
[5] " Cuba" " Dominican-Republic"
[7] " Ecuador" " El-Salvador"
[9] " England" " France"
[11] " Germany" " Greece"
[13] " Guatemala" " Haiti"
[15] " Holand-Netherlands" " Honduras"
[17] " Hong Kong" " Hungary"
[19] " India" " Iran"
[21] " Ireland" " Italy"
[23] " Jamaica" " Japan"
[25] " Laos" " Mexico"
[27] " Nicaragua" " Outlying-U S (Guam USVI etc)"
[29] " Panama" " Peru"
[31] " Philippines" " Poland"
[33] " Portugal" " Puerto-Rico"
[35] " Scotland" " South Korea"
[37] " Taiwan" " Thailand"
[39] " Trinadad&Tobago" " United-States"
[41] " Vietnam" " Yugoslavia"
[43] "Inconnu"
Nous avons un total de 43 covariables pour la variable *country_of_birthmother*
Nous avons les Covariables de * country_of_birthself * avec comme factor levels:
[1] " Cambodia" " Canada"
[3] " China" " Columbia"
[5] " Cuba" " Dominican-Republic"
[7] " Ecuador" " El-Salvador"
[9] " England" " France"
[11] " Germany" " Greece"
[13] " Guatemala" " Haiti"
[15] " Holand-Netherlands" " Honduras"
[17] " Hong Kong" " Hungary"
[19] " India" " Iran"
[21] " Ireland" " Italy"
[23] " Jamaica" " Japan"
[25] " Laos" " Mexico"
[27] " Nicaragua" " Outlying-U S (Guam USVI etc)"
[29] " Panama" " Peru"
[31] " Philippines" " Poland"
[33] " Portugal" " Puerto-Rico"
[35] " Scotland" " South Korea"
[37] " Taiwan" " Thailand"
[39] " Trinadad&Tobago" " United-States"
[41] " Vietnam" " Yugoslavia"
[43] "Inconnu"
Nous avons un total de 43 covariables pour la variable *country_of_birthself*
Nous avons les Covariables de * citizenship * avec comme factor levels:
[1] " Foreign born- Not a citizen of U S "
[2] " Foreign born- U S citizen by naturalization"
[3] " Native- Born abroad of American Parent(s)"
[4] " Native- Born in Puerto Rico or U S Outlying"
[5] " Native- Born in the United States"
Nous avons un total de 5 covariables pour la variable *citizenship*
Nous avons les Covariables de * business_or_selfemployed * avec comme factor levels:
[1] "0" "1" "2"
Nous avons un total de 3 covariables pour la variable *business_or_selfemployed*
Nous avons les Covariables de * fill_inc_questionnaire_for_veterans_admi * avec comme factor levels:
[1] " No" " Not in universe" " Yes"
Nous avons un total de 3 covariables pour la variable *fill_inc_questionnaire_for_veterans_admi*
Nous avons les Covariables de * veterans_benefits * avec comme factor levels:
[1] "0" "1" "2"
Nous avons un total de 3 covariables pour la variable *veterans_benefits*
Nous avons les Covariables de * year * avec comme factor levels:
[1] "94" "95"
Nous avons un total de 2 covariables pour la variable *year*
Nous avons les Covariables de * outcome * avec comme factor levels:
[1] "-50000" "+50000"
Nous avons un total de 2 covariables pour la variable *outcome*
Nous avons les Covariables de * groupedeage * avec comme factor levels:
[1] "jusqu'à 18 ans" "19 à 33 ans" "34 à 62 ans" "63 ans et plus"
Nous avons un total de 4 covariables pour la variable *groupedeage*
Nous avons les Covariables de * native_region * avec comme factor levels:
[1] " Central-America" " Central-Asia" " East-Asia"
[4] " Europe-East" " Europe-West" " Outlying-US"
[7] " South-America" " United-States"
Nous avons un total de 8 covariables pour la variable *native_region*
Nous avons les Covariables de * educ_level * avec comme factor levels:
[1] "CC-grad" "College" "grad-school" "HS-grad" "no-HS"
Nous avons un total de 5 covariables pour la variable *educ_level*
Nous avons les Covariables de * extra_outcome * avec comme factor levels:
[1] "none" "positive"
Nous avons un total de 2 covariables pour la variable *extra_outcome*
Call:
PCA(X = data_acp, quali.sup = 7, graph = FALSE)
Eigenvalues
Dim.1 Dim.2 Dim.3 Dim.4 Dim.5 Dim.6
Variance 1.866 1.123 1.001 0.910 0.850 0.251
% of var. 31.103 18.711 16.679 15.161 14.163 4.183
Cumulative % of var. 31.103 49.814 66.493 81.654 95.817 100.000
Individuals (the 10 first)
Dist Dim.1 ctr cos2 Dim.2
284829 | 2.100 | 1.825 0.001 0.755 | -0.257
21187 | 1.287 | -1.267 0.000 0.970 | -0.028
64649 | 1.287 | -1.267 0.000 0.970 | -0.028
12643 | 1.287 | -1.267 0.000 0.970 | -0.028
21863 | 1.287 | -1.267 0.000 0.970 | -0.028
169260 | 2.056 | 0.973 0.000 0.224 | -0.343
258087 | 1.287 | -1.267 0.000 0.970 | -0.028
164023 | 5.086 | 0.251 0.000 0.002 | -0.843
18464 | 2.188 | 1.906 0.001 0.759 | 0.222
148883 | 1.493 | 1.267 0.000 0.719 | -0.205
ctr cos2 Dim.3 ctr cos2
284829 0.000 0.015 | -0.141 0.000 0.005 |
21187 0.000 0.000 | -0.020 0.000 0.000 |
64649 0.000 0.000 | -0.020 0.000 0.000 |
12643 0.000 0.000 | -0.020 0.000 0.000 |
21863 0.000 0.000 | -0.020 0.000 0.000 |
169260 0.000 0.028 | -0.493 0.000 0.058 |
258087 0.000 0.000 | -0.020 0.000 0.000 |
164023 0.000 0.027 | -1.228 0.001 0.058 |
18464 0.000 0.010 | -0.342 0.000 0.024 |
148883 0.000 0.019 | -0.115 0.000 0.006 |
Variables
Dim.1 ctr cos2 Dim.2 ctr
wage_per_hour | 0.405 8.779 0.164 | -0.168 2.526
capital_gains | 0.154 1.279 0.024 | 0.713 45.267
capital_losses | 0.195 2.030 0.038 | 0.068 0.413
from_stocks | 0.048 0.123 0.002 | 0.759 51.299
num_persons_worked_for_employer | 0.902 43.609 0.814 | -0.065 0.382
weeks_worked_in_year | 0.908 44.181 0.825 | -0.036 0.114
cos2 Dim.3 ctr cos2
wage_per_hour 0.028 | -0.236 5.556 0.056 |
capital_gains 0.508 | -0.282 7.968 0.080 |
capital_losses 0.005 | 0.921 84.734 0.848 |
from_stocks 0.576 | 0.127 1.605 0.016 |
num_persons_worked_for_employer 0.004 | -0.031 0.094 0.001 |
weeks_worked_in_year 0.001 | -0.020 0.042 0.000 |
Supplementary categories
Dist Dim.1 cos2 v.test
-50000 | 0.124 | -0.099 0.640 -125.844 |
+50000 | 1.870 | 1.496 0.640 125.844 |
Dim.2 cos2 v.test Dim.3
-50000 -0.070 0.321 -114.847 | -0.018
+50000 1.059 0.321 114.847 | 0.278
cos2 v.test
-50000 0.022 -31.958 |
+50000 0.022 31.958 |