Clasificación de Texto: Detección de Spam con Machine Learning

Un enfoque riguroso mediante NLP, TF-IDF y Complement Naive Bayes

Machine Learning
NLP
Clasificación
Explora cómo construir un modelo de clasificación de texto para detectar correos electrónicos de spam utilizando técnicas avanzadas de procesamiento de lenguaje natural y aprendizaje automático.
Autor/a

Anderson Camilo Rodriguez Salvador

Fecha de publicación

7 de julio de 2026

Introducción y Contexto del Proyecto

En la era de la comunicación digital instantánea, el filtrado de mensajes no deseados (spam) ha dejado de ser una simple conveniencia para convertirse en una necesidad crítica de seguridad y experiencia de usuario. Aunque los enfoques modernos basados en arquitecturas de aprendizaje profundo (como los Transformers) ofrecen un rendimiento excepcional, su elevado costo computacional y latencia los hacen poco viables para entornos de procesamiento en tiempo real, dispositivos con capacidades limitadas o dispositivos de borde (edge computing).

Este proyecto aborda el problema de la clasificación de mensajes SMS mediante una combinación clásica pero sumamente eficiente: el procesamiento de lenguaje natural (NLP) con TF-IDF (Term Frequency-Inverse Document Frequency) y un clasificador probabilístico Complement Naive Bayes (CNB). El objetivo principal es construir un clasificador extremadamente ligero, veloz y preciso, capaz de operar de manera óptima bajo severas condiciones de desbalanceo de clases.

Aspectos Generales del Conjunto de Datos

Para el desarrollo y validación de esta solución, utilizamos el conjunto de datos ucirvine/sms_spam, un conjunto de datos de referencia en el ámbito del procesamiento de texto que recopila mensajes SMS etiquetados como legítimos (ham) o no deseados (spam).

Problema a Resolver

Necesitamos extraer las características principales del conjunto de datos de mensajes de texto que nos permitan, a través de la creación de un modelo, realizar predicciones acerca de si un mensaje de texto es spam o no (ham).

Hallazgos

Durante la fase de Análisis Exploratorio de Datos (EDA), identificamos los siguientes hallazgos clave (insights):

  • Calidad de los datos y registros duplicados: El conjunto de datos inicial consta de 5,574 filas y presenta una consistencia óptima, ya que no se detectaron valores nulos o vacíos. Sin embargo, se identificaron 403 registros duplicados. Al profundizar en ellos, observamos que corresponden a expresiones cortas y cotidianas que los usuarios envían habitualmente por SMS (por ejemplo, variaciones de “Ok” como “Okie” u “Ok.”), así como respuestas rápidas automatizadas del tipo “Sorry, I’ll call later”. Para evitar sesgos en el entrenamiento y garantizar la capacidad de generalización del modelo, procedimos a eliminar estos duplicados.
  • Desbalanceo de clases:

La distribución del dataset limpio revela que el 87.3% (4,518) corresponde a mensajes válidos (ham), mientras que solo el 12.7% (653) está etiquetado como spam. Esta marcada asimetría nos indica que nos enfrentamos a un problema de clases altamente desbalanceadas. Para abordar esto, evaluamos implementar técnicas de sobremuestreo o utilizar algoritmos diseñados específicamente para mitigar este efecto. Por esta razón, desde esta etapa preliminar, nos inclinamos fuertemente por el uso de Complement Naive Bayes (CNB), dado que su formulación matemática está optimizada precisamente para manejar conjuntos de datos desequilibrados.

Una vez exploradas las características generales del dataset, guié el análisis a través de preguntas estratégicas que surgieron durante la exploración inicial. El objetivo de estas preguntas es descubrir patrones o tendencias ocultas que aporten valor al modelado.

¿Existe una relación entre la longitud del mensaje y su categoría (Spam vs. Ham)?

