• Saltar a la navegación principal
  • Saltar al contenido principal
Logo Codificando Bits

Codificando Bits

  • Academia
    • Rutas
    • Cursos
    • Proyectos
    • Tutoriales
  • Acceder
  • Suscribirse

12 – Proyecto: detección de spam con modelos Naive Bayes

Lección 12 del curso Probabilidad Nivel Avanzado.

En la lección anterior vimos una explicación detallada de los Modelos de Naive Bayes y vimos además un sencillo ejemplo numérico que nos permitió entender todos los detalles detrás del entrenamiento y la generación de predicciones con este tipo de modelos.

Así que es momento de poner en práctica todo lo aprendido hasta el momento con un proyecto real. Entonces, en esta última lección haremos uso de los Modelos de Naive Bayes para resolver un problema en el ámbito del Procesamiento del Lenguaje Natural (el lenguaje hablado y escrito por nosotros los seres humanos).

Para esto usaremos un set de datos que contiene mensajes de texto SMS. Realizaremos la exploración y pre-procesamiento de los datos y veremos cómo codificar el texto de manera adecuada para construir un Modelo de Naive Bayes que nos permita realizar la clasificación de cada mensaje dependiendo de su contenido.

Comencemos entonces hablando en detalle del problema a resolver y del set de datos que usaremos en este proyecto:

Contenido exclusivo para suscriptores

Si eres suscriptor accede en este enlace ó suscríbete a la Academia Online y accede a todo el contenido (lecciones en video, código fuente, sets de datos y descargas) de todos los cursos, proyectos y tutoriales.

Bien, como lo acabamos de ver el objetivo de este proyecto será entrenar, validar y poner a prueba un Modelo de Naive Bayes capaz de clasificar mensajes de texto en una de dos categorías: “spam” o “ham” (es decir mensajes “normales”).

Y para ello usaremos un set de datos que contiene 5.572 mensajes de texto. Por cada uno de estos mensajes, además del texto, contamos con el número de caracteres, de palabras y de frases dentro del mensaje.

Y como en todo proyecto de Ciencia de Datos y Machine Learning, la primera etapa que debemos llevar a cabo una vez hayamos recolectado los datos es realizar el análisis exploratorio de los mismos. Veamos en detalle este análisis exploratorio:

Contenido exclusivo para suscriptores

Si eres suscriptor accede en este enlace ó suscríbete a la Academia Online y accede a todo el contenido (lecciones en video, código fuente, sets de datos y descargas) de todos los cursos, proyectos y tutoriales.

Perfecto, gracias a este análisis exploratorio de los datos ya tenemos un panorama claro de las características de nuestro set de datos.

Como parte de este análisis hemos verificado que no existen datos incompletos pero que sí existen algunos mensajes de texto duplicados.

Adicionalmente hemos visto que tenemos un set de datos desbalanceado (lo cual resultará relevante en la etapa de validación de los modelos) y que además las variables número de caracteres, número de palabras y número de frases están correlacionadas.

Con esto ya estamos listos para implementar la etapa de pre-procesamiento, donde prepararemos los datos para poderlos llevar posteriormente a cada uno de los modelos a construir. Veamos en detalle esta etapa:

Contenido exclusivo para suscriptores

Si eres suscriptor accede en este enlace ó suscríbete a la Academia Online y accede a todo el contenido (lecciones en video, código fuente, sets de datos y descargas) de todos los cursos, proyectos y tutoriales.

Bien, con este pre-procesamiento nos hemos enfocado fases como la eliminación de las filas duplicadas; la normalización del texto en los mensajes y la eliminación de las columnas “words” y “sentences” (pues están correlacionadas con la variable “characters”). Además hemos representado numéricamente la columna categoría y hemos creado los sets de entrenamiento, validación y prueba.

