Ir al contenido
wannacode

Regresión lineal

En resumen: La regresión lineal predice un número como suma de las características con coeficientes; el MAE dice cuánto se equivoca de media, y el RMSE pesa más los errores grandes, ambos en la misma unidad.

Problema

«¿Cuánto dinero espero el viernes?»

Contabilidad planifica el dinero de las próximas semanas. Pregunta cuántos ingresos esperar el viernes 6 de noviembre y el domingo 8 de noviembre. Aquí están los ingresos por día del año, sin los pedidos cancelados, porque no traen dinero:

Pythondatos: las tablas de la tienda

Un día trae de media 304,62 €. El viernes trae 350,79 € y el domingo 250,85 €. Los días de diciembre traen de media 513,42 €. La media de cada día de la semana es un comienzo, pero en ella están mezclados diciembre y el crecimiento lento a lo largo del año. Necesitas un modelo que los junte.

La idea

Una suma de características

La regresión lineal predice como una suma: un número inicial más un número por cada característica, multiplicado por su valor. Esos números son los coeficientes. Las características aquí son de tres tipos:

  • el día de la semana, como columnas de 0 y 1. Con drop_first=True se quita la columna del lunes: el lunes es la base, y cada otro día es «cuánto más que el lunes»;
  • day, el número correlativo del día: 0 el 1 de noviembre de 2025. Es la tendencia;
  • december: 1 para los días de diciembre.

El modelo aprende de noviembre a junio, 242 días. De julio a octubre, 123 días, son para la prueba. Por qué no mezclados está al final de la lección:

Pythondatos: las tablas de la tienda

El número inicial es 273,98 €: un lunes en el día 0, fuera de diciembre. El viernes suma 63,58 € y el domingo quita 45,44 €. Diciembre suma 233,05 € al día. Cada día suma 0,06 €, es decir, unos 21,33 € al año. Así que la predicción para un viernes de diciembre es 273,98 + 63,58 + 233,05 más la tendencia.

Más precisamente, para curiosos

Los coeficientes son estimaciones y llevan ruido, como la media en la lección sobre muestras. Entrenado con los 365 días, el modelo le da al viernes +44,70 €, no +63,58 €. Cómo encuentra la regresión los números (la menor suma de errores al cuadrado) está, sin biblioteca, en la lección Regresión lineal del curso de IA.

Pruébalo

Cuál es la base

1. El coeficiente de weekday_6 es −45,44. ¿Qué significa?

La idea

Cuánto se equivoca: MAE y RMSE

El error se mide en la prueba. Hay dos medidas habituales:

  • MAE (mean absolute error, error absoluto medio): el error medio sin signo. En euros, y la jefa lo entiende: «nos equivocamos de media tanto al día».
  • RMSE (root mean squared error, raíz del error cuadrático medio): los errores se elevan al cuadrado, se hace la media y luego la raíz. También está en euros, pero un error grande pesa más.

sklearn.metrics tiene los dos:

Pythondatos: las tablas de la tienda

El modelo se equivoca en 59,88 € al día de media (MAE), y el RMSE es 75,91 €. Las dos cuentas pequeñas muestran la diferencia. Errores de 10 y 10 dan un MAE de 10 y un RMSE de 10. Errores de 0 y 20 dan el mismo MAE de 10, pero un RMSE de 14,14. Si un error grande te cuesta más que unos cuantos pequeños, por ejemplo una caja vacía el viernes, miras el RMSE. Si no, el MAE es más claro para la jefa.

Pruébalo

¿Y la línea base?

¿El modelo supera a «siempre el día promedio»? Pon en guess los ingresos medios de los días de entrenamiento, y en mae_base y rmse_base los errores de esta predicción en los días de prueba.

Pythondatos: las tablas de la tienda

La idea

Los residuos

Un residuo es el valor real menos la predicción. Más significa que la tienda vendió más de lo que dijo el modelo. Con un buen modelo los residuos se reparten alrededor de 0, sin patrón. Un patrón es algo que el modelo no sabe:

Pythondatos: las tablas de la tienda