El propósito de esta pregunta es cuantificar el número de palabras de cada mensaje y analizar su comportamiento según la etiqueta correspondiente (ham o spam).Cabe resaltar que, de forma previa al conteo, se realizó una fase de limpieza que incluyó la eliminación de signos de puntuación y caracteres especiales, asegurando así que la métrica de longitud por cantidad de palabras fuera exacta y no se viera distorsionada por elementos de ruido.

De este histograma podemos extraer información valiosa, como la siguiente:

  • Independientemente de la etiqueta, la mayor concentración de mensajes tiene una longitud en el rango de 1 a 50 palabras.
  • Los mensajes válidos tienden a poseer una menor cantidad de palabras, lo que nos indica que suelen ser más directos, ya que su mayor concentración se posiciona en torno a las 10 palabras.
  • En cuanto a los mensajes spam, la mayor concentración de palabras se sitúa en torno a las 20-30 palabras. Esto quiere decir que los mensajes spam suelen tener una longitud ligeramente mayor que los mensajes válidos; sin embargo, sigue existiendo una gran cantidad de mensajes válidos que también se sitúan en torno a las 25 palabras.

Entonces, para responder la pregunta, podemos concluir que, si bien la concentración de palabras de los mensajes spam es ligeramente mayor que la de los mensajes válidos, ambas etiquetas se superponen, lo que nos indica que no hay un umbral o regla clara que podamos establecer para etiquetar los mensajes de acuerdo con su longitud.

Podemos complementar este análisis mediante la generación de un diagrama de cajas que nos permita identificar con mayor certeza dónde se encuentra la concentración de datos de acuerdo con cada etiqueta:

Aquí podemos confirmar lo siguiente:

  • La mayor concentración de datos de los mensajes válidos se encuentra entre 1 y aproximadamente 40 palabras, con una mediana ubicada en torno a las 10.
  • En cuanto a los mensajes etiquetados como spam, la mayor concentración de datos se encuentra en mensajes con longitudes de entre 15 y 35 palabras, con una mediana en torno a las 25 palabras.

¿Existen patrones de lenguaje, como el uso de mayúsculas, signos especiales o números, que diferencien spam de ham?

Mayúsculas

A partir del análisis del gráfico de densidad sobre la cantidad de letras mayúsculas en los mensajes, se identificaron los siguientes insights clave para el modelo:

  • Mensajes Válidos (Ham): Presentan una alta concentración en un rango estrecho (0 a 5 mayúsculas), alineándose con el uso ortográfico estándar (inicios de frase, nombres propios o siglas).
  • Mensajes Spam: Muestran una dispersión mucho más amplia y elevada (0 a 30 mayúsculas), impulsada por el uso estratégico de palabras completas en mayúsculas (ej. “FREE”) para captar la atención.

Aunque esta característica ofrece una separación más clara que el simple conteo de palabras, implementar una regla rígida (como clasificar como spam todo mensaje con más de 5 mayúsculas) es inviable por tres razones críticas:

  • Solapamiento y Falsos Positivos: Existe una intersección real en los datos. Un usuario legítimo expresando emoción en mayúsculas sería bloqueado erróneamente.
  • Vulnerabilidad (Evasión): Los emisores de spam pueden evadir fácilmente el filtro adaptando su redacción a minúsculas.
  • Omisión de la Semántica: El spam se define por su intención y contexto lingüístico. Depender de una sola métrica formal debilita la capacidad predictiva del sistema.

No existe un umbral cuantitativo perfecto basado únicamente en las mayúsculas debido al solapamiento de las distribuciones. Sin embargo, se confirma un patrón predictivo claro: el spam tiende a un volumen significativamente mayor de mayúsculas. Esta tendencia es un rasgo valioso que el clasificador Complement Naive Bayes (CNB) potenciará al combinarse con el análisis semántico del TF-IDF.

Signos especiales

