Saltar al contenido

lección 4

Miércoles: el primer modelo y leer el error en kg/ha

Entrenar una regresión lineal y leer su error en kg/ha; luego un bosque aleatorio la mejora bastante, y nadie sabe aún por qué.

⏱ 55 min

## Miércoles, 10:00. Por fin se entrena

Dos días preparando y hoy, por fin, un modelo. La tabla de modelado está lista: una fila por parcela, con sus features y el rendimiento al lado. A partir de hoy no vuelves a limpiar; cargas la tabla ya hecha —te la damos como `datos/tabla_modelo.csv` para que todos partamos del mismo punto— y te concentras en lo que de verdad enseña el oficio: entrenar, medir el error y aprender a leerlo. Hoy escribes dos ficheros del repo, `src/03_modelo.py` para entrenar y el principio de `src/04_evaluar.py` para medir.

Antes de entrenar, una idea que ya conoces de tu trabajo anterior pero que aquí es igual de sagrada: no se mide el modelo con los mismos datos con los que aprendió. Si lo hicieras, estarías premiando la memoria, no el aprendizaje; es como poner un examen con las preguntas que el alumno ya vio. Por eso lo primero es partir la tabla en dos trozos: uno para entrenar (el modelo aprende aquí) y otro para probar (se mide aquí, con datos que no vio). En scikit-learn eso lo hace `train_test_split`, y se usa siempre con `test_size=0.2` (un 20% para prueba) y `random_state=42`, un número fijo que hace que el reparto sea siempre el mismo: sin él, cada ejecución partiría distinto y los números cambiarían.

El corte sagrado: el modelo aprende con el 80% y se mide con el 20% que no vio. random_state=42 hace que el reparto sea reproducible, para que los números no bailen entre ejecuciones.

## La regresión lineal: una recta multivariante

El primer modelo que entrenas es el más sencillo y el más antiguo: la regresión lineal. La idea tiene casi dos siglos y es exactamente la que suena: busca la combinación de rectas que mejor explica el rendimiento a partir de las features. A cada feature le asigna un número, un «peso» o coeficiente, que dice cuánto sube (o baja) el rendimiento por cada unidad que sube esa feature, manteniendo las demás fijas. Si el coeficiente del riego es positivo, el modelo está diciendo «por cada milímetro más de riego, el rendimiento sube un poquito». Si es negativo, lo contrario. Es un modelo transparente: puedes leer sus coeficientes y entender qué ha aprendido.

En scikit-learn, entrenar un modelo son siempre los mismos dos pasos, los mismos para cualquier algoritmo: crear el modelo y llamar a `.fit()` con los datos de entrenamiento. Esa uniformidad —el mismo `fit` y `predict` para una recta que para un bosque— es la decisión de diseño que hizo famosa a la librería: aprendes el patrón una vez y lo usas para todo. Vas a entrenar la regresión lineal con las diez features de la parcela (humedad, temperatura, lluvia, sol, NDVI, superficie, riego, fertilizante, y el cultivo y el suelo ya convertidos a número) y a mirar dos cosas: cómo de bien explica el rendimiento, y qué coeficiente le ha puesto al riego.

Y aquí llega el momento que a Nuria le va a encantar. El coeficiente del riego sale positivo: el modelo dice que más agua es más cosecha, justo lo que ella lleva diciendo toda la vida. Es un dato real y hay que anotarlo. Pero guárdate una pregunta para el jueves: una recta solo puede subir o bajar en línea recta. ¿Y si la relación de verdad no fuera una recta?

Consejo de senior: cuando un modelo te confirma justo lo que tu stakeholder ya creía, es cuando más tienes que desconfiar. No porque esté mal, sino porque es cuando nadie lo va a cuestionar. Un coeficiente positivo «de media» puede ser verdad en el conjunto y mentira en el detalle. Anota el resultado, dale la razón donde la tiene, pero no cierres el caso hasta haber mirado la forma real de la relación. Esa mirada es la del jueves.

## Leer el error en kilos por hectárea