El mayor error está el 30 de julio de 2026: 239,28 € por encima de la predicción. Es un jueves inusualmente fuerte con 535,40 € de ingresos. Por meses, julio, agosto y octubre están cerca de 0 (3,99 €, −8,03 € y 20,42 €). Septiembre es −58,85 € al día: durante un mes entero la tienda vendió menos de lo que explican el día y la tendencia. No es ruido, pasó algo. Qué, lo descubriremos en el proyecto del curso.

La idea

Lo que el modelo no puede hacer

El modelo solo sabe lo que le dicen sus características. Sin la columna december:

Pythondatos: las tablas de la tienda

La tendencia pasa a −0,40 € al día, −147,35 € al año. Diciembre está al comienzo de los datos de entrenamiento y «levanta» el comienzo de la línea, y el modelo no tiene otra forma de explicarlo. El error de la prueba pasa a 69,43 €, peor que la línea base (66,24 €). El salto de las tarjetas regalo en diciembre solo se ve si una característica lo dice.

Dos límites más:

  • Sin extrapolación. La línea sigue para siempre. Con 8 meses el crecimiento es de 21,33 € al año, pero si continúa el año que viene no lo dicen los datos. Hemos visto un solo diciembre.
  • Un coeficiente no es una causa. «+63,58 € el viernes» no significa que una promoción movida al viernes traiga 63,58 €. El coeficiente describe los datos. Cuánto aporta una acción lo dice un experimento, como en la lección Correlación y causa.

Pruébalo

Dónde el modelo es ciego

Entrena el modelo sin la columna december con los días de entrenamiento. Calcula sus residuos en esos mismos días y el residuo medio por mes en by_month (agrupa por res.index.strftime('%Y-%m')). Dibuja by_month como barras, con título y etiqueta en el eje vertical.

Pythondatos: las tablas de la tienda

La idea

Dividir por tiempo, no mezclar

El modelo de esta lección aprende de noviembre a junio y se comprueba con julio–octubre. ¿Por qué no con train_test_split? Aquí hay un modelo con el día y el mes, comprobado de las dos maneras. El segundo número de cada línea es la línea base:

Pythondatos: las tablas de la tienda

Mezclado, el modelo se equivoca en 59,81 € y la línea base en 81,48 €: un 27 % mejor. Pero 87 de los 92 días de prueba tienen un día vecino, el anterior o el siguiente, en los datos de entrenamiento. El modelo ha aprendido cómo fueron los días alrededor del día de prueba, también los posteriores.

Comprobado por tiempo, el mismo modelo se equivoca en 71,98 €, más que la línea base (66,24 €). Los meses de julio a octubre no están en los datos de entrenamiento. Sus columnas son 0 en todas las filas de entrenamiento, y el modelo les da el nivel de enero, el mes más débil.

Una predicción real es siempre para días posteriores a todos los ejemplos. Así que la prueba también tiene que venir después del entrenamiento. Mezclar los días deja entrar el futuro en el entrenamiento. Eso es una fuga de datos, y una lección entera más adelante trata de ella.

Ejercicio

Viernes y domingo

Ahora la respuesta para contabilidad. Entrena el modelo otra vez con los 365 días. Crea X_new para el viernes 6 de noviembre de 2026 y el domingo 8 de noviembre de 2026 (day sigue la cuenta desde el 1 de noviembre de 2025, december es 0) y pon en forecast la predicción para los dos días (una Series con las fechas como índice).

Pythondatos: las tablas de la tienda

Test

Ponte a prueba

1. Dos predicciones tienen ambas un MAE de 60 €. Una se equivoca en unos 60 € cada día, y la otra normalmente en poco, pero a veces en 300 €. ¿Cuál tiene el RMSE mayor?
2. ¿Por qué hace trampa repartir los días mezclados entre entrenamiento y prueba?
3. El coeficiente de december es +233,05 €. ¿Qué se deduce de él?
4. Los residuos de la prueba en septiembre son −58,85 € al día de media. ¿Qué significa?

Creado por Ivo Gergov como parte de la campaña de Evo Tech por una educación accesible en programación ·