Del análisis gráfico y estadístico de los caracteres especiales en los mensajes, extraemos los siguientes puntos clave:

  • Comportamiento y Solapamiento: Los mensajes válidos se concentran entre 0 y 5 caracteres, mientras que el spam abarca de 0 a 10. Dado que ambas distribuciones se solapan considerablemente cerca del origen, no existe un umbral limpio de separación.
  • Tendencia General: A partir de los 5 caracteres especiales, se observa una ligera tendencia: a mayor cantidad de estos caracteres, mayor es la probabilidad de que el mensaje sea spam.
  • El Fenómeno de la Cola Larga (>10 caracteres):

Al analizar el subgrupo con más de 10 caracteres especiales (38 mensajes en total), encontramos que el 84.2% son válidos y el 15.8% son spam.

Aunque a primera vista parecería que tener más de 10 caracteres especiales indica que un mensaje es válido, este comportamiento realmente se debe al desbalance de clases original del dataset (5,171 filas en total). Al ser una muestra tan pequeña (38 observaciones), carece de representatividad estadística y solo replica la proporción mayoritaria de mensajes válidos.

Por lo tanto, concluimos que sí existe una tendencia hacia el spam a mayor cantidad de caracteres especiales, pero esta métrica por sí sola no es concluyente y, por encima de los 10 caracteres, no hay datos suficientes para fijar un patrón definitivo.

Numeros

El análisis de la distribución y el diagrama de cajas revelan un patrón predictivo claro y diferenciado entre ambas clases:

  • Mensajes Válidos (Ham): Presentan una distribución asimétrica positiva con una concentración muy alta en 0 números (la gran mayoría contiene entre 0 y 3).
  • Mensajes Spam: Muestran una dispersión notablemente mayor, concentrándose principalmente entre 10 y 20 números, con una mediana en torno a 15. Este comportamiento es coherente con su naturaleza (inclusión de montos llamativos, cuentas de depósito o números de contacto).
  • Patrón de Probabilidad: Existe una relación directa: a mayor cantidad de números, mayor es la probabilidad de que el mensaje sea spam. Por el contrario, los mensajes válidos casi no los utilizan.
  • Certeza Moderada: Esta característica permite identificar la categoría del mensaje con un grado de certeza moderado. Sin embargo, no es infalible, ya que existe una pequeña probabilidad de encontrar mensajes de spam sin números.
  • Limitación de Regla Estática: Al ser una métrica fácilmente evadible por los emisores de spam, no se debe usar como un filtro rígido. Su verdadero valor radica en ser una variable complementaria dentro de un modelo complejo que capture también la semántica del texto (como TF-IDF + CNB).

¿Los mensajes que contienen URLs son más propensos a ser spam?

Para determinar si la inclusión de enlaces influye en la clasificación, se extrajeron las URLs del conjunto de datos original mediante la librería urlextract (basada en los dominios oficiales de la IANA). Esto garantizó una detección precisa sin depender de expresiones regulares o patrones estáticos que pudieran omitir variantes.

A nivel general, las URLs representan una porción pequeña del dataset: solo 160 mensajes (3% del total) contienen uno o más enlaces.

Al cruzar la presencia de URLs con las etiquetas de los mensajes, se observa un cambio drástico en la tendencia predictiva:

  • Mensajes Sin URLs: Existe una clara predominancia de mensajes válidos (Ham). El 89.2% son legítimos, mientras que el 10.8% restante corresponde a spam.
  • Mensajes Con URLs: La probabilidad se invierte por completo. El 68.8% son etiquetados como spam, frente a un 31.2% que se consideran válidos.

En conclusión, existe una relación directa y estadísticamente clara: un mensaje con URL es altamente propenso a ser spam (68.8%).

Aunque debido al desbalance inicial del dataset el volumen absoluto de spam sin URL sigue siendo mayor, la presencia de un enlace rompe la tendencia general y convierte al spam en la mayoría absoluta dentro de su subgrupo. Por lo tanto, esta característica cuenta con una alta capacidad predictiva que servirá como un excelente complemento semántico para nuestro modelo TF-IDF + CNB.

