La idea de esta práctica independiente es que utilicen las herramientas aprendidas para desarrollar un árbol de decisión en R con tidymodels.

Vamos a trabajar con datos del segundo trimestre de la EPH en 2015. Está guardada en la carpeta data con el nombre eph15.RDS. Como verán, el formato de los datos es diferente. Por lo cual, pueden cargarlos de la siguiente manera:

library(tidymodels)
## ── Attaching packages ────────────────────────────────────── tidymodels 1.3.0 ──
## ✔ broom        1.0.8     ✔ recipes      1.3.0
## ✔ dials        1.4.0     ✔ rsample      1.3.0
## ✔ dplyr        1.1.4     ✔ tibble       3.2.1
## ✔ ggplot2      3.5.2     ✔ tidyr        1.3.1
## ✔ infer        1.0.8     ✔ tune         1.3.0
## ✔ modeldata    1.4.0     ✔ workflows    1.2.0
## ✔ parsnip      1.3.1     ✔ workflowsets 1.1.0
## ✔ purrr        1.0.4     ✔ yardstick    1.3.2
## ── Conflicts ───────────────────────────────────────── tidymodels_conflicts() ──
## ✖ purrr::discard() masks scales::discard()
## ✖ dplyr::filter()  masks stats::filter()
## ✖ dplyr::lag()     masks stats::lag()
## ✖ recipes::step()  masks stats::step()
library(tidyverse)
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ forcats   1.0.0     ✔ readr     2.1.5
## ✔ lubridate 1.9.4     ✔ stringr   1.5.1
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ readr::col_factor() masks scales::col_factor()
## ✖ purrr::discard()    masks scales::discard()
## ✖ dplyr::filter()     masks stats::filter()
## ✖ stringr::fixed()    masks recipes::fixed()
## ✖ dplyr::lag()        masks stats::lag()
## ✖ readr::spec()       masks yardstick::spec()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
load('./data/EPH_2015_II.RData')

data <- data %>% 
           filter(imp_inglab1 != 1) # eliminamos los casos con no respuesta en ingresos.

La idea es estimar un modelo que pueda predecir los ingresos, es decir, vamos a entrenar un árbol de regresión. La base tiene las siguientes variables:

  • region
  • mas_500
  • aglomerado
  • ch03: relación de parentesco con el jefe de hogar
  • ch04: sexo
  • ch06: edad
  • ch07: estado conyugal
  • ch08: cobertura médica
  • ch09: sabe leer y escribir
  • ch15: lugar de nacimiento
  • ch16: lugar dónde vivía hace 5 años
  • nivel_ed: nivel educativo
  • cat_ocup: categoría ocupacional
  • pp03d: cantidad de ocupaciones
  • pp03i: buscó trabajar más horas?
  • intensi: intensidad de la ocupación
  • pp07a: antiguedad en el empleo de forma continua
  • p21: monto de ingreso total de la ocupación principal
  • t_vi: monto de ingreso no laboral percibido en el mes
  • imp_inglab1: responde ingresos o no
  • carac: carácter de la ocupación
  • calif: calificación de la ocupación
  • rama_ag: rama de actvidad agregada
  • tam: tamaño del establecimiento en que trabaja
  • htot: horas totales trabajadas
  • subs: su hogar percibe algún tipo de subsidio
  • aportes: percibe aportes en la ocupación principal

Ahora, entramos a la parte de construcción del workflow de modelado. Recordemos que hay que:

  • Hacer la receta con la fórmula y, si los hay, los pasos de feature engineering que nos parezca que corresponde
    • ¿Qué pasa con las variables de texto?
  • Partir el train/test
  • Instanciar el modelo, definiendo hiperparámetros
  • Probar con cross-validation cuál es la mejor combinación de hiperparámetros
  • Fitearlo a la base de entrenamiento

¿Cómo funcionó este modelo en el test set?