Modelo de Clasificación de Spam usando TF-IDF y Complement Naive Bayes
Este modelo ha sido entrenado para clasificar mensajes de texto, determinando si son válidos (ham) o si corresponden a mensajes de SPAM, basándose únicamente en el contenido del mensaje.
Conjunto de Datos
El conjunto de datos utilizado para llevar a cabo el entrenamiento del modelo ha sido ucirvine/sms_spam, el cual contiene mensajes SMS reales en el idioma inglés.
Arquitectura del Modelo
El modelo está compuesto por dos pasos principales:
TF-IDF (Term Frequency-Inverse Document Frequency): Primero se tokeniza cada palabra de cada mensaje SMS para, posteriormente, vectorizarla de acuerdo con el método TF-IDF. Este método consiste en asignar una puntuación a las palabras presentes en un texto con base en su frecuencia (número de veces que aparecen) dentro de un documento individual y dentro del corpus completo.
- La Frecuencia del Término (TF) está dada por la siguiente fórmula:
Dado que en el caso de este modelo hemos utilizado la instrucción
tfidf_sublinear_tf=True, se atenúa la influencia de la aparición desmedida de determinados términos mediante el siguiente ajuste logarítmico:
- Respecto a la Frecuencia Inversa del Documento (IDF), se aplica la fórmula estándar implementada en Scikit-Learn:
Finalmente, obtenemos la puntuación definitiva multiplicando ambos términos:
- La Frecuencia del Término (TF) está dada por la siguiente fórmula:
Dado que en el caso de este modelo hemos utilizado la instrucción
Adicionalmente, el método TF-IDF hace uso de word\_tokenize de la librería NLTK para tokenizar los mensajes SMS mediante reglas estándar de la lingüística, separando contracciones del inglés de manera inteligente y aislando los signos de puntuación de las palabras, siendo este uno de los enfoques más recomendados para nuestro caso de estudio.
- Complement Naive Bayes (CNB): Se ha seleccionado esta versión de Naive Bayes ya que es una extensión de Multinomial Naive Bayes diseñada específicamente para corregir los sesgos generados por conjuntos de datos con clases desbalanceadas. Consiste en hallar la probabilidad de que aparezca un término en el complemento de la clase objetivo. Resulta ideal para nuestro escenario, ya que la gran mayoría de los mensajes del conjunto de datos son válidos (ham), y tan solo una pequeña minoría ha sido etiquetada como SPAM.
Hiperparámetros del Modelo
A continuación, se detallan los hiperparámetros utilizados en cada uno de los pasos que conforman el pipeline del modelo:
| Hiperparámetro | Valor |
|---|---|
| memory | None |
| steps | [('tfidf', TfidfVectorizer(binary=True, max_df=0.9, ngram_range=(1, 2), sublinear_tf=True,tokenizer=<function word_tokenize at 0x75236ee85170>)), ('cnb', ComplementNB(alpha=0.5))] |
| transform_input | None |
| verbose | False |
| tfidf | TfidfVectorizer(binary=True, max_df=0.9, ngram_range=(1, 2), sublinear_tf=True,tokenizer=<function word_tokenize at 0x75236ee85170>) |
| cnb | ComplementNB(alpha=0.5) |
| tfidf__analyzer | word |
| tfidf__binary | True |
| tfidf__decode_error | strict |
| tfidf__dtype | <class 'numpy.float64'> |
| tfidf__encoding | utf-8 |
| tfidf__input | content |
| tfidf__lowercase | True |
| tfidf__max_df | 0.9 |
| tfidf__max_features | None |
| tfidf__min_df | 1 |
| tfidf__ngram_range | (1, 2) |
| tfidf__norm | l2 |
| tfidf__preprocessor | None |
| tfidf__smooth_idf | True |
| tfidf__stop_words | None |
| tfidf__strip_accents | None |
| tfidf__sublinear_tf | True |
| tfidf__token_pattern | (?u)\b\w\w+\b |
| tfidf__tokenizer | <function word_tokenize at 0x75236ee85170> |
| tfidf__use_idf | True |
| tfidf__vocabulary | None |
| cnb__alpha | 0.5 |
| cnb__class_prior | None |
| cnb__fit_prior | True |
| cnb__force_alpha | True |
| cnb__norm | False |
Selección del Modelo
El modelo final fue escogido como el mejor de entre diversas configuraciones evaluadas, aplicando variaciones tanto en la matriz de extracción de características TF-IDF como en los hiperparámetros del clasificador Complement Naive Bayes. Para encontrar este conjunto óptimo, se utilizó una búsqueda en rejilla (Grid Search), con la finalidad de identificar la combinación precisa que maximizara el rendimiento de nuestra métrica de evaluación de acuerdo con la rejilla de parámetros definida.
Cabe aclarar un aspecto fundamental en nuestra estrategia de selección: la evaluación y elección del modelo definitivo se rigió bajo la regla de negocio de minimizar los falsos positivos a cambio de permitir un ligero incremento en los falsos negativos. Tomamos esta decisión considerando que, en un escenario de producción real, etiquetar erróneamente un mensaje válido (ham) como SPAM genera un impacto negativo severo debido al riesgo inminente de que el usuario pierda información crítica. Por el contrario, consideramos que el impacto de que unos pocos mensajes de SPAM logren filtrarse a la bandeja de entrada es considerablemente menor; si bien representa una ligera molestia para el usuario, no pone en peligro la pérdida de datos importantes.
Limitaciones del Modelo
Al utilizar este modelo en un escenario real, es fundamental tener en cuenta la siguiente limitación clave:
- Restricció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 del inglés. 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.
Evaluación del Modelo
A continuación, se adjunta la matriz de confusión obtenida al evaluar el modelo sobre el conjunto de prueba (test set):
Contacto
Si tienes alguna pregunta, sugerencia o deseas conectar conmigo, no dudes en escribirme o visitar mis perfiles profesionales:
- 💼 LinkedIn: Anderson Rodríguez
- 🐙 GitHub: Andersoncrs
- 📧 Correo Electrónico: andersoncamilo.rodriguez.s@gmail.com