¿Cuáles son las palabras más comunes en los mensajes de spam? ¿Y en los de ham?

No Spam

De la frecuencia de cada palabra podemos extraer la siguiente información valiosa:

  • Distribución: La palabra con mayor frecuencia es “got” (226 ocurrencias), descendiendo gradualmente hasta “well” (125). Al no existir un término que domine la distribución, concluimos que el lenguaje en los mensajes SMS válidos es variado y está ampliamente distribuido.
  • Vocabulario principal: Las palabras “got”, “like”, “know”, “come” y “good” superan el umbral de las 200 ocurrencias, constituyendo los pilares del vocabulario utilizado.
  • Semántica: El vocabulario está dominado principalmente por verbos de acción y estado (got, know, come, see, want, think), conceptos afectivos (love, good) y términos cotidianos (home, day, time).
  • Ausencia de patrones de urgencia: Cabe resaltar que, en los mensajes válidos, no se observa vocabulario relacionado con urgencias o transacciones, lo cual indica que los usuarios no suelen emplear términos transaccionales en su comunicación cotidiana vía SMS.
  • Análisis complementario: En la nube de palabras (que incluye 40 términos), observamos vocablos adicionales con frecuencias moderadas, tales como “happy”, “sorry”, “later” y “night”. Aunque menos frecuentes, estos términos aportan un significado importante al contexto del mensaje.

Es fundamental aclarar que la frecuencia de aparición de cada palabra no se relaciona directamente con la cantidad de mensajes que la contienen, dado que un mismo mensaje puede incluir la misma palabra en numerosas ocasiones. Este factor debe considerarse para no sobreestimar la representatividad de ciertos términos en el conjunto de datos.

Spam

El análisis del léxico y la frecuencia de términos en el dataset revela una diferencia estructural profunda entre ambas clases:

  • Mensajes Válidos (Ham): Vocabulario Diverso
    • Términos más comunes: “got”, “like”, “know”, “come” y “good”.
    • Comportamiento: No existe dominancia de ninguna palabra sobre las demás, lo que refleja un lenguaje natural, variado y conversacional.
  • Mensajes Spam: Monótono y Persuasivo
    • Términos más comunes: “call” (dominante con >300 apariciones), “free” (188), “txt”, “mobile” y “stop”.
    • Estrategia Semántica: El vocabulario está diseñado para activar sesgos cognitivos mediante tres ejes claros:
      • Incentivos (Ganchos): free, prize, cash, win, new (asociados a valores monetarios como £1000 o £2000).
      • Urgencia (Presión): urgent, guaranteed, latest.
      • Llamados a la Acción (CTA) y Contacto: call, claim, reply, send, mobile, phone, txt.

Uno de los hallazgos más valiosos del análisis es que el uso de mayúsculas en términos clave altera drásticamente la probabilidad de spam, rompiendo distribuciones que en minúsculas son equitativas:

  • El caso de “STOP”: De 53 apariciones exactas de “STOP”, 52 corresponden a spam y solo una a ham (casi el 100% de probabilidad). Metodológicamente, se utiliza como una falsa opción de desuscripción para validar números activos.
  • El caso de “FREE” vs “free”: En minúsculas (“free”), la distribución es equilibrada (Ham: 59, Spam: 56). En mayúsculas (“FREE”), se vuelve un indicador casi absoluto de spam (Ham: 1, Spam: 90).
  • Otros términos: Este patrón de comportamiento se replica de manera similar en palabras de alta frecuencia como “URGENT”, “WIN” y “PHONE”.

El spam es altamente predecible y repetitivo. Mientras que las minúsculas mantienen proporciones divididas, la combinación de palabras clave escritas completamente en mayúsculas eleva la probabilidad de spam a cerca del 100%. Esta sensibilidad al contexto e intensidad de la escritura (case-sensitivity) es un patrón de altísimo valor jerárquico que el procesamiento de texto (TF-IDF) y el clasificador (CNB) explotarán para lograr una predicción precisa.

