Tarea 2: Comparación de modelos con tidymodels

IA para Científicos Sociales - UCU

Autor/a

Danilo Freire

Fecha de publicación

12 de abril de 2026

1 Instrucciones

Esta tarea usa un dataset nuevo, satisfaccion_democracia.csv: una encuesta simulada de opinión pública (inspirada en el Latinobarómetro) sobre la satisfacción con la democracia. Es un primer contacto con el tipo de datos que trabajaremos en los laboratorios del Día 2. Las técnicas son las mismas del Laboratorio 2: validación cruzada y comparación de modelos. Respondan cada pregunta escribiendo código R en los bloques indicados. Cuando se pida una respuesta escrita, usen texto normal debajo del bloque de código.

Para trabajar en esta tarea:

  1. Descarguen este archivo .qmd y el dataset satisfaccion_democracia.csv de la página del curso, o clonen el repositorio completo con git clone https://github.com/danilofreire/introduccion-ia-ucu.git. Mantengan el CSV en una subcarpeta datos/ junto al .qmd
  2. Necesitan Quarto instalado junto con RStudio. Las versiones recientes de RStudio (>= 2022.07) ya incluyen Quarto. Si no lo tienen, instálenlo desde https://quarto.org/docs/get-started/
  3. Abran este archivo .qmd en RStudio y ejecuten los bloques de código con Ctrl+Enter (o Cmd+Enter en Mac)
  4. Cuando terminen, pueden renderizar el documento completo con el botón “Render” en RStudio

1.1 Configuración

library(tidymodels)
library(tidyverse)

satisfaccion <- read_csv("datos/satisfaccion_democracia.csv")
# Lean el archivo directo desde la web:
# satisfaccion <- read_csv("https://raw.githubusercontent.com/danilofreire/introduccion-ia-ucu/main/clases/dia-01/datos/satisfaccion_democracia.csv")

satisfaccion <- satisfaccion |>
  mutate(
    satisfecho = factor(satisfecho, levels = c("no", "si")),
    zona = factor(zona),
    genero = factor(genero),
    pais = factor(pais)
  )

2 Exploración

2.1 Pregunta 1: Resumen del dataset

Calculen la proporción de satisfechos ("si") por país. ¿Cuál país tiene la proporción más alta? ¿Cuál tiene la más baja? Muestren los resultados en una tabla ordenada.

# Escriban su código aquí

Respuesta:

2.2 Pregunta 2: Confianza y satisfacción

Creen un boxplot que muestre la distribución de confianza_gobierno separada por satisfecho. Agreguen labs() con título y etiquetas claras. ¿Qué observan?

# Escriban su código aquí

Respuesta:

2.3 Pregunta 3: Correlaciones

Calculen la matriz de correlaciones entre las 4 variables numéricas principales: edad, educacion_anos, ingreso_hogar y confianza_gobierno. ¿Cuáles dos variables tienen la mayor correlación? ¿Es fuerte o débil?

# Escriban su código aquí

Respuesta:

3 Feature engineering

3.1 Pregunta 4: Crear variables nuevas

Creen tres variables nuevas:

  • confianza_baja: "si" si confianza_gobierno <= 4, "no" en caso contrario
  • joven: "si" si edad < 30, "no" en caso contrario
  • ingreso_x_educacion: el producto de ingreso_hogar y educacion_anos

Muestren las primeras 10 filas de las nuevas variables junto con satisfecho.

# Escriban su código aquí

3.2 Pregunta 5: Explorar las nuevas variables

Calculen la proporción de satisfechos entre personas con confianza baja vs. alta, y entre jóvenes vs. no jóvenes. ¿Qué variable parece más útil para predecir la satisfacción?

# Escriban su código aquí

Respuesta:

4 Modelos

4.1 Pregunta 6: División de datos

Dividan los datos en 75% entrenamiento y 25% prueba con set.seed(42) y estratificación por satisfecho. Verifiquen que las proporciones del outcome son similares en ambos conjuntos.

# Escriban su código aquí

4.2 Pregunta 7: Dos modelos con fórmula básica

Definan dos modelos (regresión logística y árbol de decisión) y evalúenlos con validación cruzada (5 folds) usando la fórmula: satisfecho ~ edad + educacion_anos + ingreso_hogar + confianza_gobierno + consumo_noticias + participacion_politica + zona. Reporten accuracy para cada uno.

Pista: usen control_resamples(event_level = "second") dentro de fit_resamples().

# Escriban su código aquí

Respuesta:

4.3 Pregunta 8: Mejor modelo con fórmula extendida

Ahora evaluen el mejor modelo de la pregunta anterior con una fórmula que agregue confianza_baja y ingreso_x_educacion. ¿Mejora la accuracy? ¿Cuánto?

# Escriban su código aquí

Respuesta:

5 Evaluación

5.1 Pregunta 9: Matriz de confusión

Ajusten el modelo logístico con la fórmula básica en los datos de entrenamiento y generen predicciones sobre el conjunto de prueba. Construyan la matriz de confusión. ¿Cuántos errores comete el modelo en total?

# Escriban su código aquí

Respuesta:

5.2 Pregunta 10: Precisión, recall y AUC

Calculen precisión, recall y AUC del modelo logístico sobre el conjunto de prueba. Recuerden usar event_level = "second". ¿Es un buen modelo según el AUC?

# Escriban su código aquí

Respuesta:

5.3 Pregunta 11: Curva ROC

Grafiquen la curva ROC del modelo logístico. Agreguen un título al gráfico con labs().

# Escriban su código aquí

5.4 Pregunta 12: Coeficientes del modelo

Usen el modelo logístico para esta pregunta (los coeficientes de un árbol no se interpretan con odds ratios). Extraigan los coeficientes con tidy() y calculen los odds ratios. ¿Cuál variable tiene el efecto más fuerte? ¿Cuál tiene el efecto más débil? Ordenen por p-valor.

# Escriban su código aquí

Respuesta:

6 Reflexión

6.1 Pregunta 13: Árbol vs. logística

Los árboles de decisión y la regresión logística tienen ventajas y desventajas distintas. Basándose en los resultados de esta tarea, discutan en qué situaciones preferirían un árbol de decisión sobre una regresión logística, y viceversa. Consideren al menos dos criterios (por ejemplo, interpretabilidad, rendimiento, tipo de datos).

Respuesta:

6.2 Pregunta 14: Una accuracy que engaña

Miren de nuevo la accuracy del modelo logístico (Pregunta 7) y la proporción de personas satisfechas en los datos (el count(satisfecho)). Van a notar que son casi iguales. Sin escribir código nuevo, expliquen: ¿qué significa que la accuracy del modelo sea casi idéntica a la proporción de la clase mayoritaria? ¿El modelo realmente “aprendió” algo? ¿Qué métricas mirarían para responder eso mejor que la accuracy?

Respuesta:

Volver arriba