Entrenar es la parte fácil. Lo que de verdad separa a un científico de datos del que solo llama a funciones es saber leer el error, y aquí es donde Elena se pone pesada a propósito. Hay tres métricas de regresión que vas a usar, y conviene entender qué dice cada una y, sobre todo, en qué unidades habla.

  • MAE (error absoluto medio): la media de lo que te equivocas, en valor absoluto. Si el MAE es 1.573, significa «de media, mi predicción se desvía 1.573 kilos por hectárea de la cosecha real». Habla en kilos por hectárea, las unidades del negocio, y por eso es la cifra que entiende un agricultor y la que usas para decidir.
  • RMSE (raíz del error cuadrático medio): parecido al MAE pero penaliza más los errores grandes, porque eleva al cuadrado antes de promediar. También habla en kg/ha. Si el RMSE es bastante mayor que el MAE, es señal de que hay unas pocas parcelas donde te equivocas mucho.
  • R² (coeficiente de determinación): no habla en kilos, habla en proporción, de 0 a 1. Dice qué parte de la variación del rendimiento consigue explicar el modelo. Un R² de 0,59 significa que explica el 59% de la variación. Es útil como contexto, pero un agricultor no sabe qué es un R²; sí sabe qué son 1.573 kilos menos de tomate.

La regla de Elena, que te vas a llevar de este caso: una métrica no significa nada hasta que sabes contra qué compararla. Un MAE de 1.573 kg/ha, ¿es bueno o malo? Depende. Si predecir a lo tonto —decir siempre la media, sin modelo— te deja un error de 2.591 kg/ha, entonces tu modelo, que baja a 1.573, aporta de verdad. Esa comparación contra la línea base es obligatoria: sin ella, no sabes si tu modelo de diez features le gana a un número fijo o es un gasto. El R² del lineal, 0,59, es mediocre; mañana entenderás por qué.

Una métrica solo significa algo contra una referencia. El lineal (1.573 kg/ha) ya le gana a predecir la media (2.591). El bosque de mañana baja aún más, a 1.162.
Qué mide el MAE, visto en un dibujo. Cada punto es una parcela; su distancia vertical a la diagonal es lo que el modelo se equivocó con ella. El MAE es el promedio de todas esas distancias.

## Un segundo modelo: el bosque aleatorio

Antes de cerrar el día, Elena te pide que entrenes un segundo modelo con las mismas features, para comparar: un bosque aleatorio (en inglés, random forest). Sin entrar aún en cómo funciona por dentro —eso lo verás mañana, porque es la clave del caso—, basta con saber que es un modelo de otra familia: en vez de ajustar una recta, construye muchos árboles de decisión que van partiendo los datos en trozos y promedia sus respuestas. En scikit-learn se usa igual que la regresión lineal (crear, `fit`, `predict`), fijando un par de ajustes sencillos: el número de árboles (`n_estimators=200`) y el `random_state=42` de siempre.

Y aquí aparece el enigma del día. Con exactamente las mismas features, el bosque aleatorio saca un R² de 0,78 frente al 0,59 del lineal, y un MAE de 1.162 kg/ha frente a los 1.573 del lineal. Es bastante mejor. Lo anotas, pero no sabes por qué: si los dos modelos ven los mismos datos, ¿qué está viendo el bosque que la recta no ve? Esa pregunta, que hoy dejas abierta, es la puerta del descubrimiento de mañana. No es casualidad que el bosque gane: es que hay algo en la forma de los datos que una recta no puede capturar. Mañana lo dibujas y lo entiendes.

Cierras el miércoles con dos modelos entrenados, el error leído en kilos por hectárea y una alegría a medias: el lineal confirma a Nuria, el bosque va mejor, y tú tienes la sensación de que falta algo por entender. Está bien que la tengas. Mañana es el día en que esa sensación se convierte en el hallazgo que cambia la recomendación de la empresa.

A partir de hoy los ejercicios de modelado leen datos/tabla_modelo.csv, la tabla de modelado ya limpia (1.994 filas, una por parcela) con el cultivo y el suelo codificados en número (cultivo_cod, suelo_cod). Es la misma que construiste ayer; te la damos hecha para que todos entrenéis sobre exactamente los mismos datos y los números salgan reproducibles.

volver a la visión del caso y descargar los datasets

Regístrate para guardar tu progreso.