Creación del Modelo

Para llevar a cabo la creación del modelo, se exploraron diversas configuraciones tanto en el procesamiento del conjunto de datos mediante el método TF-IDF, como en el algoritmo Complement Naive Bayes (CNB). Durante este proceso, se modificaron variables clave como el vocabulario de entrenamiento, los métodos de tokenización y la vectorización de cada elemento, entre otras configuraciones.

En términos generales, los modelos evaluados presentaron métricas de desempeño muy competitivas y cercanas entre sí. Por ejemplo, al implementar TF-IDF y Complement Naive Bayes con sus parámetros por defecto sobre el conjunto de datos en bruto (crudo), se obtuvo una métrica F1-Score de 0.90. Este resultado es excelente y demuestra que, incluso utilizando los valores base y el conjunto de datos sin transformaciones avanzadas, el rendimiento inicial del modelo es sobresaliente.

Análisis de Impacto en el Negocio y Selección de Métricas

Para evaluar las modificaciones en el conjunto de datos y las configuraciones de los hiperparámetros, decidimos analizar el impacto real que tendría cada tipo de error del modelo en un escenario de producción. Las equivocaciones del modelo afectan al negocio de manera asimétrica; si bien el objetivo ideal es desviar todos los mensajes de spam hacia su carpeta correspondiente evitando que pasen a la bandeja de entrada, existe un escenario mucho más crítico y peligroso: cuando un mensaje válido (ham) es identificado erróneamente como spam.

Un correo legítimo puede contener información crucial para el usuario. Por lo tanto, al comparar el impacto de ambos errores, determinamos que lo ideal es detectar la mayor cantidad de spam posible, pero priorizando la reducción de los Falsos Positivos (etiquetar un mensaje válido como correo no deseado).

Con esta lógica de negocio en mente, implementamos la métrica F0.5-Score, la cual penaliza con el doble de severidad los falsos positivos en comparación con los falsos negativos. De este modo, enfocamos la búsqueda de la configuración idónea en maximizar este indicador, garantizando que el modelo sea mucho más cauteloso ante errores de alto impacto (Falsos Positivos) frente a los de bajo impacto (Falsos Negativos).

A continuación, se presentan los diferentes modelos evaluados junto con sus métricas más representativas:

Tabla 1: Resumen de Resultados de los Modelos
Modelo Tamaño TF-IDF Recall Precision F1-score (CV) F1-score stdev (CV) F0.5-score (CV) F0.5-score stdev (CV) F1-score (Val) F0.5-score (Val)
0 Modelo Base 7194 0.8673 0.9444 0.8975 0.0261 0.9249 0.0211 0.9043 0.9279
1 Modelo con vocabulario de 4000 palabras 4000 0.8980 0.9072 0.8977 0.0331 0.9025 0.0399 0.9026 0.9053
2 Modelo con GridSearchCV 42781 0.8571 1.0000 0.8967 0.0137 0.9515 0.0081 0.9231 0.9677
3 Modelo con Transformaciones 41112 0.8980 0.9888 0.9240 0.0228 0.9609 0.0137 0.9412 0.9692

Discusión de Resultados y Dimensionalidad

Como se puede observar, las métricas globales de los modelos son bastante similares. Sin embargo, un aspecto crucial a resaltar es la influencia de los hiperparámetros en el método TF-IDF. En dos de los cuatro modelos analizados, la matriz generada superó las 40,000 características, lo que representa un incremento de aproximadamente diez veces en comparación con el modelo que limitó el tamaño del vocabulario TF-IDF a 4,000 características.

Si bien en entornos de producción reales es fundamental evaluar la disponibilidad de recursos del servidor antes de integrar y desplegar un modelo, cabe destacar que los clasificadores basados en Naive Bayes se caracterizan por su alta eficiencia y bajo consumo de cómputo. Por lo tanto, en este caso particular, las altas dimensiones de la matriz TF-IDF resultante no generan un impacto adverso significativo en el rendimiento del sistema.

