16 · Clasificador de spam: completo con BOW
Construye un clasificador de spam con forma de producción usando CountVectorizer + LogisticRegression — el proyecto NLP canónico que une todas las lecciones clásicas.
Construye un clasificador de spam de principio a fin con BOW + LogisticRegression — el proyecto NLP canónico que une todas las lecciones clásicas.
Sin esto:
Todas las piezas del capítulo permanecen desconectadas; el proyecto muestra el ensamblaje.
Cada concepto que has aprendido hasta ahora — tokenización, stopwords, Bag of Words, n-gramas, TF-IDF — existe para servir un propósito: alimentar un clasificador. Esta lección ensambla esas piezas en un pipeline completo con forma de producción.
La tarea es detección de spam: dado un mensaje SMS, predecir si es spam o ham (legítimo). Es un problema de clasificación binaria con fuerte desequilibrio de clases (el spam típicamente es el 10–20% del tráfico), entradas adversariales (los spammers intentan activamente evadir los clasificadores) y un alto costo asimétrico de error (un falso positivo — marcar un mensaje real como spam — es molesto, pero un falso negativo — dejar pasar phishing — es peligroso).
El pipeline tiene tres etapas:
- Vectorizar — CountVectorizer con bigramas convierte cada mensaje en una matriz de conteos dispersa. Los bigramas capturan frases como "free prize" que los unigramas pierden individualmente.
- Clasificar — LogisticRegression sobre la matriz de conteos. Un modelo lineal sobre features BOW es el clasificador de spam estándar antes del deep learning.
- Evaluar —
classification_reportda precisión, recall y F1 por clase. Nunca confíes solo en la exactitud con clases desbalanceadas.
Después de esta lección también inspeccionarás las importancias de features del modelo — qué n-gramas señalan con mayor fuerza spam y ham — y ejecutarás predicciones con puntuaciones de confianza sobre mensajes no vistos.
Python (in browser)
Python runs entirely in your browser via Pyodide (~6 MB on first Run, cached after).
Python (in browser)
Python runs entirely in your browser via Pyodide (~6 MB on first Run, cached after).
Python (in browser)
Python runs entirely in your browser via Pyodide (~6 MB on first Run, cached after).
Python (in browser)
Python runs entirely in your browser via Pyodide (~6 MB on first Run, cached after).
Checklist de producción: class_weight, reglas honeypot, humanos en el loop, ajuste de umbral
¿Cuál es el tipo de error más peligroso en un clasificador de spam?
- El pipeline canónico de detección de spam es: CountVectorizer(ngram_range=(1,2), stop_words='english') → LogisticRegression. Los bigramas capturan señales de spam de múltiples palabras como 'free prize' y 'click now' que los unigramas pierden cuando las palabras aparecen por separado.
- Nunca evalúes solo con exactitud en clases desbalanceadas — siempre inspecciona classification_report por clase. Un modelo que predice 'ham' para todo obtiene alta exactitud pero cero recall de spam.
- La importancia de features via coeficientes de LogReg revela lo que el modelo aprendió: los coeficientes positivos más altos son tokens de spam (FREE, WINNER, URGENT), los coeficientes negativos más altos son tokens de ham (schedule, meeting, home). Inspeccionarlos detecta errores y genera confianza.
- Los clasificadores de spam de producción añaden: class_weight='balanced' para datos desbalanceados, filtros previos de honeypot basados en reglas, revisión humana de casos inciertos y ajuste de umbral mediante curvas precisión-recall en lugar del corte predeterminado de 0.5.
Gmail, Outlook, los filtros de spam SMS y los clasificadores de URL de phishing usan exactamente esta forma de pipeline. El espacio de features crece a millones de n-gramas en producción, pero el esqueleto CountVectorizer + LogisticRegression es idéntico. El mismo patrón se aplica a la moderación de contenido (discurso de odio, detección de abuso), clasificación de intención y cualquier tarea de etiquetado de texto binario donde la interpretabilidad importa.
Si lo quitas: Las piezas permanecen desconectadas; este proyecto es la síntesis. Sin construir tú mismo un pipeline de extremo a extremo completo, CountVectorizer, LogisticRegression, classification_report e inspección de features se sienten como herramientas separadas en lugar de un flujo de trabajo de producción coherente.