Logo de CursoIA
CursoIA Curso de Inteligencia Artificial

Overfitting y underfitting, Unidad 1 — Qué significan realmente overfitting y underfitting, 1.2 — Definiciones operativas ·

Por qué ambos son problemas graves

Por qué ambos son problemas graves

Introducción

En el campo de la ciencia de datos, y especialmente en el machine learning (ML), el overfitting y el underfitting son dos trampas que los modelos suelen caer. Estos fenómenos no solo comprometen la precisión del modelo durante la fase de entrenamiento, sino que también afectan negativamente su rendimiento en datos no vistos o en un entorno real. Este artículo explora por qué el overfitting y el underfitting son problemas graves para los modelos ML, con ejemplos prácticos e implementaciones de código.

Explicación principal

Overfitting: Aprendiendo demasiado

El overfitting ocurre cuando un modelo se ajusta tanto a los datos de entrenamiento que comienza a capturar no solo la señal (la información relevante) sino también el ruido y las peculiaridades del conjunto de datos. Esto puede llevar a un modelo con alta precisión en los datos de entrenamiento pero muy baja precisión en los datos de validación o prueba.

Ejemplo:

Supongamos que estamos construyendo un modelo para predecir la temperatura a partir de la fecha y hora del día, utilizando datos históricos. Si el conjunto de datos es relativamente pequeño, el modelo puede ajustarse demasiado a estos datos específicos, incluyendo fluctuaciones temporales por causas estacionales que no son relevantes en una predicción general. En este caso, el modelo se overfitea y probablemente no será tan preciso cuando se aplique a nuevos datos.

import numpy as np
from sklearn.linear_model import LinearRegression

# Datos de ejemplo: fechas (días) y temperaturas observadas
dates = np.array([1, 2, 3, 4, 5]).reshape(-1, 1)
temperatures = np.array([20.5, 21.0, 20.8, 21.5, 20.9])

# Crear y entrenar el modelo
model = LinearRegression()
model.fit(dates, temperatures)

# Predicción con datos de validación (no vistos durante el entrenamiento)
new_dates = np.array([6, 7]).reshape(-1, 1)
predicted_temps = model.predict(new_dates)

print(f"Predicciones para nuevos días: {predicted_temps}")

Underfitting: Aprendiendo demasiado poco

El underfitting ocurre cuando un modelo es demasiado simple y no puede capturar la señal real en los datos. Este tipo de modelos tienden a tener alta varianza (sensibilidad a los pequeños cambios en los datos) y baja precisión tanto en entrenamiento como en validación.

Ejemplo:

Imaginemos que estamos construyendo un modelo para predecir la densidad del tráfico en una carretera, utilizando solo el tiempo del día. Si el conjunto de datos es relativamente pequeño o limitado, un modelo lineal simple puede no tener suficiente capacidad para capturar las variaciones complejas del tráfico (que pueden depender de muchos factores como el día de la semana, el mes, etc.). En este caso, el modelo underfitea y probablemente tendrá una baja precisión tanto en entrenamiento como en validación.

# Datos de ejemplo: horas del día y densidad de tráfico (en unidades ficticias)
hours = np.array([6, 7, 8, 9, 10]).reshape(-1, 1)
traffic_density = np.array([25, 35, 45, 55, 65])

# Crear y entrenar el modelo
model = LinearRegression()
model.fit(hours, traffic_density)

# Predicción con nuevos datos (por ejemplo, a las 18:00)
predicted_density = model.predict(np.array([18]).reshape(-1, 1))

print(f"Densidad de tráfico predicha a las 18:00: {predicted_density}")

Errores típicos / trampas

1. Crear modelos demasiado complejos sin necesidad

A menudo, la creencia errónea es que más complejidad siempre significa mejor rendimiento. Esto puede llevar a overfitting si no hay suficiente data para justificar la complejidad del modelo.

2. Utilizar un conjunto de datos limitado o no representativo

Un conjunto de datos pequeño o que no representa adecuadamente el problema real puede conducir tanto al overfitting como al underfitting, dependiendo del nivel de flexibilidad del modelo.

3. Ignorar las posibles causas de over/underfitting durante la fase de preprocesamiento

El feature engineering es crucial para evitar ambos problemas. El uso inadecuado o el descuido en esta etapa puede llevar a modelos mal ajustados.

Checklist accionable

  1. Evalúa el rendimiento del modelo en varios conjuntos de datos: No depender solo del error en entrenamiento, sino comparar errores entre entrenamiento, validación y prueba.
  2. Usa curvas de aprendizaje para entender la varianza y el sesgo.
  3. Implementa técnicas de regularización: Para prevenir overfitting, penaliza parámetros complejos o ajuste al ruido.
  4. Aumenta el conjunto de datos si es posible: Un conjunto más grande puede ayudar a reducir la varianza del modelo y evitar overfitting.
  5. Simplifica el modelo si no funciona bien en datos de validación: Evalúa si el modelo es demasiado complejo o simple para el problema.
  6. Mantén un seguimiento de los errores comunes durante la fase de preprocesamiento.

Cierre: Siguientes pasos

1. Continúa explorando modelos más avanzados y técnicas de regularización

Una vez que hayas dominado las bases del overfitting y el underfitting, es hora de expandir tu conocimiento a modelos más complejos y técnicas para manejarlos.

2. Practica con proyectos reales

Trabaja en problemas prácticos y evalúa tus modelos en diferentes conjuntos de datos para entender mejor estos conceptos.

3. Aprende sobre validación cruzada e hiperparámetros

Estas técnicas son esenciales para garantizar que tu modelo se ajuste correctamente a los datos sin overfitting ni underfitting.

En resumen, el overfitting y el underfitting son dos trampas comunes en el desarrollo de modelos ML. Al comprender por qué estos problemas ocurren y cómo prevenirlas, podrás construir modelos más robustos y fiables.

Contacto

Indica tu objetivo (ChatGPT, RAG, agentes, automatización) y tu stack (web/backend).