Selección del Modelo Final

Con base en el análisis comparativo detallado —evaluando las matrices de confusión y calculando métricas clave como Precision, Recall, F1-Score y F0.5-Score—, y alineando estos resultados con la lógica de negocio, se seleccionó el modelo optimizado mediante GridSearchCV como el más adecuado para su implementación en este caso de estudio.

A continuación, se presenta la Matriz de Confusión del modelo seleccionado evaluado sobre el conjunto de prueba (test):

Hiperparámetros del modelo final

Si deseas conocer a fondo los hiperparámetros utilizados tanto en el método TF-IDF como en el modelo Complement Naive Bayes (CNB), así como descargarlo e implementarlo para realizar tus propias pruebas en un entorno local, puedes acceder al repositorio interactivo. El modelo final se encuentra alojado en Hugging Face, donde también podrás realizar inferencias directamente desde sus servidores en la nube.

NotaNota

Ten en cuenta que la primera inferencia puede tardar unos segundos en ejecutarse si el servidor se encuentra en estado de reposo (inactivo); una vez iniciado, responderá de manera inmediata.

📊 Conocer Hiperparámetros del Modelo

Probar el Modelo

A continuación, encontrarás un cuadro interactivo diseñado para poner a prueba el modelo en tiempo real. El proceso es muy sencillo: simplemente ingresa el texto de un mensaje en el recuadro y presiona el botón “Analizar Texto”. El modelo clasificará el mensaje automáticamente indicando si corresponde a un Mensaje Válido (Ham) o si ha sido etiquetado como Spam. Además de la categoría, podrás observar el nivel de certeza de la predicción, ya que la interfaz mostrará detalladamente los porcentajes de probabilidad que el algoritmo ha calculado para cada una de las dos clases.

AdvertenciaRestricción de Idioma

El modelo ha sido entrenado y validado de manera exclusiva utilizando el conjunto de datos ucirvine/sms_spam, el cual está compuesto en su totalidad por mensajes en el idioma inglés.

Adicionalmente, tanto la etapa de extracción de características (TF-IDF) como las reglas gramaticales empleadas para la tokenización con NLTK han sido configuradas bajo los estándares lingüísticos de dicho idioma. Por lo tanto, el modelo no es apto para analizar o clasificar mensajes en español u otros idiomas, ya que carece del vocabulario y las estructuras gramaticales necesarias para realizar una predicción precisa.

Para facilitarte las pruebas, a continuación se presentan algunos mensajes SMS reales de ejemplo. Estos han sido extraídos directamente del conjunto de datos original (el cual puedes consultar Aqui). Puedes copiar y pegar cualquiera de ellos en el cuadro interactivo, o bien escribir tus propios mensajes personalizados para evaluar el rendimiento y la robustez del modelo:

  • Go until jurong point, crazy.. Available only in bugis n great world la e buffet… Cine there got amore wat…
  • Free entry in 2 a wkly comp to win FA Cup final tkts 21st May 2005. Text FA to 87121 to receive entry question(std txt rate)T&C’s apply 08452810075over18’s
  • Nah I don’t think he goes to usf, he lives around here though
  • WINNER!! As a valued network customer you have been selected to receivea £900 prize reward! To claim call 09061701461. Claim code KL341. Valid 12 hours only.
  • I’m gonna be home soon and i don’t want to talk about this stuff anymore tonight, k? I’ve cried enough today.
  • Please call our customer service representative on 0800 169 6031 between 10am-9pm as you have WON a guaranteed £1000 cash or £5000 prize!
NotaNota

Ten en cuenta que la primera inferencia puede tardar unos segundos en ejecutarse si el servidor se encuentra en estado de reposo (inactivo). Una vez que el servidor se inicie, responderá de manera inmediata a todas tus consultas.

