Saltar al contenido

Lección 8 de 20 · Lectura y práctica

Práctica: Implementar Validación para un Modelo de Regresión

Tipo de lección: VideoConcepto claveLa validación en APIs de Machine Learning es como el control de calidad en una fábrica: asegura que los datos de entrada cumplan con los estándares necesarios antes de que el modelo los.

Del concepto a la práctica

Taller de esta lección

Una regresión necesita validar unidades y relaciones, no solo que los campos sean numéricos. Usaremos una estimación didáctica en euros por metro cuadrado, con superficie y habitaciones positivas.

Ejemplo resuelto

Fórmula: importe = superficie * 2000 + habitaciones * 5000. Para 50 m² y 2 habitaciones: 50*2000 + 2*5000 = 110000. Es una regla de ejercicio, no una valoración real.

La unidad del resultado es euros ficticios; superficie se expresa en m² y habitaciones es un conteo entero. Añade una prueba con habitaciones=2.5 y otra con superficie no finita: ambas deben rechazarse. Los rangos por separado no prueban por sí mismos una relación entre campos; si añades una relación, declárala como otra regla y verifica sus límites.

Pruébalo

  1. Exige superficie entre 10 y 300 m².

  2. Exige habitaciones entre 1 y 8.

  3. Calcula primero el componente por superficie y luego el adicional.

  4. Devuelve ambos componentes y el total.

Error frecuente: llamar “precio por m²” al importe total. Corrección: conservar 2000 como precio unitario y sumar el componente de habitaciones por separado.

Comprueba tu resultado

La salida para 50 y 2 debe contener componentes 100000 y 10000, total 110000. Una superficie de 0 o 301 debe rechazarse.

Flujo de datos: dos formatos de la misma fecha se normalizan y un vacío queda marcado antes de comprobar tipos, duplicados y unidades.
CursaloMapa de práctica
Antes del gráfico, revisa los datos

Antes de analizar, comprueba los tipos, valores vacíos, duplicados y unidades. Decide cómo tratar cada problema según el contexto y conserva la trazabilidad del cambio. Un gráfico solo es útil si los datos de entrada son coherentes.

Ver la infografía en tamaño completo ↗

Tipo de lección: Video

Concepto clave

La validación en APIs de Machine Learning es como el control de calidad en una fábrica: asegura que los datos de entrada cumplan con los estándares necesarios antes de que el modelo los procese. En producción, esto previene errores costosos y mantiene la confiabilidad del sistema.

FastAPI utiliza Pydantic para validación declarativa, lo que significa que defines las reglas en modelos de datos y el framework se encarga del resto. Para modelos de regresión, esto incluye validar rangos numéricos, tipos de datos y relaciones entre características. Sin validación, un valor atípico o tipo incorrecto podría causar predicciones erróneas o caídas del servicio.

Cómo funciona en la práctica

Imagina que tienes un modelo de regresión para predecir precios de viviendas basado en área, habitaciones y ubicación. La validación asegura que el área sea positiva, las habitaciones sean enteros y la ubicación esté en una lista permitida. FastAPI valida automáticamente cuando recibe una solicitud HTTP.

Paso a paso: primero, defines un modelo Pydantic con restricciones. Luego, lo usas en el endpoint de FastAPI. Si los datos no cumplen, FastAPI devuelve un error 422 con detalles. Esto es crucial en producción para evitar que datos malformados lleguen al modelo.

Codigo en accion

Antes: sin validación explícita, el código es vulnerable a errores.

from fastapi import FastAPI
import numpy as np

app = FastAPI()

# Modelo simulado
def predict_price(area: float, rooms: int, location: str):
    # Sin validación, esto podría fallar con datos incorrectos
    return 100000 + 200 * area + 50000 * rooms

@app.post("/predict")
async def predict(area: float, rooms: int, location: str):
    price = predict_price(area, rooms, location)
    return {"predicted_price": price}

Después: con validación usando Pydantic, el sistema es robusto.

from fastapi import FastAPI, HTTPException
from pydantic import BaseModel, Field, validator
from typing import List
import numpy as np

app = FastAPI()

