Tu primer clasificador: spam vs no-spam con 30 líneas de Python
Es hora de construir. En esta lección montas tu primer clasificador de spam en menos de 30 líneas de Python. Empezamos con una versión "a mano" (sin IA real) para entender qué hace por dentro, y luego la mejoramos con IA.
El problema
Tenemos correos entrantes y queremos saber, para cada uno, si es spam o no spam. Es una tarea de clasificación binaria — la más simple del mundo de la IA.
Versión 1: clasificador con reglas (sin IA)
Crea un fichero spam_v1.py con esto:
PALABRAS_SOSPECHOSAS = [
"gratis", "ganador", "oferta única", "click aquí",
"envia tus datos", "millonario", "viagra", "100% garantizado"
]
def es_spam(correo: str) -> bool:
"""Devuelve True si el correo contiene palabras sospechosas."""
texto = correo.lower()
coincidencias = sum(1 for palabra in PALABRAS_SOSPECHOSAS if palabra in texto)
# Si tiene 2 o más palabras sospechosas, lo consideramos spam
return coincidencias >= 2
# Lista de prueba
correos = [
"Hola Joaquín, ¿tienes un rato mañana para la reunión?",
"GRATIS! Eres el GANADOR de un iPhone, click aquí para reclamar",
"Adjunto la factura del mes, revisa cuando puedas",
"Oferta única, hazte millonario en 7 días, 100% garantizado",
]
for c in correos:
veredicto = "🚫 SPAM" if es_spam(c) else "✉️ OK"
print(f"{veredicto} → {c[:60]}...")
Ejecuta: python spam_v1.py. Deberías ver:
✉️ OK → Hola Joaquín, ¿tienes un rato mañana para la reunión?...
🚫 SPAM → GRATIS! Eres el GANADOR de un iPhone, click aquí para reclamar...
✉️ OK → Adjunto la factura del mes, revisa cuando puedas...
🚫 SPAM → Oferta única, hazte millonario en 7 días, 100% garantizado...
¿Esto es IA? Técnicamente no — son reglas if/else. Pero sirve para entender el patrón: entrada (correo) → procesamiento (contar palabras) → salida (booleano).
Las limitaciones de la versión 1
- Si el spammer escribe "g.r.a.t.i.s" o "GR4TIS", no lo detectas.
- Si un correo legítimo contiene "oferta única" porque es una promoción real, lo marcas mal.
- Cada nuevo patrón de spam exige añadir reglas manualmente. No escala.
Aquí es donde la IA de verdad se vuelve útil: aprende patrones que no escribes a mano.
Versión 2: clasificador con IA (usando la API de Claude)
Ahora delegamos la decisión a un modelo de lenguaje. Te adelanto la lección 5: necesitas una API key. Si todavía no la tienes, salta este código y vuelve después de la lección 5.
import anthropic
# Necesitas tu ANTHROPIC_API_KEY como variable de entorno
client = anthropic.Anthropic()
def es_spam_ia(correo: str) -> bool:
"""Pregunta a Claude si un correo es spam."""
respuesta = client.messages.create(
model="claude-haiku-4-5-20251001",
max_tokens=10,
messages=[{
"role": "user",
"content": f'Responde SOLO con "SI" o "NO". ¿Es spam este correo?\n\n"""\n{correo}\n"""'
}]
)
return respuesta.content[0].text.strip().upper().startswith("SI")
correos = [
"Hola Joaquín, ¿tienes un rato mañana para la reunión?",
"GR4TIS! Eres el GAN4DOR de un iPhone, klick aquí",
"Te recuerdo que mañana es la entrega del proyecto, ¿todo listo?",
"Hazte millonari@ desde casa, sin esfuerzo, garantizado",
]
for c in correos:
veredicto = "🚫 SPAM" if es_spam_ia(c) else "✉️ OK"
print(f"{veredicto} → {c[:60]}...")
Diferencias clave de la versión IA:
- Detecta variaciones (GR4TIS, KLICK) sin que hayas listado esas palabras.
- Entiende el contexto, no sólo palabras sueltas.
- El "código" se simplifica enormemente — la complejidad la tiene el modelo.
- Coste: cada llamada cuesta una fracción de céntimo. En el correo de Gmail con miles de millones de correos al día, esto importa. Para tu primer prototipo: insignificante.
Reflexión: ¿cuándo usar cuál?
- Reglas a mano: problemas muy simples, deterministas, sin internet, sin presupuesto.
- Modelo entrenado por ti (scikit-learn): problemas específicos con datos tuyos, donde necesitas control total y bajo coste por predicción.
- IA via API: problemas que requieren entender lenguaje, contexto o conocimiento general. Coste pequeño por llamada, máxima flexibilidad.
Checklist antes de marcar completada
- Has ejecutado
spam_v1.pyy ves resultados correctos para los 4 correos. - Entiendes por qué la versión con reglas se rompe con "GR4TIS".
- Has leído el código de
spam_v2(lo ejecutarás después de la lección 5). - Sabes cuándo conviene usar reglas, modelo propio o API de IA.
Ya tienes tu primer mini-producto. En la próxima lección conectamos con una API real (Claude o OpenAI) y construimos algo más potente: un generador de descripciones para productos.
📝 Comprueba lo aprendido
Responde estas 4 preguntas y acierta al menos el 60% para desbloquear el botón "Marcar como completada".