⚠️ ¿El cuadro interactivo no se despliega correctamente? Si el bloque interactivo presenta algún problema de visualización o demora en cargar debido a las restricciones del navegador, puedes acceder directamente a la aplicación alojada en los servidores oficiales de Hugging Face, donde podrás probar su funcionamiento sin ningún inconveniente.

🚀 Probar Aplicación en Hugging Face

Conclusiones

A través de todo el análisis y modelado que hemos realizado en el conjunto de datos SMS, podemos concluir lo siguiente:

  • Descripción del conjunto de datos: Está conformado por 5.573 observaciones, de las cuales se han eliminado 403 debido a que son mensajes duplicados. Además, presenta un gran desbalance a favor de los mensajes válidos, los cuales representan aproximadamente el 87% de todas las observaciones, mientras que los mensajes de spam representan alrededor del 13% restante.
  • ¿Tiene que ver la longitud del mensaje con su etiqueta (spam vs. ham)?: Si bien la longitud de los mensajes de spam es ligeramente mayor a la de los mensajes válidos, las distribuciones se superponen, lo que indica que no hay un umbral o regla clara que podamos establecer para etiquetar los mensajes de acuerdo con su longitud. La mediana de los mensajes válidos se ubica en alrededor de 10 palabras, mientras que la de los mensajes de spam se ubica en alrededor de 25.
  • ¿Existen patrones de lenguaje (uso de mayúsculas, signos especiales o números) que diferencien spam de ham?:
    • Mayúsculas: Los mensajes de spam tienen un rango más amplio en la cantidad de mayúsculas con respecto a los mensajes válidos, lo que indica una tendencia a un mayor uso de estas en el spam. No hay un umbral que permita separarlos claramente, ya que las distribuciones se solapan, pero se resalta su contribución al modelo como información útil.
    • Signos especiales: Existe una tendencia de que, a mayor cantidad de caracteres especiales, mayor será la probabilidad de que el mensaje sea spam; aunque cabe aclarar que, por sí sola, esta característica no es concluyente. Asimismo, por encima de 10 caracteres especiales no hay suficientes observaciones para extraer una tendencia clara.
    • Números: La cantidad de números en los mensajes presenta un patrón que permite identificar con un grado de certeza moderado si el mensaje es válido o spam. Esto se debe a que, a mayor cantidad de números, hay más probabilidades de que sea spam; sin embargo, aun cuando el mensaje no contiene números, existe una pequeña probabilidad de que sea spam.
  • ¿Los mensajes que contienen URLs son más propensos a ser spam?: Sí, hay una relación clara: la probabilidad de que un mensaje sea spam dado que contiene una URL es del 68.8%, frente al 31.2% de los que no son spam. Esto contrasta con los mensajes que no contienen URLs, donde las probabilidades se invierten: es más probable que sea un mensaje válido (89.2%) a que sea spam (10.8%). Esto se explica por el desbalance general, donde hay una gran predominancia de mensajes válidos. Cuando se filtra por los mensajes con URL, esa tendencia se rompe drásticamente y el spam pasa a ser la clara mayoría, lo que indica que esta característica tiene una alta capacidad predictiva.
  • ¿Cuáles son las palabras más comunes en los mensajes de spam y en los de ham?: En cuanto a los mensajes válidos, la palabra más repetida es ‘got’ (226 ocurrencias). La frecuencia va disminuyendo gradualmente hasta la palabra ‘well’ (125); no hay una palabra que domine la distribución, lo que indica que el lenguaje es variado. Por otro lado, en los mensajes de spam, la palabra ‘call’ domina la distribución con más de 300 apariciones, representando una concentración muy alta. Hay una brecha notable con la siguiente palabra, ‘free’ (188 apariciones), lo que hace que el conjunto de spam sea bastante monótono y repetitivo. Adicionalmente, se destaca el uso de palabras en mayúsculas como ‘STOP’, ‘FREE’ y ‘URGENT’.
  • Método TF-IDF: Lo hemos utilizado por ser ideal para trabajar con texto, ya que permite tokenizar y luego vectorizar cada palabra de acuerdo con su importancia dentro del documento, multiplicada por la importancia en el corpus.
  • Modelo de clasificación: Hemos utilizado Complement Naive Bayes (CNB), una extensión de Multinomial Naive Bayes (MNB) enfocada en conjuntos de datos desbalanceados. Este calcula la probabilidad de que la característica aparezca en el complemento de dicha clase, permitiendo una clasificación equitativa para la clase minoritaria.
  • Modelo base: Al utilizar los valores por defecto del método TF-IDF y el modelo CNB, sin procesamiento previo, obtuvimos valores de rendimiento muy buenos, con una métrica ‘F1’ de 0.90. Esto nos indica que el modelo, utilizando el método TF-IDF y el modelo por sí solo, es capaz de clasificar muy bien los mensajes de acuerdo con su contenido; es decir, tan solo con identificar las herramientas adecuadas para nuestro caso de estudio (el método TF-IDF y Complement Naive Bayes), hemos obtenido una capacidad de generalización muy alta del modelo.
  • Lógica de negocio y métrica ‘F0.5’: En nuestro caso, le hemos dado más importancia a los falsos positivos que a los falsos negativos, ya que consideramos que un mensaje importante que se va a la carpeta de spam genera un impacto negativo mayor en el negocio. Por ende, creamos la métrica ‘F0.5’, basada en ‘F1’, pero penalizando con mayor fuerza los falsos positivos.
  • Impacto de limitar el vocabulario: El impacto en la capacidad de generalización fue muy bajo; obtuvimos un valor de ‘F0.5’ de 0.90 (frente al 0.92 del modelo base). Es decir, disminuimos en 45% las dimensiones del modelo sin apenas afectar su capacidad predictiva.
  • Modelo de búsqueda por rejilla (GridSearch): Obtuvo los mejores resultados en generalización, con un ‘F0.5’ de 0.95. Como contrapartida, las dimensiones de la matriz TF-IDF crecieron cerca de 6 veces. Esto puede ser una limitante con recursos de cómputo restringidos, aunque priorizamos la generalización.
  • Preprocesamiento y estandarización: La mejora obtenida al procesar el conjunto de datos fue mínima (en torno a 0.01), lo que no representa una ventaja significativa frente a los modelos entrenados con el conjunto de datos crudo. Por tanto, no fue necesario modificar los datos antes del método TF-IDF y el modelo CNB.
  • Modelo final: Ha obtenido métricas muy altas al evaluarlo con el conjunto de prueba, con una ‘F1’ de 0.89 y una ‘F0.5’ de 0.94, demostrando una excelente capacidad de generalización. Hemos minimizado los falsos positivos, alineándonos con el impacto de negocio definido, logrando un modelo capaz de clasificar adecuadamente la gran mayoría de mensajes nuevos.

Jupyter Notebook

A continuación, tienes a tu disposición el Notebook interactivo que contiene todos los bloques de código utilizados para llevar a cabo el análisis y el modelado predictivo de este proyecto. En este documento encontrarás un desglose detallado de cada una de las fases del flujo de trabajo: desde la carga y limpieza del conjunto de datos, pasando por la ingeniería de características con TF-IDF, hasta el proceso de entrenamiento, optimización de hiperparámetros y evaluación final del modelo seleccionado.

Para revisar el código completo y replicar el experimento en tu entorno local, puedes acceder a continuación:

📓 Explorar Jupyter Notebook del Proyecto

Contacto

Muchas gracias por tomarte el tiempo de revisar este informe de análisis y modelado de datos.

Si tienes alguna pregunta, sugerencia o deseas conectar conmigo, no dudes en escribirme o visitar mis perfiles profesionales: