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)
)Tarea 2: Comparación de modelos con tidymodels
IA para Científicos Sociales - UCU
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:
- Descarguen este archivo
.qmdy el datasetsatisfaccion_democracia.csvde la página del curso, o clonen el repositorio completo congit clone https://github.com/danilofreire/introduccion-ia-ucu.git. Mantengan el CSV en una subcarpetadatos/junto al.qmd - 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/
- Abran este archivo
.qmden RStudio y ejecuten los bloques de código con Ctrl+Enter (o Cmd+Enter en Mac) - Cuando terminen, pueden renderizar el documento completo con el botón “Render” en RStudio
1.1 Configuración
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"siconfianza_gobierno <= 4,"no"en caso contrariojoven:"si"siedad < 30,"no"en caso contrarioingreso_x_educacion: el producto deingreso_hogaryeducacion_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: