Tarea 4: Regresión y regularización

IA para Científicos Sociales - UCU

Autor/a

Danilo Freire

Fecha de publicación

15 de abril de 2026

1 Instrucciones

Esta tarea retoma el flujo del Laboratorio 4 (receta → modelo → workflow → tuning con validación cruzada), pero con un dataset nuevo: desempeno_escuelas.csv, con 400 escuelas simuladas. La variable de resultado es puntaje_prueba (el puntaje promedio de cada escuela en una prueba estandarizada, escala tipo PISA) y hay predictores numéricos y categóricos. Las técnicas son las mismas (OLS, LASSO, Ridge, Elastic Net), pero los datos son otros, así que las respuestas también lo serán. 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.

El hilo central de la tarea es la distinción entre predicción y explicación que practicamos en el Ejercicio 2 del laboratorio: vuelve en las Preguntas 3 y 13, así que conviene tenerla presente desde el principio.

Dos preguntas usan material que en el laboratorio quedó como apéndice opcional: la regla 1-SE (Pregunta 8) corresponde al Apéndice 3 del Lab 4, y Elastic Net (Pregunta 11) al Apéndice 5. Si no los vieron en clase, repásenlos antes de esas preguntas.

Para trabajar en esta tarea:

  1. Descarguen este archivo .qmd y el dataset desempeno_escuelas.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)
library(glmnet)

datos <- read_csv("datos/desempeno_escuelas.csv", show_col_types = FALSE)

datos <- datos |>
  mutate(
    departamento = factor(departamento),
    sector = factor(sector),
    zona = factor(zona)
  )

set.seed(2026)

2 Exploración

2.1 Pregunta 1: Resumen del dataset

Calculen la media y desviación estándar de puntaje_prueba por departamento. Ordenen los resultados de mayor a menor media. ¿Cuál departamento tiene el mejor puntaje promedio? ¿Las diferencias entre departamentos son grandes comparadas con la desviación estándar dentro de cada uno?

# Escriban su código aquí

Respuesta:

2.2 Pregunta 2: Correlaciones con la variable objetivo

Calculen la correlación entre puntaje_prueba y todas las variables numéricas del dataset. ¿Cuáles dos variables tienen la mayor correlación con el puntaje? ¿Alguna correlación tiene un signo que les sorprenda?

# Escriban su código aquí

Respuesta:

2.3 Pregunta 3: Distribución por sector

Creen un boxplot que muestre la distribución de puntaje_prueba separada por sector (público/privado). Agreguen labs() con título y etiquetas claras. ¿Hay diferencia entre sectores? ¿Esa diferencia bruta prueba que las escuelas privadas “enseñan mejor”?

# Escriban su código aquí

Respuesta:

3 Modelo baseline

3.1 Pregunta 4: División de datos y receta

Dividan los datos en 80% entrenamiento y 20% prueba con set.seed(2026). Creen una receta que: (a) excluya escuela (es un identificador, no un predictor), (b) convierta las variables categóricas en dummies, (c) normalice los predictores numéricos, y (d) elimine predictores con varianza cero. ¿Cuántos predictores tiene la receta preparada?

Pista: para excluir el identificador pueden usar step_rm() dentro de la receta.

# Escriban su código aquí

Respuesta:

3.2 Pregunta 5: Modelo OLS

Ajusten un modelo de regresión lineal (OLS) con linear_reg() usando la receta de la pregunta 4. Extraigan los coeficientes con tidy() y ordénenlos por valor absoluto. ¿Cuál es el predictor más importante? ¿El signo de tamano_clase va en la dirección esperada?

# Escriban su código aquí

Respuesta:

3.3 Pregunta 6: Evaluar OLS

Generen predicciones del modelo OLS en el conjunto de prueba y calculen RMSE, R² y MAE con metrics(). ¿Qué porcentaje de la variación en los puntajes explica el modelo (R²)? ¿Un RMSE de esa magnitud es grande o chico en la escala de la prueba?

# Escriban su código aquí

Respuesta:

4 LASSO

4.1 Pregunta 7: Tuning de LASSO

Definan un modelo LASSO (mixture = 1) con penalty = tune(). Creen una grilla de 40 valores de lambda entre 10^-3 y 10^0.5, y usen validación cruzada con 10 folds (igual que en el laboratorio) para encontrar el lambda óptimo. ¿Cuál es el mejor lambda según RMSE?

Pista: el rango de penalty() se da en exponentes de base 10: range = c(-3, 0.5).

# Escriban su código aquí

Respuesta:

4.2 Pregunta 8: Lambda mínimo vs. 1SE

Comparen el lambda que minimiza el RMSE (select_best()) con el lambda 1SE (select_by_one_std_err()). ¿Cuál es más grande? ¿Cuántas veces más grande? ¿Qué implica usar el lambda 1SE para la complejidad del modelo?

Pista: select_by_one_std_err() necesita la métrica ("rmse") y la dirección en la que ordenar el penalty: piensen si quieren el lambda más grande o más pequeño dentro de un error estándar del mínimo.

# Escriban su código aquí

Respuesta:

4.3 Pregunta 9: Variables eliminadas por LASSO

Ajusten el modelo LASSO final con el lambda mínimo. ¿Cuántos predictores elimina LASSO (coeficiente = 0)? ¿Cuáles? Miren en particular computadoras_alumno y horas_semanales: ¿por qué creen que LASSO las considera poco útiles, si las computadoras “suenan” importantes para el aprendizaje?

# Escriban su código aquí

Respuesta:

5 Ridge y Elastic Net

5.1 Pregunta 10: Comparar coeficientes Ridge vs. LASSO

Ajusten un modelo Ridge (mixture = 0) con tuning de lambda usando la misma grilla y los mismos folds. Comparen los coeficientes de Ridge con los de LASSO. ¿Cuántos coeficientes deja exactamente en cero cada método? ¿Qué hace Ridge con los predictores que LASSO elimina?

# Escriban su código aquí

Respuesta:

5.2 Pregunta 11: Elastic Net con dos hiperparámetros

Ajusten un Elastic Net con tuning de penalty y mixture. Usen una grilla de 15 lambdas y 5 valores de mixture. ¿Cuál es la mejor combinación? ¿El mixture óptimo se acerca más a LASSO (1) o a Ridge (0)? ¿Qué les dice eso sobre la estructura de este dataset?

# Escriban su código aquí

Respuesta:

6 Comparación

6.1 Pregunta 12: Tabla comparativa

Generen predicciones en el conjunto de prueba para OLS, LASSO, Ridge y Elastic Net. Combinen las métricas en una tabla y ordénenla por RMSE. ¿Cuál modelo tiene el mejor RMSE? ¿La diferencia entre el mejor y el peor es grande en términos prácticos?

# Escriban su código aquí

Respuesta:

6.2 Pregunta 13: Reflexión

Basándose en los resultados de esta tarea, respondan:

  1. ¿En este dataset, la regularización mejora mucho respecto a OLS? ¿Por qué sí o por qué no?
  2. ¿En qué situaciones sería más útil LASSO que Ridge? ¿Y viceversa?
  3. El ministerio de educación quiere usar el modelo para decidir a qué escuelas mandar más presupuesto. ¿Qué problema tiene usar un modelo predictivo para esa decisión causal? Piensen en la Pregunta 3

Respuesta:

Volver arriba