# Modelo Pydantic para validación
class HouseFeatures(BaseModel):
    area: float = Field(..., gt=0, description="Área en metros cuadrados, debe ser positiva")
    rooms: int = Field(..., ge=1, le=10, description="Número de habitaciones, entre 1 y 10")
    location: str = Field(..., min_length=2, max_length=50)
    
    @validator('location')
    def validate_location(cls, v):
        allowed_locations = ["centro", "suburbio", "rural"]
        if v.lower() not in allowed_locations:
            raise ValueError(f"Ubicación debe ser una de: {allowed_locations}")
        return v.lower()

# Modelo ML simulado
def predict_price(features: HouseFeatures):
    # Lógica de predicción con datos validados
    base_price = 100000
    area_coef = 200
    rooms_coef = 50000
    location_bonus = {"centro": 30000, "suburbio": 10000, "rural": 0}
    
    price = base_price + area_coef * features.area + rooms_coef * features.rooms + location_bonus[features.location]
    return price

@app.post("/predict")
async def predict(features: HouseFeatures):
    try:
        price = predict_price(features)
        return {"predicted_price": price, "status": "success"}
    except Exception as e:
        raise HTTPException(status_code=500, detail=f"Error en predicción: {str(e)}")

Errores comunes

  • No validar rangos numéricos: permitir valores negativos para área puede distorsionar predicciones. Solución: usar Field con gt=0 o ge=0.
  • Ignorar validación de categorías: aceptar ubicaciones no soportadas causa errores en el modelo. Solución: usar validator con lista permitida.
  • Falta de manejo de errores personalizado: devolver errores genéricos confunde a los clientes. Solución: usar HTTPException con mensajes claros.
  • Validación solo en frontend: confiar en validación del cliente deja la API vulnerable. Solución: validar siempre en el backend con Pydantic.
  • No probar casos límite: no verificar bordes como valores máximos lleva a fallos en producción. Solución: incluir pruebas con valores extremos.

Checklist de dominio

  1. ¿Definiste un modelo Pydantic con Field para restricciones básicas?
  2. ¿Usaste validators personalizados para reglas complejas?
  3. ¿Incluiste manejo de errores HTTP específicos (e.g., 422, 500)?
  4. ¿Probaste la API con datos válidos e inválidos?
  5. ¿Documentaste las reglas de validación en los docstrings?
  6. ¿Consideraste el impacto en rendimiento (validación vs. velocidad)?
  7. ¿Integraste la validación con el pipeline de ML existente?

Implementar validación para un modelo de predicción de salarios

En este ejercicio, crearás un endpoint FastAPI para un modelo de regresión que predice salarios basado en experiencia, educación y sector. Sigue estos pasos:

  1. Crea un nuevo proyecto FastAPI o modifica uno existente.
  2. Define un modelo Pydantic llamado SalaryFeatures con:
    • experience_years: float, debe ser entre 0 y 50 (usa Field).
    • education_level: string, solo permite "bachiller", "licenciatura", "maestria", "doctorado" (usa validator).
    • sector: string, solo permite "tech", "finanzas", "salud", "otros" (usa validator).
  3. Implementa una función predict_salary que simule un modelo ML (e.g., salario = 30000 + 1000 * experiencia + bonus por educación y sector).
  4. Crea un endpoint POST /predict-salary que use el modelo Pydantic y devuelva la predicción.
  5. Agrega manejo de errores: devuelve 422 para validación fallida y 500 para errores internos.
  6. Prueba con curl o Postman usando datos válidos e inválidos.
Pistas
  • Usa Field de Pydantic con parámetros como ge y le para rangos numéricos.
  • En el validator, convierte strings a minúsculas para hacer comparaciones insensibles a mayúsculas.
  • Considera usar un diccionario para mapear educación y sector a bonos en la función de predicción.

Evalua tu comprension

Completa el quiz interactivo de arriba para ganar XP.

Sigue con FastAPI para APIs de Machine Learning en Producción

Esta lección forma parte de un curso de Cursalo. Revisa su programa y elige entre la compra individual o el acceso a toda la escuela.

Si ya tenías acceso a este curso, entra con tu cuenta: tus derechos y tu progreso se conservan. No necesitas comprarlo de nuevo.

01 / ELEGIR UNA RUTA

El próximo paso

Aprende IA mientras construyes algo que sí necesitas.

Empieza por el curso inicial o explora el catálogo para encontrar una práctica alineada con tu trabajo.