¿Cómo funcionan los algoritmos bayesianos para la identificación de spam?

Para el clasificador Naive Bayes:

Por cada palabra en su conjunto de correos electrónicos de entrenamiento, encuentra por separado la fracción de veces que ocurre en el correo no deseado y en el correo no deseado de todos los correos electrónicos: el correo no deseado y el correo no deseado. Luego, al recibir un nuevo correo electrónico, obtienes spam de todas las palabras y las multiplicas todas juntas, y obtienes la hamminess de todas las palabras y las multiplicas todas juntas. Cualquiera que sea el número mayor, esa es la predicción.

ps: nos referimos a ham como correos electrónicos normales 🙂

ps2: bien, también daré un ejemplo:
‘Comprar viagra ahora!’
palabras y sus estadísticas basadas en la frecuencia con la que tienden a aparecer en el correo no deseado
comprar (hamminess: 0.2 spamminess: 0.8)
viagra (hamminess: 0.001 spamminess: 0.999)
ahora (hamminess: 0.47 spamminess: 0.53)
puntaje total del jamón: 0.2 * 0.001 * 0.47 = 0.000094
puntaje total de spam: 0.8 * 0.999 * 0.53 = 0.423576

puntaje de spam> puntaje de ham => SPAM!

Hasta ahora, Jinghao Yan ha dado una excelente descripción de cómo usaríamos un clasificador Naive Bayes (NB) para tratar el spam (ver también [1]). En esta respuesta, me gustaría desarrollar una noción más sólida de los desafíos que deben enfrentar los algoritmos de inferencia cuando se trata de spam.

Suposiciones tontas:

  1. Me ocuparé (principalmente) de los algoritmos en la medida en que estén relacionados con el contenido de los mensajes de spam. Esto contrasta con el tratamiento del contexto de un mensaje, como el empaquetado con formato incorrecto, la detección de falsificación de claves de dominio y el análisis de la ubicación del remitente y la hora.
  2. Trataré el spam como un problema de la bandeja de entrada , en lugar de la bandeja de salida. Los proveedores de correo hacen un gran esfuerzo para asegurarse de que sus servidores no se utilizan para enviar correo no deseado, pero no cubriremos tales preocupaciones aquí.
  3. Trataré el spam como un problema de correo electrónico , en lugar de, digamos, mensajes de texto.
  4. Me ocuparé principalmente de los problemas de la construcción de algoritmos de aprendizaje automático escalables , ignorando principalmente el componente humano (crítico).

Parte 1: problemas con los que debe lidiar la clasificación de spam

Los algoritmos de escalado de aprendizaje automático (ML) a menudo son difíciles desde una perspectiva de infraestructura. Antes de abordar explícitamente la metodología de construir realmente un modelo, es importante comprender los problemas que podrían causar problemas de escalabilidad adicionales.

Cubriré algunos de los problemas que los equipos contra el correo no deseado han enfrentado históricamente para darle una idea de los problemas que podrían enfrentar. No pretende ser integral:

Problema 1: los spammers se adaptan rápidamente

Cuando los investigadores de Hotmail introdujeron por primera vez las técnicas de clasificación basadas en ML, los spammers evitarían el uso de palabras de alto peso como “gratis” y “sexo” al ofuscarlas, por ejemplo con etiquetas de comentarios HTML incrustadas entre caracteres ( por ejemplo , "free" -> "free" ) o sustituyendo caracteres con códigos ASCII ( por ejemplo , freex ).

Los investigadores informan [2] que en 2003, este truco representaba el 5% de todo el spam que llegaba a Hotmail. Introdujeron una “solución” para el problema y, en 2004, se había reducido a casi nada.

Estos investigadores señalan que cuando implementan contramedidas, los spammers “se adaptan activamente, dejando caer las técnicas que no funcionan”.

Un sistema ideal debe permitir al equipo de spam la flexibilidad para abordar los cambios metodológicos rápidos de los spammers.

Problema 2: para grandes proveedores, hay MUCHO spam

Una estimación [3] fija el total de correos electrónicos no deseados enviados en un año determinado a 62 billones en 2008. Para poner esto en perspectiva, generar y manejar esa información representa alrededor de 33 teravatios por hora, lo que equivale al uso de energía de 2.4 millones hogares o 3.1 millones de automóviles en un período de un año.

El manejo de esta cantidad de datos es muy desafiante, especialmente en un dominio como ML, que generalmente requiere algoritmos muy caros para funcionar bien.

Un sistema ideal debe permitir a los usuarios ejecutar muchos datos, posiblemente con decenas de miles de funciones. Además, debido al problema 1, es posible que se nos solicite actualizar repetidamente el vector de peso para abordar los problemas actuales de spam.