Adicionalmente, hemos hecho uso de la técnica TF-IDF (Term Frequency – Inverse Document Frequency) para codificar numéricamente los mensajes de texto dependiendo de la frecuencia con que cada palabra aparece en cada mensaje y en la totalidad del corpus (es decir en todos los mensajes que hacen parte del set de datos).

Como resultado de esta codificación TF-IDF cada mensaje es codificado a través de una matriz que usaremos como entrada para uno de los modelos que construiremos.

Así que en este punto ya hemos completado la etapa más demandante de nuestro proyecto y estamos listos para entrenar y validar los diferentes modelos de Naive Bayes. Veamos esta fase en detalle:

Contenido exclusivo para suscriptores

Si eres suscriptor accede en este enlace ó suscríbete a la Academia Online y accede a todo el contenido (lecciones en video, código fuente, sets de datos y descargas) de todos los cursos, proyectos y tutoriales.

Como acabamos de ver hemos hecho uso de la librería Scikit-Learn para, con muy pocas líneas de código, entrenar y validar dos modelos diferentes.

El primer modelo acepta como entrada el número de caracteres de cada mensaje mientras que el segundo hace uso de la matriz TF-IDF de cada mensaje obtenida anteriormente.

Una vez realizado el entrenamiento de estos modelos (haciendo uso del set de entrenamiento) realizamos su validación que nos permitió ver, con ayuda de la métrica de desempeño «recall», que realmente el modelo que mejor clasifica los mensajes “spam” es aquel que acepta como entrada las matrices TF-IDF.

Así que habiendo elegido el modelo con el mejor desempeño, lo único que nos resta es ponerlo a prueba. Veamos esta última fase en detalle:

Contenido exclusivo para suscriptores

Si eres suscriptor accede en este enlace ó suscríbete a la Academia Online y accede a todo el contenido (lecciones en video, código fuente, sets de datos y descargas) de todos los cursos, proyectos y tutoriales.

¡Excelente! Acabamos de ver que esta fase de prueba nos permite simular lo que ocurriría en una situación real pues nos permite ver qué tipo de predicciones generaría el modelo con datos nunca antes vistos. Y para lograr esto hicimos uso del set de prueba así como del método «predict()» que en tan sólo una línea de código nos permite generar este conjunto de predicciones.

Así que en este punto ya hemos logrado resolver un problema de procesamiento del lenguaje natural, como lo es la detección de spam, haciendo uso de estos modelos de Naive Bayes. Hemos visto que a pesar de la simplicidad de estos modelos los resultados son muy pero muy buenos: cuando validamos el modelo seleccionado obtuvimos un recall de casi 87%, lo cual quiere decir que de cada 100 mensajes spam procesados por el modelo, 87 son clasificados correctamente en esta categoría.

Y con esto culminamos este curso de Probabilidad Nivel Avanzado, así que !te felicito por haber llegado hasta este punto!

A lo largo de este curso, y de los dos primeros cursos de la serie (Probabilidad Nivel Básico y Probabilidad Nivel Intermedio), hemos aprendido diferentes herramientas teóricas y prácticas de la probabilidad que resultan útiles al momento de abordar diferentes problemas de Ciencia de Datos y Machine Learning.

Como siempre, te invito a contactarme para que me compartas tu opinión acerca del curso así como tus sugerencias para seguir mejorando el contenido de la Academia.

¡Te envío un saludo y nos vemos en el próximo curso!

Todas las lecciones del curso Probabilidad Nivel Avanzado

© Codificando Bits, LLC | Blog | Contacto | Servicios | Acerca de | Políticas

¿Has olvidado la contraseña?
¿Has perdido tu contraseña? Por favor, introduce tu nombre de usuario o dirección de correo electrónico. Recibirás por correo electrónico un enlace para crear una nueva contraseña.
body::-webkit-scrollbar { width: 7px; } body::-webkit-scrollbar-track { border-radius: 10px; background: #f0f0f0; } body::-webkit-scrollbar-thumb { border-radius: 50px; background: #dfdbdb }