Logo de CursoIA
CursoIA Curso de Inteligencia Artificial

Overfitting y underfitting, Unidad 1 — Qué significan realmente overfitting y underfitting, 1.1 — Aprender patrones vs memorizar datos ·

Aprender la señal

Aprender la señal: Distinguir entre overfitting y underfitting

Introducción

En el mundo del machine learning, aprender a distinguir entre overfitting (sobreajuste) y underfitting (subajuste) es fundamental para construir modelos predictivos fiables. La capacidad de un modelo de "aprender la señal" —es decir, capturar las verdaderas relaciones entre las variables en los datos— sin memorizar el ruido o patrones excesivamente específicos del conjunto de entrenamiento, es una habilidad crucial para cualquier profesional en ciencia de datos.

En este artículo, exploraremos cómo identificar y entender la diferencia entre overfitting y underfitting. Aprenderemos a través de ejemplos prácticos y discutiremos errores comunes que se deben evitar al diseñar modelos efectivos.

Explicación principal con ejemplos

El concepto clave aquí es el balance adecuado entre aprender la señal (aprender las verdaderas relaciones en los datos) y memorizar el ruido o patrones excesivamente específicos. Vamos a ver un ejemplo sencillo para ilustrar esto:

import numpy as np
import matplotlib.pyplot as plt

# Generación de datos sintéticos
np.random.seed(0)
x = np.linspace(-3, 3, 100)
y = np.sin(x) + np.random.normal(0, 0.25, size=x.shape)

plt.scatter(x, y, label='Datos reales')
plt.title("Datos sintéticos con ruido")
plt.xlabel('x')
plt.ylabel('y')
plt.legend()
plt.show()

# Definición de un modelo simple (lineal)
def linear_model(x):
    return np.sin(x) * 1.0

# Definición de un modelo complejo
def complex_model(x, a=2.0, b=3.0):
    return a * np.sin(b*x) + b * np.cos(a*x)

plt.figure(figsize=(12, 6))

# Plot del modelo simple (underfitting)
plt.subplot(1, 2, 1)
plt.scatter(x, y, label='Datos reales')
plt.plot(x, linear_model(x), color='red', label='Modelo lineal')
plt.title("Modelo simple (underfitting)")
plt.xlabel('x')
plt.ylabel('y')
plt.legend()

# Plot del modelo complejo (overfitting)
plt.subplot(1, 2, 2)
plt.scatter(x, y, label='Datos reales')
plt.plot(x, complex_model(x), color='blue', label='Modelo complejo')
plt.title("Modelo complejo (overfitting)")
plt.xlabel('x')
plt.ylabel('y')
plt.legend()

plt.tight_layout()
plt.show()

Errores típicos / trampas

Aprender a diferenciar entre overfitting y underfitting no es solo cuestión de observar el comportamiento del modelo en los datos de entrenamiento. Aquí hay algunos errores comunes que se deben evitar:

  1. Sobreinterpretación del conjunto de validación: A menudo, los modelos pueden parecer "funcionar bien" en un conjunto de validación sin ser generalmente válidos. Es crucial separar claramente entre datos de entrenamiento y validación (o mejor aún, utilizar validación cruzada).
  1. Escalar demasiado alto o bajo: La elección del grado de los polinomios o la complejidad de los modelos no lineales puede llevar a overfitting o underfitting. Un modelo que es demasiado simple no capturará las relaciones en los datos, mientras que uno que es demasiado complejo podría memorizar el ruido.
  1. Omitir variables relevantes: Al omitir variables importantes o realizar feature engineering insuficiente, podemos subestimar la capacidad del modelo para generalizar a nuevas observaciones.

Checklist accionable

Aquí hay un conjunto de puntos que pueden ayudarte a prevenir overfitting y underfitting:

  1. Separación correcta de datos: Divide tus datos en conjuntos de entrenamiento, validación y prueba. Usa estos conjuntos para evaluar la generalización del modelo.
  1. Validación cruzada: Utiliza técnicas como k-fold cross-validation para obtener una estimación más precisa del rendimiento del modelo en nuevos datos.
  1. Regularización: Aplica regularización (como Ridge o Lasso) a modelos que son demasiado complejos para penalizar el overfitting.
  1. Prueba con diferentes conjuntos de características: Asegúrate de experimentar con distintos conjuntos de características y técnicas de feature engineering para evitar subestimar la capacidad del modelo.
  1. Ajuste iterativo: Experimenta con diferentes hiperparámetros y modelos hasta encontrar el equilibrio adecuado entre overfitting y underfitting.
  1. Visualización: Usa gráficos como las curvas de aprendizaje para observar cómo la precisión del modelo varía a medida que aumentan los datos en conjunto de entrenamiento y validación.
  1. Conocimiento de dominio: Utiliza el conocimiento del dominio para guiar la selección de modelos y características, evitando sobreajustar o subajustar basado solo en los datos observados.

Siguientes pasos

Ahora que has aprendido a distinguir entre overfitting y underfitting, es importante seguir avanzando en tu comprensión del machine learning. Aquí hay algunos pasos sugeridos:

  • Evaluación de modelos: Aprende más sobre la evaluación y validación de modelos para asegurarte de que estás midiendo su rendimiento correctamente.
  • Feature engineering: Mejora tus habilidades en feature engineering para capturar mejor las relaciones entre variables.
  • Modelos avanzados: Explora modelos más complejos como redes neuronales y ensembles para entender cómo se comportan estos en diferentes situaciones.

¡Felicitaciones por tomar el primer paso hacia una comprensión más profunda del machine learning!


Última actualización: 2025-12-26

Contacto

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