| --- |
| language: en |
| library_name: scikit-learn |
| license: mit |
| pipeline_tag: text-classification |
| tags: |
| - text-classification |
| - tf-idf |
| - complement-naive-bayes |
| - grid-search |
| model_format: skops |
| dataset_name: ucirvine/sms_spam |
| datasets: |
| - ucirvine/sms_spam |
| --- |
| # **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: |
| $$TF(t, d) = \frac{f(t, d)}{\sum_{t' \in d} f(t', d)}$$ |
| 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: |
| $$TF(t, d) = 1 + \log(f(t, d)) \quad \text{si } f(t, d) > 0$$ |
| * Respecto a la Frecuencia Inversa del Documento (IDF), se aplica la f贸rmula est谩ndar implementada en Scikit-Learn: |
| $$IDF_{\text{Scikit-Learn}}(t) = \log\left(\frac{1 + N}{1 + df(t)}\right) + 1$$ |
|
|
| Finalmente, obtenemos la puntuaci贸n definitiva multiplicando ambos t茅rminos: |
| $$TF\text{-}IDF(t, d) = TF(t, d) \times IDF(t)$$ |
| 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](https://www.linkedin.com/in/andersoncrs) |
| * 馃悪 **GitHub:** [Andersoncrs](https://github.com/Andersoncrs) |
| * 馃摟 **Correo Electr贸nico:** andersoncamilo.rodriguez.s@gmail.com |