Problema 3: No existe un tipo de clasificación errónea “ganadora”.

Si tu tía Marge te envía un correo electrónico para decirte que tu madre ha muerto, y lo marcamos como spam, es desastroso.

Si recibe una bandeja de entrada con algunos correos no deseados todos los días, es desastroso para la marca. (¡Piensa en cuánto más nos gusta Gmail que Hotmail!)

En igualdad de condiciones, probablemente sea más costoso clasificar erróneamente el correo electrónico legítimo como spam, pero en general su sistema debería funcionar.

El sistema ideal es perfecto, a pesar del hecho de que, a escala, hay muchos tipos diferentes de correo electrónico, y debe funcionar en prácticamente todas las situaciones. Tenga en cuenta que la mayoría de los usuarios de gmail están bastante contentos con su situación de spam. Agregada a millones de usuarios, la rareza de un caso realmente malo es realmente impresionante.

Problema 4: Obtener datos precisos puede ser un desafío

Es fácil elegir la fruta de bajo perfil ( por ejemplo , entrenamiento con correo electrónico que se encuentra en el TREC), pero encontrar el correo no deseado que está empujando los algoritmos puede ser un desafío. Los equipos de correo no deseado a menudo establecen trampas de miel para captar mensajes de correo no deseado, y por supuesto existe el botón “informar de correo no deseado”, pero los equipos de correo no deseado siempre están buscando mejores métodos para encontrar ejemplos de correo no deseado.

Problema 5: “Spam” no siempre está bien definido

¿El spam es solo anuncios no solicitados de viagra? ¿Incluimos esquemas de phishing? ¿Cómo nos diferenciamos de los correos electrónicos de la lista enviados por, por ejemplo , Barnes & Noble, y el correo no deseado regular? (Es decir, ¿estamos diferenciando entre spam “profesional” y cosas como el Príncipe nigeriano?) Cuantos más grupos incluyamos y más diferentes sean, más difícil será acertar.

Operando a escala, un sistema ideal tendrá que enfrentar el problema de que sus decisiones sobre qué es y qué no es spam tienen impacto. Las empresas se molestan si bloquea sus correos electrónicos “solicitados” para millones de sus clientes, por ejemplo. Por otro lado, quieres que los usuarios sean felices.

Parte 2: Seleccionar la base para un modelo

Los primeros modelos de spam usaban técnicas bastante tradicionales como clasificadores basados ​​en palabras o n-gramas. Esta técnica es sensible a una gran cantidad de explotaciones, la principal es (como vimos en el primer punto) que puede usar una serie de técnicas complicadas de ofuscación para los términos altamente ponderados.

Entonces, ¿cómo podemos evitar esto? Una alternativa a este modelo es utilizar modelos basados ​​en compresión , que al menos una investigación destacada [4] muestra que es mucho más efectiva que las técnicas tradicionales de ML (basadas en palabras o n-gramas). La idea básica es crear un modelo de compresión para el correo electrónico “spam” y comprimir un mensaje dado usando ese modelo; Los mensajes que comprimen mejor son probablemente spam.

Intuitivamente, no es obvio por qué esto sería mejor que las técnicas de ML segmentadas por palabras. Una razón es que los modelos de compresión son más sensibles a cosas como la codificación de caracteres y la composición de palabras. Considere, por ejemplo, que un modelo de n-gramos dependerá de que exista una circunscripción de palabras de “alto peso”, pero no podrá notar que free! y free! son en realidad ambos lo mismo. Por el contrario, un modelo basado en la compresión notará que ambas cosas contienen

Supongo que por “algoritmos bayesianos” te refieres al ingenuo clasificador Bayes.

El modelo gráfico:

El ingenuo clasificador de Bayes es un modelo probabilístico simple con fuertes supuestos de independencia. En particular, la red bayesiana subyacente consiste en un solo nodo [math] Y [/ math] (si el correo electrónico es spam, por ejemplo) que determina un conjunto de características [matemática] F_1,…, F_n [/ matemática] de forma independiente (con [matemática] F_i [/ ​​matemática] correspondiente a la palabra en la posición [matemática] i [/ matemática], por ejemplo). Por ejemplo, si la primera palabra es “Gratis”, es más probable que el correo electrónico sea spam que si es “Hey” (O más exactamente, es más probable que el spam comience con “Gratis” que Hey). El modelo gráfico está abajo:


En base a esta suposición, sabemos que la distribución de Y dadas las características (palabras en varias posiciones) es [matemática] \ Pr (Y | F_1,…, F_n) \ propto \ Pr (Y) \ prod_ {i} {P (F_i | Y)} [/ math] (Recuerde que [math] \ Pr (Y | F_1, …, F_n) = \ frac {\ Pr (Y, F_1, …, F_n)} {\ Pr (F_1, … , F_n)} [/ math] por la regla de Bayes). En otras palabras, para determinar la distribución, simplemente calcula [math] \ Pr (Y) \ prod_ {i} {P (F_i | Y)} [/ math] y normaliza la distribución final. Recuerde, [math] \ Pr (Y | F_1, …, F_n) [/ math] es una distribución donde, en el caso de la identificación de spam, los dos valores posibles de Y son “Spam” o “Ham”.

Entrenamiento (Estimación de parámetros):

Ahora que entendemos el modelo gráfico subyacente al algoritmo, veamos cómo entrenamos el modelo.

La entrada al entrenador es un conjunto de correos electrónicos que están etiquetados a mano con “Spam” o “Ham”. Durante el entrenamiento, debemos calcular varias probabilidades, como la probabilidad de que se emita una palabra determinada si el correo electrónico es spam, y la probabilidad de que se emita una palabra determinada si el correo electrónico es jam. La forma más básica de hacer esto es el método de máxima verosimilitud, que establece los parámetros [matemática] P (F | Y) [/ matemática] igual a la proporción exacta de una palabra específica que aparece cuando Y = spam e Y = ham (es decir, la distribución que maximizaría la probabilidad de nuestra observación). Hay muchos problemas en esto, en particular la escasez de datos, que tienen una amplia gama de soluciones creativas que implican suavizado, en los que no me involucraré.

Clasificación (identificación de spam):

Ahora podemos usar las [matemáticas] P (F | Y) [/ matemáticas] calculadas para clasificar nuevos correos electrónicos. Calcularíamos [math] \ Pr (Y = spam, F_1,…, F_n) [/ math] y [math] \ Pr (Y = ham, F_1,…, F_n) [/ math], donde las características [math ] F_i [/ ​​math] son ​​las palabras en la posición [math] i [/ math]. Luego clasificamos el correo electrónico como correo no deseado si el primero es más alto y, de lo contrario, clasificamos. Recuerde, las probabilidades conjuntas [matemáticas] \ Pr (Y, F_1, …, F_n) [/ matemáticas] son ​​proporcionales a las probabilidades condicionales [matemáticas] \ Pr (Y | F_1, …, F_n) [/ matemáticas], por lo que es suficiente comparar solo las probabilidades conjuntas para ver qué probabilidad condicional es mayor.

Discusión y críticas:

El clasificador Naive Bayes tiene muchas debilidades, en particular el supuesto subyacente de independencia de las características: las palabras en un correo electrónico no son en absoluto independientes. Como resultado de la fuerte suposición de independencia, el clasificador ofrece predicciones mucho más fuertes que las justificadas (es decir, las probabilidades son mucho más altas).

Para una mejor discusión del algoritmo y sus inconvenientes, además de algunos ejemplos simples que puede recorrer, puede consultar el artículo de Wikipedia para http://en.wikipedia.org/wiki/Bay … y http: // en .wikipedia.org / wiki / Nai

More Interesting

¿Existen buenos libros o recursos para resolver problemas y algoritmos en C #, para la preparación de entrevistas SDET?

¿Cómo se realiza la reducción del tiempo polinómico de UHAMPATH a UHAMCYCLE?

Cómo aprender estructuras de datos y algoritmos

Normalmente me canso después de resolver 2 - 3 problemas algorítmicos en Leet Code. ¿Qué debo hacer para resolver más problemas diariamente?

¿Existe una estructura de datos con complejidad espacial exponencial?

¿Cómo puedo aprender las estructuras de datos en 3 meses?

¿Cuál es el punto de usar programación dinámica cuando la complejidad de tiempo en la mayoría de los códigos es O (n ^ 2) (que no es tan bueno, es decir, usamos dobles para bucles incluso en DP)?

¿Necesito estudiar la teoría de estructuras de datos y algoritmos antes de resolver las preguntas en InterviewBit?

¿Cómo podría encontrar la métrica correcta que se utilizará para los vecinos más cercanos u otros algoritmos basados ​​en similitudes?

¿Cuáles son algunos algoritmos o sistemas de mejora automática?

¿Cuál es la aplicación de la vida real de las estructuras de datos de árbol?

¿Cuál es la mejor estructura de datos para almacenar y realizar una adición de dos números grandes de 512 bits?

¿Qué tipos de problemas se pueden resolver usando algoritmos?

¿Cómo realizan las computadoras la multiplicación y la complejidad del tiempo?

Silicon Valley (serie de televisión): ¿Cuál es el ejemplo más cercano en la vida real al algoritmo de compresión de Pied Piper?